ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTBiNWQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmNfc3NlIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iKm9yZy9lY2xpcHNlL3dzdC94c2wvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvc3NlLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9hcGFjaGUveGFsYW4vKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9hcGFjaGUveG1sLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvYXBhY2hlL3hwYXRoLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNjZjOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotc3JjX3hwYXRoCi14cGF0aGdyYW1tYXIKLS5ieWVjeWNsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjMjUyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvbmFtZT4KLQk8Y29tbWVudD5KYXZhQ0MgTmF0dXJlPC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5zZi5lY2xpcHNlLmphdmFjYy5qYXZhY2NidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+c2YuZWNsaXBzZS5qYXZhY2MuamF2YWNjbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2NiNGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLSNUdWUgRmViIDEwIDA1OjM3OjUzIEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXByb3RlY3RlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByb3RlY3RlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZVVuY2hlY2tlZEV4Y2VwdGlvbnM9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2NDVmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIE1hciAxOCAxMTozODowNSBHTVQgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNzM2NWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuYXBhY2hlLnhhbGFuO2J1bmRsZS12ZXJzaW9uPSJbMi43LjEsMi44LjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXI7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAxLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmFwYWNoZS5hbnQ7YnVuZGxlLXZlcnNpb249IlsxLjcuMCwyLjAuMCkiO3Jlc29sdXRpb246PW9wdGlvbmFsLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjEwMywyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uub3NnaS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUNsYXNzUGF0aDogLgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlO3VzZXM6PSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwsb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlcjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnM7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXM7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9uczt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0O3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXM7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54aW5jbHVkZTt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbCwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXI7Ci0gIHVzZXM6PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLAotICAgb3JnLnhtbC5zYXgsCi0gICBvcmcueG1sLnNheC5leHQsCi0gICBvcmcueG1sLnNheC5oZWxwZXJzLAotICAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxZDcxNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSAKLWluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgCi1hdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyAKLWJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyAKLXByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvYT4uPC9wPgotCi0JCQotPGgzPlRoaXJkIFBhcnR5IENvbnRlbnQ8L2gzPgotPHA+VGhlIENvbnRlbnQgaW5jbHVkZXMgaXRlbXMgdGhhdCBoYXZlIGJlZW4gc291cmNlZCBmcm9tIHRoaXJkIHBhcnRpZXMgYXMgc2V0IG91dCBiZWxvdy4gSWYgeW91IAotZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBmb2xsb3dpbmcgaXMgcHJvdmlkZWQgCi1mb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LCBhbmQgeW91IHNob3VsZCBsb29rIHRvIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSBmb3IgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UuPC9wPgotPHA+Ci08c3Ryb25nPlhTTFQgYW5kIFhJbmNsdWRlIFNjaGVtYTwvc3Ryb25nPiA8YnIvPjxici8+Ci0KLVRoZSBmb2xsb3dpbmcgWE1MIFNjaGVtYSBpbiB0aGUgcGx1Zy1pbiBhcmUgYmFzZWQgb24gVzNDIGNvZGUgYXZhaWxhYmxlIG9uIHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIHdlYnNpdGUKLWFuZCBzaGFsbCBiZSBkZWZpbmVkIGFzIHRoZSAiVzNDLURlcml2ZWQgV29yayI6PGJyLz48YnIvPgotCi14c2x0LXNjaGVtYXMveHNsdC0xLjAueHNkIChkZXJpdmVkIGZyb20gPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvWE1MLzIwMDAvMDRzY2hlbWEtaGFja2luZy94c2x0LnhzZCI+VzNDIFhTTFQgMS4wIFNjaGVtYTwvYT4pPGJyLz4KLXhzbHQtc2NoZW1hcy94c2x0LTIuMC54c2QgKGRlcml2ZWQgZnJvbSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzAyL3NjaGVtYS1mb3IteHNsdDIwLnhzZCI+VzNDIFhTTFQgMi4wIFNjaGVtYTwvYT4pPGJyLz4KLXhzbHQtc2NoZW1hcy94aW5jbHVkZS54c2QgKGNvcGllZCBmcm9tIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hpbmNsdWRlLyI+WEluY2x1ZGUgU2NoZW1hPC9hPik8YnIvPjxici8+Ci0KLVlvdXIgdXNlIG9mIHRoZSBXM0MtRGVyaXZlZCBXb3JrIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBXM0MgU29mdHdhcmUgTGljZW5zZS48YnIvPiAKLUEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBjb250YWluZWQgaW4gdGhlIGZpbGUgPGEgaHJlZj0iYWJvdXRfZmlsZXMvVzNDU29mdHdhcmVMaWNlbnNlLmh0bWwiPlczQ1NvZnR3YXJlTGljZW5zZS5odG1sPC9hPiBhbmQgaXMgCi1hbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxIj5odHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxPC9hPi4gCi08L3A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2Fib3V0X2ZpbGVzL1czQ1NvZnR3YXJlTGljZW5zZS5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvYWJvdXRfZmlsZXMvVzNDU29mdHdhcmVMaWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZmZlNTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvYWJvdXRfZmlsZXMvVzNDU29mdHdhcmVMaWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotICA8dGl0bGU+VzNDIFNvZnR3YXJlIExpY2Vuc2U8L3RpdGxlPgotICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvU3R5bGVTaGVldHMvYmFzZS5jc3MiIC8+Ci0gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci0gPCEtLQotaDMjdmVyc2lvbiB7IG1hcmdpbi10b3A6IC0wLjhlbTt9ICAKLS0tPgotCi0KLQotCi0KLQotCi0KLQotICA8L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSB0ZXh0PSIjMDAwMDAwIiBiZ2NvbG9yPSIjRkZGRkZGIj4KLTxoMT5XM0M8c3VwPq48L3N1cD4gU09GVFdBUkUgTk9USUNFIEFORCBMSUNFTlNFPC9oMT4KLQotPGgzIGlkPSJ2ZXJzaW9uIj48YQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMSI+aHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMTwvYT48L2gzPgotCi08cD5UaGlzIHdvcmsgKGFuZCBpbmNsdWRlZCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIFJFQURNRXMsIG9yIG90aGVyCi1yZWxhdGVkIGl0ZW1zKSBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZwotbGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKQotYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nCi10ZXJtcyBhbmQgY29uZGl0aW9ucy48L3A+Ci0KLTxwPlBlcm1pc3Npb24gdG8gY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sJm5ic3A7Zm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0Ci1mZWUgb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uCi1BTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcKLW1vZGlmaWNhdGlvbnM6PC9wPgotPG9sPgotICA8bGk+VGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZQotICAgIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLjwvbGk+Ci0gIDxsaT5BbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMKLSAgICBhbmQgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgdGhlIDxhCi0gICAgaHJlZj0iY29weXJpZ2h0LXNvZnR3YXJlLXNob3J0LW5vdGljZS0yMDAyMTIzMS5odG1sIj5XM0MgU29mdHdhcmUgU2hvcnQKLSAgICBOb3RpY2U8L2E+IHNob3VsZCBiZSBpbmNsdWRlZCAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpCi0gICAgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZS48L2xpPgotICA8bGk+Tm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUKLSAgICBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tCi0gICAgd2hpY2ggdGhlIGNvZGUgaXMgZGVyaXZlZC4pPC9saT4KLTwvb2w+Ci0KLTxwPlRISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTCi1NQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UCi1MSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUgotUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UKLUFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy48L3A+Ci0KLTxwPkNPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUgotRE9DVU1FTlRBVElPTi48L3A+Ci0KLTxwPlRoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbgotYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4KLXByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZAotZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy48L3A+Ci0KLTxwPjwvcD4KLQotPHA+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPC9wPgotCi08cD5UaGlzIGZvcm11bGF0aW9uIG9mIFczQydzIG5vdGljZSBhbmQgbGljZW5zZSBiZWNhbWUgYWN0aXZlIG9uIERlY2VtYmVyIDMxCi0yMDAyLiBUaGlzIHZlcnNpb24gcmVtb3ZlcyB0aGUgY29weXJpZ2h0IG93bmVyc2hpcCBub3RpY2Ugc3VjaCB0aGF0IHRoaXMKLWxpY2Vuc2UgY2FuIGJlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUgVzNDLAotcmVmbGVjdHMgdGhhdCBFUkNJTSBpcyBub3cgYSBob3N0IG9mIHRoZSBXM0MsIGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhpcwotc3BlY2lmaWMgZGF0ZWQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSwgYW5kIHJlbW92ZXMgdGhlIGFtYmlndW91cyBncmFudCBvZgotInVzZSIuIE90aGVyd2lzZSwgdGhpcyB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSA8YQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9jb3B5cmlnaHQtc29mdHdhcmUtMTk5ODA3MjAiPnByZXZpb3VzCi12ZXJzaW9uPC9hPiBhbmQgaXMgd3JpdHRlbiBzbyBhcyB0byBwcmVzZXJ2ZSB0aGUgPGEKLWhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2xpY2Vuc2UtbGlzdC5odG1sI0dQTENvbXBhdGlibGVMaWNlbnNlcyI+RnJlZQotU29mdHdhcmUgRm91bmRhdGlvbidzIGFzc2Vzc21lbnQgb2YgR1BMIGNvbXBhdGliaWxpdHk8L2E+IGFuZCA8YQotaHJlZj0iaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9XM0MucGhwIj5PU0kncyBjZXJ0aWZpY2F0aW9uPC9hPgotdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvZG9jcy9kZWZpbml0aW9uLnBocCI+T3BlbiBTb3VyY2UKLURlZmluaXRpb248L2E+LiBQbGVhc2Ugc2VlIG91ciA8YQotaHJlZj0iaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9JUFItRkFRIj5Db3B5cmlnaHQgRkFRPC9hPiBmb3IKLWNvbW1vbiBxdWVzdGlvbnMgYWJvdXQgdXNpbmcgbWF0ZXJpYWxzIGZyb20gb3VyIHNpdGUsIGluY2x1ZGluZyBzcGVjaWZpYwotdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHBhY2thZ2VzIGxpa2UgbGlid3d3LCBBbWF5YSwgYW5kIEppZ3Nhdy4gT3RoZXIKLXF1ZXN0aW9ucyBhYm91dCB0aGlzIG5vdGljZSBjYW4gYmUgZGlyZWN0ZWQgdG8gPGEKLWhyZWY9Im1haWx0bzpzaXRlLXBvbGljeUB3My5vcmciPnNpdGUtcG9saWN5QHczLm9yZzwvYT4uPGJyIC8+Ci0mbmJzcDs8L3A+Ci08YWRkcmVzcz4KLSAgSm9zZXBoIFJlYWdsZSAmbHQ7PGEKLSAgaHJlZj0ibWFpbHRvOnNpdGUtcG9saWN5QHczLm9yZyI+c2l0ZS1wb2xpY3lAdzMub3JnJmd0OzwvYT4KLTwvYWRkcmVzcz4KLQotPHA+TGFzdCByZXZpc2VkICRJZDogVzNDU29mdHdhcmVMaWNlbnNlLmh0bWwsdiAxLjEgMjAwOC8wOC8wMiAxMzowMzoxMSBkc2F0Y2h3ZWwgRXhwICQ8L3A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMzYjQyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvLFwKLSAgICAgICAgICAgc3JjX3NzZS8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB4c2x0LXNjaGVtYXMvLFwKLSAgICAgICAgICAgICAgIGxpYi8sXAotICAgICAgICAgICAgICAgYmluLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0X2ZpbGVzLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvbGliLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9saWIvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjNmRmOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYW50bHItcnVudGltZS0zLjAuMS5qYXIKLWNvbW1vbnMtanhwYXRoLTEuMi5qYXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2xpYi94aW5jbHVkZS5qYXIgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9saWIveGluY2x1ZGUuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzMyMDNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2xpYi94aW5jbHVkZS5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDdhMjRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlCi1CdW5kbGUtTmFtZS4wID0gWFNMIENvcmUKLUJ1bmRsZS1WZW5kb3IuMCA9RWNsaXBzZS5vcmcKLVhTTC5Db250ZW50VHlwZS5OYW1lPVhTTCBUZW1wbGF0ZQotRElUQV9Db250ZW50X1R5cGVfRXh0ZW5zaW9uX0VsZW1lbnQubmFtZT1ESVRBCi1Eb2Nib29rX0NvbnRlbnRfVHlwZV9FeHRlbnNpb25fRWxlbWVudC5uYW1lPURvY2Jvb2sKLVhTTC5WYWxpZGF0b3IuTmFtZT1YU0wgVmFsaWRhdG9yCi1YU0wuVmFsaWRhdG9yRGVsZWdhdGUuTmFtZT1YU0wgVmFsaWRhdG9yIGRlbAotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotcGx1Z2luTmFtZSA9IFhTTCBDb3JlCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi1YU0xQcm9ibGVtID0gWFNMIFByb2JsZW0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGEzMDhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KLTxwbHVnaW4+Ci0KLQk8IS0tIFRlYW0gcHJvdmlkZXIgaW5mbyAtLT4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnRlYW0uY29yZS5maWxlVHlwZXMiPgotCQk8ZmlsZVR5cGVzIHR5cGU9InRleHQiIGV4dGVuc2lvbj0ieHNsIiAvPgotCQk8ZmlsZVR5cGVzIHR5cGU9InRleHQiIGV4dGVuc2lvbj0ieHNsdCIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGUuY29udGVudFR5cGVzIj4KLQkgIDxjb250ZW50LXR5cGUKLQkgICAgICAgIGJhc2UtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLQkgICAgICAgIGZpbGUtZXh0ZW5zaW9ucz0iZGl0YSxkaXRhbWFwIgotCSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5jb250ZW50LXR5cGUuZGl0YXNvdXJjZSIKLQkgICAgICAgIG5hbWU9IiVESVRBX0NvbnRlbnRfVHlwZV9FeHRlbnNpb25fRWxlbWVudC5uYW1lIgotCSAgICAgICAgcHJpb3JpdHk9ImhpZ2giPgotCSAgPC9jb250ZW50LXR5cGU+Ci0JICA8Y29udGVudC10eXBlCi0JICAgICAgICBiYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0JICAgICAgICBmaWxlLWV4dGVuc2lvbnM9ImRiayIKLQkgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuY29udGVudC10eXBlLmRvY2Jvb2tzb3VyY2UiCi0JICAgICAgICBuYW1lPSIlRG9jYm9va19Db250ZW50X1R5cGVfRXh0ZW5zaW9uX0VsZW1lbnQubmFtZSIKLQkgICAgICAgIHByaW9yaXR5PSJoaWdoIj4KLQkgIDwvY29udGVudC10eXBlPgotCTwvZXh0ZW5zaW9uPgotCQotCTwhLS0gVGhlIG1hZ2ljIHdoaWNoIGRldGVjdHMgWFNMVCAxLjAgb3IgMi4wIHN0eWxlc2hlZXRzIGFuZCBzdXBwbGllcyB0aGUgY29ycmVjdCBYU0QgLS0+CQotIAk8ZXh0ZW5zaW9uCi0gICAgICAgCXBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLnJlc29sdmVyRXh0ZW5zaW9ucyI+Ci0gICAgCTxyZXNvbHZlckV4dGVuc2lvbgotICAgICAgICAgIAljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlJlc29sdmVyRXh0ZW5zaW9uIgotICAgICAgICAJICBzdGFnZT0icHJlbm9ybWFsaXphdGlvbiI+Ci0gICAgCTwvcmVzb2x2ZXJFeHRlbnNpb24+Ci0JPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJwcm9ibGVtIgotICAgICAgICAgbmFtZT0iJVhTTFByb2JsZW0iCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubWFya2VycyI+Ci0JCTxzdXBlciB0eXBlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudmFsaWRhdGlvbk1hcmtlciIvPgotCQk8cGVyc2lzdGVudCB2YWx1ZT0idHJ1ZSIvPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRUYXNrcyI+Ci0gICAgICA8YW50VGFzawotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQuWEluY2x1ZGVUYXNrIgotICAgICAgICAgICAgaGVhZGxlc3M9InRydWUiCi0gICAgICAgICAgICBsaWJyYXJ5PSJsaWIveGluY2x1ZGUuamFyIgotICAgICAgICAgICAgbmFtZT0ieHNsLnhpbmNsdWRlIj4KLSAgICAgIDwvYW50VGFzaz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPCEtLSBFeHRyYSBDbGFzc3BhdGggLS0+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuYW50LmNvcmUuZXh0cmFDbGFzc3BhdGhFbnRyaWVzIj4KLSAgICAgIDxleHRyYUNsYXNzcGF0aEVudHJ5Ci0gICAgICAgICAgICBsaWJyYXJ5PSJsaWIveGluY2x1ZGUuamFyIj4KLSAgICAgIDwvZXh0cmFDbGFzc3BhdGhFbnRyeT4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uIGlkPSJ4c2wiIG5hbWU9IiVYU0wuVmFsaWRhdG9yLk5hbWUiIHBvaW50PSJvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0b3JWMiI+Ci0gICAgICA8dmFsaWRhdG9yCi0gICAgICAgICAgICBidWlsZD0idHJ1ZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvciIKLSAgICAgICAgICAgIHNvdXJjZWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTCIKLSAgICAgICAgICAgIG1hbnVhbD0idHJ1ZSIKLSAgICAgICAgICAgIG1hcmtlcklkPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucHJvYmxlbSIKLSAgICAgICAgICAgIHZlcnNpb249IjIiPgotICAgICAgICAgPGluY2x1ZGU+Ci0gICAgICAgICAgICA8cnVsZXM+Ci0gICAgICAgICAgICAgICA8ZmlsZWV4dCBjYXNlU2Vuc2l0aXZlPSJmYWxzZSIgZXh0PSJ4c2wiLz4KLSAJCQkJPGNvbnRlbnRUeXBlIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIi8+Ci0gICAgICAgICAgICA8L3J1bGVzPgotICAgICAgICAgPC9pbmNsdWRlPgotICAgICAgPC92YWxpZGF0b3I+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5kb2N1bWVudENyZWF0aW9uIgotCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmRvY3VtZW50ZmFjdG9yaWVzIgotCQluYW1lPSIlU3RydWN0dXJlZF9YTUxfRG9jdW1lbnRfRmFjdG9yeV9FeHRlbnNpb24ubmFtZSI+Ci0JCTxmYWN0b3J5Ci0JCQljb250ZW50VHlwZUlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5maWxlYnVmZmVycy5CYXNpY1N0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkiIC8+Ci0JPC9leHRlbnNpb24+Ci0gCTxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUubW9kZWxIYW5kbGVyIj4KLSAgICAgIDxtb2RlbEhhbmRsZXIKLSAgICAgICAgICAgIGRlZmF1bHQ9InRydWUiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYU0wiCi0gICAgICAgICAgICBhc3NvY2lhdGVkQ29udGVudFR5cGVJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaGFuZGxlciI+Ci0gICAgICA8L21vZGVsSGFuZGxlcj4KLSAgICA8L2V4dGVuc2lvbj4KLSAgPGV4dGVuc2lvbgotICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmNhdGFsb2dDb250cmlidXRpb25zIj4KLSAgICAgPGNhdGFsb2dDb250cmlidXRpb24+Ci0gICAgICAgIDx1cmkKLSAgICAgICAgICAgICAgaWQ9Im9yZy53M2MueGluY2x1ZGUiCi0gICAgICAgICAgICAgIG5hbWU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiCi0gICAgICAgICAgICAgIHVyaT0ieHNsdC1zY2hlbWFzL3hpbmNsdWRlLnhzZCI+Ci0gICAgICAgIDwvdXJpPgotICAgICA8L2NhdGFsb2dDb250cmlidXRpb24+Ci0gIDwvZXh0ZW5zaW9uPgotICA8ZXh0ZW5zaW9uCi0gICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPgotICAgICA8aW5pdGlhbGl6ZXIKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPgotICAgICA8L2luaXRpYWxpemVyPgotICA8L2V4dGVuc2lvbj4JCi0gICAKLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL1ZhbGlkYXRpb25QcmVmZXJlbmNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9WYWxpZGF0aW9uUHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2ZmJkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL1ZhbGlkYXRpb25QcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZTsKLQotLyoqCi0gKiBQcmVmZXJlbmNlIGNvbnN0YW50cyBzcGVjaWZpYyB0byB0aGUgWFNMIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uUHJlZmVyZW5jZXMKLXsKLQkKLQkvKioKLQkgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgcGVyIFhTTCBmaWxlLgotCSAqIDxwPgotCSAqIFZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SW50ZWdlcjwvY29kZT4uCi0JICogPC9wPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BWF9FUlJPUlMgPSAiTUFYX0VSUk9SUyI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBUaGUgbGV2ZWwgYXQgd2hpY2ggYSBtaXNzaW5nIHBhcmFtZXRlciBpcyByZXBvcnRlZC4KLQkgKiA8cD4KLQkgKiBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0JICogPC9wPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JU1NJTkdfUEFSQU0gPSAiTUlTU0lOR19QQVJBTSI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBUaGUgbGV2ZWwgYXQgd2hpY2ggYW4gaW52YWxpZCBYUGF0aCBpcyByZXBvcnRlZC4KLQkgKiA8cD4KLQkgKiBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0JICogPC9wPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIUyA9ICJDSEVDS19YUEFUSFMiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogVGhlIGxldmVsIGF0IHdoaWNoIGFuIHVucmVzb2x2ZWQgY2FsbGVkIHRlbXBsYXRlIGlzIHJlcG9ydGVkLiAKLQkgKiA8cD4KLQkgKiBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0JICogPC9wPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENBTExfVEVNUExBVEVTID0gIkNIRUNLX0NBTExfVEVNUExBVEVTIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIFRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB0aGF0IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGFuZCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgaXMgcmVwb3J0ZWQuCi0JICogPHA+Ci0JICogVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotCSAqIDwvcD4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9QQVJBTSA9ICJFTVBUWV9QQVJBTSI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBUaGUgbGV2ZWwgYXQgd2hpY2ggYW4gdW5yZXNvbHZlZCBpbXBvcnQgb3IgaW5jbHVkZWQgaXMgcmVwb3J0ZWQuCi0JICogPHA+Ci0JICogVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotCSAqIDwvcD4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSVNTSU5HX0lOQ0xVREUgPSAiTUlTU0lOR19JTkNMVURFIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIFRoZSBsZXZlbCBhdCB3aGljaCBhbiBpbmNsdWRlL2ltcG9ydCBjaXJjdWxhciByZWZlcmVuY2VzIGlzIHJlcG9ydGVkLgotCSAqIDxwPgotCSAqIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLQkgKiA8L3A+Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0lSQ1VMQVJfUkVGID0gIkNJUkNVTEFSX1JFRiI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBUaGUgbGV2ZWwgYXQgd2hpY2ggYSB0ZW1wbGF0ZSBjb25mbGljdCBpcyByZXBvcnRlZC4KLQkgKiA8cD4KLQkgKiBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0JICogPC9wPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFTVBMQVRFX0NPTkZMSUNUID0gIlRFTVBMQVRFX0NPTkZMSUNUIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIFRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB3aXRob3V0IGEgbmFtZSBhdHRyaWJ1dGUgaXMgcmVwb3J0ZWQuCi0JICogPHA+Ci0JICogVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotCSAqIDwvcD4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FUVFJJQlVURV9NSVNTSU5HID0gIk5BTUVfQVRUUklCVVRFX01JU1NJTkciOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogVGhlIGxldmVsIGF0IHdoaWNoIGEgcGFyYW1ldGVyIHdpdGggYW4gZW1wdHkgbmFtZSBhdHRyaWJ1dGUgaXMgcmVwb3J0ZWQuCi0JICogPHA+Ci0JICogVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotCSAqIDwvcD4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX0FUVFJJQlVURV9FTVBUWSA9ICJOQU1FX0FUVFJJQlVURV9FTVBUWSI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBUaGUgbGV2ZWwgYXQgd2hpY2ggYSBkdXBsaWNhdGUgcGFyYW1ldGVyIGlzIHJlcG9ydGVkLgotCSAqIDxwPgotCSAqIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLQkgKiA8L3A+Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVQTElDQVRFX1BBUkFNRVRFUiA9ICJEVVBMSUNBVEVfUEFSQU1FVEVSIjsgLy8kTk9OLU5MUy0xJAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9YU0xDb3JlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL1hTTENvcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIzZDBjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL1hTTENvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI4NzQ5OSAtIGFkZCBYTUwgQ2F0YWxvZyBSZXNvbHV0aW9uIGZvciBhIGZpbGUuCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAzMDQxNjIgLSBzdXBwb3J0IGFic29sdXRlIGZpbGVzIHByb3Blcmx5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgdG8gYWxsIGFzcGVjdHMgb2YgdGhlIFhTTCBjb3JlIGZ1bmN0aW9uYWxpdHkuCi0gKiA8cD4KLSAqIFRoaXMgaXMgcmVzcG9uc2libGUgZm9yIGJ1aWxkaW5nIGFuZCBtYWludGFpbmluZyB0aGUgY2FjaGUgb2YgYnVpbHQgWFNMCi0gKiBtb2RlbHMuCi0gKiA8L3A+Ci0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFhTTENvcmUgewotCS8qKgotCSAqIFRoZSBYU0wgbmFtZXNwYWNlIFVSSSAoPSBodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0pCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMX05BTUVTUEFDRV9VUkkgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogVGhlIFhTTCBjb250ZW50IHR5cGUgKD0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYU0xfQ09OVEVOVF9UWVBFID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBYU0xDb3JlIGluc3RhbmNlOwotCXByaXZhdGUgTWFwPElGaWxlLCBTdHlsZXNoZWV0TW9kZWw+IHN0eWxlc2hlZXRzQ29tcG9zZWQgPSBuZXcgSGFzaE1hcDxJRmlsZSwgU3R5bGVzaGVldE1vZGVsPigpOwotCi0JcHJpdmF0ZSBYU0xDb3JlKCkgewotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgY2FjaGVkIHN0eWxlc2hlZXQsIG9yIGJ1aWxkIGl0IGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gYnVpbHQuCi0JICogCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcmV0dXJuIHNvdXJjZSBmaWxlLCBvciBudWxsIGlmIGNvdWxkIG5vdCBiZSBidWlsdAotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIFN0eWxlc2hlZXRNb2RlbCBnZXRTdHlsZXNoZWV0KElGaWxlIGZpbGUpIHsKLQkJU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXQgPSBzdHlsZXNoZWV0c0NvbXBvc2VkLmdldChmaWxlKTsKLQkJaWYgKHN0eWxlc2hlZXQgPT0gbnVsbCkKLQkJCXN0eWxlc2hlZXQgPSBidWlsZFN0eWxlc2hlZXQoZmlsZSk7Ci0JCXJldHVybiBzdHlsZXNoZWV0OwotCX0KLQotCS8qKgotCSAqIENvbXBsZXRlbHkgcmVidWlsZCB0aGUgc291cmNlIGZpbGUgZnJvbSBpdHMgRE9NCi0JICogCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcmV0dXJuIHRoZSBzdHlsZXNoZWV0IG1vZGVsLCBvciBudWxsIGlmIGl0IGNvdWxkIG5vdCBiZSBjcmVhdGVkLgotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIFN0eWxlc2hlZXRNb2RlbCBidWlsZFN0eWxlc2hlZXQoSUZpbGUgZmlsZSkgewotCQlTdHlsZXNoZWV0IHN0eWxlc2hlZXQgPSBTdHlsZXNoZWV0QnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldFN0eWxlc2hlZXQoCi0JCQkJZmlsZSwgdHJ1ZSk7Ci0JCWlmIChzdHlsZXNoZWV0ID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCA9IG5ldyBTdHlsZXNoZWV0TW9kZWwoc3R5bGVzaGVldCk7Ci0JCXN0eWxlc2hlZXRzQ29tcG9zZWQucHV0KGZpbGUsIHN0eWxlc2hlZXRDb21wb3NlZCk7Ci0JCXN0eWxlc2hlZXRDb21wb3NlZC5maXgoKTsKLQkJcmV0dXJuIHN0eWxlc2hlZXRDb21wb3NlZDsKLQl9Ci0KLQkvKioKLQkgKiBDbGVhbiBhbGwgb2YgdGhlIHN0eWxlc2hlZXRzIGZyb20gdGhlIGdpdmVuIHByb2plY3QuCi0JICogCi0JICogQHBhcmFtIHByb2plY3QKLQkgKiAgICAgICAgICAgIHRoZSBwcm9qZWN0IHRvIGJlIGNsZWFuZWQKLQkgKiBAcGFyYW0gbW9uaXRvcgotCSAqICAgICAgICAgICAgYSBwcm9ncmVzcyBtb25pdG9yIHRvIHRyYWNrIHRoZSBjbGVhbiBwcm9ncmVzcwotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjbGVhbihJUHJvamVjdCBwcm9qZWN0LCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJZm9yIChJdGVyYXRvcjxTdHlsZXNoZWV0TW9kZWw+IGl0ZXIgPSBzdHlsZXNoZWV0c0NvbXBvc2VkLnZhbHVlcygpCi0JCQkJLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJU3R5bGVzaGVldE1vZGVsIG1vZGVsID0gaXRlci5uZXh0KCk7Ci0JCQlpZiAocHJvamVjdCA9PSBudWxsCi0JCQkJCXx8IHByb2plY3QuZXF1YWxzKG1vZGVsLmdldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCkKLQkJCQkJCQkuZ2V0UHJvamVjdCgpKSkgewotCQkJCWl0ZXIucmVtb3ZlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHNpbmdsZXRvbiA8Y29kZT5YU0xDb3JlPC9jb2RlPiBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5YU0xDb3JlPC9jb2RlPiBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFhTTENvcmUgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKQotCQkJaW5zdGFuY2UgPSBuZXcgWFNMQ29yZSgpOwotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi0JLyoqCi0JICogTG9jYXRlcyBhIGZpbGUgZm9yIHRoZSBnaXZlbiBjdXJyZW50IGZpbGUgYW5kIFVSSS4KLQkgKiAKLQkgKiBAcGFyYW0gY3VycmVudEZpbGUKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHRvIHJlc29sdmUgcmVsYXRpdmUgdG8KLQkgKiBAcGFyYW0gdXJpCi0JICogICAgICAgICAgICB0aGUgcmVsYXRpdmUgVVJJCi0JICogQHJldHVybiB0aGUgZmlsZSBhdCB0aGUgVVJJIHJlbGF0aXZlIHRvIHRoaXMgPGNvZGU+Y3VycmVudEZpbGU8L2NvZGU+Ci0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSByZXNvbHZlRmlsZShJRmlsZSBjdXJyZW50RmlsZSwgU3RyaW5nIHVyaSkgewkJCi0JCWlmICh1cmkgPT0gbnVsbCB8fCB1cmkudHJpbSgpLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gbnVsbDsJCQotCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBjdXJyZW50RmlsZS5nZXRQYXJlbnQoKS5maW5kTWVtYmVyKG5ldyBQYXRoKHVyaSkpOwotCQlpZiAocmVzb3VyY2UgPT0gbnVsbCkgewotCQkJU3RyaW5nIGJhc2VVUkkgPSBjdXJyZW50RmlsZS5nZXRSYXdMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpLnJlc29sdmUoYmFzZVVSSSwgIiIsIHVyaSk7CQkgLy8kTk9OLU5MUy0xJAotCi0JCQlVUkkgcGFyc2VkVXJpID0gbnVsbDsKLQkJCWJvb2xlYW4gaXNBYnNvbHV0ZSA9IGZhbHNlOwotCQkJdHJ5IHsKLQkJCQlwYXJzZWRVcmkgPSBuZXcgVVJJKHJlc29sdmVkVVJJKTsKLQkJCQlpZiAocGFyc2VkVXJpLmlzQWJzb2x1dGUoKSkgaXNBYnNvbHV0ZSA9IHRydWU7Ci0JCQl9IGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkgewotCQkJfQotCQkJCi0JCQlpZiAodXJpICE9IG51bGwgJiYgaXNBYnNvbHV0ZSkgewotCQkJCWlmIChyZXNvbHZlZFVSSS5zdGFydHNXaXRoKCJwbGF0Zm9ybTovcmVzb3VyY2UvIikpIHsJCSAvLyROT04tTkxTLTEkCi0JCQkJCVN0cmluZyBwbGF0Zm9ybVBhcnQgPSByZXNvbHZlZFVSSS5zdWJzdHJpbmcoMTkpOwotCQkJCQlyZXNvdXJjZSA9IGN1cnJlbnRGaWxlLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHBsYXRmb3JtUGFydCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmVzb3VyY2UgPSBmaW5kQmVzdEZpbGVGb3JVUkkocGFyc2VkVXJpKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXJlc291cmNlID0gY3VycmVudEZpbGUuZ2V0UGFyZW50KCkuZmluZE1lbWJlcihuZXcgUGF0aCh1cmkpKTsKLQkJCX0KLQkJfQotCQlpZiAocmVzb3VyY2UgPT0gbnVsbCB8fCByZXNvdXJjZS5nZXRUeXBlKCkgIT0gSVJlc291cmNlLkZJTEUpCi0JCQlyZXR1cm4gbnVsbDsKLQkJcmV0dXJuIChJRmlsZSkgcmVzb3VyY2U7Ci0JfQotCi0JLyoqCi0JICogRmluZCBhbiBJRmlsZSBhcyBjbG9zZSB0byB0aGUgcm9vdCBhcyBwb3NzaWJsZSBtYXRjaGluZyB0aGlzIGZpbGUgVVJJLgotCSAqIAotCSAqIEBwYXJhbSBwYXJzZWRVcmkgVVJJIGZyb20gdGhlIGNhdGFsb2cgLyByZXNvbHZlciBsb29rdXAKLQkgKiBAcmV0dXJuIGEgZmlsZSByZXNvdXJjZSB3aGljaCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZSwgb3IgbnVsbCBpZiBub25lIHdlcmUgZm91bmQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZmluZEJlc3RGaWxlRm9yVVJJKFVSSSBwYXJzZWRVcmkpIHsKLQkJSUZpbGUgZmlsZU5lYXJlc3RSb290ID0gbnVsbDsKLQkJSUZpbGVbXSBmaWxlcyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZEZpbGVzRm9yTG9jYXRpb25VUkkocGFyc2VkVXJpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgewotCQkJaWYgKGZpbGVzW2ldLmV4aXN0cygpKSB7Ci0JCQkJaWYgKGZpbGVOZWFyZXN0Um9vdCA9PSBudWxsCi0JCQkJCQl8fAotCQkJCQkJZmlsZXNbaV0uZ2V0RnVsbFBhdGgoKS5zZWdtZW50Q291bnQoKSA8IGZpbGVOZWFyZXN0Um9vdC5nZXRGdWxsUGF0aCgpLnNlZ21lbnRDb3VudCgpKSB7Ci0JCQkJCWZpbGVOZWFyZXN0Um9vdCA9IGZpbGVzW2ldOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZU5lYXJlc3RSb290OwotCX0KLQotCS8qKgotCSAqIERldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGFuIFhNTCBmaWxlIGJ5IGluc3BlY3RpbmcgaXRzIGNvbnRlbnQKLQkgKiB0eXBlcy4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZQotCSAqICAgICAgICAgICAgdGhlIGZpbGUgdG8gaW5zcGVjdAotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGZpbGUgaXMgYW4gWE1MIGZpbGUKLQkgKi8KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1hNTEZpbGUoSUZpbGUgZmlsZSkgewotCQlyZXR1cm4gRmlsZVV0aWwuaXNYTUxGaWxlKGZpbGUpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGFuIFhTTCBmaWxlIGJ5IGluc3BlY3RpbmcgaXRzIGNvbnRlbnQKLQkgKiB0eXBlcy4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZQotCSAqICAgICAgICAgICAgdGhlIGZpbGUgdG8gaW5zcGVjdAotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGZpbGUgaXMgYW4gWFNMIGZpbGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNYU0xGaWxlKElGaWxlIGZpbGUpIHsKLQkJcmV0dXJuIEZpbGVVdGlsLmlzWFNMRmlsZShmaWxlKTsKLQl9Ci0KLQkvKioKLQkgKiBUYWtlcyBhIGdpdmVuIDxjb2RlPk5vZGU8L2NvZGU+IGFuZCByZXR1cm5zIHdoZXRoZXIgaXQgaXMgcGFydCBvZiB0aGUgdGhlCi0JICogWFNMVCBOYW1lc3BhY2UuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIFRoZSBOb2RlIHRvIGJlIGNoZWNrZWQuCi0JICogQHJldHVybiBUcnVlIGlmIHBhcnQgb2YgdGhlIFhTTFQgbmFtZXNwYWNlLCBmYWxzZSBvdGhlcndpc2UuCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1hTTE5hbWVzcGFjZShOb2RlIG5vZGUpIHsKLQkJaWYgKGhhc05hbWVzcGFjZShub2RlKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiBub2RlLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyhYU0xfTkFNRVNQQUNFX1VSSSk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lIGlmIHRoZSBOb2RlIHRoYXQgd2FzIHBhc3NlZCBoYXMgYSBOYW1lc3BhY2UuIElmIGl0IGRvZXNuJ3QgdGhlCi0JICogbm9kZSBpcyBlaXRoZXIgZ29pbmcgdG8gYmUgZmFsc2UsIG9yIHRoZSBjYWxsIHRvIHRoZSBnZXROYW1lc3BhY2UoKQotCSAqIG1ldGhvZCB3aWxsIHJldHVybiBudWxsLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzTmFtZXNwYWNlKE5vZGUgbm9kZSkgewotCQlyZXR1cm4gbm9kZSA9PSBudWxsIHx8IG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGFuIEF0dHIgbm9kZSBmb3IgdGhlIGN1cnJlbnQgTm9kZSBpZiBvbmUgZXhpdHMgYXQgdGhlIHNwZWNpZmllZAotCSAqIG9mZnNldC4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcmV0dXJuIEEgdzNjLmRvbS5BdHRyCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBzdGF0aWMgQXR0ciBnZXRDdXJyZW50QXR0ck5vZGUoTm9kZSBub2RlLCBpbnQgb2Zmc2V0KSB7Ci0JCWlmICgobm9kZSBpbnN0YW5jZW9mIEluZGV4ZWRSZWdpb24pCi0JCQkJJiYgKChJbmRleGVkUmVnaW9uKSBub2RlKS5jb250YWlucyhvZmZzZXQpCi0JCQkJJiYgKG5vZGUuaGFzQXR0cmlidXRlcygpKSkgewotCQkJTmFtZWROb2RlTWFwIGF0dHJzID0gbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmdldExlbmd0aCgpOyArK2kpIHsKLQkJCQlJbmRleGVkUmVnaW9uIGF0dFJlZ2lvbiA9IChJbmRleGVkUmVnaW9uKSBhdHRycy5pdGVtKGkpOwotCQkJCWlmIChhdHRSZWdpb24uY29udGFpbnMob2Zmc2V0KSkgewotCQkJCQlyZXR1cm4gKEF0dHIpIGF0dHJzLml0ZW0oaSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgTm9kZSBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldC4KLQkgKiAKLQkgKiBAcGFyYW0gZG9jdW1lbnQKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHJldHVybiBhbiB3M2MuZG9tLk5vZGUKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIHN0YXRpYyBOb2RlIGdldEN1cnJlbnROb2RlKElEb2N1bWVudCBkb2N1bWVudCwgaW50IG9mZnNldCkgewotCQlJbmRleGVkUmVnaW9uIGlub2RlID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJc01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKQotCQkJCQkuZ2V0RXhpc3RpbmdNb2RlbEZvclJlYWQoZG9jdW1lbnQpOwotCQkJaW5vZGUgPSBzTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihvZmZzZXQpOwotCQkJaWYgKGlub2RlID09IG51bGwpCi0JCQkJaW5vZGUgPSBzTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihvZmZzZXQgLSAxKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQotCQlpZiAoaW5vZGUgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQlyZXR1cm4gKE5vZGUpIGlub2RlOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjAxNGYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKLSAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcwotICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogCi0gKiBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIEplc3BlciBTdGVlbiBN77+9bGxlciAtIGFkYXB0ZWQgZnJvbSBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmNvbnRlbnQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIEBhdXRob3IgSmVzcGVyIFN0ZWVuCi0gKiBAc2luY2UgMS4wCi0gKgotICovCi0vLyBSdW50aW1lIHBsdWdpbiBtZXNzYWdlIGNhdGFsb2cKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YURvYwotCSAqLwotCS8vIENvbnRlbnQgdHlwZSBtYW5hZ2VyCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMQ29yZVBsdWdpbl9wYXJzZXJDb25maWd1cmF0aW9uOwotCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFEb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xDb3JlUGx1Z2luX2JhZEluaXRpYWxpemF0aW9uRGF0YTsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhRG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMQ29yZVBsdWdpbl9jb3JlRXJyb3I7Ci0JCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFEb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYSW5jbHVkZVRhc2tfMDsKLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YURvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhJbmNsdWRlVGFza18xOwotCQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhRG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWEluY2x1ZGVUYXNrXzI7Ci0JCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFEb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYSW5jbHVkZVRhc2tfMzsKLQkKLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YURvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhJbmNsdWRlVGFza180OwotCQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhRG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWEluY2x1ZGVUYXNrXzU7Ci0JCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFEb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYSW5jbHVkZVRhc2tfNjsKLQkKLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YURvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhJbmNsdWRlVGFza183OwotCQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhRG9jCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWEluY2x1ZGVUYXNrXzg7Ci0JCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFEb2MKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYSW5jbHVkZVRhc2tfOTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfMTsKLQkvKioKLQkgKiBTdHlsZXNoZWV0IGltcG9ydGluZyBpdHNlbGYKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfMTA7Ci0JLyoqCi0JICogVGVtcGxhdGUgY29uZmxpY3QgKGludGVybmFsKQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRvcl8xMTsKLQkvKioKLQkgKiBUZW1wbGF0ZSBjb25mbGljdCAoaW5jbHVkZWQpCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdG9yXzEyOwotCS8qKgotCSAqIFRlbXBsYXRlIGNvbmZsaWN0IChleHRlcm5hbCkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfMTM7Ci0JLyoqCi0JICogUGFyYW1ldGVyIG1pc3NpbmcgbmFtZSBhdHRyaWJ1dGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfMTQ7Ci0JLyoqCi0JICogUGFyYW1ldGVyIHdpdGggZW1wdHkgbmFtZSBhdHRyaWJ1dGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfMTU7Ci0JLyoqCi0JICogRHVwbGljYXRlIHBhcmFtZXRlcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRvcl8xNjsKLQkvKioKLQkgKiBVbnJlc29sdmVkIG5hbWVkIHRlbXBsYXRlCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdG9yXzE4OwotCS8qKgotCSAqIENpcmN1bGFyIHJlZmVyZW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRvcl8yOwotCS8qKgotCSAqIFBhcmFtZXRlciB3aXRob3V0IGRlZmF1bHQgdmFsdWUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfMjA7Ci0JLyoqCi0JICogUGFyYW1ldGVyIGRvZXMgbm90IGV4aXN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdG9yXzIyOwotCS8qKgotCSAqIGhyZWYgYXR0cmlidXRlIGlzIHJlcXVpcmVkCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdG9yXzIzOwotCS8qKgotCSAqIE1pc3NpbmcgcGFyYW1ldGVyCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdG9yXzM7Ci0JLyoqCi0JICogVW5yZXNvbHZlZCBpbmNsdWRlCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdG9yXzQ7Ci0JLyoqCi0JICogU3R5bGVzaGVldCBpbmNsdWRlcyBpdHNlbGYKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfNjsKLQkvKioKLQkgKiAgVW5yZXNvbHZlZCBpbXBvcnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0b3JfODsKLQkKLQkKLQotCXN0YXRpYyB7Ci0JCS8vIGxvYWQgbWVzc2FnZSB2YWx1ZXMgZnJvbSBidW5kbGUgZmlsZQotCQlyZWxvYWRNZXNzYWdlcygpOwotCX0KLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhRG9jCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHJlbG9hZE1lc3NhZ2VzKCkgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvWFNMQ29yZVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9YU0xDb3JlUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MGRlY2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9YU0xDb3JlUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBKZXNwZXIgU3RlZW4gTe+/vWxsZXIgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBKZXNwZXIgU3RlZW4gTe+/vWxsZXIgLSBYU0wgY29yZSBwbHVnaW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5qYXhwLlNBWFBhcnNlckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFhTTENvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YURvYwotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX1BST0pFQ1RfU0VUVElOR1MgPSAidXNlLXByb2plY3Qtc2V0dGluZ3MiOy8vJE5PTi1OTFMtMSQKLQkKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgWFNMQ29yZVBsdWdpbiBwbHVnaW47Ci0JCi0JcHJpdmF0ZSBTQVhQYXJzZXJGYWN0b3J5SW1wbCBzYXhQYXJzZXJGYWN0b3J5ID0gbnVsbDsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBYU0xDb3JlUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNMQ29yZVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm4gdGhlIHJlZ2lzdGVyZWQgU0FYIHBhcnNlciBmYWN0b3J5IG9yIG51bGwgaWYgb25lCi0JICogZG9lcyBub3QgZXhpc3QuCSAqIEByZXR1cm4KLQkgKiBAcmV0dXJuIHJldHVybnMgYSBTQVhQYXJzZXJGYWN0b3J5Ci0JICovCi0JcHVibGljIFNBWFBhcnNlckZhY3RvcnkgZ2V0RmFjdG9yeSgpIHsKLQkJaWYgKHNheFBhcnNlckZhY3RvcnkgPT0gbnVsbCkgewotCQkJc2F4UGFyc2VyRmFjdG9yeSA9IG5ldyBTQVhQYXJzZXJGYWN0b3J5SW1wbCgpOwotCQl9Ci0JCVNBWFBhcnNlckZhY3RvcnkgdGhlRmFjdG9yeSA9IHNheFBhcnNlckZhY3Rvcnk7IAotCQlpZiAodGhlRmFjdG9yeSAhPSBudWxsKSB7Ci0JCQl0aGVGYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkJdGhlRmFjdG9yeS5zZXRYSW5jbHVkZUF3YXJlKGZhbHNlKTsKLQkJCXRoZUZhY3Rvcnkuc2V0VmFsaWRhdGluZyhmYWxzZSk7Ci0JCX0KLQkJcmV0dXJuIHRoZUZhY3Rvcnk7Ci0JfQotCQotCS8qKgotCSAqIExvZ3MgdGhlIHNwZWNpZmllZCBzdGF0dXMgd2l0aCB0aGlzIHBsdWctaW4ncyBsb2cuCi0JICogCi0JICogQHBhcmFtIHN0YXR1cyBzdGF0dXMgdG8gbG9nCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhJU3RhdHVzIHN0YXR1cykgewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0JfQotCi0JLyoqCi0JICogTG9ncyB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZSB0aHJvd2FibGUgdG8gbG9nIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coVGhyb3dhYmxlIGUpIHsKLQkJaWYgKGUgaW5zdGFuY2VvZiBDb3JlRXhjZXB0aW9uKSB7Ci0JCQlsb2coKChDb3JlRXhjZXB0aW9uKWUpLmdldFN0YXR1cygpKTsKLQkJfSBlbHNlIHsKLQkJCWxvZyhuZXdFcnJvclN0YXR1cyhNZXNzYWdlcy5YU0xDb3JlUGx1Z2luX2NvcmVFcnJvciwgZSkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYSBuZXcgZXJyb3Igc3RhdHVzIGZvciB0aGlzIHBsdWctaW4gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZQotCSAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBzdGF0dXMKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIHRoZSBleGNlcHRpb24gdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHN0YXR1cyBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lCi0JICogQHJldHVybiBhIG5ldyBlcnJvciBzdGF0dXMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElTdGF0dXMgbmV3RXJyb3JTdGF0dXMoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL2FudC9YSW5jbHVkZVRhc2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvYW50L1hJbmNsdWRlVGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDU1NDEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvYW50L1hJbmNsdWRlVGFzay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29weXJpZ2h0IChjKSAyMDA4IExhcnMgVm9nZWwgCi0qIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0qIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsdjEwLmh0bWwKLSoKLSogQ29udHJpYnV0b3JzOgotKiBMYXJzIFZvZ2VsIC0gTGFycy5Wb2dlbEBnbWFpbC5jb20gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuUHJvamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGUuWEluY2x1ZGVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gWEluY2x1ZGUgQU5UIHRhc2sgZGVmaW5pdGlvbi4KLSAqIAotICogQGF1dGhvciBMYXJzIFZvZ2VsCi0gKgotICovCi1wdWJsaWMgY2xhc3MgWEluY2x1ZGVUYXNrIGV4dGVuZHMgVGFzayB7Ci0JcHJpdmF0ZSBTdHJpbmcgaW5GaWxlOwotCi0JcHJpdmF0ZSBTdHJpbmcgb3V0RmlsZTsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhRG9jIAotCSAqIEBwYXJhbSBpbkZpbGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRJbihTdHJpbmcgaW5GaWxlKSB7Ci0JCWxvZyhNZXNzYWdlcy5YSW5jbHVkZVRhc2tfMCArIGluRmlsZSwgUHJvamVjdC5NU0dfVkVSQk9TRSk7Ci0JCXRoaXMuaW5GaWxlID0gaW5GaWxlOwotCX0KLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhRG9jCi0JICogQHBhcmFtIG91dEZpbGUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRPdXQoU3RyaW5nIG91dEZpbGUpIHsKLQkJbG9nKE1lc3NhZ2VzLlhJbmNsdWRlVGFza18xICsgb3V0RmlsZSwgUHJvamVjdC5NU0dfVkVSQk9TRSk7Ci0JCXRoaXMub3V0RmlsZSA9IG91dEZpbGU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsKLQkJdmFsaWRhdGUoKTsKLQkJbG9nKE1lc3NhZ2VzLlhJbmNsdWRlVGFza18yLCBQcm9qZWN0Lk1TR19WRVJCT1NFKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoaW5GaWxlKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKSB7Ci0JCQl0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oTWVzc2FnZXMuWEluY2x1ZGVUYXNrXzMKLQkJCQkJKyBpbkZpbGUpOwotCQl9Ci0JCS8vIFdlIHdpbGwgY2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzLCBpZiBub3Qgd2Ugd2lsbCB0cnkgdG8gY3JlYXRlIHRoZQotCQkvLyBvdXRwdXQgZmlsZSBhbmQgb3IgdGhlIG91dHB1dCBkaXJlY3RvcnkKLQkJRmlsZSBmaWxlb3V0ID0gbmV3IEZpbGUob3V0RmlsZSk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmlsZW91dC5nZXRQYXJlbnQoKSk7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlsb2coTWVzc2FnZXMuWEluY2x1ZGVUYXNrXzQgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCi0JCQlCb29sZWFuIHN1Y2Nlc3MgPSAobmV3IEZpbGUoZGlyLmdldEFic29sdXRlUGF0aCgpKSkubWtkaXJzKCk7Ci0JCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCQl0aHJvdyBuZXcgQnVpbGRFeGNlcHRpb24oTWVzc2FnZXMuWEluY2x1ZGVUYXNrXzUKLQkJCQkJCSsgb3V0RmlsZSk7Ci0JCQl9Ci0JCX0KLQkJLy8gY2hlY2sgaWYgdGhlIGluY2x1ZGVkIGZpbGVzIGFyZSBtb2RpZmllZCBhZnRlciB0aGUgbGFzdCBydW4KLQkJLy8gQXNzdW1wdGlvbiB0aGF0IGFsbCB0aGUgaW5jbHVkZWQgZmlsZXMgYXJlIHBhcnQgb2YgdGhlIGlucHV0IGZpbGUKLQkJLy8gZGlyZWN0b3J5Ci0JCWlmIChjaGVja21vZGlmaWVkKGluRmlsZSwgb3V0RmlsZSkpIHsKLQkJCWxvZyhNZXNzYWdlcy5YSW5jbHVkZVRhc2tfNiwKLQkJCQkJUHJvamVjdC5NU0dfSU5GTyk7Ci0JCQlYSW5jbHVkZXIgbGEgPSBuZXcgWEluY2x1ZGVyKCk7Ci0JCQl0cnkgewotCQkJCWxhLmV4dHJhY3RYTUxGaWxlKGluRmlsZSwgb3V0RmlsZSk7Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCXRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbihNZXNzYWdlcy5YSW5jbHVkZVRhc2tfNwotCQkJCQkJKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gY2hlY2ttb2RpZmllZChTdHJpbmcgaW5GaWxlLCBTdHJpbmcgb3V0RmlsZSkgewotCQlGaWxlIGluID0gbmV3IEZpbGUoaW5GaWxlKTsKLQkJRmlsZSBvdXQgPSBuZXcgRmlsZShvdXRGaWxlKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShpbi5nZXRQYXJlbnQoKSk7Ci0KLQkJQ29sbGVjdGlvbjxGaWxlPiBhbGxGaWxlcyA9IGxpc3RGaWxlcyhkaXIsIHRydWUpOwotCQlmb3IgKEZpbGUgZiA6IGFsbEZpbGVzKSB7Ci0JCQlpZiAoZi5sYXN0TW9kaWZpZWQoKSA+IG91dC5sYXN0TW9kaWZpZWQoKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YURvYwotCSAqIEBwYXJhbSBkaXJlY3RvcnkKLQkgKiBAcGFyYW0gcmVjdXJzZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgQ29sbGVjdGlvbjxGaWxlPiBsaXN0RmlsZXMoRmlsZSBkaXJlY3RvcnksIGJvb2xlYW4gcmVjdXJzZSkgewotCQkvLyBMaXN0IG9mIGZpbGVzIC8gZGlyZWN0b3JpZXMKLQkJVmVjdG9yPEZpbGU+IGZpbGVzID0gbmV3IFZlY3RvcjxGaWxlPigpOwotCi0JCS8vIEdldCBmaWxlcyAvIGRpcmVjdG9yaWVzIGluIHRoZSBkaXJlY3RvcnkKLQkJRmlsZVtdIGVudHJpZXMgPSBkaXJlY3RvcnkubGlzdEZpbGVzKCk7Ci0KLQkJLy8gR28gb3ZlciBlbnRyaWVzCi0JCWZvciAoRmlsZSBlbnRyeSA6IGVudHJpZXMpIHsKLQotCQkJZmlsZXMuYWRkKGVudHJ5KTsKLQotCQkJLy8gSWYgdGhlIGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIHRoZSByZWN1cnNlIGZsYWcKLQkJCS8vIGlzIHNldCwgcmVjdXJzZSBpbnRvIHRoZSBkaXJlY3RvcnkKLQkJCWlmIChyZWN1cnNlICYmIGVudHJ5LmlzRGlyZWN0b3J5KCkpIHsKLQkJCQlmaWxlcy5hZGRBbGwobGlzdEZpbGVzKGVudHJ5LCByZWN1cnNlKSk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBSZXR1cm4gY29sbGVjdGlvbiBvZiBmaWxlcwotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKCkgewotCQlpZiAoaW5GaWxlID09IG51bGwpIHsKLQkJCXRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbihNZXNzYWdlcy5YSW5jbHVkZVRhc2tfOCk7Ci0JCX0KLQkJaWYgKG91dEZpbGUgPT0gbnVsbCkgewotCQkJdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKE1lc3NhZ2VzLlhJbmNsdWRlVGFza185KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1ODU5ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAgICAgSmVzcGVyIFN0ZWVuIE34bGxlciAtIGFkYXB0ZWQgZnJvbSBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmNvbnRlbnQgCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMjIyBSZXNvbHZlciBwcm9ibGVtcwotWFNMQ29yZVBsdWdpbl9iYWRJbml0aWFsaXphdGlvbkRhdGEgPSBJbnZhbGlkIGluaXRpYWxpemF0aW9uIGRhdGEgZm9yICJ7MH0iLgotWFNMQ29yZVBsdWdpbl9wYXJzZXJDb25maWd1cmF0aW9uID0gWFNMIHBhcnNlciBjb25maWd1cmF0aW9uIGVycm9yIGR1cmluZyBjb250ZW50IGRlc2NyaXB0aW9uLgotWFNMQ29yZVBsdWdpbl9jb3JlRXJyb3I9RXJyb3IgbG9nZ2VkIGZyb20gWFNMIGNvcmUgcGx1Zy1pblw6Ci0jIFhJbmNsdWRlCi1YSW5jbHVkZVRhc2tfMD1TZXR0aW5nIHRoZSBvdXRwdXQgRmlsZSB0bzogCi1YSW5jbHVkZVRhc2tfMT1TZXR0aW5nIHRoZSBvdXRwdXQgRmlsZSB0bzogCi1YSW5jbHVkZVRhc2tfMj1FeGVjdXRpbmcgdGhlIFhJbmNsdWRlVGFzawotWEluY2x1ZGVUYXNrXzM9U3BlY2lmaWVkIElucHV0ZmlsZSBkb2VzIG5vdCBleGlzdHMgCi1YSW5jbHVkZVRhc2tfND1DcmVhdGluZyB0aGUgb3V0cHV0IGRpcmVjdG9yeSAKLVhJbmNsdWRlVGFza181PUNvdWxkIG5vdCBjcmVhdGUgb3V0cHV0ZmlsZQotWEluY2x1ZGVUYXNrXzY9Q2hhbmdlcyBkZXRlY3RlZC4gQ3JlYXRpbmcgYSBuZXcgb3V0cHV0IGZpbGUKLVhJbmNsdWRlVGFza183PVByb2JsZW1zIHdpdGggYWNjZXNzaW5nIHRoZSBmaWxlcy4KLVhJbmNsdWRlVGFza184PVBsZWFzZSBzcGVjaWZ5IGlucHV0ZmlsZSAKLVhJbmNsdWRlVGFza185PVBsZWFzZSBzcGVjaWZ5IG91dHB1dGZpbGUgIAotIyBWYWxpZGF0aW9uCi1YU0xWYWxpZGF0b3JfMT1YcGF0aCBpcyBpbnZhbGlkCi1YU0xWYWxpZGF0b3JfMTA9QSBzdHlsZXNoZWV0IG11c3Qgbm90IGltcG9ydCBpdHNlbGYKLVhTTFZhbGlkYXRvcl8xMT1UZW1wbGF0ZSBjb25mbGljdHMgd2l0aCBhbm90aGVyIHRlbXBsYXRlIGluIHRoaXMgc3R5bGVzaGVldAotWFNMVmFsaWRhdG9yXzEyPVRlbXBsYXRlIGNvbmZsaWN0cyB3aXRoIGFuIGluY2x1ZGVkIHRlbXBsYXRlCi1YU0xWYWxpZGF0b3JfMTM9SW5jbHVkZWQgdGVtcGxhdGVzIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlcgotWFNMVmFsaWRhdG9yXzE0PU5hbWUgYXR0cmlidXRlIGlzIHJlcXVpcmVkCi1YU0xWYWxpZGF0b3JfMjM9aHJlZiBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQKLVhTTFZhbGlkYXRvcl8xNT1OYW1lIG11c3QgYmUgc3BlY2lmaWVkCi1YU0xWYWxpZGF0b3JfMTY9UGFyYW1ldGVyIGFscmVhZHkgZGVmaW5lZAotWFNMVmFsaWRhdG9yXzE4PU5hbWVkIHRlbXBsYXRlIHswfSBpcyBub3QgYXZhaWxhYmxlCi1YU0xWYWxpZGF0b3JfMj1JbmNsdWRlZCBzdHlsZXNoZWV0cyBmb3JtIGEgY2lyY3VsYXIgcmVmZXJlbmNlCi1YU0xWYWxpZGF0b3JfMjA9UGFyYW1ldGVyIHswfSBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZQotWFNMVmFsaWRhdG9yXzIyPVBhcmFtZXRlciB7MH0gZG9lcyBub3QgZXhpc3QKLVhTTFZhbGlkYXRvcl8zPU1pc3NpbmcgcGFyYW1ldGVyOiB7MH0KLVhTTFZhbGlkYXRvcl80PU1pc3NpbmcgaW5jbHVkZTogCi1YU0xWYWxpZGF0b3JfNj1BIHN0eWxlc2hlZXQgbXVzdCBub3QgaW5jbHVkZSBpdHNlbGYKLVhTTFZhbGlkYXRvcl84PU1pc3NpbmcgaW1wb3J0OiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvU3R5bGVzaGVldEJ1aWxkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvU3R5bGVzaGVldEJ1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM0Nzg4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1N0eWxlc2hlZXRCdWlsZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGZpeCBpc3N1ZSB3aXRoIHhzbEVsbSBiZWluZyBudWxsIG9uIGxvY2FsIHZhcmlhYmxlcy4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYWRkIFhTTCBGdW5jdGlvbnMgZWxlbWVudCBzdXBwb3J0IGFuZCByZWZhY3RvcmVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlU2hlZXQgUGFyc2VyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ7Ci0KLS8qKgotICogQSBidWlsZGVyIHRoYXQgY3JlYXRlcyBhbmQgbWFpbnRhaW5zIGEgY2FjaGUgb2YgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4ncy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgU3R5bGVzaGVldEJ1aWxkZXIgewotCXByaXZhdGUgc3RhdGljIFN0eWxlc2hlZXRCdWlsZGVyIGluc3RhbmNlOwotCXByaXZhdGUgZmluYWwgTWFwPElGaWxlLCBTdHlsZXNoZWV0PiBidWlsdEZpbGVzID0gbmV3IEhhc2hNYXA8SUZpbGUsIFN0eWxlc2hlZXQ+KCk7Ci0KLQlwcml2YXRlIFN0eWxlc2hlZXRCdWlsZGVyKCkgewotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBmaWxlLiBJZiBlaXRoZXIKLQkgKiB0aGUgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4gaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkIG9yCi0JICogPGNvZGU+Zm9yY2U8L2NvZGU+IGlzIHNwZWNpZmllZCB0aGVuIHRoZSA8Y29kZT5TdHlsZXNoZWV0PC9jb2RlPiBpcwotCSAqIGJ1aWx0LgotCSAqIAotCSAqIEBwYXJhbSBmaWxlCi0JICogICAgICAgICAgICB0aGUgWFNMIGZpbGUKLQkgKiBAcGFyYW0gZm9yY2UKLQkgKiAgICAgICAgICAgIDxjb2RlPnRydWU8L2NvZGU+IHRvIGZvcmNlIGEgcGFyc2Ugb2YgdGhlIGZpbGUKLQkgKiBAcmV0dXJuIHRoZSA8Y29kZT5TdHlsZXNoZWV0PC9jb2RlPgotCSAqLwotCXB1YmxpYyBTdHlsZXNoZWV0IGdldFN0eWxlc2hlZXQoSUZpbGUgZmlsZSwgYm9vbGVhbiBmb3JjZSkgewotCQlTdHlsZXNoZWV0IHN0eWxlc2hlZXQgPSBidWlsdEZpbGVzLmdldChmaWxlKTsKLQkJaWYgKHN0eWxlc2hlZXQgPT0gbnVsbCB8fCBmb3JjZSkgewotCQkJc3R5bGVzaGVldCA9IGJ1aWxkKGZpbGUpOwotCQkJYnVpbHRGaWxlcy5wdXQoZmlsZSwgc3R5bGVzaGVldCk7Ci0JCX0KLQkJcmV0dXJuIHN0eWxlc2hlZXQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZXNoZWV0IGJ1aWxkKElGaWxlIGZpbGUpIHsKLQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoRGVidWcuZGVidWdYU0xNb2RlbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZGluZyAiICsgZmlsZSArICIuLi4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQotCQlTdHlsZXNoZWV0IHN0eWxlc2hlZXQgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIHNtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlzbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpCi0JCQkJCS5nZXRFeGlzdGluZ01vZGVsRm9yUmVhZChmaWxlKTsKLQkJCWlmIChzbW9kZWwgPT0gbnVsbCkgewotCQkJCXNtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkKLQkJCQkJCS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQkJaWYgKERlYnVnLmRlYnVnWFNMTW9kZWwpIHsKLQkJCQkJbG9uZyBlbmRQYXJzZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUlNFICIgKyBmaWxlICsgIiBpbiAiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCQkJCSsgKGVuZFBhcnNlIC0gc3RhcnQpICsgIm1zIik7IC8vJE5PTi1OTFMtMSQKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKERlYnVnLmRlYnVnWFNMTW9kZWwpIHsKLQkJCQlsb25nIGVuZFBhcnNlID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJOTy1QQVJTRSAiICsgZmlsZSArICIgaW4gIiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQkJCSsgKGVuZFBhcnNlIC0gc3RhcnQpICsgIm1zIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCS8vIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlpZiAoc21vZGVsICE9IG51bGwgJiYgc21vZGVsIGluc3RhbmNlb2YgSURPTU1vZGVsKSB7Ci0JCQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgc21vZGVsOwotCQkJCXN0eWxlc2hlZXQgPSBwYXJzZU1vZGVsKG1vZGVsLCBmaWxlKTsKLQkJCX0KLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJWFNMQ29yZVBsdWdpbi5sb2coZSk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJWFNMQ29yZVBsdWdpbi5sb2coZSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAoc21vZGVsICE9IG51bGwpCi0JCQkJc21vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JCWlmIChEZWJ1Zy5kZWJ1Z1hTTE1vZGVsKSB7Ci0JCQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCVUlMRCAiICsgZmlsZSArICIgaW4gIiArIChlbmQgLSBzdGFydCkgKyAibXMiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJfQotCQlyZXR1cm4gc3R5bGVzaGVldDsKLQl9Ci0KLQlwcml2YXRlIFN0eWxlc2hlZXQgcGFyc2VNb2RlbChJRE9NTW9kZWwgbW9kZWwsIElGaWxlIGZpbGUpIHsKLQkJSURPTURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJU3R5bGVzaGVldCBzZiA9IG5ldyBTdHlsZXNoZWV0KGZpbGUpOwotCQlTdHlsZXNoZWV0UGFyc2VyIHdhbGtlciA9IG5ldyBTdHlsZXNoZWV0UGFyc2VyKHNmKTsKLQkJd2Fsa2VyLndhbGtEb2N1bWVudChkb2N1bWVudCk7Ci0JCXJldHVybiBzZjsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHNpbmdsZXRvbiA8Y29kZT5TdHlsZXNoZWV0QnVpbGRlcjwvY29kZT4gaW5zdGFuY2UuCi0JICogCi0JICogQHJldHVybiB0aGUgPGNvZGU+U3R5bGVzaGVldEJ1aWxkZXI8L2NvZGU+IGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgU3R5bGVzaGVldEJ1aWxkZXIgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0JCQlpbnN0YW5jZSA9IG5ldyBTdHlsZXNoZWV0QnVpbGRlcigpOwotCQl9Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci0JCi0JLyoqCi0JICogUmVsZWFzZXMgYWxsIHRoZSBjYWNoZWQgc3R5bGVzaGVldHMuCi0JICovCi0JcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQkJaWYgKGJ1aWx0RmlsZXMuaXNFbXB0eSgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJSXRlcmF0b3I8SUZpbGU+IGl0ID0gYnVpbHRGaWxlcy5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlpdC5uZXh0KCk7Ci0JCQlpdC5yZW1vdmUoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCByZWxlYXNlKElGaWxlIGZpbGUpIHsKLQkJYnVpbHRGaWxlcy5yZW1vdmUoZmlsZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9tb2RlbC9TdHlsZXNoZWV0UGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1N0eWxlc2hlZXRQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhhODYzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1N0eWxlc2hlZXRQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjkwMjg2IC0gTW9kZWwgbG9hZGluZyBvZiBwYXJhbWV0ZXJzIG5vdCByZXNwZWN0aW5nIGZ1bmN0aW9ucy4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gbm8gYnVnIC0gUmVmYWN0b3JlZCBDb2RlIGZvciBlYXNpZXIgbWFpbnRlbmFuY2UgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuKjsKLWltcG9ydCBvcmcudzNjLmRvbS4qOwotCi1wdWJsaWMgY2xhc3MgU3R5bGVzaGVldFBhcnNlciB7Ci0JcHJpdmF0ZSBTdHlsZXNoZWV0UGFyc2VyRGF0YSBzdHlsZXNoZWV0UGFyc2VyRGF0YSA9IG5ldyBTdHlsZXNoZWV0UGFyc2VyRGF0YSgKLQkJCW5ldyBTdGFjazxFbGVtZW50PigpLCBuZXcgU3RhY2s8Q2FsbFRlbXBsYXRlPigpLCBuZXcgU3RhY2s8RnVuY3Rpb24+KCkpOwotCi0JcHVibGljIFN0eWxlc2hlZXRQYXJzZXIoU3R5bGVzaGVldCBzdHlsZXNoZWV0KSB7Ci0JCXRoaXMuc3R5bGVzaGVldFBhcnNlckRhdGEuc2V0U3R5bGVzaGVldChzdHlsZXNoZWV0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3YWxrRG9jdW1lbnQoSURPTURvY3VtZW50IGRvY3VtZW50KSB7Ci0KLQkJaWYgKGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpICE9IG51bGwpCi0JCQlyZWN1cnNlKGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVjdXJzZShFbGVtZW50IGVsZW1lbnQpIHsKLQkJWFNMRWxlbWVudCB4c2xFbCA9IG51bGw7Ci0JCWlmIChYU0xDb3JlLlhTTF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKSkgewotCQkJWFNMTW9kZWxPYmplY3RGYWN0b3J5IGZhY3RvcnkgPSBuZXcgWFNMTW9kZWxPYmplY3RGYWN0b3J5KGVsZW1lbnQsIHhzbEVsLCBzdHlsZXNoZWV0UGFyc2VyRGF0YSk7Ci0JCQl4c2xFbCA9IGZhY3RvcnkuY3JlYXRlWFNMTW9kZWxPYmplY3QoKTsKLQkJfQotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRFbGVtZW50U3RhY2soKS5wdXNoKGVsZW1lbnQpOwotCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlOb2RlIG5vZGUgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0JCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0JCQkJcmVjdXJzZSgoRWxlbWVudCkgbm9kZSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmICh4c2xFbCBpbnN0YW5jZW9mIENhbGxUZW1wbGF0ZSkKLQkJCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldENhbGxUZW1wbGF0ZXMoKS5wb3AoKTsKLQkJaWYgKHhzbEVsIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKLQkJCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEZ1bmN0aW9ucygpLnBvcCgpOwotCQl9Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEVsZW1lbnRTdGFjaygpLnBvcCgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvU3R5bGVzaGVldFBhcnNlckRhdGEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvU3R5bGVzaGVldFBhcnNlckRhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU1YTNkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1N0eWxlc2hlZXRQYXJzZXJEYXRhLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkZ1bmN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBob2xkIERhdGEgbmVjZXNzYXJ5IGZvciBwYXJzaW5nIGFuZCB3YWxraW5nCi0gKiBhbiBYU0wgU3R5bGVzaGVldCBpbnRvIGEgTW9kZWwuCi0gKiAKLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgY2xhc3MgU3R5bGVzaGVldFBhcnNlckRhdGEgewotCXByaXZhdGUgU3R5bGVzaGVldCBzdHlsZXNoZWV0OwotCXByaXZhdGUgU3RhY2s8RWxlbWVudD4gZWxlbWVudFN0YWNrOwotCi0JcHJpdmF0ZSBUZW1wbGF0ZSBjdXJyZW50VGVtcGxhdGU7Ci0KLQlwcml2YXRlIFN0YWNrPENhbGxUZW1wbGF0ZT4gY2FsbFRlbXBsYXRlczsKLQotCXByaXZhdGUgU3RhY2s8RnVuY3Rpb24+IGZ1bmN0aW9uczsKLQotCXByaXZhdGUgWFNMRWxlbWVudCBwYXJlbnRFbDsKLQotCXB1YmxpYyBTdHlsZXNoZWV0UGFyc2VyRGF0YShTdGFjazxFbGVtZW50PiBlbGVtZW50U3RhY2ssCi0JCQlTdGFjazxDYWxsVGVtcGxhdGU+IGNhbGxUZW1wbGF0ZXMsIFN0YWNrPEZ1bmN0aW9uPiBmdW5jdGlvbnMpIHsKLQkJdGhpcy5lbGVtZW50U3RhY2sgPSBlbGVtZW50U3RhY2s7Ci0JCXRoaXMuY2FsbFRlbXBsYXRlcyA9IGNhbGxUZW1wbGF0ZXM7Ci0JCXRoaXMuZnVuY3Rpb25zID0gZnVuY3Rpb25zOwotCX0KLQotCXB1YmxpYyBTdGFjazxDYWxsVGVtcGxhdGU+IGdldENhbGxUZW1wbGF0ZXMoKSB7Ci0JCXJldHVybiBjYWxsVGVtcGxhdGVzOwotCX0KLQotCXB1YmxpYyBUZW1wbGF0ZSBnZXRDdXJyZW50VGVtcGxhdGUoKSB7Ci0JCXJldHVybiBjdXJyZW50VGVtcGxhdGU7Ci0JfQotCi0JcHVibGljIFN0YWNrPEVsZW1lbnQ+IGdldEVsZW1lbnRTdGFjaygpIHsKLQkJcmV0dXJuIGVsZW1lbnRTdGFjazsKLQl9Ci0KLQlwdWJsaWMgU3RhY2s8RnVuY3Rpb24+IGdldEZ1bmN0aW9ucygpIHsKLQkJcmV0dXJuIGZ1bmN0aW9uczsKLQl9Ci0KLQlwdWJsaWMgWFNMRWxlbWVudCBnZXRQYXJlbnRFbCgpIHsKLQkJcmV0dXJuIHBhcmVudEVsOwotCX0KLQotCXB1YmxpYyBTdHlsZXNoZWV0IGdldFN0eWxlc2hlZXQoKSB7Ci0JCXJldHVybiBzdHlsZXNoZWV0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhbGxUZW1wbGF0ZXMoU3RhY2s8Q2FsbFRlbXBsYXRlPiBjYWxsVGVtcGxhdGVzKSB7Ci0JCXRoaXMuY2FsbFRlbXBsYXRlcyA9IGNhbGxUZW1wbGF0ZXM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRUZW1wbGF0ZShUZW1wbGF0ZSBjdXJyZW50VGVtcGxhdGUpIHsKLQkJdGhpcy5jdXJyZW50VGVtcGxhdGUgPSBjdXJyZW50VGVtcGxhdGU7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEVsZW1lbnRTdGFjayhTdGFjazxFbGVtZW50PiBlbGVtZW50U3RhY2spIHsKLQkJdGhpcy5lbGVtZW50U3RhY2sgPSBlbGVtZW50U3RhY2s7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEZ1bmN0aW9ucyhTdGFjazxGdW5jdGlvbj4gZnVuY3Rpb25zKSB7Ci0JCXRoaXMuZnVuY3Rpb25zID0gZnVuY3Rpb25zOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbChYU0xFbGVtZW50IHBhcmVudEVsKSB7Ci0JCXRoaXMucGFyZW50RWwgPSBwYXJlbnRFbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdHlsZXNoZWV0KFN0eWxlc2hlZXQgc2YpIHsKLQkJdGhpcy5zdHlsZXNoZWV0ID0gc2Y7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMRWxlbWVudEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMRWxlbWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1N2YwYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1hTTEVsZW1lbnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuQ2FsbFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0vKioKLSAqIEEgRmFjdG9yeSB0aGF0IGNyZWF0ZXMgWFNMIEVsZW1lbnRzIG9mIHRoZSByZXF1ZXN0ZWQgdHlwZS4KLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIFhTTEVsZW1lbnRGYWN0b3J5IHsKLQotCXByaXZhdGUgU3R5bGVzaGVldFBhcnNlckRhdGEgc3R5bGVzaGVldFBhcnNlckRhdGE7Ci0JcHJpdmF0ZSBFbGVtZW50IGVsZW1lbnQ7Ci0JCi0JcHVibGljIFhTTEVsZW1lbnRGYWN0b3J5KFN0eWxlc2hlZXRQYXJzZXJEYXRhIGRhdGEsIEVsZW1lbnQgZWxlbWVudCkgewotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YSA9IGRhdGE7Ci0JCXRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7Ci0JfQotCQkKLQlwdWJsaWMgWFNMRWxlbWVudCBjcmVhdGVTdHlsZVNoZWV0KCkgewotCQlTdHJpbmcgdmVyc2lvbiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ2ZXJzaW9uIik7IC8vJE5PTi1OTFMtMSQKLQkJc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpLnNldFZlcnNpb24odmVyc2lvbik7Ci0JCXJldHVybiBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCk7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZUluY2x1ZGUoKSB7Ci0JCUluY2x1ZGUgaW5jbHVkZSA9IG5ldyBJbmNsdWRlKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSk7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKS5hZGRJbmNsdWRlKGluY2x1ZGUpOwotCQlyZXR1cm4gaW5jbHVkZTsKLQl9Ci0JCi0JcHVibGljIFhTTEVsZW1lbnQgY3JlYXRlSW1wb3J0KCkgewotCQlJbXBvcnQgaW5jbHVkZSA9IG5ldyBJbXBvcnQoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpLmFkZEltcG9ydChpbmNsdWRlKTsKLQkJcmV0dXJuIGluY2x1ZGU7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVRlbXBsYXRlKCkgewotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5zZXRDdXJyZW50VGVtcGxhdGUobmV3IFRlbXBsYXRlKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSkpOwotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkuYWRkVGVtcGxhdGUoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0Q3VycmVudFRlbXBsYXRlKCkpOwotCQlyZXR1cm4gc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0Q3VycmVudFRlbXBsYXRlKCk7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVBhcmFtYXRlcigpIHsKLQkJUGFyYW1ldGVyIHBhcmFtID0gbmV3IFBhcmFtZXRlcihzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkpOwotCQkvLyBkZXRlcm1pbmUgd2hldGhlciBwYXJhbSBoYXMgYSB2YWx1ZQotCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlOb2RlIGNoaWxkTm9kZSA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLQkJCWlmIChjaGlsZE5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkFUVFJJQlVURV9OT0RFKSB7Ci0JCQkJcGFyYW0uc2V0VmFsdWUodHJ1ZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCkuZ2V0TW9kZWxUeXBlKCkgPT0gWFNMTW9kZWxPYmplY3QuVHlwZS5GVU5DVElPTikgewotCQkJRnVuY3Rpb24gZnVuY3Rpb24gPSAoRnVuY3Rpb24pIHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCk7Ci0JCQlmdW5jdGlvbi5hZGRQYXJhbWV0ZXIocGFyYW0pOwotCQl9IGVsc2UgaWYgKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCkuZ2V0TW9kZWxUeXBlKCkgPT0gWFNMTW9kZWxPYmplY3QuVHlwZS5URU1QTEFURQotCQkJCSYmIHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEVsZW1lbnRTdGFjaygpLnNpemUoKSA9PSAyICYmIHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEN1cnJlbnRUZW1wbGF0ZSgpICE9IG51bGwpIHsKLQkJCVRlbXBsYXRlIHRlbXBsYXRlID0gKFRlbXBsYXRlKSBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRQYXJlbnRFbCgpOwotCQkJdGVtcGxhdGUuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLQkJfQotCQlyZXR1cm4gcGFyYW07Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZUNhbGxUZW1wbGF0ZSgpIHsKLQkJQ2FsbFRlbXBsYXRlIGN1cnJlbnRDYWxsVGVtcGxhdGUgPSBuZXcgQ2FsbFRlbXBsYXRlKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSk7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldENhbGxUZW1wbGF0ZXMoKS5wdXNoKGN1cnJlbnRDYWxsVGVtcGxhdGUpOwotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkuYWRkQ2FsbGVkVGVtcGxhdGUoY3VycmVudENhbGxUZW1wbGF0ZSk7Ci0JCXJldHVybiBjdXJyZW50Q2FsbFRlbXBsYXRlOwotCX0KLQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVdpdGhQYXJhbVBhcm0oKSB7Ci0JCVBhcmFtZXRlciBwYXJhbSA9IG5ldyBQYXJhbWV0ZXIoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJLy8gZGV0ZXJtaW5lIHdoZXRoZXIgcGFyYW0gaGFzIGEgdmFsdWUKLQkJTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJTm9kZSBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0JCQlpZiAoY2hpbGROb2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkgewotCQkJCXBhcmFtLnNldFZhbHVlKHRydWUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8vIGdldCB0aGUgcHJldmlvdXMgY2FsbC10ZW1wbGF0ZQotCQlDYWxsVGVtcGxhdGUgY3VycmVudENhbGxUZW1wbGF0ZSA9IHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldENhbGxUZW1wbGF0ZXMoKS5wZWVrKCk7Ci0JCWN1cnJlbnRDYWxsVGVtcGxhdGUuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLQkJcmV0dXJuIHBhcmFtOwotCX0KLQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVZhcmlhYmxlKFhTTEVsZW1lbnQgeHNsRWwpIHsKLQkJaWYgKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEVsZW1lbnRTdGFjaygpLnNpemUoKSA9PSAxKSB7Ly8gZ2xvYmFsIHZhcmlhYmxlCi0JCQlWYXJpYWJsZSB2YXIgPSBuZXcgVmFyaWFibGUoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKS5hZGRHbG9iYWxWYXJpYWJsZSh2YXIpOwotCQkJeHNsRWwgPSB2YXI7Ci0JCX0gZWxzZSBpZiAoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0RWxlbWVudFN0YWNrKCkuc2l6ZSgpID4gMSAmJiBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRDdXJyZW50VGVtcGxhdGUoKSAhPSBudWxsKSB7Ly8gbG9jYWwKLQkJCQkJCQkJCQkJCQkJCQkJCS8vIHZhcmlhYmxlCi0JCQlWYXJpYWJsZSB2YXIgPSBuZXcgVmFyaWFibGUoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEN1cnJlbnRUZW1wbGF0ZSgpLmFkZFZhcmlhYmxlKHZhcik7Ci0JCQl4c2xFbCA9IHZhcjsKLQkJfQotCQlyZXR1cm4geHNsRWw7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZUZ1bmN0aW9uKCkgewotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5zZXRDdXJyZW50VGVtcGxhdGUobnVsbCk7Ci0JCUZ1bmN0aW9uIGZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSk7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEZ1bmN0aW9ucygpLnB1c2goZnVuY3Rpb24pOwotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkuYWRkRnVuY3Rpb24oZnVuY3Rpb24pOwotCQlyZXR1cm4gZnVuY3Rpb247Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVhTTEVsZW1lbnQoKSB7Ci0JCXJldHVybiBuZXcgWFNMRWxlbWVudChzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkpOwotCX0KLQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMTW9kZWxPYmplY3RGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1hTTE1vZGVsT2JqZWN0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzYwZTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMTW9kZWxPYmplY3RGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTTE1vZGVsT2JqZWN0RmFjdG9yeSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBUklBQkxFID0gInZhcmlhYmxlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGVU5DVElPTiA9ICJmdW5jdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0lUSF9QQVJBTSA9ICJ3aXRoLXBhcmFtIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQUxMX1RFTVBMQVRFID0gImNhbGwtdGVtcGxhdGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNID0gInBhcmFtIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURU1QTEFURSA9ICJ0ZW1wbGF0ZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1QT1JUID0gImltcG9ydCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DTFVERSA9ICJpbmNsdWRlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRVNIRUVUID0gInN0eWxlc2hlZXQiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEVsZW1lbnQgZWxlbWVudDsKLQlwcml2YXRlIFhTTEVsZW1lbnQgeHNsRWw7Ci0JcHJpdmF0ZSBTdHlsZXNoZWV0UGFyc2VyRGF0YSBzdHlsZXNoZWV0UGFyc2VyRGF0YTsKLQotCXB1YmxpYyBYU0xNb2RlbE9iamVjdEZhY3RvcnkoRWxlbWVudCBlbGVtZW50LCBYU0xFbGVtZW50IHhzbEVsLAotCQkJU3R5bGVzaGVldFBhcnNlckRhdGEgZGF0YSkgewotCQl0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotCQl0aGlzLnhzbEVsID0geHNsRWw7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhID0gZGF0YTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIFhTTCBNb2RlbCBPYmplY3Qgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVhTTE1vZGVsT2JqZWN0KCkgewotCQlTdHJpbmcgZWxOYW1lID0gZWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLQkJaW50IGVsZW1lbnRTaXplID0gc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0RWxlbWVudFN0YWNrKCkuc2l6ZSgpOwotCQlYU0xFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gbmV3IFhTTEVsZW1lbnRGYWN0b3J5KHN0eWxlc2hlZXRQYXJzZXJEYXRhLAotCQkJCWVsZW1lbnQpOwotCQlpZiAoZWxlbWVudFNpemUgPT0gMCkgewotCQkJaWYgKFNUWUxFU0hFRVQuZXF1YWxzKGVsTmFtZSkpIHsKLQkJCQl4c2xFbCA9IGZhY3RvcnkuY3JlYXRlU3R5bGVTaGVldCgpOwotCQkJfQotCQl9IGVsc2UgaWYgKElOQ0xVREUuZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPT0gMSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUluY2x1ZGUoKTsKLQkJfSBlbHNlIGlmIChJTVBPUlQuZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPT0gMSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUltcG9ydCgpOwotCQl9IGVsc2UgaWYgKFRFTVBMQVRFLmVxdWFscyhlbE5hbWUpICYmIGVsZW1lbnRTaXplID09IDEpIHsKLQkJCXhzbEVsID0gZmFjdG9yeS5jcmVhdGVUZW1wbGF0ZSgpOwotCQl9IGVsc2UgaWYgKFBBUkFNLmVxdWFscyhlbE5hbWUpICYmIG5vdFBhcmVudFN0eWxlc2hlZXQoKSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZVBhcmFtYXRlcigpOwotCQl9IGVsc2UgaWYgKENBTExfVEVNUExBVEUuZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPj0gMikgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUNhbGxUZW1wbGF0ZSgpOwotCQl9IGVsc2UgaWYgKFdJVEhfUEFSQU0uZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPj0gMwotCQkJCSYmIHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldENhbGxUZW1wbGF0ZXMoKS5zaXplKCkgPiAwKSB7Ci0JCQl4c2xFbCA9IGZhY3RvcnkuY3JlYXRlV2l0aFBhcmFtUGFybSgpOwotCQl9IGVsc2UgaWYgKGlzVmFyaWFibGUoZWxOYW1lKSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZVZhcmlhYmxlKHhzbEVsKTsKLQkJfSBlbHNlIGlmIChGVU5DVElPTi5lcXVhbHMoZWxOYW1lKSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uKCk7Ci0JCX0gZWxzZSB7Ci0JCQl4c2xFbCA9IGZhY3RvcnkuY3JlYXRlWFNMRWxlbWVudCgpOwotCQl9Ci0JCWlmICh4c2xFbCAhPSBudWxsKQotCQkJY29uZmlndXJlKChJRE9NTm9kZSkgZWxlbWVudCwgeHNsRWwpOwotCQlyZXR1cm4geHNsRWw7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzVmFyaWFibGUoU3RyaW5nIGVsTmFtZSkgewotCQlyZXR1cm4gVkFSSUFCTEUuZXF1YWxzKGVsTmFtZSkgfHwgUEFSQU0uZXF1YWxzKGVsTmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIG5vdFBhcmVudFN0eWxlc2hlZXQoKSB7Ci0JCXJldHVybiBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRQYXJlbnRFbCgpLmdldE1vZGVsVHlwZSgpICE9IFhTTE1vZGVsT2JqZWN0LlR5cGUuU1RZTEVTSEVFVDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY29uZmlndXJlKElET01Ob2RlIG5vZGUsIFhTTEVsZW1lbnQgZWxlbWVudCkgewotCQlzZXRQb3NpdGlvbkluZm8obm9kZSwgZWxlbWVudCk7Ci0JCUlET01FbGVtZW50IGRvbUVsZW0gPSAoSURPTUVsZW1lbnQpIG5vZGU7Ci0JCWVsZW1lbnQuc2V0TmFtZShkb21FbGVtLmdldExvY2FsTmFtZSgpKTsKLQkJTmFtZWROb2RlTWFwIG1hcCA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlJRE9NQXR0ciBhdHRyID0gKElET01BdHRyKSBtYXAuaXRlbShpKTsKLQkJCVhTTEF0dHJpYnV0ZSB4c2xhdHQgPSBuZXcgWFNMQXR0cmlidXRlKGVsZW1lbnQsIGF0dHIuZ2V0TmFtZSgpLAotCQkJCQlhdHRyLmdldFZhbHVlKCkpOwotCQkJc2V0UG9zaXRpb25JbmZvKGF0dHIsIHhzbGF0dCk7Ci0JCQllbGVtZW50LnNldEF0dHJpYnV0ZSh4c2xhdHQpOwotCQl9Ci0JCXNldFBhcmVudEVsZW1lbnQobm9kZSwgZWxlbWVudCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFBhcmVudEVsZW1lbnQoSURPTU5vZGUgbm9kZSwgWFNMRWxlbWVudCBlbGVtZW50KSB7Ci0JCWlmIChzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRQYXJlbnRFbCgpICE9IG51bGwpCi0JCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRQYXJlbnRFbCgpLmFkZENoaWxkKGVsZW1lbnQpOwotCQlpZiAobm9kZS5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCU5vZGVMaXN0IG5vZGVMaXN0ID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGxub2RlID0gbm9kZUxpc3QuaXRlbShpKTsKLQkJCQlpZiAobG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5zZXRQYXJlbnRFbChlbGVtZW50KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRQb3NpdGlvbkluZm8oSURPTU5vZGUgbm9kZSwgWFNMTm9kZSBpbmMpIHsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbm9kZQotCQkJCQkuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlpbnQgbGluZSA9IHN0cnVjdHVyZWREb2N1bWVudAotCQkJCQkuZ2V0TGluZU9mT2Zmc2V0KG5vZGUuZ2V0U3RhcnRPZmZzZXQoKSk7Ci0JCQlpbnQgbGluZU9mZnNldCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMaW5lT2Zmc2V0KGxpbmUpOwotCQkJaW50IGNvbCA9IG5vZGUuZ2V0U3RhcnRPZmZzZXQoKSAtIGxpbmVPZmZzZXQ7Ci0JCQlpbmMuc2V0T2Zmc2V0KG5vZGUuZ2V0U3RhcnRPZmZzZXQoKSk7Ci0JCQlpbmMuc2V0TGluZU51bWJlcihsaW5lKTsKLQkJCWluYy5zZXRDb2x1bW5OdW1iZXIoY29sKTsKLQkJCWluYy5zZXRMZW5ndGgobm9kZS5nZXRMZW5ndGgoKSk7Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCVhTTENvcmVQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwMGI4MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luOwotCi0vKioKLSAqIFByZWZlcmVuY2VzIGluaXRpYWxpemVyIGZvciBYU0wgY29yZSBwcmVmZXJlbmNlcy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKLXsKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKLQl7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKFhTTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLk1BWF9FUlJPUlMsIDEwMCk7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NSVNTSU5HX1BBUkFNLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcpOwotCQlub2RlLnB1dEludChWYWxpZGF0aW9uUHJlZmVyZW5jZXMuWFBBVEhTLCBJTWFya2VyLlNFVkVSSVRZX0VSUk9SKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLkNBTExfVEVNUExBVEVTLCBJTWFya2VyLlNFVkVSSVRZX0VSUk9SKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLkVNUFRZX1BBUkFNLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcpOwotCQlub2RlLnB1dEludChWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19JTkNMVURFLCBJTWFya2VyLlNFVkVSSVRZX0VSUk9SKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLkNJUkNVTEFSX1JFRiwgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5URU1QTEFURV9DT05GTElDVCwgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5OQU1FX0FUVFJJQlVURV9NSVNTSU5HLCBJTWFya2VyLlNFVkVSSVRZX0VSUk9SKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLk5BTUVfQVRUUklCVVRFX0VNUFRZLCBJTWFya2VyLlNFVkVSSVRZX0VSUk9SKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLkRVUExJQ0FURV9QQVJBTUVURVIsIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9EZWJ1Zy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC91dGlsL0RlYnVnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU2OWQ3N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC91dGlsL0RlYnVnLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIFdUUCBTU0UgRGVidWcgY2xhc3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDsKLQotCi0KLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLQotCi0vKioKLSAqIERlYnVnIENsYXNzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZW4gRGVidWdnaW5nIG91dHB1dCB0byBzeXN0ZW0gb3V0LgotICogQGF1dGhvciBkY2FydmVyCi0gKgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRGVidWcgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBjaGVja0Zvck1lbW9yeUxlYWtzID0gZmFsc2U7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gY29sbGVjdFN0YXRzID0gZmFsc2U7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUJVRyA9IDA7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEhSRUFETE9DQUwgPSBmYWxzZTsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z0JyZWFrcG9pbnRzID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnQ2FyZXRNZWRpYXRvciA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z0Rpc3BsYXlUcmVlUG9zaXRpb25zID0gZmFsc2U7Ci0JLy8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdNZWRpYXRvciA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnTm90aWZpY2F0aW9uID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnTm90aWZpY2F0aW9uQW5kRXZlbnRzID0gZmFsc2U7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdOb3RpZnlEZWZlcnJlZCA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z1JlY29uY2lsaW5nID0gZmFsc2U7Ci0JLy8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdSdGZGb3JtYXRQcm92aWRlciA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnU3RydWN0dXJlZERvY3VtZW50ID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnVGFnbGlicyA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnVG9rZW5pemVyID0gZmFsc2U7Ci0JCi0JLy8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdMYXVuY2hlciA9IGZhbHNlOwotCQotCS8qKgotCSAqIE91dHB1dCBNb2RlbGluZyBNZXNzYWdlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdYU0xNb2RlbCA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnVHJlZU1vZGVsID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnVXBkYXRlVHJlZVBvc2l0aW9ucyA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkaXNwbGF5SW5mbyA9IGZhbHNlOwotCi0JLyoqIGVmZmVjdHMgb3V0cHV0IG9mIExvZ2dlciAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkaXNwbGF5VG9Db25zb2xlID0gdHJ1ZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGlzcGxheVdhcm5pbmdzID0gZmFsc2U7Ci0JLy8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaGVhZFBhcnNpbmcgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4ganNEZWJ1Z0NvbnRleHRBc3Npc3QgPSBmYWxzZTsKLQkvLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBqc0RlYnVnU3ludGF4Q29sb3JpbmcgPSBmYWxzZTsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBMT0NLUyA9IGZhbHNlOwotCS8vIAotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBwZXJmVGVzdCA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBwZXJmVGVzdEFkYXB0ZXJDbGFzc0xvYWRpbmcgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gcGVyZlRlc3RGb3JtYXQgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gcGVyZlRlc3RSYXdTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5ID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHBlcmZUZXN0U3RydWN0dXJlZERvY3VtZW50RXZlbnRPbmx5ID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHBlcmZUZXN0U3RydWN0dXJlZERvY3VtZW50T25seSA9IGZhbHNlOwotCi0JLy8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gc3ludGF4SGlnaGxpZ2h0aW5nID0gZmFsc2U7Ci0JLy8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gdXNlU3RhbmRhcmRFb2xJbldpZGdldCA9IGZhbHNlOwotCi0JLyoqCi0JICogRm9yIHRlc3RzIGFuZCBkZWJ1ZyBvbmx5Ci0JICogQHBhcmFtIHN0cnVjdHVyZWREb2N1bWVudCAKLQkgKi8KLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBkdW1wKElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50KSB7Ci0JCWR1bXAoc3RydWN0dXJlZERvY3VtZW50LCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGR1bXAoSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQsIGJvb2xlYW4gdmVyYm9zZSkgewotCQlJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gZmxhdE5vZGUgPSBudWxsOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkR1bXAgb2Ygc3RydWN0dXJlZERvY3VtZW50OiIpOyAvLyROT04tTkxTLTEkCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IGZsYXROb2RlcyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZWdpb25MaXN0KCk7Ci0JCUVudW1lcmF0aW9uPD8+IHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMgPSBmbGF0Tm9kZXMuZWxlbWVudHMoKTsKLQkJd2hpbGUgKHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCWZsYXROb2RlID0gKElUZXh0UmVnaW9uQ29sbGVjdGlvbikgc3RydWN0dXJlZERvY3VtZW50UmVnaW9ucy5uZXh0RWxlbWVudCgpOwotCQkJaWYgKCF2ZXJib3NlKSB7Ci0JCQkJU3RyaW5nIG91dFN0cmluZyA9IGZsYXROb2RlLnRvU3RyaW5nKCk7Ci0JCQkJb3V0U3RyaW5nID0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzLmVzY2FwZShvdXRTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihvdXRTdHJpbmcpOwotCQkJfSBlbHNlIHsKLQkJCQlkdW1wKGZsYXROb2RlLCB2ZXJib3NlKTsKLQkJCX0KLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCI9ID0gPSA9ID0gPSIpOyAvLyROT04tTkxTLTEkCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByZWdpb24gCi0JICogQHBhcmFtIGZsYXROb2RlCi0JICogQHBhcmFtIHZlcmJvc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZHVtcChJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gcmVnaW9uLCBib29sZWFuIHZlcmJvc2UpIHsKLQkJaWYgKHJlZ2lvbiA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlpZiAodmVyYm9zZSkgewotCQkJcHJpbnRQYXJlbnQocmVnaW9uKTsKLQkJfQotCQlwcmludENoaWxkUmVnaW9ucyhyZWdpb24sIDApOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDaGlsZFJlZ2lvbnMoSVRleHRSZWdpb25Db2xsZWN0aW9uIHJlZ2lvbiwgaW50IGRlcHRoKSB7Ci0JCWlmIChyZWdpb24gIT0gbnVsbCkgewotCQkJLy8gPT0+IC8vIElUZXh0UmVnaW9uQ29sbGVjdGlvbiByZWdpb25Db2xsZWN0aW9uID0gcmVnaW9uOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHJlZ2lvbik7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IHJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ2lvbkxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCQlJVGV4dFJlZ2lvbiByID0gcmVnaW9uTGlzdC5nZXQoaSk7Ci0JCQkJaWYgKHIgaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbGxlY3Rpb24pIHsKLQkJCQkJSVRleHRSZWdpb25Db2xsZWN0aW9uIHJjID0gKElUZXh0UmVnaW9uQ29sbGVjdGlvbikgcjsKLQkJCQkJcHJpbnRDaGlsZFJlZ2lvbnMocmMsIGRlcHRoKyspOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihzcGFjZShkZXB0aCkgKyByKTsKLQkJCQkJZGVwdGgtLTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTaW1wbGUgdXRpbGl0eSB0byBtYWtlIHN1cmUgcHJpbnRsbidzIGFyZSBzb21lIHdoYXQgaW4gb3JkZXIKLQkgKiBAcGFyYW0gbXNnIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgc3luY2hyb25pemVkIHZvaWQgcHJpbnRsbihTdHJpbmcgbXNnKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArICJcdCIgKyBtc2cpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFBhcmVudChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICBbcGFyZW50IGRvY3VtZW50OiAiICsgdG9TdHJpbmdVdGlsKHJlZ2lvbi5nZXRQYXJlbnREb2N1bWVudCgpKSArICJdIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRQYXJlbnQoSVRleHRSZWdpb25Db2xsZWN0aW9uIHJlZ2lvbikgewotCQlpZiAocmVnaW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbikgewotCQkJcHJpbnRQYXJlbnQoKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIHJlZ2lvbik7Ci0JCX0gZWxzZSBpZiAocmVnaW9uIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpIHsKLQkJCXByaW50UGFyZW50KChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgcmVnaW9uKTsKLQkJfSBlbHNlCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICBbcGFyZW50IGRvY3VtZW50OiAiICsgIihuYSkiICsgIl0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50UGFyZW50KElUZXh0UmVnaW9uQ29udGFpbmVyIHJlZ2lvbikgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICBbcGFyZW50IGRvY3VtZW50OiAiICsgdG9TdHJpbmdVdGlsKHJlZ2lvbi5nZXRQYXJlbnQoKSkgKyAiXSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZGVwdGgKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNwYWNlKGludCBkZXB0aCkgewotCQlTdHJpbmcgcmVzdWx0ID0gIiAgIjsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihyZXN1bHQpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHsKLQkJCWJ1Zi5hcHBlbmQoIiAgIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXN1bHQgPSBidWYudG9TdHJpbmcoKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB0b1N0cmluZ1V0aWwoSVN0cnVjdHVyZWREb2N1bWVudCBvYmplY3QpIHsKLQkJU3RyaW5nIGNsYXNzTmFtZSA9IG9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJU3RyaW5nIHNob3J0Q2xhc3NOYW1lID0gY2xhc3NOYW1lLnN1YnN0cmluZyhjbGFzc05hbWUubGFzdEluZGV4T2YoIi4iKSArIDEpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyByZXN1bHQgPSBzaG9ydENsYXNzTmFtZTsKLQkJLy8gTk9URTogaWYgdGhlIGRvY3VtZW50IGhlbGQgYnkgYW55IHJlZ2lvbiBoYXMgYmVlbiB1cGRhdGVkIGFuZCB0aGUKLQkJLy8gcmVnaW9uIG9mZnNldHMgaGF2ZSBub3QKLQkJLy8geWV0IGJlZW4gdXBkYXRlZCwgdGhlIG91dHB1dCBmcm9tIHRoaXMgbWV0aG9kIGludmFsaWQuCi0JCXJldHVybiByZXN1bHQ7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB0b1N0cmluZ1V0aWwoSVRleHRSZWdpb25Db2xsZWN0aW9uIG9iamVjdCkgewotCQlTdHJpbmcgY2xhc3NOYW1lID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQlTdHJpbmcgc2hvcnRDbGFzc05hbWUgPSBjbGFzc05hbWUuc3Vic3RyaW5nKGNsYXNzTmFtZS5sYXN0SW5kZXhPZigiLiIpICsgMSk7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIHJlc3VsdCA9IHNob3J0Q2xhc3NOYW1lOwotCQkvLyBOT1RFOiBpZiB0aGUgZG9jdW1lbnQgaGVsZCBieSBhbnkgcmVnaW9uIGhhcyBiZWVuIHVwZGF0ZWQgYW5kIHRoZQotCQkvLyByZWdpb24gb2Zmc2V0cyBoYXZlIG5vdAotCQkvLyB5ZXQgYmVlbiB1cGRhdGVkLCB0aGUgb3V0cHV0IGZyb20gdGhpcyBtZXRob2QgaW52YWxpZC4KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCS8qKgotCSAqIERlYnVnIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIERlYnVnKCkgewotCQlzdXBlcigpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9GaWxlVXRpbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Zjk0MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC91dGlsL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotCi0vKioKLSAqIFRoaXMgaXMgYSBnZW5lcmFsIGZpbGUgdXRpbGl0eSBjbGFzcy4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgRmlsZVV0aWwgewotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBhIGZpbGUgaXMgb25lIG9mIHRoZSB2YWxpZCBYTUwgY29udGVudCB0eXBlcy4KLQkgKiBAcGFyYW0gZmlsZSBUaGUgaW5wdXQgSUZpbGUgdG8gY2hlY2sKLQkgKiBAcmV0dXJuIFRydWUgaWYgaXQgaXMgYSBYTUwgZmlsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1hNTEZpbGUoSUZpbGUgZmlsZSkKLQl7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgY29udGVudFR5cGVNYW5hZ2VyID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCk7Ci0JCUlDb250ZW50VHlwZVtdIHR5cGVzID0gY29udGVudFR5cGVNYW5hZ2VyLmZpbmRDb250ZW50VHlwZXNGb3IoZmlsZS5nZXROYW1lKCkpOwotCQlmb3IgKElDb250ZW50VHlwZSBjb250ZW50VHlwZSA6IHR5cGVzKQotCQl7Ci0JCQlpZiAoY29udGVudFR5cGUuaXNLaW5kT2YoY29udGVudFR5cGVNYW5hZ2VyLmdldENvbnRlbnRUeXBlKCJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIikpIHx8IGNvbnRlbnRUeXBlLmlzS2luZE9mKGNvbnRlbnRUeXBlTWFuYWdlci5nZXRDb250ZW50VHlwZSgib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZSIpKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgYSBmaWxlIGlzIGEgWFNMVCBGaWxlLgotCSAqIEBwYXJhbSBmaWxlIFRoZSBpbnB1dCBJRmlsZSB0byBjaGVjay4KLQkgKiBAcmV0dXJuIFRydWUgaWYgaXQgaXMgYSBYU0xUIGZpbGUsIGZhbHNlIG90aGVyd2lzZS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNYU0xGaWxlKElGaWxlIGZpbGUpCi0JewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIGNvbnRlbnRUeXBlTWFuYWdlciA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpOwotCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IGNvbnRlbnRUeXBlTWFuYWdlci5maW5kQ29udGVudFR5cGVzRm9yKGZpbGUuZ2V0TmFtZSgpKTsKLQkJZm9yIChJQ29udGVudFR5cGUgY29udGVudFR5cGUgOiB0eXBlcykKLQkJewotCQkJaWYgKGNvbnRlbnRUeXBlLmVxdWFscyhjb250ZW50VHlwZU1hbmFnZXIuZ2V0Q29udGVudFR5cGUoWFNMQ29yZS5YU0xfQ09OVEVOVF9UWVBFKSkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC91dGlsL1N0cnVjdHVyZWREb2N1bWVudFV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjdkMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC91dGlsL1N0cnVjdHVyZWREb2N1bWVudFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci0KLS8qKgotICogR2VuZXJhbCBQdXJwb3NlIHV0aWxpdHkgY2xhc3NlcyB0byBjb252ZXJ0IGZyb20gU3RydWN0dXJlZERvY3VtZW50IHRvIERPTS4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgU3RydWN0dXJlZERvY3VtZW50VXRpbCB7Ci0JCi0JLyoqCi0JICogR2l2ZW4gYSBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIGEgVGV4dFJlZ2lvbiwgcmV0dXJuIGEKLQkgKiBJRE9NTm9kZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIHBvc2l0aW9uIGluIHRoZSBTdHJ1Y3R1cmVkRG9jdW1lbnQKLQkgKiAKLQkgKiBAcGFyYW0gZG9jdW1lbnRSZWdpb24KLQkgKiBAcGFyYW0gdGV4dFJlZ2lvbgotCSAqIEByZXR1cm4gSURPTU5vZGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElET01Ob2RlIGdldE5vZGUoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiwgSVRleHRSZWdpb24gdGV4dFJlZ2lvbikgewotCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0RXhpc3RpbmdNb2RlbEZvclJlYWQoZG9jdW1lbnRSZWdpb24uZ2V0UGFyZW50RG9jdW1lbnQoKSk7Ci0JCUlET01Eb2N1bWVudCBkb2N1bWVudE5vZGUgPSAoKElET01Nb2RlbCkgc01vZGVsKS5nZXREb2N1bWVudCgpOwotCi0JCXJldHVybiAoSURPTU5vZGUpZG9jdW1lbnROb2RlLmdldE1vZGVsKCkuZ2V0SW5kZXhlZFJlZ2lvbihkb2N1bWVudFJlZ2lvbi5nZXRTdGFydE9mZnNldCh0ZXh0UmVnaW9uKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3V0aWwvWE1MQ29udGVudFR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9YTUxDb250ZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmU0MTM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9YTUxDb250ZW50VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoYnVnIDI2NDc4OCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuKjsKLQotLyoqCi0gKiBYTUxDb250ZXRUeXBlIGhhbmRsZXMgdGhlIGdhdGhlcmluZyBvZiBYTUwgY29udGVudCB0eXBlIHJlbGF0ZWQgaW5mb3JtYXRpb24KLSAqIGJldHdlZW4gdGhlIHBsYXRmb3JtcyB4bWwgY29udGVudCB0eXBlIGFuZCBXVFAncyBzcGVjaWZpYyB2ZXJzaW9uLgotICogIAotICogQGF1dGhvciBEYXZpZCBDYXJ2ZXIKLSAqIEBzaW5jZSAxLjAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxDb250ZW50VHlwZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTFNPVVJDRV9DT05URU5UVFlQRSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTEFURk9STV9YTUxTT1VSQ0VfQ09OVEVOVFRZUEUgPSAib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgSUNvbnRlbnRUeXBlTWFuYWdlciBjb250ZW50VHlwZU1hbmFnZXIgPSBudWxsOwotCi0JcHVibGljIFhNTENvbnRlbnRUeXBlKCkgewotCQljb250ZW50VHlwZU1hbmFnZXIgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKTsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFsbCB0aGUgZXh0ZW5zaW9ucyBhc3NvY2lhdGVkIHdpdGggYW4gWE1MIENvbnRlbnQgVHlwZS4gCi0JICogQHJldHVybiBUaGUgYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBTdHJpbmdbXSBnZXRGaWxlRXh0ZW5zaW9ucygpIHsKLQkJSUNvbnRlbnRUeXBlW10gY29udGVudFR5cGVzID0gZ2V0QWxsWE1MQ29udGVudFR5cGVzKCk7Ci0JCUFycmF5TGlzdDxTdHJpbmc+IHhtbEZpbGVFeHRlbnNpb25zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCWlmIChjb250ZW50VHlwZXMubGVuZ3RoID4gMCkgewotCQkJZm9yIChpbnQgY250ID0gMDsgY250IDwgY29udGVudFR5cGVzLmxlbmd0aDsgY250KyspIHsKLQkJCQlTdHJpbmdbXSBleHRzID0gZ2V0RmlsZVNwZWNzKGNvbnRlbnRUeXBlc1tjbnRdKTsKLQkJCQlpZiAoZXh0cyAhPSBudWxsKSB7Ci0JCQkJCWZvciAoaW50IHN1YiA9IDA7IHN1YiA8IGV4dHMubGVuZ3RoOyBzdWIrKykgewotCQkJCQkJaWYgKCF4bWxGaWxlRXh0ZW5zaW9ucy5jb250YWlucyhleHRzW3N1Yl0pKSB7Ci0JCQkJCQkJeG1sRmlsZUV4dGVuc2lvbnMuYWRkKGV4dHNbc3ViXSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCVN0cmluZ1tdIGZpbGVFeHRlbnNpb25zID0gbmV3IFN0cmluZ1t4bWxGaWxlRXh0ZW5zaW9ucy5zaXplKCldOwotCQl4bWxGaWxlRXh0ZW5zaW9ucy50b0FycmF5KGZpbGVFeHRlbnNpb25zKTsKLQkJcmV0dXJuIGZpbGVFeHRlbnNpb25zOwotCX0JCi0JCi0JcHJpdmF0ZSBJQ29udGVudFR5cGVbXSBnZXRBbGxYTUxDb250ZW50VHlwZXMoKSB7Ci0JCUFycmF5TGlzdDxJQ29udGVudFR5cGU+IGFycmF5TGlzdCA9IG5ldyBBcnJheUxpc3Q8SUNvbnRlbnRUeXBlPihBcnJheXMuYXNMaXN0KGNvbnRlbnRUeXBlTWFuYWdlci5nZXRBbGxDb250ZW50VHlwZXMoKSkpOwotCQlBcnJheUxpc3Q8SUNvbnRlbnRUeXBlPiBjb3B5Q29udGVudHMgPSAoQXJyYXlMaXN0PElDb250ZW50VHlwZT4pYXJyYXlMaXN0LmNsb25lKCk7Ci0JCi0JCWZvcihJQ29udGVudFR5cGUgY29udGVudFR5cGUgOiBhcnJheUxpc3QpIHsKLQkJCWlmICghaXNYTUxDb250ZW50VHlwZShjb250ZW50VHlwZSkpIHsKLQkJCQkJY29weUNvbnRlbnRzLnJlbW92ZShjb250ZW50VHlwZSk7Ci0JCQl9Ci0JCX0KLQkJSUNvbnRlbnRUeXBlW10gY29udGVudFR5cGVzID0gbmV3IElDb250ZW50VHlwZVtjb3B5Q29udGVudHMuc2l6ZSgpXTsKLQkJY29weUNvbnRlbnRzLnRvQXJyYXkoY29udGVudFR5cGVzKTsKLQkJcmV0dXJuIGNvbnRlbnRUeXBlczsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNYTUxDb250ZW50VHlwZShJQ29udGVudFR5cGUgY29udGVudFR5cGUpIHsKLQkJcmV0dXJuIGNvbnRlbnRUeXBlLmdldElkKCkuZXF1YWxzKFBMQVRGT1JNX1hNTFNPVVJDRV9DT05URU5UVFlQRSkgfHwKLQkJCSAgY29udGVudFR5cGUuZ2V0SWQoKS5lcXVhbHMoWE1MU09VUkNFX0NPTlRFTlRUWVBFKSB8fAotCQkJICBpc0tpbmRPZldUUFhNTChjb250ZW50VHlwZSkgfHwKLQkJCSAgaXNLaW5kT2ZYTUxTb3VyY2UoY29udGVudFR5cGUpOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNLaW5kT2ZYTUxTb3VyY2UoSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKSB7Ci0JCUlDb250ZW50VHlwZSBwbGF0Zm9ybUNvbnRlbnRUeXBlID0gY29udGVudFR5cGVNYW5hZ2VyLmdldENvbnRlbnRUeXBlKFBMQVRGT1JNX1hNTFNPVVJDRV9DT05URU5UVFlQRSk7Ci0JCWJvb2xlYW4gcmV0dXJuVmFsdWUgPSBmYWxzZTsKLQkJaWYgKHBsYXRmb3JtQ29udGVudFR5cGUgIT0gbnVsbCkgewotCQkJcmV0dXJuVmFsdWUgPSBjb250ZW50VHlwZS5pc0tpbmRPZihwbGF0Zm9ybUNvbnRlbnRUeXBlKTsKLQkJfQotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCQotCXByaXZhdGUgYm9vbGVhbiBpc0tpbmRPZldUUFhNTChJQ29udGVudFR5cGUgY29udGVudFR5cGUpIHsKLQkJSUNvbnRlbnRUeXBlIHd0cENvbnRlbnRUeXBlID0gY29udGVudFR5cGVNYW5hZ2VyLmdldENvbnRlbnRUeXBlKFhNTFNPVVJDRV9DT05URU5UVFlQRSk7Ci0JCWJvb2xlYW4gcmV0dXJuVmFsdWUgPSBmYWxzZTsKLQkJaWYgKHd0cENvbnRlbnRUeXBlICE9IG51bGwpIHsKLQkJCXJldHVyblZhbHVlID0gY29udGVudFR5cGUuaXNLaW5kT2Yod3RwQ29udGVudFR5cGUpOwotCQl9Ci0JCXJldHVybiByZXR1cm5WYWx1ZTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGdldEZpbGVTcGVjcyhJQ29udGVudFR5cGUgY29udGVudFR5cGUpIHsKLQkJcmV0dXJuIGNvbnRlbnRUeXBlLmdldEZpbGVTcGVjcyhJQ29udGVudFR5cGUuRklMRV9FWFRFTlNJT05fU1BFQyk7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL01heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MGJjOGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL01heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotLyoqCi0gKiBBbiBleGNlcHRpb24gdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgaGFzIGJlZW4gcmVhY2hlZCAKLSAqIGZvciBhIGdpdmVuIFN0eWxlc2hlZXQgdmFsaWRhdGlvbi4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMVmFsaWRhdGlvbk1lc3NhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0xWYWxpZGF0aW9uTWVzc2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWFkODQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0xWYWxpZGF0aW9uTWVzc2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlOwotCi0vKioKLSAqIEEgdmFsaWRhdGlvbiBtZXNzYWdlIHNwZWNpZmljIHRvIHRoZSBYU0wgdmFsaWRhdG9yIHdoaWNoIGFkZHMgdGhlIGFiaWxpdHkgCi0gKiB0byBzcGVjaWZ5IHRoZSBYU0wgbm9kZS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xWYWxpZGF0aW9uTWVzc2FnZSBleHRlbmRzIFZhbGlkYXRpb25NZXNzYWdlCi17Ci0JcHJpdmF0ZSBYU0xOb2RlIG5vZGU7Ci0JcHJpdmF0ZSBpbnQgcmVhbFNldmVyaXR5OwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIFRoZSBtZXNzYWdlIGZvciB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlLgotCSAqIEBwYXJhbSBsaW5lTnVtYmVyCi0JICogICAgICAgICAgICBUaGUgbGluZSBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLQkgKiBAcGFyYW0gY29sdW1uTnVtYmVyCi0JICogICAgICAgICAgICBUaGUgY29sdW1uIGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlLgotCSAqIEBwYXJhbSB1cmkKLQkgKiAgICAgICAgICAgIFRoZSB1cmkgb2YgdGhlIGZpbGUgdGhlIG1lc3NhZ2UgaXMgZm9yLgotCSAqLwotCXB1YmxpYyBYU0xWYWxpZGF0aW9uTWVzc2FnZShTdHJpbmcgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIFN0cmluZyB1cmkpCi0JewotCQlzdXBlcihtZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHVyaSk7Ci0JfQotCQotCS8qKgotCSAqIFNldCB0aGUgbm9kZSB0aGF0IHRoaXMgbWVzc2FnZSBhcHBsaWVzIHRvLgotCSAqIAotCSAqIEBwYXJhbSBub2RlIHRoZSBub2RlCi0JICovCi0JcHVibGljIHZvaWQgc2V0Tm9kZShYU0xOb2RlIG5vZGUpCi0JewotCQl0aGlzLm5vZGUgPSBub2RlOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbm9kZSB0aGF0IHRoaXMgbWVzc2FnZSBhcHBsaWVzIHRvLgotCSAqIEByZXR1cm4gdGhlIG5vZGUKLQkgKi8KLQlwdWJsaWMgWFNMTm9kZSBnZXROb2RlKCkKLQl7Ci0JCXJldHVybiBub2RlOwotCX0KLQkKLQkvKioKLQkgKiBUaGUgc2V2ZXJpdHkgc2V0IGhlcmUgc2hvdWxkIGJlIHRoZSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlIHNldmVyaXR5LgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldFNldmVyaXR5KGludCBzZXYpCi0JewotCQl0aGlzLnJlYWxTZXZlcml0eSA9IHNldjsKLQkJLy8gdGhlIHN1cGVyY2xhc3Mgb25seSB1bmRlcnN0YW5kcyBoaWdoIGFuZCBsb3cuCi0JCWludCBzZXZlcml0eTsKLQkJc3dpdGNoKHNldikKLQkJewotCQkJY2FzZSBJTWVzc2FnZS5ISUdIX1NFVkVSSVRZOgotCQkJCXNldmVyaXR5ID0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0hJR0g7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXNldmVyaXR5ID0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVzsKLQkJfQotCQlzdXBlci5zZXRTZXZlcml0eShzZXZlcml0eSk7Ci0JfQotCQotCS8qKgotCSAqIFdvcmthcm91bmQgZm9yIHN1cGVyY2xhc3MncyBiaXphcnJlIGhhbmRsaW5nIG9mIHNldmVyaXR5Ci0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0UmVhbFNldmVyaXR5KCkKLQl7Ci0JCXJldHVybiByZWFsU2V2ZXJpdHk7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCXsKLQkJcmV0dXJuIG5vZGUudG9TdHJpbmcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMVmFsaWRhdGlvblJlcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTFZhbGlkYXRpb25SZXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZlMDY3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMVmFsaWRhdGlvblJlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU7Ci0KLQotLyoqCi0gKiBBIHZhbGlkYXRpb24gcmVwb3J0IGZvciB0aGUgWFNMIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQKLSAqLwotcHVibGljIGNsYXNzIFhTTFZhbGlkYXRpb25SZXBvcnQgaW1wbGVtZW50cyBWYWxpZGF0aW9uUmVwb3J0Ci17Ci0JcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLQlwcml2YXRlIFN0cmluZyB1cmk7Ci0JcHJpdmF0ZSBMaXN0PFhTTFZhbGlkYXRpb25NZXNzYWdlPiBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0PFhTTFZhbGlkYXRpb25NZXNzYWdlPigpOwotCXByaXZhdGUgTGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4gd2FybmluZ3MgPSBuZXcgQXJyYXlMaXN0PFhTTFZhbGlkYXRpb25NZXNzYWdlPigpOwotCXByaXZhdGUgTGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4gaW5mb3MgPSBuZXcgQXJyYXlMaXN0PFhTTFZhbGlkYXRpb25NZXNzYWdlPigpOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHVyaQotCSAqICAgICAgICAgICAgdGhlIFVSSSBvZiB0aGUgZW50aXR5IHRoYXQgdGhpcyByZXBvcnQgYXBwbGllcyB0bwotCSAqLwotCXB1YmxpYyBYU0xWYWxpZGF0aW9uUmVwb3J0KFN0cmluZyB1cmkpCi0JewotCQl0aGlzLnVyaSA9IHVyaTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0JICogCi0JICogQHJldHVybiB2YWxpZGF0aW9uIG1lc3NhZ2VzCi0JICovCi0JcHVibGljIExpc3Q8WFNMVmFsaWRhdGlvbk1lc3NhZ2U+IGdldEVycm9ycygpCi0JewotCQlyZXR1cm4gZXJyb3JzOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHZhbGlkYXRpb24gbWVzc2FnZXMKLQkgKi8KLQlwdWJsaWMgTGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4gZ2V0V2FybmluZ3MoKQotCXsKLQkJcmV0dXJuIHdhcm5pbmdzOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHZhbGlkYXRpb24gbWVzc2FnZXMKLQkgKi8KLQlwdWJsaWMgTGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4gZ2V0SW5mb3MoKQotCXsKLQkJcmV0dXJuIGluZm9zOwotCX0KLQotCS8qKgotCSAqIEFkZCBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4gWFNMIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIHRoZSBub2RlIHRoZSB3YXJuaW5nIGFwcGxpZXMgdG8KLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5vZGUKLQkgKiBAcmV0dXJuIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgY3JlYXRlZAotCSAqLwotCXB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZSBhZGRFcnJvcihYU0xOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKQotCXsKLQkJdmFsaWQgPSBmYWxzZTsKLQkJWFNMVmFsaWRhdGlvbk1lc3NhZ2UgbXNnID0gbmV3IFhTTFZhbGlkYXRpb25NZXNzYWdlKG1lc3NhZ2UsIG5vZGUuZ2V0TGluZU51bWJlcigpICsgMSwgbm9kZS5nZXRDb2x1bW5OdW1iZXIoKSArIDEsIGdldEZpbGVVUkkoKSk7Ci0JCW1zZy5zZXRTZXZlcml0eShJTWVzc2FnZS5ISUdIX1NFVkVSSVRZKTsKLQkJbXNnLnNldE5vZGUobm9kZSk7Ci0JCWVycm9ycy5hZGQobXNnKTsKLQkJcmV0dXJuIG1zZzsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYW4gd2FybmluZyBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4gWFNMIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIHRoZSBub2RlIHRoZSB3YXJuaW5nIGFwcGxpZXMgdG8KLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5vZGUKLQkgKiBAcmV0dXJuIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgY3JlYXRlZAotCSAqLwotCXB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZSBhZGRXYXJuaW5nKFhTTE5vZGUgbm9kZSwgU3RyaW5nIG1lc3NhZ2UpCi0JewotCQlYU0xWYWxpZGF0aW9uTWVzc2FnZSBtc2cgPSBuZXcgWFNMVmFsaWRhdGlvbk1lc3NhZ2UobWVzc2FnZSwgbm9kZS5nZXRMaW5lTnVtYmVyKCkgKyAxLCBub2RlLmdldENvbHVtbk51bWJlcigpICsgMSwgZ2V0RmlsZVVSSSgpKTsKLQkJbXNnLnNldFNldmVyaXR5KElNZXNzYWdlLk5PUk1BTF9TRVZFUklUWSk7Ci0JCW1zZy5zZXROb2RlKG5vZGUpOwotCQl3YXJuaW5ncy5hZGQobXNnKTsKLQkJcmV0dXJuIG1zZzsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYW4gaW5mbyBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4gWFNMIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiAgICAgICAgICAgIHRoZSBub2RlIHRoZSB3YXJuaW5nIGFwcGxpZXMgdG8KLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgdGhlIG1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5vZGUKLQkgKiBAcmV0dXJuIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgY3JlYXRlZAotCSAqLwotCXB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZSBhZGRJbmZvKFhTTE5vZGUgbm9kZSwgU3RyaW5nIG1lc3NhZ2UpCi0JewotCQlYU0xWYWxpZGF0aW9uTWVzc2FnZSBtc2cgPSBuZXcgWFNMVmFsaWRhdGlvbk1lc3NhZ2UobWVzc2FnZSwgbm9kZS5nZXRMaW5lTnVtYmVyKCkgKyAxLCBub2RlLmdldENvbHVtbk51bWJlcigpICsgMSwgZ2V0RmlsZVVSSSgpKTsKLQkJbXNnLnNldFNldmVyaXR5KElNZXNzYWdlLkxPV19TRVZFUklUWSk7Ci0JCW1zZy5zZXROb2RlKG5vZGUpOwotCQlpbmZvcy5hZGQobXNnKTsKLQkJcmV0dXJuIG1zZzsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIFVSSSB0aGF0IHRoaXMgcmVwb3J0IGFwcGxpZXMgdG8uCi0JICogCi0JICogQHJldHVybiB0aGUgVVJJCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRGaWxlVVJJKCkKLQl7Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLmdldE5lc3RlZE1lc3NhZ2VzCi0JICogCi0JICogQHJldHVybiBudWxsCi0JICovCi0JcHVibGljIEhhc2hNYXA8PywgPz4gZ2V0TmVzdGVkTWVzc2FnZXMoKQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotCSAqIAotCSAqIEByZXR1cm4gQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKi8KLQlwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXSBnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKQotCXsKLQkJTGlzdDxWYWxpZGF0aW9uTWVzc2FnZT4gbWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0PFZhbGlkYXRpb25NZXNzYWdlPigpOwotCQltZXNzYWdlcy5hZGRBbGwoZXJyb3JzKTsKLQkJbWVzc2FnZXMuYWRkQWxsKHdhcm5pbmdzKTsKLQkJbWVzc2FnZXMuYWRkQWxsKGluZm9zKTsKLQkJcmV0dXJuIG1lc3NhZ2VzLnRvQXJyYXkobmV3IFZhbGlkYXRpb25NZXNzYWdlWzBdKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGZpbGUgaXMgdmFsaWQuIFRoZSBmaWxlIG1heSBoYXZlIHdhcm5pbmdzIGFzc29jaWF0ZWQgd2l0aCBpdC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLQl7Ci0JCXJldHVybiB2YWxpZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3OWZiYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjMwMDcyIC0gUHJvamVjdCBsZXZlbCBzcGVjaWZpYyB2YWxpZGF0aW9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAtIGJ1ZyAyMjYyNDUgLSBYUGF0aCAyLjAgdmFsaWRhdGlvbiBmb3IgWFNMVAotICogICAgICAgICAgICAgICAgICAgICAgICAgLSBidWcgMjU4OTM3IC0gWE1MIENhdGFsb2cgc3VwcG9ydCBmb3IgaW5jbHVkZXMvaW1wb3J0cwotICogICAgICAgICAgICAgICAgICAgICAgICAgLSBidWcgMjkwMjg2IC0gTW9kZWwgbG9hZGluZyBvZiBwYXJhbWV0ZXJzIG5vdCByZXNwZWN0aW5nIGZ1bmN0aW9ucy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gYnVnIDMwNzkyNiAtIEZpeCBmb3IgTlBFIGluIFZhbGlkYXRpb24uIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlByb2plY3RTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC52YWxpZGF0ZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGgyMEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkNhbGxUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuRnVuY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkluY2x1ZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlOwotCi0vKioKLSAqIFRoZSBYU0wgdmFsaWRhdG9yIGZvciB3b3Jrc3BhY2UgWFNMIGZpbGVzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xWYWxpZGF0b3IgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0xUMl9WZXJzaW9uID0gIjIuMCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBYU0xWYWxpZGF0b3IgaW5zdGFuY2U7Ci0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCi0JcHJpdmF0ZSBYU0xWYWxpZGF0b3IoKSB7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgdGhlIGdpdmVuIFhTTCBmaWxlLiBTYW1lIGFzCi0JICogPGNvZGU+dmFsaWRhdGUoeHNsRmlsZSxyZXBvcnQsZm9yY2VCdWlsZCk8L2NvZGU+IGV4Y2VwdCBhIG5ldyByZXBvcnQgaXMKLQkgKiBjcmVhdGVkIGFuZCByZXR1cm5lZC4KLQkgKiAKLQkgKiBAcGFyYW0geHNsRmlsZQotCSAqICAgICAgICAgICAgdGhlIFhTTCBmaWxlCi0JICogQHBhcmFtIGZvcmNlQnVpbGQKLQkgKiAgICAgICAgICAgIHRydWUgaWYgYnVpbGQgc2hvdWxkIGFsd2F5cyBiZSBmb3JjZWQKLQkgKiBAcmV0dXJuIHRoZSB2YWxpZGF0aW9uIHJlcG9ydAotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIGlmIGFueSBleGNlcHRpb24gb2NjdXJzIHdoaWxlIHZhbGlkYXRpbmcKLQkgKi8KLQlwdWJsaWMgVmFsaWRhdGlvblJlcG9ydCB2YWxpZGF0ZShJRmlsZSB4c2xGaWxlLCBib29sZWFuIGZvcmNlQnVpbGQpCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0ID0gbmV3IFhTTFZhbGlkYXRpb25SZXBvcnQoeHNsRmlsZQotCQkJCS5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOwotCQlwcm9qZWN0ID0geHNsRmlsZS5nZXRQcm9qZWN0KCk7Ci0JCXZhbGlkYXRlKHhzbEZpbGUsIHJlcG9ydCwgZm9yY2VCdWlsZCk7Ci0JCXJldHVybiByZXBvcnQ7Ci0JfQotCi0JLyoqCi0JICogVmFsaWRhdGUgdGhlIGdpdmVuIFhTTCBmaWxlIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmVwb3J0LgotCSAqIAotCSAqIEBwYXJhbSB4c2xGaWxlCi0JICogICAgICAgICAgICB0aGUgWFNMIGZpbGUKLQkgKiBAcGFyYW0gcmVwb3J0Ci0JICogICAgICAgICAgICB0aGUgcmVwb3J0IHRvIHVzZSBmb3IgcmVwb3J0aW5nIHZhbGlkYXRpb24gZXJyb3JzCi0JICogQHBhcmFtIGZvcmNlQnVpbGQKLQkgKiAgICAgICAgICAgIHRydWUgaWYgYnVpbGQgc2hvdWxkIGFsd2F5cyBiZSBmb3JjZWQKLQkgKiBAcmV0dXJuIHRoZSB2YWxpZGF0aW9uIHJlcG9ydAotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIGlmIGFueSBleGNlcHRpb24gb2NjdXJzIHdoaWxlIHZhbGlkYXRpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShJRmlsZSB4c2xGaWxlLCBYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCwKLQkJCWJvb2xlYW4gZm9yY2VCdWlsZCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlTdHlsZXNoZWV0TW9kZWwgc3R5bGVzaGVldDsKLQkJaWYgKGZvcmNlQnVpbGQpCi0JCQlzdHlsZXNoZWV0ID0gWFNMQ29yZS5nZXRJbnN0YW5jZSgpLmJ1aWxkU3R5bGVzaGVldCh4c2xGaWxlKTsKLQkJZWxzZQotCQkJc3R5bGVzaGVldCA9IFhTTENvcmUuZ2V0SW5zdGFuY2UoKS5nZXRTdHlsZXNoZWV0KHhzbEZpbGUpOwotCi0JCXByb2plY3QgPSB4c2xGaWxlLmdldFByb2plY3QoKTsKLQotCQlsb25nIHN0YXJ0OwotCQlpZiAoRGVidWcuZGVidWdYU0xNb2RlbCkgewotCQkJc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQlpZiAoc3R5bGVzaGVldCAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWNhbGN1bGF0ZVByb2JsZW1zKHN0eWxlc2hlZXQsIHJlcG9ydCk7Ci0JCQl9IGNhdGNoIChNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gZG8gbm90aGluZwotCQkJfQotCQl9Ci0JCWlmIChEZWJ1Zy5kZWJ1Z1hTTE1vZGVsKSB7Ci0JCQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dAotCQkJCQkucHJpbnRsbigiVkFMSURBVEUgIiArIHhzbEZpbGUgKyAiIGluICIgKyAoZW5kIC0gc3RhcnQpICsgIm1zIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2FsY3VsYXRlUHJvYmxlbXMoU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCwKLQkJCVhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQkvLyBjaXJjdWxhciByZWZlcmVuY2UgY2hlY2sKLQkJY2hlY2tDaXJjdWxhclJlZihzdHlsZXNoZWV0Q29tcG9zZWQsIHJlcG9ydCk7Ci0JCS8vIGluY2x1ZGUgY2hlY2tzCi0JCWNoZWNrSW5jbHVkZXNJbXBvcnRzKHN0eWxlc2hlZXRDb21wb3NlZCwgcmVwb3J0KTsKLQkJLy8gdGVtcGxhdGUgY2hlY2tzCi0JCWNoZWNrVGVtcGxhdGVzKHN0eWxlc2hlZXRDb21wb3NlZCwgcmVwb3J0KTsKLQkJU3R5bGVzaGVldCBzdHlsZXNoZWV0ID0gc3R5bGVzaGVldENvbXBvc2VkLmdldFN0eWxlc2hlZXQoKTsKLQkJCi0JCWlmIChYU0xUMl9WZXJzaW9uLmVxdWFscyhzdHlsZXNoZWV0LmdldFZlcnNpb24oKSkpIHsgCi0JCQljaGVja0Z1bmN0aW9ucyhzdHlsZXNoZWV0Q29tcG9zZWQsIHJlcG9ydCk7Ci0JCX0KLQkJLy8gY2FsbC10ZW1wbGF0ZSBjaGVja3MKLQkJY2hlY2tDYWxsVGVtcGxhdGVzKHN0eWxlc2hlZXRDb21wb3NlZCwgcmVwb3J0KTsKLQkJLy8gY2FsbC10ZW1wbGF0ZSBjaGVja3MKLQkJaWYgKGdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLlhQQVRIUykgPiBJTWFya2VyLlNFVkVSSVRZX0lORk8pCi0JCQljaGVja1hQYXRocyhzdHlsZXNoZWV0Q29tcG9zZWQuZ2V0U3R5bGVzaGVldCgpLCByZXBvcnQpOwotCi0JCS8vIFRPRE8gYSkgY2hlY2sgZ2xvYmFscyBhbmQgYikgYXBwbHktdGVtcGxhdGVzIHdoZXJlIG1vZGUgZG9lcyBub3QKLQkJLy8gZXhpc3QKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRQcmVmZXJlbmNlKFN0cmluZyBrZXkpIHsKLQkJaWYgKHByb2plY3QgPT0gbnVsbCkgewotCQkJcmV0dXJuIFhTTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkKLQkJCQkJLmdldEludChrZXkpOwotCQl9Ci0KLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBQcm9qZWN0U2NvcGUocHJvamVjdCkKLQkJCQkuZ2V0Tm9kZShYU0xDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKQotCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpKTsKLQkJYm9vbGVhbiB1c2VQcm9qZWN0ID0gcHJlZnMuZ2V0Qm9vbGVhbigKLQkJCQlYU0xDb3JlUGx1Z2luLlVTRV9QUk9KRUNUX1NFVFRJTkdTLCBmYWxzZSk7Ci0KLQkJaW50IHZhbFByZWY7Ci0JCWlmICh1c2VQcm9qZWN0KSB7Ci0JCQl2YWxQcmVmID0gcHJlZnMuZ2V0SW50KGtleSwgVmFsaWRhdGlvbk1lc3NhZ2UuV0FSTklORyk7Ci0JCX0gZWxzZSB7Ci0JCQl2YWxQcmVmID0gWFNMQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRJbnQoCi0JCQkJCWtleSk7Ci0JCX0KLQkJcmV0dXJuIHZhbFByZWY7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrWFBhdGhzKFhTTEVsZW1lbnQgeHNsRWwsIFhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KQotCQkJdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJdmFsaWRhdGVYUGF0aCh4c2xFbCwgcmVwb3J0LCAic2VsZWN0Iik7IC8vJE5PTi1OTFMtMSQKLQkJdmFsaWRhdGVYUGF0aCh4c2xFbCwgcmVwb3J0LCAidGVzdCIpOyAvLyROT04tTkxTLTEkCi0JCXZhbGlkYXRlWFBhdGgoeHNsRWwsIHJlcG9ydCwgIm1hdGNoIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChYU0xFbGVtZW50IGNoaWxkRWwgOiB4c2xFbC5nZXRDaGlsZEVsZW1lbnRzKCkpIHsKLQkJCWNoZWNrWFBhdGhzKGNoaWxkRWwsIHJlcG9ydCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdmFsaWRhdGVYUGF0aChYU0xFbGVtZW50IHhzbEVsLCBYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCwKLQkJCVN0cmluZyBhdHROYW1lKSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlYU0xBdHRyaWJ1dGUgYXR0ID0geHNsRWwuZ2V0QXR0cmlidXRlKGF0dE5hbWUpOwotCQlpZiAoYXR0ICE9IG51bGwgJiYgYXR0LmdldFZhbHVlKCkgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlTdHJpbmcgeHNsVmVyc2lvbiA9IHhzbEVsLmdldFN0eWxlc2hlZXQoKS5nZXRWZXJzaW9uKCk7Ci0JCQkJU3RyaW5nIHhwYXRoRXhwID0gYXR0LmdldFZhbHVlKCk7Ci0JCQkJaWYgKHhzbFZlcnNpb24uZXF1YWxzKFhTTFQyX1ZlcnNpb24pKSB7Ci0JCQkJCVhQYXRoMjBIZWxwZXIuY29tcGlsZSh4cGF0aEV4cCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJWFNMVFhQYXRoSGVscGVyLmNvbXBpbGUoYXR0LmdldFZhbHVlKCkpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJY3JlYXRlTWFya2VyKHJlcG9ydCwgYXR0LAotCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuWFBBVEhTKSwKLQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xKTsKLQkJCX0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBub3Qgc3VyZSB3aHkgTlBFIGlzIGJlaW5nIHRocm93biBoZXJlCi0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tDaXJjdWxhclJlZihTdHlsZXNoZWV0TW9kZWwgc3R5bGVzaGVldENvbXBvc2VkLAotCQkJWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQpIHRocm93cyBNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiB7Ci0JCWlmIChzdHlsZXNoZWV0Q29tcG9zZWQuaGFzQ2lyY3VsYXJSZWZlcmVuY2UoKSkKLQkJCWNyZWF0ZU1hcmtlcihyZXBvcnQsIHN0eWxlc2hlZXRDb21wb3NlZC5nZXRTdHlsZXNoZWV0KCksCi0JCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLkNJUkNVTEFSX1JFRiksCi0JCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8yKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tJbmNsdWRlc0ltcG9ydHMoU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCwKLQkJCVhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQkvLyBpbmNsdWRlcwotCQljaGVja0luY2x1ZGVzKHN0eWxlc2hlZXRDb21wb3NlZCwgcmVwb3J0KTsKLQkJLy8gaW1wb3J0cwotCQljaGVja0ltcG9ydHMoc3R5bGVzaGVldENvbXBvc2VkLCByZXBvcnQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0ltcG9ydHMoU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCwKLQkJCVhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlmb3IgKEluY2x1ZGUgaW5jbHVkZSA6IHN0eWxlc2hlZXRDb21wb3NlZC5nZXRTdHlsZXNoZWV0KCkuZ2V0SW1wb3J0cygpKSB7Ci0JCQlJRmlsZSBpbmNsdWRlZEZpbGUgPSBpbmNsdWRlLmdldEhyZWZBc0ZpbGUoKTsKLQkJCWlmIChpbmNsdWRlZEZpbGUgPT0gbnVsbCB8fCAhaW5jbHVkZWRGaWxlLmV4aXN0cygpKSB7IC8vIGluY2x1ZGVkCi0JCQkJCQkJCQkJCQkJCQkJCS8vIGZpbGUgZG9lcwotCQkJCQkJCQkJCQkJCQkJCQkvLyBub3QgZXhpc3QKLQkJCQlYU0xBdHRyaWJ1dGUgYXR0ID0gaW5jbHVkZS5nZXRBdHRyaWJ1dGUoImhyZWYiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChhdHQgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgYmFzZVVSSSA9IGluY2x1ZGUuZ2V0U3R5bGVzaGVldCgpLmdldEZpbGUoKS5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQkJCQotCQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpLnJlc29sdmUoYmFzZVVSSSwgIiIsIGF0dC5nZXRWYWx1ZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlpZiAocmVzb2x2ZWRVUkkgPT0gbnVsbCkgewotCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCWF0dCwKLQkJCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19JTkNMVURFKSwKLQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzQgKyBpbmNsdWRlLmdldEhyZWYoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKGluY2x1ZGVkRmlsZS5lcXVhbHMoaW5jbHVkZS5nZXRTdHlsZXNoZWV0KCkuZ2V0RmlsZSgpKSkgeyAvLyBzdHlsZXNoZWV0Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBpbmNsdWRpbmcKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIGl0c2VsZiEKLQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQlyZXBvcnQsCi0JCQkJCQlpbmNsdWRlLmdldEF0dHJpYnV0ZSgiaHJlZiIpLCBnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5DSVJDVUxBUl9SRUYpLCBNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMTApOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tJbmNsdWRlcyhTdHlsZXNoZWV0TW9kZWwgc3R5bGVzaGVldENvbXBvc2VkLAotCQkJWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQpIHRocm93cyBNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiB7Ci0JCWZvciAoSW5jbHVkZSBpbmNsdWRlIDogc3R5bGVzaGVldENvbXBvc2VkLmdldFN0eWxlc2hlZXQoKS5nZXRJbmNsdWRlcygpKSB7Ci0JCQlJRmlsZSBpbmNsdWRlZEZpbGUgPSBpbmNsdWRlLmdldEhyZWZBc0ZpbGUoKTsKLQkJCWlmIChpbmNsdWRlZEZpbGUgPT0gbnVsbCB8fCAhaW5jbHVkZWRGaWxlLmV4aXN0cygpKSB7IC8vIGluY2x1ZGVkCi0JCQkJCQkJCQkJCQkJCQkJCS8vIGZpbGUgZG9lcwotCQkJCQkJCQkJCQkJCQkJCQkvLyBub3QgZXhpc3QKLQkJCQlYU0xBdHRyaWJ1dGUgYXR0ID0gaW5jbHVkZS5nZXRBdHRyaWJ1dGUoImhyZWYiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChhdHQgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgYmFzZVVSSSA9IGluY2x1ZGUuZ2V0U3R5bGVzaGVldCgpLmdldEZpbGUoKS5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCk7Ci0JCQkJCQotCQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSBVUklSZXNvbHZlclBsdWdpbi5jcmVhdGVSZXNvbHZlcigpLnJlc29sdmUoYmFzZVVSSSwgIiIsIGF0dC5nZXRWYWx1ZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlpZiAocmVzb2x2ZWRVUkkgPT0gbnVsbCkgewotCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCWF0dCwKLQkJCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19JTkNMVURFKSwKLQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzQgKyBpbmNsdWRlLmdldEhyZWYoKSk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQkJcmVwb3J0LAotCQkJCQkJCWluY2x1ZGUsCi0JCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTkFNRV9BVFRSSUJVVEVfRU1QVFkpLAotCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8yMyk7Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChpbmNsdWRlZEZpbGUuZXF1YWxzKGluY2x1ZGUuZ2V0U3R5bGVzaGVldCgpLmdldEZpbGUoKSkpIHsgLy8gc3R5bGVzaGVldAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gaW5jbHVkaW5nCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBpdHNlbGYhCi0JCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJcmVwb3J0LAotCQkJCQkJaW5jbHVkZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSwgZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuQ0lSQ1VMQVJfUkVGKSwgTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzYpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRnVuY3Rpb25zKFN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0Q29tcG9zZWQsIFhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlmb3IgKEZ1bmN0aW9uIGZ1bmN0aW9uIDogc3R5bGVzaGVldENvbXBvc2VkLmdldFN0eWxlc2hlZXQoKS5nZXRGdW5jdGlvbnMoKSkgewotCQkJaWYgKGZ1bmN0aW9uLmdldE5hbWUoKSAhPSBudWxsKSB7Ci0JCQkJY2hlY2tQYXJhbWV0ZXJzKHJlcG9ydCwgZnVuY3Rpb24pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrVGVtcGxhdGVzKFN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0Q29tcG9zZWQsCi0JCQlYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkgdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJZm9yIChUZW1wbGF0ZSB0ZW1wbGF0ZSA6IHN0eWxlc2hlZXRDb21wb3NlZC5nZXRTdHlsZXNoZWV0KCkKLQkJCQkuZ2V0VGVtcGxhdGVzKCkpIHsKLQkJCS8vIGNoZWNrIGF0dHJpYnV0ZXMgYXJlIGNvcnJlY3QKLQkJCWlmICh0ZW1wbGF0ZS5nZXROYW1lKCkgIT0gbnVsbCkgewotCQkJCWNoZWNrUGFyYW1ldGVycyhyZXBvcnQsIHRlbXBsYXRlKTsKLQkJCX0KLQotCQkJZm9yIChUZW1wbGF0ZSBjaGVja1RlbXBsYXRlIDogc3R5bGVzaGVldENvbXBvc2VkLmdldFRlbXBsYXRlcygpKSB7Ci0JCQkJaWYgKGNoZWNrVGVtcGxhdGUgIT0gdGVtcGxhdGUgJiYgY2hlY2tUZW1wbGF0ZS5lcXVhbHModGVtcGxhdGUpKSB7Ci0JCQkJCWlmICh0ZW1wbGF0ZS5nZXRTdHlsZXNoZWV0KCkgPT0gc3R5bGVzaGVldENvbXBvc2VkCi0JCQkJCQkJLmdldFN0eWxlc2hlZXQoKQotCQkJCQkJCSYmIGNoZWNrVGVtcGxhdGUuZ2V0U3R5bGVzaGVldCgpID09IHN0eWxlc2hlZXRDb21wb3NlZAotCQkJCQkJCQkJLmdldFN0eWxlc2hlZXQoKSkgey8vIHRlbXBsYXRlcyBpbiB0aGlzCi0JCQkJCQkJCQkJCQkJCS8vIHN0eWxlc2hlZXQgY29uZmxpY3QKLQkJCQkJCQkJCQkJCQkJLy8gd2l0aCBlYWNoIG90aGVyCi0JCQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQkJdGVtcGxhdGUsCi0JCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLlRFTVBMQVRFX0NPTkZMSUNUKSwKLQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzExKTsKLQkJCQkJfSBlbHNlIGlmICh0ZW1wbGF0ZS5nZXRTdHlsZXNoZWV0KCkgPT0gc3R5bGVzaGVldENvbXBvc2VkCi0JCQkJCQkJLmdldFN0eWxlc2hlZXQoKSkgey8vIHRlbXBsYXRlIGluIGluY2x1ZGVkCi0JCQkJCQkJCQkJCQkvLyBzdHlsZXNoZWV0IGNvbmZsaWN0cyB3aXRoCi0JCQkJCQkJCQkJCQkvLyB0aGlzCi0JCQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQkJdGVtcGxhdGUsCi0JCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLlRFTVBMQVRFX0NPTkZMSUNUKSwKLQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzEyKTsKLQkJCQkJfSBlbHNlIHsvLyB0ZW1wbGF0ZXMgaW4gaW5jbHVkZWQgc3R5bGVzaGVldHMgY29uZmxpY3Qgd2l0aAotCQkJCQkJCS8vIGVhY2ggb3RoZXIKLQkJCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCQkJcmVwb3J0LAotCQkJCQkJCQl0ZW1wbGF0ZS5nZXRTdHlsZXNoZWV0KCksCi0JCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLlRFTVBMQVRFX0NPTkZMSUNUKSwKLQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzEzKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrUGFyYW1ldGVycyhYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCwgVGVtcGxhdGUgdGVtcGxhdGUpCi0JCQl0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlMaXN0PFBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3Q8UGFyYW1ldGVyPih0ZW1wbGF0ZQotCQkJCS5nZXRQYXJhbWV0ZXJzKCkpOwotCQkvLyByZXZlcnNlIHRoZSBwYXJhbWV0ZXJzIG9yZGVyIGZvciBjaGVja2luZyAtIGZvciBkdXBsaWNhdGUgcGFyYW1ldGVycwotCQkvLyB0aGUgZmlyc3Qgb25lIGlzIHZhbGlkCi0JCUNvbGxlY3Rpb25zLnJldmVyc2UocGFyYW1ldGVycyk7Ci0JCVNldDxQYXJhbWV0ZXI+IGR1cGxpY2F0ZVBhcmFtZXRlcnMgPSBuZXcgSGFzaFNldDxQYXJhbWV0ZXI+KCk7Ci0JCS8vIGNoZWNrIHBhcmFtZXRlcnMKLQkJZm9yIChQYXJhbWV0ZXIgcGFyYW0gOiBwYXJhbWV0ZXJzKSB7Ci0JCQlpZiAocGFyYW0uZ2V0TmFtZSgpID09IG51bGwpIHsvLyBuYW1lIGlzIHJlcXVpcmVkCi0JCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJcmVwb3J0LAotCQkJCQkJcGFyYW0sCi0JCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5OQU1FX0FUVFJJQlVURV9NSVNTSU5HKSwKLQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xNCk7Ci0JCQl9IGVsc2UgaWYgKHBhcmFtLmdldE5hbWUoKS50cmltKCkubGVuZ3RoKCkgPT0gMCkgey8vIG5hbWUgdmFsdWUgaXMKLQkJCQkJCQkJCQkJCQkJCQkvLyByZXF1aXJlZAotCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCXJlcG9ydCwKLQkJCQkJCXBhcmFtLAotCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTkFNRV9BVFRSSUJVVEVfRU1QVFkpLAotCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzE1KTsKLQkJCX0gZWxzZSBpZiAoZHVwbGljYXRlUGFyYW1ldGVycy5jb250YWlucyhwYXJhbSkpIHsvLyBkb24ndCByZWNoZWNrCi0JCQkJCQkJCQkJCQkJCQkJLy8gdGhlIHBhcmFtZXRlcgotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsvLyBjaGVjayBhIHBhcmFtZXRlciB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lcyBub3QgZXhpc3QKLQkJCQlmb3IgKFBhcmFtZXRlciBjaGVja1BhcmFtIDogcGFyYW1ldGVycykgewotCQkJCQlpZiAocGFyYW0gIT0gY2hlY2tQYXJhbSkgewotCQkJCQkJaWYgKHBhcmFtLmdldE5hbWUoKS5lcXVhbHMoY2hlY2tQYXJhbS5nZXROYW1lKCkpKSB7Ci0JCQkJCQkJZHVwbGljYXRlUGFyYW1ldGVycy5hZGQoY2hlY2tQYXJhbSk7Ci0JCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQkJcmVwb3J0LAotCQkJCQkJCQkJcGFyYW0sCi0JCQkJCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5EVVBMSUNBVEVfUEFSQU1FVEVSKSwKLQkJCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xNik7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tQYXJhbWV0ZXJzKFhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0LCBGdW5jdGlvbiBmdW5jdGlvbikKLQkJCXRocm93cyBNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiB7Ci0JCUxpc3Q8UGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gbmV3IEFycmF5TGlzdDxQYXJhbWV0ZXI+KGZ1bmN0aW9uCi0JCQkJLmdldFBhcmFtZXRlcnMoKSk7Ci0JCS8vIHJldmVyc2UgdGhlIHBhcmFtZXRlcnMgb3JkZXIgZm9yIGNoZWNraW5nIC0gZm9yIGR1cGxpY2F0ZSBwYXJhbWV0ZXJzCi0JCS8vIHRoZSBmaXJzdCBvbmUgaXMgdmFsaWQKLQkJQ29sbGVjdGlvbnMucmV2ZXJzZShwYXJhbWV0ZXJzKTsKLQkJU2V0PFBhcmFtZXRlcj4gZHVwbGljYXRlUGFyYW1ldGVycyA9IG5ldyBIYXNoU2V0PFBhcmFtZXRlcj4oKTsKLQkJLy8gY2hlY2sgcGFyYW1ldGVycwotCQlmb3IgKFBhcmFtZXRlciBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKLQkJCWlmIChwYXJhbS5nZXROYW1lKCkgPT0gbnVsbCkgey8vIG5hbWUgaXMgcmVxdWlyZWQKLQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQlyZXBvcnQsCi0JCQkJCQlwYXJhbSwKLQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLk5BTUVfQVRUUklCVVRFX01JU1NJTkcpLAotCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzE0KTsKLQkJCX0gZWxzZSBpZiAocGFyYW0uZ2V0TmFtZSgpLnRyaW0oKS5sZW5ndGgoKSA9PSAwKSB7Ly8gbmFtZSB2YWx1ZSBpcwotCQkJCQkJCQkJCQkJCQkJCS8vIHJlcXVpcmVkCi0JCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJcmVwb3J0LAotCQkJCQkJcGFyYW0sCi0JCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5OQU1FX0FUVFJJQlVURV9FTVBUWSksCi0JCQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMTUpOwotCQkJfSBlbHNlIGlmIChkdXBsaWNhdGVQYXJhbWV0ZXJzLmNvbnRhaW5zKHBhcmFtKSkgey8vIGRvbid0IHJlY2hlY2sKLQkJCQkJCQkJCQkJCQkJCQkvLyB0aGUgcGFyYW1ldGVyCi0JCQkJY29udGludWU7Ci0JCQl9IGVsc2Ugey8vIGNoZWNrIGEgcGFyYW1ldGVyIHdpdGggdGhlIHNhbWUgbmFtZSBkb2VzIG5vdCBleGlzdAotCQkJCWZvciAoUGFyYW1ldGVyIGNoZWNrUGFyYW0gOiBwYXJhbWV0ZXJzKSB7Ci0JCQkJCWlmIChwYXJhbSAhPSBjaGVja1BhcmFtKSB7Ci0JCQkJCQlpZiAocGFyYW0uZ2V0TmFtZSgpLmVxdWFscyhjaGVja1BhcmFtLmdldE5hbWUoKSkpIHsKLQkJCQkJCQlkdXBsaWNhdGVQYXJhbWV0ZXJzLmFkZChjaGVja1BhcmFtKTsKLQkJCQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCQlwYXJhbSwKLQkJCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLkRVUExJQ0FURV9QQVJBTUVURVIpLAotCQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzE2KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0NhbGxUZW1wbGF0ZXMoU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCwKLQkJCVhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlmb3IgKENhbGxUZW1wbGF0ZSBjYWxsZWRUZW1wbGF0ZSA6IHN0eWxlc2hlZXRDb21wb3NlZC5nZXRTdHlsZXNoZWV0KCkKLQkJCQkuZ2V0Q2FsbGVkVGVtcGxhdGVzKCkpIHsKLQkJCWlmIChjYWxsZWRUZW1wbGF0ZS5nZXROYW1lKCkgIT0gbnVsbCkgewotCQkJCS8vIGdldCB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgdGhhdCBtaWdodCBiZSBiZWluZyBjYWxsZWQgYnkgdGhpcwotCQkJCS8vIHRlbXBsYXRlIGNhbGwKLQkJCQlMaXN0PFRlbXBsYXRlPiB0ZW1wbGF0ZUxpc3QgPSBzdHlsZXNoZWV0Q29tcG9zZWQKLQkJCQkJCS5nZXRUZW1wbGF0ZXNCeU5hbWUoY2FsbGVkVGVtcGxhdGUuZ2V0TmFtZSgpKTsKLQkJCQlpZiAodGVtcGxhdGVMaXN0LnNpemUoKSA9PSAwKSB7Ci0JCQkJCU9iamVjdFtdIG1lc3NhZ2VBcmdzID0geyBjYWxsZWRUZW1wbGF0ZS5nZXROYW1lKCkgfTsKLQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQljYWxsZWRUZW1wbGF0ZS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSwgZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuQ0FMTF9URU1QTEFURVMpLCBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMTgsIG1lc3NhZ2VBcmdzKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQl9IGVsc2UgewotCQkJCQlUZW1wbGF0ZSBuYW1lZFRlbXBsYXRlID0gdGVtcGxhdGVMaXN0LmdldCgwKTsKLQkJCQkJZm9yIChQYXJhbWV0ZXIgY2FsbGVkVGVtcGxhdGVQYXJhbSA6IGNhbGxlZFRlbXBsYXRlCi0JCQkJCQkJLmdldFBhcmFtZXRlcnMoKSkgewotCQkJCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQkJCQkJZm9yIChQYXJhbWV0ZXIgbmFtZWRUZW1wbGF0ZVBhcmFtIDogbmFtZWRUZW1wbGF0ZQotCQkJCQkJCQkuZ2V0UGFyYW1ldGVycygpKSB7Ci0JCQkJCQkJaWYgKGNhbGxlZFRlbXBsYXRlUGFyYW0uZ2V0TmFtZSgpLmVxdWFscygKLQkJCQkJCQkJCW5hbWVkVGVtcGxhdGVQYXJhbS5nZXROYW1lKCkpKSB7Ci0JCQkJCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJCQkJaWYgKCFuYW1lZFRlbXBsYXRlUGFyYW0uaXNWYWx1ZSgpCi0JCQkJCQkJCQkJJiYgIWNhbGxlZFRlbXBsYXRlUGFyYW0uaXNWYWx1ZSgpKSB7Ci0JCQkJCQkJCQlPYmplY3RbXSBtZXNzYWdlQXJncyA9IHsgY2FsbGVkVGVtcGxhdGVQYXJhbQotCQkJCQkJCQkJCQkuZ2V0TmFtZSgpIH07Ci0JCQkJCQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQkJCQkJY2FsbGVkVGVtcGxhdGVQYXJhbSwKLQkJCQkJCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuRU1QVFlfUEFSQU0pLAotCQkJCQkJCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdCgKLQkJCQkJCQkJCQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMjAsCi0JCQkJCQkJCQkJCQkJbWVzc2FnZUFyZ3MpKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlicmVhazsKLQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWlmICghZm91bmQpIHsKLQkJCQkJCQlPYmplY3RbXSBtZXNzYWdlQXJncyA9IHsgY2FsbGVkVGVtcGxhdGVQYXJhbQotCQkJCQkJCQkJLmdldE5hbWUoKSB9OwotCQkJCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQkJCWNhbGxlZFRlbXBsYXRlUGFyYW0uZ2V0QXR0cmlidXRlKCJuYW1lIiksIGdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLk1JU1NJTkdfUEFSQU0pLCBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMjIsIG1lc3NhZ2VBcmdzKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAoZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19QQVJBTSkgPiBJTWFya2VyLlNFVkVSSVRZX0lORk8pIHsKLQkJCQkJCWZvciAoUGFyYW1ldGVyIG5hbWVkVGVtcGxhdGVQYXJhbSA6IG5hbWVkVGVtcGxhdGUKLQkJCQkJCQkJLmdldFBhcmFtZXRlcnMoKSkgewotCQkJCQkJCWlmICghbmFtZWRUZW1wbGF0ZVBhcmFtLmlzVmFsdWUoKSkgewotCQkJCQkJCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCQkJCQkJCWZvciAoUGFyYW1ldGVyIGNhbGxlZFRlbXBsYXRlUGFyYW0gOiBjYWxsZWRUZW1wbGF0ZQotCQkJCQkJCQkJCS5nZXRQYXJhbWV0ZXJzKCkpIHsKLQkJCQkJCQkJCWlmIChjYWxsZWRUZW1wbGF0ZVBhcmFtLmdldE5hbWUoKS5lcXVhbHMoCi0JCQkJCQkJCQkJCW5hbWVkVGVtcGxhdGVQYXJhbS5nZXROYW1lKCkpKSB7Ci0JCQkJCQkJCQkJZm91bmQgPSB0cnVlOwotCQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJCWlmICghZm91bmQpIHsKLQkJCQkJCQkJCU9iamVjdFtdIG1lc3NhZ2VBcmdzID0geyBuYW1lZFRlbXBsYXRlUGFyYW0KLQkJCQkJCQkJCQkJLmdldE5hbWUoKSB9OwotCQkJCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCQkJCWNhbGxlZFRlbXBsYXRlLAotCQkJCQkJCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NSVNTSU5HX1BBUkFNKSwKLQkJCQkJCQkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzMsCi0JCQkJCQkJCQkJCQkJbWVzc2FnZUFyZ3MpKTsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVNYXJrZXIoWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQsIFhTTE5vZGUgeHNsTm9kZSwKLQkJCWludCBzZXZlcml0eSwgU3RyaW5nIG1lc3NhZ2UpIHRocm93cyBNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiB7Ci0JCWlmIChzZXZlcml0eSA+IElNYXJrZXIuU0VWRVJJVFlfSU5GTykgewotCQkJaWYgKHJlcG9ydC5nZXRFcnJvcnMoKS5zaXplKCkgKyByZXBvcnQuZ2V0V2FybmluZ3MoKS5zaXplKCkgPiBnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NQVhfRVJST1JTKSkKLQkJCQl0aHJvdyBuZXcgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24oKTsKLQkJCXN3aXRjaCAoc2V2ZXJpdHkpIHsKLQkJCWNhc2UgSU1hcmtlci5TRVZFUklUWV9FUlJPUjoKLQkJCQlyZXBvcnQuYWRkRXJyb3IoeHNsTm9kZSwgbWVzc2FnZSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORzoKLQkJCQlyZXBvcnQuYWRkV2FybmluZyh4c2xOb2RlLCBtZXNzYWdlKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgc2luZ2xldG9uIFhTTFZhbGlkYXRvciBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gWFNMVmFsaWRhdG9yIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0xWYWxpZGF0b3IgZ2V0SW5zdGFuY2UoKSB7Ci0JCWlmIChpbnN0YW5jZSA9PSBudWxsKQotCQkJaW5zdGFuY2UgPSBuZXcgWFNMVmFsaWRhdG9yKCk7Ci0JCXJldHVybiBpbnN0YW5jZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGE5MjgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjI0Nzc3IC0gZml4IHNwYWNlcyBpbiBwYXRoIG5hbWVzIGluIFVSSXMuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZyAyMjY1NzggLSByZW1vdmUgZXh0cmFuZW91cyBAb3ZlcnJpZGUgc3RhdGVtZW50cwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB3YXMgY2F1c2luZyBjb21waWxhdGlvbiBwcm9ibGVtcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklFbmNvZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvblN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuVmFsaWRhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU7Ci0KLS8qKgotICogVGhlIFhTTCB2YWxpZGF0b3IgZXh0ZW5kcyB0aGUgWE1MIDxjb2RlPkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yPC9jb2RlPi4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yIGV4dGVuZHMgQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3IKLXsKLQkvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkvLyBCVUlMRCBWQUxJREFUSU9OIE1FVEhPRFMKLQkvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCXByaXZhdGUgYm9vbGVhbiBhc1lvdVR5cGVWYWxpZGF0aW9uOwotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgY2xlYW4oSVByb2plY3QgcHJvamVjdCwgVmFsaWRhdGlvblN0YXRlIHN0YXRlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlzdXBlci5jbGVhbihwcm9qZWN0LCBzdGF0ZSwgbW9uaXRvcik7Ci0JCVhTTENvcmUuZ2V0SW5zdGFuY2UoKS5jbGVhbihwcm9qZWN0LG1vbml0b3IpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZShJUmVzb3VyY2UgcmVzb3VyY2UsIGludCBraW5kLCBWYWxpZGF0aW9uU3RhdGUgc3RhdGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCVZhbGlkYXRpb25SZXN1bHQgcmVzID0gc3VwZXIudmFsaWRhdGUocmVzb3VyY2UsIGtpbmQsIHN0YXRlLCBtb25pdG9yKTsKLQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJewotCQkJU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXQgPSBYU0xDb3JlLmdldEluc3RhbmNlKCkuZ2V0U3R5bGVzaGVldCgoSUZpbGUpIHJlc291cmNlKTsKLQkJCUlGaWxlW10gZGVwZW5kZW5jaWVzID0gc3R5bGVzaGVldC5nZXRGaWxlRGVwZW5kZW5jaWVzKCkudG9BcnJheShuZXcgSUZpbGVbMF0pOwotCQkJcmVzLnNldERlcGVuZHNPbihkZXBlbmRlbmNpZXMpOwotCQl9Ci0JCXJldHVybiByZXM7Ci0JfSAKLQotCQotCS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCS8vIEFTIFlPVSBUWVBFIFZBTElEQVRJT04gTUVUSE9EUwotCS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0JQE92ZXJyaWRlCi0JcHVibGljIElTdGF0dXMgdmFsaWRhdGVJbkpvYihJVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCwgSVJlcG9ydGVyIHJlcG9ydGVyKSB0aHJvd3MgVmFsaWRhdGlvbkV4Y2VwdGlvbgotCXsKLQkJYXNZb3VUeXBlVmFsaWRhdGlvbiA9IHRydWU7Ci0JCXJldHVybiBzdXBlci52YWxpZGF0ZUluSm9iKGNvbnRleHQsIHJlcG9ydGVyKTsKLQl9Ci0KLQkvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkvLyBDT01NT04gTUVUSE9EUwotCS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0JQE92ZXJyaWRlCi0JcHVibGljIFZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoZmluYWwgU3RyaW5nIHVyaSwgSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0sIE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCkKLQl7Ci0JCVZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gbmV3IFhTTFZhbGlkYXRpb25SZXBvcnQodXJpKTsKLQkJCi0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgZW5jVXJpID0gVVJJRW5jb2Rlci5lbmNvZGUodXJpKTsKLQkJCUlGaWxlW10gZmlsZXMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRGaWxlc0ZvckxvY2F0aW9uVVJJKG5ldyBVUkkoZW5jVXJpKSk7Ci0JCQlpZiAoZmlsZXMubGVuZ3RoID4gMCkKLQkJCXsKLQkJCQlJRmlsZSB4c2xGaWxlID0gZmlsZXNbMF07Ci0JCQkJdmFscmVwb3J0ID0gWFNMVmFsaWRhdG9yLmdldEluc3RhbmNlKCkudmFsaWRhdGUoeHNsRmlsZSxhc1lvdVR5cGVWYWxpZGF0aW9uKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTENvcmVQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTENvcmVQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCXJldHVybiB2YWxyZXBvcnQ7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgYWRkSW5mb1RvTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSwgSU1lc3NhZ2UgbWVzc2FnZSkKLQl7Ci0JCVhTTFZhbGlkYXRpb25NZXNzYWdlIG1zZyA9IChYU0xWYWxpZGF0aW9uTWVzc2FnZSkgdmFsaWRhdGlvbk1lc3NhZ2U7Ci0JCVhTTE5vZGUgbm9kZSA9IG1zZy5nZXROb2RlKCk7Ci0JCS8vIHNldCB0aGlzIGhlcmUgYXMgaXQgZ2V0cyBzZXQgdG8gdGhlIHdyb25nIHZhbHVlIGJ5IHRoZSBzdXBlcmNsYXNzCi0JCW1lc3NhZ2Uuc2V0U2V2ZXJpdHkobXNnLmdldFJlYWxTZXZlcml0eSgpKTsKLQkJLy8gY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yCi0JCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gWFNMTm9kZS5BVFRSSUJVVEVfTk9ERSkKLQkJewotCQkJbWVzc2FnZS5zZXRBdHRyaWJ1dGUoIkVSUk9SX1NJREUiLCAiRVJST1JfU0lERV9SSUdIVCIpOyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQkJCW1lc3NhZ2Uuc2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFLCBJbnRlZ2VyLnZhbHVlT2YodmFsaWRhdGlvbk1lc3NhZ2UuZ2V0Q29sdW1uTnVtYmVyKCkpKTsKLQkJCW1lc3NhZ2Uuc2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUsICJBVFRSSUJVVEVfVkFMVUUiKTsgLy8gd2hldGhlciB0byBzcXVpZ2dsZSB0aGUgZWxlbWVudCwgYXR0cmlidXRlIG9yIHRleHQgLy8kTk9OLU5MUy0xJAotCQkJbWVzc2FnZS5zZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUsICgoWFNMQXR0cmlidXRlKSBub2RlKS5nZXROYW1lKCkpOwotCQl9Ci0JCWVsc2UgaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBYU0xOb2RlLkVMRU1FTlRfTk9ERSkKLQkJewotCQkJbWVzc2FnZS5zZXRBdHRyaWJ1dGUoIkVSUk9SX1NJREUiLCAiRVJST1JfU0lERV9SSUdIVCIpOyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQkJCW1lc3NhZ2Uuc2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFLCBJbnRlZ2VyLnZhbHVlT2YodmFsaWRhdGlvbk1lc3NhZ2UuZ2V0Q29sdW1uTnVtYmVyKCkpKTsKLQkJCW1lc3NhZ2Uuc2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUsICJTVEFSVF9UQUciKTsgLy8gd2hldGhlciB0byBzcXVpZ2dsZSB0aGUgZWxlbWVudCwgYXR0cmlidXRlIG9yIHRleHQgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjdmODRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcjIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSVNjaGVkdWxpbmdSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLkFic3RyYWN0VmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvblN0YXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRvck1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5WYWxpZGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvckpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDsKLQotLyoqCi0gKiBWYWxpZGF0b3IgZm9yIGJvdGggYnVpbGQgdmFsaWRhdGlvbiAoQWJzdHJhY3RWYWxpZGF0b3IpIGFuZCBhcy15b3UtdHlwZSB2YWxpZGF0aW9uIChJVmFsaWRhdG9ySm9iKS4KLSAqIAotICogQGF1dGhvciBEb3VnCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3IyIGV4dGVuZHMgQWJzdHJhY3RWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdG9ySm9iCi17Ci0JLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gQlVJTEQgVkFMSURBVElPTiBNRVRIT0RTCi0JLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjbGVhbihJUHJvamVjdCBwcm9qZWN0LCBWYWxpZGF0aW9uU3RhdGUgc3RhdGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCVhTTENvcmUuZ2V0SW5zdGFuY2UoKS5jbGVhbihwcm9qZWN0LCBtb25pdG9yKTsKLQkJc3VwZXIuY2xlYW4ocHJvamVjdCwgc3RhdGUsIG1vbml0b3IpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBWYWxpZGF0aW9uUmVzdWx0IHZhbGlkYXRlKElSZXNvdXJjZSByZXNvdXJjZSwgaW50IGtpbmQsIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJLyoKLQkJICogU3RyaW5nIHM7IHN3aXRjaChraW5kKSB7IGNhc2UgSVJlc291cmNlRGVsdGEuQURERUQ6IHMgPSAiYWRkZWQiOyBicmVhazsgY2FzZSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEOiBzID0gIkNIQU5HRUQiOyBicmVhazsgY2FzZSBJUmVzb3VyY2VEZWx0YS5DT05URU5UOiBzID0gIkNPTlRFTlQiOyBicmVhazsgY2FzZQotCQkgKiBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEOiBzID0gIlJFTU9WRUQiOyBicmVhazsgZGVmYXVsdDogcyA9ICJvdGhlciI7IH0gU3lzdGVtLm91dC5wcmludGxuKHMpOwotCQkgKi8KLQkJVmFsaWRhdGlvblJlc3VsdCByZXN1bHQgPSBuZXcgVmFsaWRhdGlvblJlc3VsdCgpOwotCQlpZiAocmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKQotCQl7Ci0JCQlJRmlsZSBmaWxlID0gKElGaWxlKXJlc291cmNlOwotCQkJVmFsaWRhdGlvblJlcG9ydCByZXBvcnQgPSBkb1ZhbGlkYXRpb24oZmlsZSwga2luZCwgc3RhdGUsIG1vbml0b3IpOwotCQkJU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXQgPSBYU0xDb3JlLmdldEluc3RhbmNlKCkuZ2V0U3R5bGVzaGVldChmaWxlKTsKLQkJCUlGaWxlW10gZGVwZW5kZW5jaWVzID0gc3R5bGVzaGVldC5nZXRGaWxlRGVwZW5kZW5jaWVzKCkudG9BcnJheShuZXcgSUZpbGVbMF0pOwotCQkJcmVzdWx0LnNldERlcGVuZHNPbihkZXBlbmRlbmNpZXMpOwotCQkJCi0JCQlmb3IgKFZhbGlkYXRpb25NZXNzYWdlIG1lc3NhZ2UgOiByZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkpCi0JCQl7Ci0JCQkJWFNMVmFsaWRhdGlvbk1lc3NhZ2UgeHNsTXNnID0gKFhTTFZhbGlkYXRpb25NZXNzYWdlKW1lc3NhZ2U7Ci0JCQkJVmFsaWRhdG9yTWVzc2FnZSBtc2cgPSBWYWxpZGF0b3JNZXNzYWdlLmNyZWF0ZShtZXNzYWdlLmdldE1lc3NhZ2UoKSwgcmVzb3VyY2UpOwotCQkJCW1zZy5zZXRBdHRyaWJ1dGUoImxpbmVOdW1iZXIiLCB4c2xNc2cuZ2V0TGluZU51bWJlcigpKTsgLy8kTk9OLU5MUy0xJAotCQkJCW1zZy5zZXRBdHRyaWJ1dGUoInNldmVyaXR5IiwgeHNsTXNnLmdldFNldmVyaXR5KCkpOyAvLyROT04tTkxTLTEkCi0JCQkJcmVzdWx0LmFkZChtc2cpOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBWYWxpZGF0aW9uUmVwb3J0IGRvVmFsaWRhdGlvbihJRmlsZSBmaWxlLCBpbnQga2luZCwgVmFsaWRhdGlvblN0YXRlIHN0YXRlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQl2YWxyZXBvcnQgPSBYU0xWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKS52YWxpZGF0ZShmaWxlLHRydWUpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTENvcmVQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCXJldHVybiB2YWxyZXBvcnQ7Ci0JfQotCi0JLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gQVMgWU9VIFRZUEUgVkFMSURBVElPTiBNRVRIT0RTCi0JLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQlwdWJsaWMgSVNjaGVkdWxpbmdSdWxlIGdldFNjaGVkdWxpbmdSdWxlKElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIpCi0JewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlSW5Kb2IoSVZhbGlkYXRpb25Db250ZXh0IGhlbHBlciwgSVJlcG9ydGVyIHJlcG9ydGVyKSB0aHJvd3MgVmFsaWRhdGlvbkV4Y2VwdGlvbgotCXsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjbGVhbnVwKElSZXBvcnRlciByZXBvcnRlcikKLQl7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotCX0KLQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIsIElSZXBvcnRlciByZXBvcnRlcikgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLQl7Ci0JCXZhbGlkYXRlSW5Kb2IoaGVscGVyLHJlcG9ydGVyKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0xWYWxpZGF0aW9uUmVwb3J0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0xWYWxpZGF0aW9uUmVwb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNDUxMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNMVmFsaWRhdGlvblJlcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gcmVmYWN0b3JlZCB0byBpdCdzIG93biBjbGFzcyBpbnN0ZWFkIG9mIGFuIGlubGluZSBvdmVycmlkZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLQotcHVibGljIGNsYXNzIFhTTFZhbGlkYXRpb25SZXBvcnQgaW1wbGVtZW50cyBWYWxpZGF0aW9uUmVwb3J0IHsKLQlwcml2YXRlIFN0cmluZyB1cmk7Ci0KLQlwdWJsaWMgWFNMVmFsaWRhdGlvblJlcG9ydChTdHJpbmcgdXJpKSB7Ci0JCXRoaXMudXJpID0gdXJpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RmlsZVVSSSgpIHsKLQkJcmV0dXJuIHVyaTsKLQl9Ci0KLQlwdWJsaWMgSGFzaE1hcDw/LCA/PiBnZXROZXN0ZWRNZXNzYWdlcygpIHsKLQkJcmV0dXJuIG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOwotCX0KLQotCXB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZVtdIGdldFZhbGlkYXRpb25NZXNzYWdlcygpIHsKLQkJcmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnZVswXTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3hpbmNsdWRlL1hJbmNsdWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC94aW5jbHVkZS9YSW5jbHVkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkODNjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3hpbmNsdWRlL1hJbmNsdWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSogQ29weXJpZ2h0IChjKSAyMDA4IExhcnMgVm9nZWwgDQotKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0qIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbHYxMC5odG1sDQotKg0KLSogQ29udHJpYnV0b3JzOg0KLSogTGFycyBWb2dlbCAtIExhcnMuVm9nZWxAZ21haWwuY29tIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotKiBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDIxNzkxOSAtIHJlbmFtZWQgdG8gWEluY2x1ZGVyIGZyb20gTXlYSW5jbHVkZXINCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZmVhdHVyZSBjYWxsIHRvIG1ha2Ugc3VyZSB3ZSBnZXQNCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gWEluY2x1ZGUgYXdhcmUgY29uZmlndXJhdGlvbi4gIEFsc28NCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBEb2Nib29rIERURCBoYXJkIGNvZGluZy4NCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlOw0KLQ0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsNCi0NCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOw0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ow0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOw0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsNCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOw0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7DQotDQotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KLQ0KLS8qKg0KLSAqIFhJbmNsdWRlciB3aWxsIHJlYWQgYW4gWE1MIGZpbGUsIHRoYXQgaGFzIGVsZW1lbnRzIGZyb20gdGhlIFhJbmNsdWRlDQotICogbmFtZXNwYWNlIGFuZCBmb2xsb3dzIHRoZSBXM0MgWEluY2x1ZGUgc3BlY2lmaWNhdGlvbiAoaHR0cDovL3d3dy53My5vcmcvVFIveGluY2x1ZGUvKS4NCi0gKiBJdCB3aWxsIG91dHB1dCBhIG1lcmdlZCBmaWxlLg0KLSAqIEBhdXRob3IgTGFycyBWb2dlbA0KLSAqDQotICovDQotcHVibGljIGNsYXNzIFhJbmNsdWRlciB7DQotDQotCS8qKg0KLQkgKiBleHRyYWNYTUxGaWxlIG1lcmdlcyB0aGUgZmlsZXMgcmVmZXJlbmNlZCBieSB4aW5jbHVkZSBpbmNsdWRlIGVsZW1lbnRzLg0KLQkgKiBAcGFyYW0gaW4gIFRoZSBmdWxsIHBhdGggdG8gdGhlIGlucHV0IFhNTCBmaWxlDQotCSAqIEBwYXJhbSBvdXQgVGhlIGZ1bGwgcGF0aCB0byB0aGUgbWVyZ2VkIFhNTCBmaWxlDQotCSAqIEB0aHJvd3MgRXhjZXB0aW9uDQotCSAqLw0KLQlwdWJsaWMgdm9pZCBleHRyYWN0WE1MRmlsZShTdHJpbmcgaW4sIFN0cmluZyBvdXQpIHRocm93cyBFeGNlcHRpb24gew0KLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOw0KLQkJRmlsZSBmaWxlOw0KLQ0KLQkJZmlsZSA9IG5ldyBGaWxlKGluKTsNCi0JCWZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7DQotCQlmaWxlLmxhc3RNb2RpZmllZCgpOw0KLQkJDQotCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRiZiA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsNCi0JCQ0KLQkJLy8gTWFrZSBzdXJlIHdlIGFyZSBnZXR0aW5nIGEgY29uZmlndXJhdGlvbiB0aGF0IGlzIFhJbmNsdWRlIEF3YXJlDQotCQlkYmYuc2V0QXR0cmlidXRlKCJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMveGluY2x1ZGUiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJA0KLQkJZGJmLnNldFhJbmNsdWRlQXdhcmUodHJ1ZSk7DQotCQlkYmYuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7DQotDQotCQkNCi0JCURvY3VtZW50QnVpbGRlciBkb20gPSBkYmYubmV3RG9jdW1lbnRCdWlsZGVyKCk7DQotCQlkb2N1bWVudCA9IGRvbS5wYXJzZShmaWxlKTsNCi0JCQ0KLQkJLy8gLS0tLSBVc2UgYSBYU0xUIHRyYW5zZm9ybWVyIGZvciB3cml0aW5nIHRoZSBuZXcgWE1MIGZpbGUgLS0tLQ0KLQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKQ0KLQkJCQkubmV3VHJhbnNmb3JtZXIoKTsNCi0JCQ0KLQkJRE9NU291cmNlIHNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpOw0KLQkJRmlsZU91dHB1dFN0cmVhbSBvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG5ldyBGaWxlKG91dCkpOw0KLQkJU3RyZWFtUmVzdWx0IHJlc3VsdCA9IG5ldyBTdHJlYW1SZXN1bHQob3MpOw0KLQkJdHJhbnNmb3JtZXIudHJhbnNmb3JtKHNvdXJjZSwgcmVzdWx0KTsNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0NhbGxUZW1wbGF0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9DYWxsVGVtcGxhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU3NTA5My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0NhbGxUZW1wbGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+eHNsOmNhbGwtdGVtcGxhdGU8L2NvZGU+IG1vZGVsIGVsZW1lbnQuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIENhbGxUZW1wbGF0ZSBleHRlbmRzIFhTTEVsZW1lbnQKLXsKLQlmaW5hbCBMaXN0PFBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3Q8UGFyYW1ldGVyPigpOwotCQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIENhbGxUZW1wbGF0ZShTdHlsZXNoZWV0IHN0eWxlc2hlZXQpCi0JewotCQlzdXBlcihzdHlsZXNoZWV0KTsKLQl9Ci0JCi0JLyoqCi0JICogQWRkIGEgcGFyYW1ldGVyIHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHBhcmFtZXRlciB0aGUgcGFyYW1ldGVyIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQotCXsKLQkJcGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0ZW1wbGF0ZSBuYW1lLCBvciBudWxsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzLgotCSAqIAotCSAqIEByZXR1cm4gYSBsaXN0IG9mIHBhcmFtZXRlcnMKLQkgKi8KLQlwdWJsaWMgTGlzdDxQYXJhbWV0ZXI+IGdldFBhcmFtZXRlcnMoKQotCXsKLQkJcmV0dXJuIHBhcmFtZXRlcnM7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBUeXBlIGdldE1vZGVsVHlwZSgpCi0JewotCQlyZXR1cm4gVHlwZS5DQUxMX1RFTVBMQVRFOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9GdW5jdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9GdW5jdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzEyYWJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvRnVuY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIEZ1bmN0aW9uIGV4dGVuZHMgWFNMRWxlbWVudCB7Ci0KLQlmaW5hbCBMaXN0PFZhcmlhYmxlPiB2YXJpYWJsZXMgPSBuZXcgQXJyYXlMaXN0PFZhcmlhYmxlPigpOwotCWZpbmFsIExpc3Q8UGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gbmV3IEFycmF5TGlzdDxQYXJhbWV0ZXI+KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoaXMgZnVuY3Rpb24uCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBMaXN0PFZhcmlhYmxlPiBnZXRWYXJpYWJsZXMoKSB7Ci0JCXJldHVybiB2YXJpYWJsZXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhpcyBmdW5jdGlvbi4KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIExpc3Q8UGFyYW1ldGVyPiBnZXRQYXJhbWV0ZXJzKCkgewotCQlyZXR1cm4gcGFyYW1ldGVyczsKLQl9Ci0KLQlwdWJsaWMgRnVuY3Rpb24oU3R5bGVzaGVldCBzdHlsZXNoZWV0KSB7Ci0JCXN1cGVyKHN0eWxlc2hlZXQpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBUeXBlIGdldE1vZGVsVHlwZSgpIHsKLQkJcmV0dXJuIFR5cGUuRlVOQ1RJT047Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgZnVuY3Rpb24gbmFtZSwgb3IgbnVsbAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYSBwYXJhbWV0ZXIgdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gcGFyYW1ldGVyCi0JICogICAgICAgICAgICB0aGUgcGFyYW1ldGVyIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKSB7Ci0JCXBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgdmFyaWFibGUgdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICB0aGUgdmFyaWFibGUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkVmFyaWFibGUoVmFyaWFibGUgdmFyKSB7Ci0JCXZhcmlhYmxlcy5hZGQodmFyKTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRPdmVyUmlkZVZhbHVlKCkgewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoIm92ZXJyaWRlIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRBc1ZhbHVlKCkgewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoImFzIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0ltcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9JbXBvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2OWRkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0ltcG9ydC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi0vKioKLSAqIFRoZSA8Y29kZT54c2w6aW1wb3J0PC9jb2RlPiBtb2RlbCBlbGVtZW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBJbmNsdWRlCi17Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGJlbG9uZ3MgdG8KLQkgKi8KLQlwdWJsaWMgSW1wb3J0KFN0eWxlc2hlZXQgc3R5bGVzaGVldCkKLQl7Ci0JCXN1cGVyKHN0eWxlc2hlZXQsSU1QT1JUKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0luY2x1ZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvSW5jbHVkZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWQwYzhlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvSW5jbHVkZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci0KLS8qKgotICogVGhlIDxjb2RlPnhzbDppbmNsdWRlPC9jb2RlPiBtb2RlbCBlbGVtZW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBJbmNsdWRlIGV4dGVuZHMgWFNMRWxlbWVudAotewotCS8qKgotCSAqIENvbnN0YW50IGluZGljYXRpbmcgdGhhdCB0aGlzIGlzIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ0xVREUgPSAxOwotCQotCS8qKgotCSAqIENvbnN0YW50IGluZGljYXRpbmcgdGhhdCB0aGlzIGlzIGFuIDxjb2RlPkltcG9ydDwvY29kZT4uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUID0gMjsKLQkKLQlwcml2YXRlIGZpbmFsIGludCB0eXBlOwotCQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIEluY2x1ZGUoU3R5bGVzaGVldCBzdHlsZXNoZWV0KQotCXsKLQkJdGhpcyhzdHlsZXNoZWV0LElOQ0xVREUpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLCBzcGVjaWZ5aW5nIHdoZXRoZXIgYW4gPGNvZGU+SW5jbHVkZTwvY29kZT4gb3IgYW4gPGNvZGU+SW1wb3J0PC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVzaGVldCB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0bwotCSAqIEBwYXJhbSB0eXBlIG9uZSBvZiB0aGUgY29uc3RhbnRzIDxjb2RlPklOQ0xVREU8L2NvZGU+IG9yIDxjb2RlPklNUE9SVDwvY29kZT4KLQkgKi8KLQlwcm90ZWN0ZWQgSW5jbHVkZShTdHlsZXNoZWV0IHN0eWxlc2hlZXQsIGludCB0eXBlKQotCXsKLQkJc3VwZXIoc3R5bGVzaGVldCk7Ci0JCXRoaXMudHlwZSA9IHR5cGU7Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgdHlwZSBvZiBpbmNsdWRlLCB3aGV0aGVyIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+IG9yIGFuIDxjb2RlPkltcG9ydDwvY29kZT4uCi0JICogCi0JICogQHJldHVybiBvbmUgb2YgdGhlIGNvbnN0YW50cyA8Y29kZT5JTkNMVURFPC9jb2RlPiBvciA8Y29kZT5JTVBPUlQ8L2NvZGU+Ci0JICovCi0JcHVibGljIGludCBnZXRJbmNsdWRlVHlwZSgpCi0JewotCQlyZXR1cm4gdHlwZTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+aHJlZjwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgPGNvZGU+aHJlZjwvY29kZT4gdmFsdWUsIG9yIG51bGwKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEhyZWYoKSB7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgiaHJlZiIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCi0JLyoqCi0JICogR2V0cyB0aGUgaW5jbHVkZWQgZmlsZSBhcyBhIHNvdXJjZSBmaWxlLCBpZiBwb3NzaWJsZSAocmV0dXJuZWQgZmlsZSBtYXkgYmUgbnVsbCBhbmQgbmVlZCBub3QgZXhpc3QpLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGluY2x1ZGVkIGZpbGUsIG9yIG51bGwKLQkgKi8KLQlwdWJsaWMgSUZpbGUgZ2V0SHJlZkFzRmlsZSgpCi0JewotCQlyZXR1cm4gWFNMQ29yZS5yZXNvbHZlRmlsZShnZXRTdHlsZXNoZWV0KCkuZ2V0RmlsZSgpLCBnZXRIcmVmKCkpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBUeXBlIGdldE1vZGVsVHlwZSgpCi0JewotCQlyZXR1cm4gVHlwZS5JTkNMVURFOwotCX0gCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1BhcmFtZXRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9QYXJhbWV0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk2ODM1ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1BhcmFtZXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDY1MDAgLSBBZGQgUGFyYW10ZXJzIHRvIGdsb2JhbCB2YXJpYWJsZXMgdHlwZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLS8qKgotICogVGhlIDxjb2RlPnhzbDpwYXJhbWV0ZXI8L2NvZGU+IG9yIDxjb2RlPnhzbDp3aXRoLXBhcmFtPC9jb2RlPiBtb2RlbCBlbGVtZW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXIgZXh0ZW5kcyBWYXJpYWJsZQotewotCXByaXZhdGUgYm9vbGVhbiB2YWx1ZVNldDsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIFBhcmFtZXRlcihTdHlsZXNoZWV0IHN0eWxlc2hlZXQpCi0JewotCQlzdXBlcihzdHlsZXNoZWV0KTsKLQl9Ci0JCi0JLyoqCi0JICogU2V0IHdoZXRoZXIgdGhpcyBoYXMgYSB2YWx1ZS4KLQkgKiAKLQkgKiBAcGFyYW0gdmFsdWVTZXQgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBoYXMgYSB2YWx1ZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZhbHVlKGJvb2xlYW4gdmFsdWVTZXQpCi0JewotCQl0aGlzLnZhbHVlU2V0ID0gdmFsdWVTZXQ7Ci0JfQotCi0JLyoqCi0JICogR2V0IHdoZXRoZXIgdGhpcyBoYXMgYSB2YWx1ZS4KLQkgKiAKLQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaGFzIGEgdmFsdWUKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbHVlKCkKLQl7Ci0JCWlmICh2YWx1ZVNldCkKLQkJCXJldHVybiB0cnVlOwotCQlpZiAoZ2V0QXR0cmlidXRlVmFsdWUoInNlbGVjdCIpICE9IG51bGwpIC8vJE5PTi1OTFMtMSQKLQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7IAotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKSB7Ci0JCXJldHVybiBUeXBlLlBBUkFNOwotCX0KLQkKLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRBcygpIHsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJhcyIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9TdHlsZXNoZWV0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1N0eWxlc2hlZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUzNmFjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1N0eWxlc2hlZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NjUwMCAtIGFkZGVkIGFiaWxpdHkgdG8gZ2V0IHBhcmFtZXRlcnMgaW4gZ2xvYmFsIHZhcmlhYmxlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci0KLS8qKgotICogVGhlIDxjb2RlPnhzbDpzdHlsZXNoZWV0PC9jb2RlPiBtb2RlbCBlbGVtZW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBTdHlsZXNoZWV0IGV4dGVuZHMgWFNMRWxlbWVudCB7Ci0JZmluYWwgSUZpbGUgZmlsZTsKLQlmaW5hbCBMaXN0PEluY2x1ZGU+IGluY2x1ZGVzID0gbmV3IEFycmF5TGlzdDxJbmNsdWRlPigpOwotCWZpbmFsIExpc3Q8SW1wb3J0PiBpbXBvcnRzID0gbmV3IEFycmF5TGlzdDxJbXBvcnQ+KCk7Ci0JZmluYWwgTGlzdDxUZW1wbGF0ZT4gdGVtcGxhdGVzID0gbmV3IEFycmF5TGlzdDxUZW1wbGF0ZT4oKTsKLQlmaW5hbCBMaXN0PENhbGxUZW1wbGF0ZT4gY2FsbGVkVGVtcGxhdGVzID0gbmV3IEFycmF5TGlzdDxDYWxsVGVtcGxhdGU+KCk7Ci0JZmluYWwgTGlzdDxWYXJpYWJsZT4gZ2xvYmFsVmFyaWFibGVzID0gbmV3IEFycmF5TGlzdDxWYXJpYWJsZT4oKTsKLQlmaW5hbCBMaXN0PFhTTEVsZW1lbnQ+IGVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxYU0xFbGVtZW50PigpOwotCWZpbmFsIExpc3Q8RnVuY3Rpb24+IGZ1bmN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8RnVuY3Rpb24+KCk7Ci0KLQlTdHJpbmcgdmVyc2lvbjsKLQotCS8qKgotCSAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlCi0JICogICAgICAgICAgICB0aGUgZmlsZSB0aGF0IHRoaXMgcmVwcmVzZW50cwotCSAqLwotCXB1YmxpYyBTdHlsZXNoZWV0KElGaWxlIGZpbGUpIHsKLQkJc3VwZXIobnVsbCk7Ci0JCXRoaXMuZmlsZSA9IGZpbGU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0eWxlc2hlZXQgZ2V0U3R5bGVzaGVldCgpIHsKLQkJcmV0dXJuIHRoaXM7Ci0JfQotCi0JLyoqCi0JICogQWRkIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+IHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIGluY2x1ZGUKLQkgKiAgICAgICAgICAgIHRoZSBpbmNsdWRlIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZEluY2x1ZGUoSW5jbHVkZSBpbmNsdWRlKSB7Ci0JCWluY2x1ZGVzLmFkZChpbmNsdWRlKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYW4gPGNvZGU+SW1wb3J0PC9jb2RlPiB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBpbmNsdWRlCi0JICogICAgICAgICAgICB0aGUgaW1wb3J0IHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZEltcG9ydChJbXBvcnQgaW5jbHVkZSkgewotCQlpbXBvcnRzLmFkZChpbmNsdWRlKTsKLQl9Ci0KLQkKLQkvKioKLQkgKiBBZGQgYSA8Y29kZT5UZW1wbGF0ZTwvY29kZT4gdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdGVtcGxhdGUKLQkgKiAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZW1wbGF0ZShUZW1wbGF0ZSB0ZW1wbGF0ZSkgewotCQl0ZW1wbGF0ZXMuYWRkKHRlbXBsYXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYSA8Y29kZT5DYWxsVGVtcGxhdGU8L2NvZGU+IHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHRlbXBsYXRlCi0JICogICAgICAgICAgICB0aGUgdGVtcGxhdGUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkQ2FsbGVkVGVtcGxhdGUoQ2FsbFRlbXBsYXRlIHRlbXBsYXRlKSB7Ci0JCWNhbGxlZFRlbXBsYXRlcy5hZGQodGVtcGxhdGUpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgZmlsZSB0aGF0IHRoaXMgcmVwcmVzZW50cy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBmaWxlIHRoYXQgdGhpcyByZXByZXNlbnRzCi0JICovCi0JcHVibGljIElGaWxlIGdldEZpbGUoKSB7Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBpbmNsdWRlcyBmb3IgdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGluY2x1ZGVzCi0JICovCi0JcHVibGljIExpc3Q8SW5jbHVkZT4gZ2V0SW5jbHVkZXMoKSB7Ci0JCXJldHVybiBpbmNsdWRlczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgaW1wb3J0cyBmb3IgdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGltcG9ydHMKLQkgKi8KLQlwdWJsaWMgTGlzdDxJbXBvcnQ+IGdldEltcG9ydHMoKSB7Ci0JCXJldHVybiBpbXBvcnRzOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMKLQkgKi8KLQlwdWJsaWMgTGlzdDxUZW1wbGF0ZT4gZ2V0VGVtcGxhdGVzKCkgewotCQlyZXR1cm4gdGVtcGxhdGVzOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBjYWxsZWQgdGVtcGxhdGVzIGZvciB0aGlzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgY2FsbGVkIHRlbXBsYXRlcwotCSAqLwotCXB1YmxpYyBMaXN0PENhbGxUZW1wbGF0ZT4gZ2V0Q2FsbGVkVGVtcGxhdGVzKCkgewotCQlyZXR1cm4gY2FsbGVkVGVtcGxhdGVzOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGdsb2JhbCB2YXJpYWJsZSB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSB2YXIKLQkgKiAgICAgICAgICAgIHRoZSB2YXJpYWJsZSB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRHbG9iYWxWYXJpYWJsZShWYXJpYWJsZSB2YXIpIHsKLQkJZ2xvYmFsVmFyaWFibGVzLmFkZCh2YXIpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBUeXBlIGdldE1vZGVsVHlwZSgpIHsKLQkJcmV0dXJuIFR5cGUuU1RZTEVTSEVFVDsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHN0eWxlc2hlZXQgdmVyc2lvbi4KLQkgKiAKLQkgKiBAcGFyYW0gdmVyc2lvbgotCSAqICAgICAgICAgICAgdGhlIHZlcnNpb24gdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0VmVyc2lvbihTdHJpbmcgdmVyc2lvbikgewotCQl0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgc3R5bGVzaGVldCB2ZXJzaW9uLgotCSAqIAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24oKSB7Ci0JCXJldHVybiB2ZXJzaW9uOwotCX0KLQotCXB1YmxpYyBMaXN0PFZhcmlhYmxlPiBnZXRHbG9iYWxWYXJpYWJsZXMoKSB7Ci0JCXJldHVybiBnbG9iYWxWYXJpYWJsZXM7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBmb3IgdGhpcyBzdHlsZXNoZWV0LgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgY2FsbGVkIHRlbXBsYXRlcwotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgTGlzdDxGdW5jdGlvbj4gZ2V0RnVuY3Rpb25zKCkgewotCQlyZXR1cm4gZnVuY3Rpb25zOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gZnVuY3Rpb24gCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZEZ1bmN0aW9uKEZ1bmN0aW9uIGZ1bmN0aW9uKSB7Ci0JCWZ1bmN0aW9ucy5hZGQoZnVuY3Rpb24pOwotCX0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9TdHlsZXNoZWV0TW9kZWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvU3R5bGVzaGVldE1vZGVsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzOTMwMWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9TdHlsZXNoZWV0TW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gIGJ1ZyAyNDM1NzcgLSBBZGRlZCByZXRyaWV2aW5nIGFsbCBjYWxsZWQtdGVtcGxhdGVzLgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSAgYnVnIDI0NjUwMyAtIEhhbmRsZWQgbmVzdGVkIGNpcmN1bGFyIGluY2x1ZGVzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotCi0vKioKLSAqIFRoZSBjb21wb3NlZCBzdHlsZXNoZWV0LCBjb25zaXN0aW5nIG9mIGFsbCB0ZW1wbGF0ZXMgYW5kIHZhcmlhYmxlcyBhdmFpbGFibGUKLSAqIHZpYSBpbXBvcnRzIGFuZCBpbmNsdWRlcy4KLSAqIAotICogPHA+Ci0gKiBUaGUgPGNvZGU+Zml4KCk8L2NvZGU+IG1ldGhvZCBkb2VzIHRoZSBhY3R1YWwgd29yayBvZiBwb3B1bGF0aW5nIHRoZSBmaWVsZHMKLSAqIG9mIHRoaXMsIHNvIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGFueSBvZiB0aGUgb3RoZXIgbWV0aG9kcy4KLSAqIDwvcD4KLSAqIAotICogPHA+Ci0gKiBOb3RlIHRoYXQgdGhpcyBtb2RlbCBtYXkgbm90IGJlIHZhbGlkIC0gZm9yIGluc3RhbmNlIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4KLSAqIG9uZSBuYW1lZCB0ZW1wbGF0ZSBmb3IgYSBnaXZlbiBuYW1lIG9yIG1vcmUgdGhhbiBvbmUgZ2xvYmFsIHZhcmlhYmxlIHdpdGggYQotICogZ2l2ZW4gbmFtZS4KLSAqIDwvcD4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgU3R5bGVzaGVldE1vZGVsIGV4dGVuZHMgWFNMTW9kZWxPYmplY3QgewotCXByaXZhdGUgZmluYWwgU3R5bGVzaGVldCBzdHlsZXNoZWV0OwotCWJvb2xlYW4gY2lyY3VsYXJSZWZlcmVuY2U7Ci0JZmluYWwgU2V0PElGaWxlPiBmaWxlcyA9IG5ldyBIYXNoU2V0PElGaWxlPigpOwotCWZpbmFsIFNldDxTdHlsZXNoZWV0PiBzdHlsZXNoZWV0cyA9IG5ldyBIYXNoU2V0PFN0eWxlc2hlZXQ+KCk7Ci0JZmluYWwgTGlzdDxJbmNsdWRlPiBpbmNsdWRlTW9kZWwgPSBuZXcgQXJyYXlMaXN0PEluY2x1ZGU+KCk7Ci0JZmluYWwgTGlzdDxJbXBvcnQ+IGltcG9ydE1vZGVsID0gbmV3IEFycmF5TGlzdDxJbXBvcnQ+KCk7Ci0JZmluYWwgU2V0PFRlbXBsYXRlPiB0ZW1wbGF0ZVNldCA9IG5ldyBIYXNoU2V0PFRlbXBsYXRlPigpOwotCWZpbmFsIExpc3Q8VGVtcGxhdGU+IHRlbXBsYXRlcyA9IG5ldyBBcnJheUxpc3Q8VGVtcGxhdGU+KCk7Ci0JZmluYWwgTGlzdDxWYXJpYWJsZT4gZ2xvYmFsVmFyaWFibGVzID0gbmV3IEFycmF5TGlzdDxWYXJpYWJsZT4oKTsKLQlmaW5hbCBMaXN0PENhbGxUZW1wbGF0ZT4gY2FsbFRlbXBsYXRlcyA9IG5ldyBBcnJheUxpc3Q8Q2FsbFRlbXBsYXRlPigpOwotCWZpbmFsIExpc3Q8RnVuY3Rpb24+IGZ1bmN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8RnVuY3Rpb24+KCk7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVzaGVldAotCSAqICAgICAgICAgICAgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGlzIHRoZSBtb2RlbCBmb3IKLQkgKi8KLQlwdWJsaWMgU3R5bGVzaGVldE1vZGVsKFN0eWxlc2hlZXQgc3R5bGVzaGVldCkgewotCQl0aGlzLnN0eWxlc2hlZXQgPSBzdHlsZXNoZWV0OwotCX0KLQotCS8qKgotCSAqIEdldCBhbGwgc3R5bGVzaGVldHMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotCSAqIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNldCBvZiBzdHlsZXNoZWV0cyBpbiB0aGUgZW50aXJlIGhpZXJhcmNoeQotCSAqLwotCXB1YmxpYyBMaXN0PEluY2x1ZGU+IGdldEluY2x1ZGVzKCkgewotCQlyZXR1cm4gaW5jbHVkZU1vZGVsOwotCX0KLQotCS8qKgotCSAqIEdldCBhbGwgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotCSAqIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNldCBvZiBmaWxlcyBpbiB0aGUgZW50aXJlIGhpZXJhcmNoeQotCSAqLwotCXB1YmxpYyBTZXQ8SUZpbGU+IGdldEZpbGVEZXBlbmRlbmNpZXMoKSB7Ci0JCXJldHVybiBmaWxlczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGlzIHRoZSBtb2RlbCBmb3IuCi0JICogCi0JICogQHJldHVybiB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgaXMgdGhlIG1vZGVsIGZvcgotCSAqLwotCXB1YmxpYyBTdHlsZXNoZWV0IGdldFN0eWxlc2hlZXQoKSB7Ci0JCXJldHVybiB0aGlzLnN0eWxlc2hlZXQ7Ci0JfQotCi0JLyoqCi0JICogR2V0IGFsbCBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbgotCSAqIHRoZSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZXQgb2YgZmlsZXMgaW4gdGhlIGVudGlyZSBoaWVyYXJjaHkKLQkgKi8KLQlwdWJsaWMgTGlzdDxWYXJpYWJsZT4gZ2V0R2xvYmFsVmFyaWFibGVzKCkgewotCQlyZXR1cm4gZ2xvYmFsVmFyaWFibGVzOwotCX0KLQotCS8qKgotCSAqIEdldCBhbGwgdGVtcGxhdGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbiB0aGUKLQkgKiBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZXQgb2YgdGVtcGxhdGVzIGluIHRoZSBlbnRpcmUgaGllcmFyY2h5Ci0JICovCi0JcHVibGljIExpc3Q8VGVtcGxhdGU+IGdldFRlbXBsYXRlcygpIHsKLQkJcmV0dXJuIHRlbXBsYXRlczsKLQl9Ci0KLQkvKioKLQkgKiBBIHV0aWxpdHkgbWV0aG9kIHRoYXQgdHJhdmVyc2VzIGFsbCBzdHlsZXNoZWV0IGluIHRoZSBoaWVyYXJjaHkgb2YKLQkgKiBzdHlsZXNoZWV0cyAobm90IGluY2x1ZGluZyB0aGUgY3VycmVudCBzdHlsZXNoZWV0KSwgYW5kIGFkZHMgYWxsIHRoZWlyCi0JICogdGVtcGxhdGVzIHRvIHRoZSByZXR1cm5lZCBsaXN0LiBUaGVyZWZvcmUgdGhlIHJldHVybmVkIGxpc3QgaGFzIG5vIHJlZ2FyZAotCSAqIGZvciB3aGV0aGVyIGEgdGVtcGxhdGUgaXMgJ3Zpc2libGUnIChpLmUuIHdoZXRoZXIgaXQgbWlnaHQgYmUgb3ZlcnJpZGRlbgotCSAqIHNpbmNlIGl0IHdhcyBpbmNsdWRlZCB2aWEgYW4gaW1wb3J0KS4gVGhlIG9yZGVyIG9mIHRoZSB0ZW1wbGF0ZXMgaW4gdGhlCi0JICogbGlzdCBpcyBhcmJpdHJhcnkuCi0JICogCi0JICogQHJldHVybiBhbiB1bm9yZGVyZWQgbGlzdCBvZiBhbGwgdGVtcGxhdGVzIGZyb20gYWxsIHN0eWxlc2hlZXRzLgotCSAqLwotCXB1YmxpYyBMaXN0PFRlbXBsYXRlPiBmaW5kQWxsTmVzdGVkVGVtcGxhdGVzKCkgewotCQlMaXN0PFRlbXBsYXRlPiBhbGxUZW1wbGF0ZXMgPSBuZXcgQXJyYXlMaXN0PFRlbXBsYXRlPigpOwotCQlmb3IgKFN0eWxlc2hlZXQgc3R5bGVzaGVldCA6IHN0eWxlc2hlZXRzKSB7Ci0JCQlhbGxUZW1wbGF0ZXMuYWRkQWxsKHN0eWxlc2hlZXQuZ2V0VGVtcGxhdGVzKCkpOwotCQl9Ci0JCXJldHVybiBhbGxUZW1wbGF0ZXM7Ci0JfQotCi0JLyoqCi0JICogR2V0IGFsbCBuYW1lZCB0ZW1wbGF0ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluCi0JICogdGhlIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlIHdoaWNoIGhhdmUgdGhlIGdpdmVuIG5hbWUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSBuYW1lCi0JICogQHJldHVybiB0aGUgc2V0IG9mIG5hbWVkIHRlbXBsYXRlcyB3aXRoIHRoZSBnaXZlbiBuYW1lCi0JICovCi0JcHVibGljIExpc3Q8VGVtcGxhdGU+IGdldFRlbXBsYXRlc0J5TmFtZShTdHJpbmcgbmFtZSkgewotCQlMaXN0PFRlbXBsYXRlPiBtYXRjaGluZyA9IG5ldyBBcnJheUxpc3Q8VGVtcGxhdGU+KHRlbXBsYXRlcy5zaXplKCkpOwotCQlmb3IgKFRlbXBsYXRlIHRlbXBsYXRlIDogdGVtcGxhdGVzKSB7Ci0JCQlpZiAobmFtZS5lcXVhbHModGVtcGxhdGUuZ2V0TmFtZSgpKSkKLQkJCQltYXRjaGluZy5hZGQodGVtcGxhdGUpOwotCQl9Ci0JCXJldHVybiBtYXRjaGluZzsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYWxsIHRlbXBsYXRlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiB0ZW1wbGF0ZSAoZGV0ZXJtaW5lZCBmcm9tCi0JICogPGNvZGU+VGVtcGxhdGUuZXF1YWxzKCk8L2NvZGU+KS4KLQkgKiAKLQkgKiBAcGFyYW0gdG9NYXRjaAotCSAqICAgICAgICAgICAgdGhlIHRlbXBsYXRlIHRvIG1hdGNoCi0JICogQHJldHVybiB0aGUgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IG1hdGNoCi0JICovCi0JcHVibGljIExpc3Q8VGVtcGxhdGU+IGZpbmRNYXRjaGluZyhUZW1wbGF0ZSB0b01hdGNoKSB7Ci0JCUxpc3Q8VGVtcGxhdGU+IG1hdGNoaW5nID0gbmV3IEFycmF5TGlzdDxUZW1wbGF0ZT4odGVtcGxhdGVzLnNpemUoKSk7Ci0JCWZvciAoVGVtcGxhdGUgdGVtcGxhdGUgOiB0ZW1wbGF0ZXMpIHsKLQkJCWlmICh0ZW1wbGF0ZS5lcXVhbHModG9NYXRjaCkpCi0JCQkJbWF0Y2hpbmcuYWRkKHRlbXBsYXRlKTsKLQkJfQotCQlyZXR1cm4gbWF0Y2hpbmc7Ci0JfQotCi0JLyoqCi0JICogR2V0IHdoZXRoZXIgdGhpcyBoYXMgYSBjaXJjdWxhciByZWZlcmVuY2UgYW55d2hlcmUgaW4gaXRzIGltcG9ydC9pbmNsdWRlZAotCSAqIGhpZXJhcmNoeS4KLQkgKiAKLQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaGFzIGEgY2lyY3VsYXIgcmVmZXJlbmNlCi0JICovCi0JcHVibGljIGJvb2xlYW4gaGFzQ2lyY3VsYXJSZWZlcmVuY2UoKSB7Ci0JCXJldHVybiBjaXJjdWxhclJlZmVyZW5jZTsKLQl9Ci0KLQkvKioKLQkgKiBQZXJmb3JtIHRoZSBwcm9jZXNzIG9mIHRyYXZlcnNpbmcgdGhlIGhpZXJhcmNoeSB0byBkZXRlcm1pbmUgYWxsIG9mIHRoZQotCSAqIHByb3BlcnRpZXMgb2YgdGhpcy4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG1heSBmb3JjZSBvdGhlcgotCSAqIDxjb2RlPlN0eWxlc2hlZXRNb2RlbDwvY29kZT4ncyB0byBiZSBidWlsdCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgZml4aW5nLgotCSAqLwotCXB1YmxpYyB2b2lkIGZpeCgpIHsKLQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCi0JCWlmIChEZWJ1Zy5kZWJ1Z1hTTE1vZGVsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZpeGluZyAiICsgc3R5bGVzaGVldC5nZXRGaWxlKCkgKyAiLi4uIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JCXRlbXBsYXRlcy5hZGRBbGwoc3R5bGVzaGVldC5nZXRUZW1wbGF0ZXMoKSk7Ci0JCXRlbXBsYXRlU2V0LmFkZEFsbChzdHlsZXNoZWV0LmdldFRlbXBsYXRlcygpKTsKLQkJZ2xvYmFsVmFyaWFibGVzLmFkZEFsbChzdHlsZXNoZWV0Lmdsb2JhbFZhcmlhYmxlcyk7Ci0JCWNhbGxUZW1wbGF0ZXMuYWRkQWxsKHN0eWxlc2hlZXQuZ2V0Q2FsbGVkVGVtcGxhdGVzKCkpOwotCQlmdW5jdGlvbnMuYWRkQWxsKHN0eWxlc2hlZXQuZ2V0RnVuY3Rpb25zKCkpOwotCQlmb3IgKEluY2x1ZGUgaW5jIDogc3R5bGVzaGVldC5nZXRJbmNsdWRlcygpKSB7Ci0JCQloYW5kbGVJbmNsdWRlKGluYyk7Ci0JCX0KLQkJZm9yIChJbXBvcnQgaW5jIDogc3R5bGVzaGVldC5nZXRJbXBvcnRzKCkpIHsKLQkJCWhhbmRsZUluY2x1ZGUoaW5jKTsKLQkJfQotCQlpZiAoRGVidWcuZGVidWdYU0xNb2RlbCkgewotCQkJbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQKLQkJCQkJLnByaW50bG4oIkZJWCAiICsgc3R5bGVzaGVldC5nZXRGaWxlKCkgKyAiIGluICIgKyAoZW5kIC0gc3RhcnQpICsgIm1zIik7IC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBoYW5kbGVJbmNsdWRlKEluY2x1ZGUgaW5jbHVkZSkgewotCQlJRmlsZSBmaWxlID0gaW5jbHVkZS5nZXRIcmVmQXNGaWxlKCk7Ci0KLQkJaWYgKGZpbGUgPT0gbnVsbCB8fCAhZmlsZS5leGlzdHMoKSkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKHN0eWxlc2hlZXQuZ2V0RmlsZSgpLmVxdWFscyhmaWxlKSB8fCBmaWxlcy5jb250YWlucyhmaWxlKSkgewotCQkJY2lyY3VsYXJSZWZlcmVuY2UgPSB0cnVlOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYgKGlzTmVzdGVkSW5jbHVkZShpbmNsdWRlLCBzdHlsZXNoZWV0LmdldEZpbGUoKSkpIHsKLQkJCWNpcmN1bGFyUmVmZXJlbmNlID0gdHJ1ZTsKLQkJfQotCQlmaWxlcy5hZGQoZmlsZSk7Ci0KLQkJU3R5bGVzaGVldE1vZGVsIGluY2x1ZGVkTW9kZWwgPSBYU0xDb3JlLmdldEluc3RhbmNlKCkuZ2V0U3R5bGVzaGVldCgKLQkJCQlmaWxlKTsKLQkJaWYgKGluY2x1ZGVkTW9kZWwgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJc3R5bGVzaGVldHMuYWRkKGluY2x1ZGVkTW9kZWwuZ2V0U3R5bGVzaGVldCgpKTsKLQkJZ2xvYmFsVmFyaWFibGVzLmFkZEFsbChpbmNsdWRlZE1vZGVsLmdsb2JhbFZhcmlhYmxlcyk7Ci0JCWNhbGxUZW1wbGF0ZXMuYWRkQWxsKGluY2x1ZGVkTW9kZWwuZ2V0Q2FsbFRlbXBsYXRlcygpKTsKLQkJaWYgKGluY2x1ZGUuZ2V0SW5jbHVkZVR5cGUoKSA9PSBJbmNsdWRlLklOQ0xVREUpIHsKLQkJCWluY2x1ZGVNb2RlbC5hZGQoaW5jbHVkZSk7Ci0JCQl0ZW1wbGF0ZXMuYWRkQWxsKGluY2x1ZGVkTW9kZWwuZ2V0VGVtcGxhdGVzKCkpOwotCQkJdGVtcGxhdGVTZXQuYWRkQWxsKGluY2x1ZGVkTW9kZWwuZ2V0VGVtcGxhdGVzKCkpOwotCQl9IGVsc2UgewotCQkJaW1wb3J0TW9kZWwuYWRkKChJbXBvcnQpIGluY2x1ZGUpOwotCQkJZm9yIChUZW1wbGF0ZSBpbmNsdWRlZFRlbXBsYXRlIDogaW5jbHVkZWRNb2RlbC5nZXRUZW1wbGF0ZXMoKSkgewotCQkJCWlmICghdGVtcGxhdGVTZXQuY29udGFpbnMoaW5jbHVkZWRUZW1wbGF0ZSkpIHsKLQkJCQkJdGVtcGxhdGVzLmFkZChpbmNsdWRlZFRlbXBsYXRlKTsKLQkJCQkJdGVtcGxhdGVTZXQuYWRkKGluY2x1ZGVkVGVtcGxhdGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIElzIHRoZSBjdXJyZW50IHN0eWxlc2hlZXQgbmVzdGVkIGluIG9uZSBvZiB0aGUgaW5jbHVkZWQgc3R5bGVzaGVldHMKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzTmVzdGVkSW5jbHVkZShJbmNsdWRlIGluY2x1ZGUsIElGaWxlIGNvbXBhcmVUbykgewotCQlTdHlsZXNoZWV0TW9kZWwgaW5jbHVkZWRNb2RlbCA9IFhTTENvcmUuZ2V0SW5zdGFuY2UoKS5nZXRTdHlsZXNoZWV0KAotCQkJCWluY2x1ZGUuZ2V0SHJlZkFzRmlsZSgpKTsKLQotCQlmb3IgKEluY2x1ZGUgaW5jIDogaW5jbHVkZWRNb2RlbC5nZXRJbmNsdWRlcygpKSB7Ci0JCQlpZiAoaW5jLmdldEhyZWZBc0ZpbGUoKS5lcXVhbHMoY29tcGFyZVRvKQotCQkJCQl8fCBpc05lc3RlZEluY2x1ZGUoaW5jLCBjb21wYXJlVG8pKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKSB7Ci0JCXJldHVybiBUeXBlLlNUWUxFU0hFRVRfTU9ERUw7Ci0JfQotCi0JcHVibGljIExpc3Q8Q2FsbFRlbXBsYXRlPiBnZXRDYWxsVGVtcGxhdGVzKCkgewotCQlyZXR1cm4gY2FsbFRlbXBsYXRlczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYSBMaXN0IG9mIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUga25vd24uCi0JICogQHJldHVybiAKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIExpc3Q8RnVuY3Rpb24+IGdldEZ1bmN0aW9ucygpIHsKLQkJcmV0dXJuIGZ1bmN0aW9uczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4gdGhlCi0JICogaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUgd2hpY2ggaGF2ZSB0aGUgZ2l2ZW4gbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgdGhlIHRlbXBsYXRlIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSBzZXQgb2YgbmFtZWQgdGVtcGxhdGVzIHdpdGggdGhlIGdpdmVuIG5hbWUKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIExpc3Q8RnVuY3Rpb24+IGdldEZ1bmN0aW9uQnlOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCUxpc3Q8RnVuY3Rpb24+IG1hdGNoaW5nID0gbmV3IEFycmF5TGlzdDxGdW5jdGlvbj4oZnVuY3Rpb25zLnNpemUoKSk7Ci0JCWZvciAoRnVuY3Rpb24gZnVuY3Rpb24gOiBmdW5jdGlvbnMpIHsKLQkJCWlmIChuYW1lLmVxdWFscyhmdW5jdGlvbi5nZXROYW1lKCkpKQotCQkJCW1hdGNoaW5nLmFkZChmdW5jdGlvbik7Ci0JCX0KLQkJcmV0dXJuIG1hdGNoaW5nOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvVGVtcGxhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvVGVtcGxhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhYjVkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1RlbXBsYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+eHNsOnRlbXBsYXRlPC9jb2RlPiBtb2RlbCBlbGVtZW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBUZW1wbGF0ZSBleHRlbmRzIFhTTEVsZW1lbnQKLXsKLQlmaW5hbCBMaXN0PFZhcmlhYmxlPiB2YXJpYWJsZXMgPSBuZXcgQXJyYXlMaXN0PFZhcmlhYmxlPigpOwotCWZpbmFsIExpc3Q8UGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gbmV3IEFycmF5TGlzdDxQYXJhbWV0ZXI+KCk7Ci0JCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGJlbG9uZ3MgdG8KLQkgKi8KLQlwdWJsaWMgVGVtcGxhdGUoU3R5bGVzaGVldCBzdHlsZXNoZWV0KQotCXsKLQkJc3VwZXIoc3R5bGVzaGVldCk7Ci0JfQotCQotCS8qKgotCSAqIEFkZCBhIHBhcmFtZXRlciB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBwYXJhbWV0ZXIgdGhlIHBhcmFtZXRlciB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKLQl7Ci0JCXBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7Ci0JfQotCQotCS8qKgotCSAqIEFkZCBhIHZhcmlhYmxlIHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZhciB0aGUgdmFyaWFibGUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkVmFyaWFibGUoVmFyaWFibGUgdmFyKQotCXsKLQkJdmFyaWFibGVzLmFkZCh2YXIpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHRlbXBsYXRlIG5hbWUsIG9yIG51bGwKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bWF0Y2g8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIG1hdGNoIHZhbHVlLCBvciBudWxsCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRNYXRjaCgpCi0JewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoIm1hdGNoIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bW9kZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgbW9kZSB2YWx1ZSwgb3IgbnVsbAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TW9kZSgpCi0JewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoIm1vZGUiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5wcmlvcml0eTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgcHJpb3JpdHkgdmFsdWUsIG9yIG51bGwKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFByaW9yaXR5KCkKLQl7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgicHJpb3JpdHkiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIG9mIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzCi0JICovCi0JcHVibGljIExpc3Q8UGFyYW1ldGVyPiBnZXRQYXJhbWV0ZXJzKCkKLQl7Ci0JCXJldHVybiBwYXJhbWV0ZXJzOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGhhc2hDb2RlKCkKLQl7Ci0JCVN0cmluZyBuYW1lID0gZ2V0TmFtZSgpOwotCQlpZiAobmFtZSAhPSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gMyArIG5hbWUuaGFzaENvZGUoKTsKLQkJfQotCQlTdHJpbmcgbWF0Y2ggPSBnZXRNYXRjaCgpOwotCQlTdHJpbmcgbW9kZSA9IGdldE1vZGUoKTsKLQkJU3RyaW5nIHByaW9yaXR5ID0gZ2V0UHJpb3JpdHkoKTsKLQkJaWYgKG1hdGNoICE9IG51bGwpCi0JCXsKLQkJCWludCBoYXNoID0gMyptYXRjaC5oYXNoQ29kZSgpOwotCQkJaWYgKHByaW9yaXR5ICE9IG51bGwpCi0JCQkJaGFzaCArPSA1KnByaW9yaXR5Lmhhc2hDb2RlKCk7Ci0JCQlpZiAobW9kZSAhPSBudWxsKQotCQkJCWhhc2ggKz0gNyptb2RlLmhhc2hDb2RlKCk7Ci0JCQlyZXR1cm4gNSArIGhhc2g7Ci0JCX0KLQkJcmV0dXJuIHN1cGVyLmhhc2hDb2RlKCk7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKQotCXsKLQkJaWYgKG9iaiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAob2JqID09IHRoaXMpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKG9iaiBpbnN0YW5jZW9mIFRlbXBsYXRlKQotCQl7Ci0JCQlUZW1wbGF0ZSBpbmNsdWRlZFRlbXBsYXRlID0gKFRlbXBsYXRlKW9iajsKLQkJCWlmICghbWF0Y2hlc0J5TWF0Y2hPck5hbWUoaW5jbHVkZWRUZW1wbGF0ZSkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJLy8gb25seSBwb3NzaWJpbGl0eSBpcyB0aGF0IHByaW9yaXR5IGlzIGRpZmZlcmVudAotCQkJU3RyaW5nIHByaW9yaXR5MSA9IGdldFByaW9yaXR5KCk7Ci0JCQlTdHJpbmcgcHJpb3JpdHkyID0gaW5jbHVkZWRUZW1wbGF0ZS5nZXRQcmlvcml0eSgpOwotCQkJaWYgKHByaW9yaXR5MSA9PSBudWxsICYmIHByaW9yaXR5MiA9PSBudWxsIHx8IHByaW9yaXR5MSAhPSBudWxsICYmIHByaW9yaXR5MS5lcXVhbHMocHJpb3JpdHkyKSkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIG1hdGNoZXNCeU1hdGNoT3JOYW1lKFRlbXBsYXRlIGluY2x1ZGVkVGVtcGxhdGUpCi0JewotCQlTdHJpbmcgbmFtZTEgPSBnZXROYW1lKCk7Ci0JCVN0cmluZyBtYXRjaDEgPSBnZXRNYXRjaCgpOwotCQlTdHJpbmcgbW9kZTEgPSBnZXRNb2RlKCk7Ci0JCVN0cmluZyBuYW1lMiA9IGluY2x1ZGVkVGVtcGxhdGUuZ2V0TmFtZSgpOwotCQlTdHJpbmcgbWF0Y2gyID0gaW5jbHVkZWRUZW1wbGF0ZS5nZXRNYXRjaCgpOwotCQlTdHJpbmcgbW9kZTIgPSBpbmNsdWRlZFRlbXBsYXRlLmdldE1vZGUoKTsKLQkJaWYgKG5hbWUxICE9IG51bGwgJiYgbmFtZTEuZXF1YWxzKG5hbWUyKSkKLQkJCXJldHVybiB0cnVlOwotCQlpZiAobWF0Y2gxICE9IG51bGwgJiYgbWF0Y2gxLmVxdWFscyhtYXRjaDIpICYmIChtb2RlMSA9PSBudWxsICYmIG1vZGUyID09IG51bGwgfHwgbW9kZTEgIT0gbnVsbCAmJiBtb2RlMS5lcXVhbHMobW9kZTIpKSkKLQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCXsKLQkJU3RyaW5nIG5hbWUgPSBnZXROYW1lKCk7Ci0JCVN0cmluZyBtYXRjaCA9IGdldE1hdGNoKCk7Ci0JCXJldHVybiAiZmlsZT0iK2dldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCkrIiwgbmFtZT0iK25hbWUrIiwgbWF0Y2g9IittYXRjaDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFR5cGUgZ2V0TW9kZWxUeXBlKCkKLQl7Ci0JCXJldHVybiBUeXBlLlRFTVBMQVRFOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9WYXJpYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9WYXJpYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGNiNTZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvVmFyaWFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+eHNsOnZhcmlhYmxlPC9jb2RlPiBtb2RlbCBlbGVtZW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBWYXJpYWJsZSBleHRlbmRzIFhTTEVsZW1lbnQKLXsKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVzaGVldCB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0bwotCSAqLwotCXB1YmxpYyBWYXJpYWJsZShTdHlsZXNoZWV0IHN0eWxlc2hlZXQpCi0JewotCQlzdXBlcihzdHlsZXNoZWV0KTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB2YXJpYWJsZSBuYW1lLCBvciBudWxsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnNlbGVjdDwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgc2VsZWN0IHZhbHVlLCBvciBudWxsCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTZWxlY3QoKQotCXsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJzZWxlY3QiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKQotCXsKLQkJcmV0dXJuIFR5cGUuVkFSSUFCTEU7Ci0JfQotCQotCS8qKgotCSAqIElmIGFuIFhTTFQgMi4wLCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5hczwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgYXMgdmFsdWUsIG9yIG51bGwKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRBcygpIHsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJhcyIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9YU0xBdHRyaWJ1dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMQXR0cmlidXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZTRjMjQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9YU0xBdHRyaWJ1dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotLyoqCi0gKiBBbiBhdHRyaWJ1dGUgb2YgYW4gZWxlbWVudCBpbiB0aGUgWFNMIG5hbWVzcGFjZS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWFNMQXR0cmlidXRlIGV4dGVuZHMgWFNMTm9kZQotewotCWZpbmFsIFN0cmluZyBuYW1lOwotCWZpbmFsIFN0cmluZyB2YWx1ZTsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50IHRoaXMgYmVsb25ncyB0bwotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUKLQkgKi8KLQlwdWJsaWMgWFNMQXR0cmlidXRlKFhTTEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkKLQl7Ci0JCXN1cGVyKGVsZW1lbnQuZ2V0U3R5bGVzaGVldCgpLCBYU0xOb2RlLkFUVFJJQlVURV9OT0RFKTsKLQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJdGhpcy52YWx1ZSA9IHZhbHVlOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIG5hbWUgb2YgdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUncyBuYW1lCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlJ3MgdmFsdWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkKLQl7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFR5cGUgZ2V0TW9kZWxUeXBlKCkKLQl7Ci0JCXJldHVybiBUeXBlLkFUVFJJQlVURTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTEVsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2E4YzJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBBbiBlbGVtZW50IGluIHRoZSBYU0wgbmFtZXNwYWNlLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xFbGVtZW50IGV4dGVuZHMgWFNMTm9kZSB7Ci0JZmluYWwgTWFwPFN0cmluZywgWFNMQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBYU0xBdHRyaWJ1dGU+KCk7Ci0JZmluYWwgTGlzdDxYU0xFbGVtZW50PiBjaGlsZEVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxYU0xFbGVtZW50PigpOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQKLQkgKiAgICAgICAgICAgIHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIFhTTEVsZW1lbnQoU3R5bGVzaGVldCBzdHlsZXNoZWV0KSB7Ci0JCXN1cGVyKHN0eWxlc2hlZXQsIFhTTE5vZGUuRUxFTUVOVF9OT0RFKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYW4gYXR0cmlidXRlIG9mIHRoaXMKLQkgKiAKLQkgKiBAcGFyYW0gYXR0cmlidXRlCi0JICogICAgICAgICAgICB0aGUgYXR0cmlidXRlIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZShYU0xBdHRyaWJ1dGUgYXR0cmlidXRlKSB7Ci0JCWF0dHJpYnV0ZXMucHV0KGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUKLQkgKi8KLQlwdWJsaWMgWFNMQXR0cmlidXRlIGdldEF0dHJpYnV0ZShTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gYXR0cmlidXRlcy5nZXQobmFtZSk7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBhdHRyaWJ1dGVzIGtleWVkIGJ5IHRoZWlyIG5hbWVzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIG1hcCBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kIGluc3RhbmNlcwotCSAqLwotCXB1YmxpYyBNYXA8U3RyaW5nLCBYU0xBdHRyaWJ1dGU+IGdldEF0dHJpYnV0ZXMoKSB7Ci0JCXJldHVybiBhdHRyaWJ1dGVzOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIHZhbHVlCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShTdHJpbmcgbmFtZSkgewotCQlYU0xBdHRyaWJ1dGUgYXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXQobmFtZSk7Ci0JCXJldHVybiBhdHRyaWJ1dGUgPT0gbnVsbCA/IG51bGwgOiBhdHRyaWJ1dGUuZ2V0VmFsdWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYSBjaGlsZCBlbGVtZW50IG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIGVsZW1lbnQKLQkgKiAgICAgICAgICAgIHRoZSBjaG9sZCBlbGVtZW50Ci0JICovCi0JcHVibGljIHZvaWQgYWRkQ2hpbGQoWFNMRWxlbWVudCBlbGVtZW50KSB7Ci0JCWNoaWxkRWxlbWVudHMuYWRkKGVsZW1lbnQpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBjaGlsZCBlbGVtZW50cwotCSAqIAotCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgY2hpbGRyZW4KLQkgKi8KLQlwdWJsaWMgTGlzdDxYU0xFbGVtZW50PiBnZXRDaGlsZEVsZW1lbnRzKCkgewotCQlyZXR1cm4gY2hpbGRFbGVtZW50czsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKSB7Ci0JCXJldHVybiBUeXBlLk9USEVSX0VMRU1FTlQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9YU0xNb2RlbE9iamVjdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9YU0xNb2RlbE9iamVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTk0MzgyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMTW9kZWxPYmplY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hhc2UgVGVjaG5vbG9naWVzIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsIChDaGFzZSBUZWNobm9sb2dpZXMpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtT2JqZWN0OwotCi0vKioKLSAqIAotICogQHNpbmNlIDEuMAotICoKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTTE1vZGVsT2JqZWN0IGV4dGVuZHMgUGxhdGZvcm1PYmplY3QKLXsKLQlwdWJsaWMgZW51bSBUeXBlIHtTVFlMRVNIRUVUX01PREVMLElNUE9SVCxJTkNMVURFLFRFTVBMQVRFLFZBUklBQkxFLCBDQUxMX1RFTVBMQVRFLCBTVFlMRVNIRUVULCBBVFRSSUJVVEUsIE9USEVSX0VMRU1FTlQsCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCVBBUkFNLAotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlGVU5DVElPTn07Ci0JCi0JcHVibGljIGFic3RyYWN0IFR5cGUgZ2V0TW9kZWxUeXBlKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTE5vZGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMTm9kZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGUzZWJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMTm9kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQSBub2RlIGluIHRoZSBYU0wgbmFtZXNwYWNlLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0xOb2RlIGV4dGVuZHMgWFNMTW9kZWxPYmplY3QKLXsKLQkvKioKLQkgKiBBIGNvbnN0YW50IGZvciB0aGUgZWxlbWVudCBub2RlICg9IDxjb2RlPm9yZy53M2MuZG9tLk5vZGUuRUxFTUVOVF9OT0RFPC9jb2RlPikKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IEVMRU1FTlRfTk9ERSA9IE5vZGUuRUxFTUVOVF9OT0RFOwotCQotCS8qKgotCSAqIEEgY29uc3RhbnQgZm9yIHRoZSBhdHRyaWJ1dGUgbm9kZSAoPSA8Y29kZT5vcmcudzNjLmRvbS5Ob2RlLkFUVFJJQlVURV9OT0RFPC9jb2RlPikKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIHNob3J0IEFUVFJJQlVURV9OT0RFID0gTm9kZS5BVFRSSUJVVEVfTk9ERTsKLQkKLQkKLQlwcml2YXRlIGZpbmFsIFN0eWxlc2hlZXQgc3R5bGVzaGVldDsKLQlpbnQgbGluZU51bWJlcjsKLQlpbnQgY29sdW1uTnVtYmVyOwotCXByaXZhdGUgaW50IG9mZnNldDsKLQlwcml2YXRlIGludCBsZW5ndGg7Ci0JcHJpdmF0ZSBzaG9ydCB0eXBlOwotCXByaXZhdGUgU3RyaW5nIG5hbWU7Ci0JCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQgdGhlIHN0eWxlc2hlZXQgdGhpcyBiZWxvbmdzIHRvCi0JICogQHBhcmFtIHR5cGUgb25lIG9mIDxjb2RlPkVMRU1FTlRfTk9ERTwvY29kZT4gb3IgPGNvZGU+QVRUUklCVVRFX05PREU8L2NvZGU+Ci0JICovCi0JcHVibGljIFhTTE5vZGUoU3R5bGVzaGVldCBzdHlsZXNoZWV0LCBzaG9ydCB0eXBlKQotCXsKLQkJdGhpcy5zdHlsZXNoZWV0ID0gc3R5bGVzaGVldDsKLQkJdGhpcy50eXBlID0gdHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLgotCSAqIAotCSAqIEBwYXJhbSBsaW5lTnVtYmVyIHRoZSBsaW5lIG51bWJlcgotCSAqLwotCXB1YmxpYyB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmVOdW1iZXIpCi0JewotCQl0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgY29sdW1ucyBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuCi0JICogCi0JICogQHBhcmFtIGNvbHVtbk51bWJlciB0aGUgY29sdW1uIG51bWJlcgotCSAqLwotCXB1YmxpYyB2b2lkIHNldENvbHVtbk51bWJlcihpbnQgY29sdW1uTnVtYmVyKQotCXsKLQkJdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHN0eWxlc2hlZXQKLQkgKi8KLQlwdWJsaWMgU3R5bGVzaGVldCBnZXRTdHlsZXNoZWV0KCkKLQl7Ci0JCXJldHVybiBzdHlsZXNoZWV0OwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuCi0JICogQHJldHVybiB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuCi0JICovCi0JcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLQl7Ci0JCXJldHVybiBsaW5lTnVtYmVyOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgY29sdW1uIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS4KLQkgKiBAcmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0Q29sdW1uTnVtYmVyKCkKLQl7Ci0JCXJldHVybiBjb2x1bW5OdW1iZXI7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBkb2N1bWVudCBvZmZzZXQgd2hlcmUgdGhpcyBub2RlIG9jY3Vycy4KLQkgKiBAcGFyYW0gb2Zmc2V0IHRoZSBkb2N1bWVudCBvZmZzZXQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRPZmZzZXQoaW50IG9mZnNldCkKLQl7Ci0JCXRoaXMub2Zmc2V0ID0gb2Zmc2V0OwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGRvY3VtZW50IG9mZnNldCB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzLgotCSAqIEByZXR1cm4gdGhlIGRvY3VtZW50IG9mZnNldAotCSAqLwotCXB1YmxpYyBpbnQgZ2V0T2Zmc2V0KCkKLQl7Ci0JCXJldHVybiBvZmZzZXQ7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBsZW5ndGggb2YgdGhpcyBub2RlLgotCSAqIEBwYXJhbSBsZW5ndGggdGhlIG5vZGUgbGVuZ3RoCi0JICovCi0JcHVibGljIHZvaWQgc2V0TGVuZ3RoKGludCBsZW5ndGgpCi0JewotCQl0aGlzLmxlbmd0aCA9IGxlbmd0aDsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBsZW5ndGggb2YgdGhpcyBub2RlLgotCSAqIEByZXR1cm4gdGhlIG5vZGUgbGVuZ3RoCi0JICovCi0JcHVibGljIGludCBnZXRMZW5ndGgoKQotCXsKLQkJcmV0dXJuIGxlbmd0aDsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB0eXBlIG9mIG5vZGUuCi0JICogCi0JICogQHJldHVybiBvbmUgb2YgPGNvZGU+RUxFTUVOVF9OT0RFPC9jb2RlPiBvciA8Y29kZT5BVFRSSUJVVEVfTk9ERTwvY29kZT4KLQkgKi8KLQlwdWJsaWMgc2hvcnQgZ2V0Tm9kZVR5cGUoKQotCXsKLQkJcmV0dXJuIHR5cGU7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiAiZmlsZT0iK3N0eWxlc2hlZXQrIiwgbGluZT0iK2xpbmVOdW1iZXIrIiwgY29sPSIrY29sdW1uTnVtYmVyOyAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0zJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvcmVzb2x2ZXIvUmVzb2x2ZXJFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvcmVzb2x2ZXIvUmVzb2x2ZXJFeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUxZmVkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL3Jlc29sdmVyL1Jlc29sdmVyRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBKZXNwZXIgU3RlZW4gTW9lbGxlciBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIEplc3BlciBTdGVlbiBNb2VsbGVyIC0gWFNMIGNvcmUgcGx1Z2luCi0gKiBEb3VnIFNhdGNod2VsbCAtIGJ1ZyAyMjUzMDQKLSAqIERhdmlkIENhcnZlciAtIGJ1ZyAyODQyMDAgLSBtYWtlIHN1cmUgd2UgZ2V0IGEgbm9uIFhNTCBJbmNsdWRlIHBhcnNlciBjb25maWd1cmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0vKioKLSAqIFRPRE86IEphdmFkb2MKLSAqIAotICogQGF1dGhvciBKZXNwZXIgU3RlZW4gTW9lbGxlcgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXNvbHZlckV4dGVuc2lvbiBpbXBsZW1lbnRzIFVSSVJlc29sdmVyRXh0ZW5zaW9uCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgRG91YmxlIERFRkFVTFRfWFNMVF9WRVJTSU9OID0gMS4wOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0xUX1NUWUxFU0hFRVQgPSAic3R5bGVzaGVldCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVF9URU1QTEFURSA9ICJ0ZW1wbGF0ZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVF9WRVJTSU9OID0gInZlcnNpb24iOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGJvb2xlYW4gaW5pdGlhbGlzZWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgeHNsdF8xXzBfZmlsZVVSTDsKLQlwcml2YXRlIFN0cmluZyB4c2x0XzJfMF9maWxlVVJMOwotCi0JcHVibGljIFN0cmluZyByZXNvbHZlKElGaWxlIGZpbGUsIFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotCXsKLQotCQkvLyBJcyBzb21lb25lIGxvb2tpbmcgZm9yICJvdXIiIHNjaGVtYT8KLQkJaWYgKCFYU0xDb3JlLlhTTF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwdWJsaWNJZCkpCi0JCXsKLQkJCS8vIE5vdCB0aGlzIHRpbWUsIHJldHVybiByaWdodCBhd2F5Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCVN0cmluZyB2ZXJzaW9uID0gbnVsbDsKLQotCQlpZiAoZmlsZSAhPSBudWxsKQotCQkJdmVyc2lvbiA9IHBlZWtWZXJzaW9uQXR0cmlidXRlRnJvbVNTRShmaWxlKTsKLQkJaWYgKHZlcnNpb24gPT0gbnVsbCkKLQkJCXZlcnNpb24gPSBwZWVrVmVyc2lvbkZyb21GaWxlKGZpbGUsIGJhc2VMb2NhdGlvbik7Ci0KLQkJaWYgKHZlcnNpb24gPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCURvdWJsZSB2ZXJzaW9uTnVtYmVyID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCXZlcnNpb25OdW1iZXIgPSBEb3VibGUudmFsdWVPZih2ZXJzaW9uKTsKLQkJfQotCQljYXRjaCAoVGhyb3dhYmxlIHQpCi0JCXsKLQkJCS8vIE5vdCBpbnRlcmVzdGVkCi0JCX0KLQotCQlpZiAodmVyc2lvbk51bWJlciA9PSBudWxsKQotCQl7Ci0JCQl2ZXJzaW9uTnVtYmVyID0gREVGQVVMVF9YU0xUX1ZFUlNJT047Ci0JCX0KLQotCQkvLyBXZSBjYXJlbGVzc2x5IGRpdGNoIHRoZSBmcmFjdGlvbiBwYXJ0Ci0JCWludCBpbnRWZXJzaW9uID0gdmVyc2lvbk51bWJlci5pbnRWYWx1ZSgpOwotCQljaGVja0luaXRpYWxpc2VkKCk7Ci0JCWlmIChpbnRWZXJzaW9uID09IDEpCi0JCXsKLQkJCXJldHVybiB4c2x0XzFfMF9maWxlVVJMOwotCQl9Ci0JCWVsc2UgaWYgKGludFZlcnNpb24gPT0gMikKLQkJewotCQkJcmV0dXJuIHhzbHRfMl8wX2ZpbGVVUkw7Ci0JCX0KLQkJZWxzZQotCQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrSW5pdGlhbGlzZWQoKQotCXsKLQkJaWYgKCFpbml0aWFsaXNlZCkKLQkJewotCQkJaW5pdGlhbGlzZWQgPSB0cnVlOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJVVJMIHBsdWdpblVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoWFNMQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIveHNsdC1zY2hlbWFzL3hzbHQtMS4wLnhzZCIpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCXhzbHRfMV8wX2ZpbGVVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwocGx1Z2luVVJMKS50b0V4dGVybmFsRm9ybSgpOwotCQkJCXBsdWdpblVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoWFNMQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIveHNsdC1zY2hlbWFzL3hzbHQtMi4wLnhzZCIpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCXhzbHRfMl8wX2ZpbGVVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwocGx1Z2luVVJMKS50b0V4dGVybmFsRm9ybSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJWFNMQ29yZVBsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBwZWVrVmVyc2lvbkZyb21GaWxlKElGaWxlIGZpbGUsIFN0cmluZyBiYXNlTG9jYXRpb24pCi0JewotCQlYU0xWZXJzaW9uSGFuZGxlciBoYW5kbGVyID0gbmV3IFhTTFZlcnNpb25IYW5kbGVyKCk7Ci0JCXRyeQotCQl7Ci0JCQloYW5kbGVyLnBhcnNlQ29udGVudHMoZmlsZSAhPSBudWxsID8gY3JlYXRlSW5wdXRTb3VyY2UoZmlsZSkgOiBjcmVhdGVJbnB1dFNvdXJjZShiYXNlTG9jYXRpb24pKTsKLQkJfQotCQljYXRjaCAoU0FYRXhjZXB0aW9uIHNlKQotCQl7Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhzZSk7Ci0JCQkvLyBkcm9wIHRocm91Z2gsIHNpbmNlIHRoaXMgaXMgYWxtb3N0IHRvIGJlIGV4cGVjdGVkCi0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLQkJewotCQkJWFNMQ29yZVBsdWdpbi5sb2cobmV3IENvcmVFeGNlcHRpb24oWFNMQ29yZVBsdWdpbi5uZXdFcnJvclN0YXR1cygiQ2FuJ3QgcGFyc2UgWFNMIGRvY3VtZW50IiwgaW9lKSkpOyAvLyROT04tTkxTLTEkCi0JCQkvLyBkcm9wIHRocm91Z2gsIHNpbmNlIHRoaXMgaXMgbm90IHJlYWxseSBhIHNob3ctc3RvcHBlcgotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLQkJewotCQkJLy8gc29tZSBiYWQgdGhpbmcgaGFwcGVuZWQgLSBmb3JjZSB0aGlzIGRlc2NyaWJlciB0byBiZSBkaXNhYmxlZAotCQkJU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlcy5YU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb247Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFhTTENvcmVQbHVnaW4uUExVR0lOX0lELCAwLCBtZXNzYWdlLCBwY2UpKTsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKG1lc3NhZ2UpOwotCQkJLy8gZHJvcCB0aHJvdWdoLCBzaW5jZSB0aGlzIGlzIG5vdCByZWFsbHkgYSBzaG93LXN0b3BwZXIKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkJewotCQkJWFNMQ29yZVBsdWdpbi5sb2coY2UpOwotCQkJLy8gZHJvcCB0aHJvdWdoLCBzaW5jZSB0aGlzIGlzIG5vdCByZWFsbHkgYSBzaG93LXN0b3BwZXIKLQkJfQotCi0JCVN0cmluZyB2ZXJzaW9uWCA9IGhhbmRsZXIuZ2V0VmVyc2lvbkF0dHJpYnV0ZSgpOwotCQlyZXR1cm4gdmVyc2lvblg7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcGVla1ZlcnNpb25BdHRyaWJ1dGVGcm9tU1NFKElGaWxlIGZpbGUpCi0JewotCQlJTW9kZWxNYW5hZ2VyIG1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCWlmIChtYW5hZ2VyICE9IG51bGwpCi0JCXsKLQkJCVN0cmluZyBpZCA9IG1hbmFnZXIuY2FsY3VsYXRlSWQoZmlsZSk7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbWFuYWdlci5nZXRFeGlzdGluZ01vZGVsRm9yUmVhZChpZCk7Ci0JCQl0cnkKLQkJCXsKLQkJCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJRE9NTW9kZWwpCi0JCQkJewotCQkJCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQkJCWlmIChkb2MgIT0gbnVsbCAmJiBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCQkJCQlpZiAoWFNMVF9TVFlMRVNIRUVULmVxdWFscyhkb2N1bWVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpIHx8IFhTTFRfVEVNUExBVEUuZXF1YWxzKGRvY3VtZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKSkpCi0JCQkJCQl7Ci0JCQkJCQkJcmV0dXJuIGRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoWFNMVF9WRVJTSU9OKTsKLQkJCQkJCX0KLQkJCQkJCWVsc2UKLQkJCQkJCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkKLQkJCXsKLQkJCQkvLyBidWcgMjI1MzA0Ci0JCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgSW5wdXRTb3VyY2UgY3JlYXRlSW5wdXRTb3VyY2UoU3RyaW5nIHN5c3RlbUlkKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIG5ldyBJbnB1dFNvdXJjZShzeXN0ZW1JZCk7Ci0JfQotCi0JcHJpdmF0ZSBJbnB1dFNvdXJjZSBjcmVhdGVJbnB1dFNvdXJjZShJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJSW5wdXRTb3VyY2Ugc3JjID0gbmV3IElucHV0U291cmNlKGZpbGUuZ2V0Q29udGVudHMoKSk7Ci0JCXNyYy5zZXRTeXN0ZW1JZChmaWxlLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKSk7Ci0JCXJldHVybiBzcmM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9yZXNvbHZlci9TdG9wUGFyc2luZ0V4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9yZXNvbHZlci9TdG9wUGFyc2luZ0V4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2QwN2VlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvcmVzb2x2ZXIvU3RvcFBhcnNpbmdFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyOwotCi1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0vKioKLSAqIEFuIGV4Y2VwdGlvbiBpbmRpY2F0aW5nIHRoYXQgdGhlIHBhcnNpbmcgc2hvdWxkIHN0b3AuIFRoaXMgaXMgdXN1YWxseQotICogdHJpZ2dlcmVkIHdoZW4gdGhlIHRvcC1sZXZlbCBlbGVtZW50IGhhcyBiZWVuIGZvdW5kLgotICogCi0gKiBAc2luY2UgMS4wCi0gKi8KLQotY2xhc3MgU3RvcFBhcnNpbmdFeGNlcHRpb24gZXh0ZW5kcyBTQVhFeGNlcHRpb24gewotCS8qKgotCSAqIEFsbCBzZXJpYWxpemFibGUgb2JqZWN0cyBzaG91bGQgaGF2ZSBhIHN0YWJsZSBzZXJpYWxWZXJzaW9uVUlECi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGFuIGluc3RhbmNlIG9mIDxjb2RlPlN0b3BQYXJzaW5nRXhjZXB0aW9uPC9jb2RlPiB3aXRoIGEKLQkgKiA8Y29kZT5udWxsPC9jb2RlPiBkZXRhaWwgbWVzc2FnZS4KLQkgKi8KLQlwdWJsaWMgU3RvcFBhcnNpbmdFeGNlcHRpb24oKSB7Ci0JCXN1cGVyKChTdHJpbmcpIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL3Jlc29sdmVyL1hTTFZlcnNpb25IYW5kbGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL3Jlc29sdmVyL1hTTFZlcnNpb25IYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MTc4ZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9yZXNvbHZlci9YU0xWZXJzaW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgotICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCi0gKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiAKLSAqIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogSmVzcGVyIFN0ZWVuIE3vv71sbGVyIC0gYWRhcHRlZCBmcm9tIG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwuY29udGVudAotICogRGF2aWQgQ2FydmVyIC0gYnVnIDI4NDIwMCAtIG1ha2Ugc3VyZSB3ZSBnZXQgYSBub24gWE1MIEluY2x1ZGUgcGFyc2VyIGNvbmZpZ3VyYXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuKjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLmpheHAuU0FYUGFyc2VySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcueG1sLnNheC4qOwotaW1wb3J0IG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi0vKioKLSAqIEEgc2ltcGxlIFhNTCBwYXJzZXIgdG8gZmluZCB0aGUgWFNMIHZlcnNpb24gb2YgYSBnaXZlbiBYTUwgZmlsZSwgZXhwZWN0ZWRseSBhIFhTTFQgc3R5bGVzaGVldC4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFhTTFZlcnNpb25IYW5kbGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIgaW1wbGVtZW50cyBMZXhpY2FsSGFuZGxlciwgRXJyb3JIYW5kbGVyIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0xUX1NUWUxFU0hFRVQgPSAic3R5bGVzaGVldCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0xUX1RFTVBMQVRFID0gInRlbXBsYXRlIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTFRfVkVSU0lPTiA9ICJ2ZXJzaW9uIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogVGhpcyBpcyB0aGUgdmFsdWUgb2YgdGhlIHZlcnNpb24gYXR0cmlidXRlIGluIHRoZSBYU0xUIGZpbGUuCi0JICogVGhpcyBtZW1iZXIgdmFyaWFibGUgaXMgPGNvZGU+bnVsbDwvY29kZT4gdW5sZXNzIHRoZSBmaWxlIGhhcyBiZWVuCi0JICogcGFyc2VkIHN1Y2Nlc3NmdWwgdG8gdGhlIHBvaW50IG9mIGZpbmRpbmcgdGhlIHRvcC1sZXZlbCBlbGVtZW50LAotCSAqIGFuZCBsb2NhdGluZyB0aGUgJ3ZlcnNpb24nIGF0dHJpYnV0ZSB0aGVyZS4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyB2ZXJzaW9uQXR0cmlidXRlID0gbnVsbDsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICovCi0JcHVibGljIFhTTFZlcnNpb25IYW5kbGVyKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2NvbW1lbnQoY2hhcltdLCBpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb21tZW50KGZpbmFsIGNoYXJbXSBjaCwgZmluYWwgaW50IHN0YXJ0LCBmaW5hbCBpbnQgbGVuZ3RoKSB7Ci0JCS8vIE5vdCBpbnRlcmVzdGVkLgotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgU0FYIHBhcnNlciBmb3IgdXNlIHdpdGhpbiB0aGlzIGluc3RhbmNlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgcGFyc2VyLgotCSAqIAotCSAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIElmIGEgcGFyc2VyIG9mIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSBjcmVhdGVkLgotCSAqIEB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgSWYgc29tZXRoaW5nIGluIGdlbmVyYWwgZ29lcyB3cm9uZyB3aGVuIGNyZWF0aW5nIHRoZSBwYXJzZXIuCi0JICogQHRocm93cyBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgSWYgdGhlIDxjb2RlPlhNTFJlYWRlcjwvY29kZT4gZG9lcyBub3QgcmVjb2duaXplIHRoZQotCSAqICAgICAgICAgICAgIGxleGljYWwgaGFuZGxlciBjb25maWd1cmF0aW9uIG9wdGlvbi4KLQkgKiBAdGhyb3dzIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIElmIHRoZSA8Y29kZT5YTUxSZWFkZXI8L2NvZGU+IGRvZXMgbm90IHN1cHBvcnQgdGhlIGxleGljYWwKLQkgKiAgICAgICAgICAgICBoYW5kbGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgotCSAqLwotCXByaXZhdGUgZmluYWwgc3luY2hyb25pemVkIFNBWFBhcnNlciBjcmVhdGVQYXJzZXIoU0FYUGFyc2VyRmFjdG9yeSBwYXJzZXJGYWN0b3J5KSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uLCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewotCQkvLyBJbml0aWFsaXplIHRoZSBwYXJzZXIuCi0JCWZpbmFsIFNBWFBhcnNlckltcGwgcGFyc2VyID0gKFNBWFBhcnNlckltcGwpcGFyc2VyRmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJZmluYWwgWE1MUmVhZGVyIHJlYWRlciA9IHBhcnNlci5nZXRYTUxSZWFkZXIoKTsKLQkJcmVhZGVyLnNldFByb3BlcnR5KCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9sZXhpY2FsLWhhbmRsZXIiLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJcmVhZGVyLnNldEVycm9ySGFuZGxlcih0aGlzKTsgLy8gVGhpcyBoZWxwcyB0byBpZ25vcmUgZXJyb3JzCi0JCS8vIGRpc2FibGUgRFREIHZhbGlkYXRpb24KLQkJdHJ5IHsKLQkJCS8vCWJlIHN1cmUgdmFsaWRhdGlvbiBpcyAib2ZmIiBvciB0aGUgZmVhdHVyZSB0byBpZ25vcmUgRFREJ3Mgd2lsbCBub3QgYXBwbHkKLQkJCXJlYWRlci5zZXRGZWF0dXJlKCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVhZGVyLnNldEZlYXR1cmUoImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ub252YWxpZGF0aW5nL2xvYWQtZXh0ZXJuYWwtZHRkIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0JCX0gY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkgewotCQkJLy8gbm90IGEgYmlnIGRlYWwgaWYgdGhlIHBhcnNlciBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGZlYXR1cmVzCi0JCX0gY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBub3QgYSBiaWcgZGVhbCBpZiB0aGUgcGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZlYXR1cmVzCi0JCX0KLQkJcmV0dXJuIHBhcnNlcjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNlbmRDREFUQSgpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgZW5kQ0RBVEEoKSB7Ci0JCS8vIE5vdCBpbnRlcmVzdGVkLgotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2VuZERURCgpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgZW5kRFREKCkgewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNlbmRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBlbmRFbnRpdHkoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJLy8gTm90IGludGVyZXN0ZWQuCi0JfQotCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFkb2MKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWZXJzaW9uQXR0cmlidXRlKCkgewotCQlyZXR1cm4gdmVyc2lvbkF0dHJpYnV0ZTsKLQl9Ci0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YWRvYwotCSAqIEBwYXJhbSBjb250ZW50cwotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICogQHRocm93cyBTQVhFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwYXJzZUNvbnRlbnRzKElucHV0U291cmNlIGNvbnRlbnRzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiB7Ci0JCS8vIFBhcnNlIHRoZSBmaWxlIGludG8gd2UgaGF2ZSB3aGF0IHdlIG5lZWQgKG9yIGFuIGVycm9yIG9jY3VycykuCi0JCXRyeSB7Ci0JCQlTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBYU0xDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRGYWN0b3J5KCk7Ci0JCQlpZiAoZmFjdG9yeSA9PSBudWxsKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWlmIChmYWN0b3J5LmlzWEluY2x1ZGVBd2FyZSgpKSB7Ci0JCQkJZmFjdG9yeS5zZXRYSW5jbHVkZUF3YXJlKGZhbHNlKTsKLQkJCX0KLQkJCWZpbmFsIFNBWFBhcnNlciBwYXJzZXIgPSBjcmVhdGVQYXJzZXIoZmFjdG9yeSk7Ci0JCQkvLyB0byBzdXBwb3J0IGV4dGVybmFsIGVudGl0aWVzIHNwZWNpZmllZCBhcyByZWxhdGl2ZSBVUklzIChzZWUgYnVnIDYzMjk4KQotCQkJcGFyc2VyLnBhcnNlKGNvbnRlbnRzLCB0aGlzKTsKLQkJfSBjYXRjaCAoU3RvcFBhcnNpbmdFeGNlcHRpb24gZSkgewotCQkJLy8gQWJvcnQgdGhlIHBhcnNpbmcgbm9ybWFsbHkuIEZhbGwgdGhyb3VnaC4uLgotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogUmVzb2x2ZSBleHRlcm5hbCBlbnRpdHkgZGVmaW5pdGlvbnMgdG8gYW4gZW1wdHkgc3RyaW5nLiAgVGhpcyBpcyB0byBzcGVlZAotCSAqIHVwIHByb2Nlc3Npbmcgb2YgZmlsZXMgd2l0aCBleHRlcm5hbCBEVERzLiAgTm90IHJlc29sdmluZyB0aGUgY29udGVudHMgCi0JICogb2YgdGhlIERURCBpcyBvaywgYXMgb25seSB0aGUgU3lzdGVtIElEIG9mIHRoZSBEVEQgZGVjbGFyYXRpb24gaXMgdXNlZC4KLQkgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKCIiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNzdGFydENEQVRBKCkKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBzdGFydENEQVRBKCkgewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNzdGFydERURChqYXZhLmxhbmcuU3RyaW5nLAotCSAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBzdGFydERURChmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIHB1YmxpY0lkLCBmaW5hbCBTdHJpbmcgc3lzdGVtSWQpIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI3N0YXJ0RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAotCSAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgZmluYWwgdm9pZCBzdGFydEVsZW1lbnQoZmluYWwgU3RyaW5nIHVyaSwgZmluYWwgU3RyaW5nIGVsZW1lbnROYW1lLCBmaW5hbCBTdHJpbmcgcXVhbGlmaWVkTmFtZSwgZmluYWwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJaWYgKHVyaS5lcXVhbHMoWFNMQ29yZS5YU0xfTkFNRVNQQUNFX1VSSSkgJiYgKFhTTFRfVEVNUExBVEUuZXF1YWxzKGVsZW1lbnROYW1lKSB8fCBYU0xUX1NUWUxFU0hFRVQuZXF1YWxzKGVsZW1lbnROYW1lKSkpIHsKLQkJCXZlcnNpb25BdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFhTTFRfVkVSU0lPTik7Ci0JCX0gZWxzZSB7Ci0JCQl2ZXJzaW9uQXR0cmlidXRlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQl0aHJvdyBuZXcgU3RvcFBhcnNpbmdFeGNlcHRpb24oKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNzdGFydEVudGl0eShqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCXB1YmxpYyBmaW5hbCB2b2lkIHN0YXJ0RW50aXR5KGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0JCS8vIE5vdCBpbnRlcmVzdGVkLgotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCB3YXJuaW5nKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZXJyb3IoU0FYUGFyc2VFeGNlcHRpb24gZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCS8vIE5vdCBpbnRlcmVzdGVkLgotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9lbmNvZGluZy9YU0xEb2N1bWVudExvYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvZW5jb2RpbmcvWFNMRG9jdW1lbnRMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWI4ZGE3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9lbmNvZGluZy9YU0xEb2N1bWVudExvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LkFic3RyYWN0RG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudENoYXJzZXREZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSURvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUVuY29kZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudENoYXJzZXREZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhNTFN0cnVjdHVyZWREb2N1bWVudFJlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIuWFNMU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0w7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlYWRzIGFuIFhTTCBmaWxlIGFuZCBjcmVhdGVzIGFuIFhNTCBTdHJ1Y3R1cmVkIE1vZGVsLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xEb2N1bWVudExvYWRlciBleHRlbmRzIEFic3RyYWN0RG9jdW1lbnRMb2FkZXIgewotCi0JcHVibGljIFhTTERvY3VtZW50TG9hZGVyKCkgewotCQlzdXBlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJRG9jdW1lbnRQYXJ0aXRpb25lciBnZXREZWZhdWx0RG9jdW1lbnRQYXJ0aXRpb25lcigpIHsKLQkJcmV0dXJuIG5ldyBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMKCk7Ci0JfQotCi0JcHVibGljIElEb2N1bWVudENoYXJzZXREZXRlY3RvciBnZXREb2N1bWVudEVuY29kaW5nRGV0ZWN0b3IoKSB7Ci0JCWlmIChmRG9jdW1lbnRFbmNvZGluZ0RldGVjdG9yID09IG51bGwpIHsKLQkJCWZEb2N1bWVudEVuY29kaW5nRGV0ZWN0b3IgPSBuZXcgWE1MRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3IoKTsKLQkJfQotCQlyZXR1cm4gZkRvY3VtZW50RW5jb2RpbmdEZXRlY3RvcjsKLQl9Ci0KLQlwdWJsaWMgUmVnaW9uUGFyc2VyIGdldFBhcnNlcigpIHsKLQkJcmV0dXJuIG5ldyBYU0xTb3VyY2VQYXJzZXIoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNwZWNEZWZhdWx0RW5jb2RpbmcoKSB7Ci0JCS8vIGJ5IGRlZmF1bHQsIFVURi04IGFzIHBlciBYTUwgc3BlYwotCQlmaW5hbCBTdHJpbmcgZW5jID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gZW5jOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRW5jb2RlZERvY3VtZW50IG5ld0VuY29kZWREb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKGdldFBhcnNlcigpKTsKLQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudCBpbnN0YW5jZW9mIEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSB7Ci0JCQkoKEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnQpLnNldFJlUGFyc2VyKG5ldyBYTUxTdHJ1Y3R1cmVkRG9jdW1lbnRSZVBhcnNlcigpKTsKLQkJfQotCQlyZXR1cm4gc3RydWN0dXJlZERvY3VtZW50OwotCX0KLQotCXB1YmxpYyBJRG9jdW1lbnRMb2FkZXIgbmV3SW5zdGFuY2UoKSB7Ci0JCXJldHVybiBuZXcgWFNMRG9jdW1lbnRMb2FkZXIoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsaGFuZGxlci9Nb2RlbEhhbmRsZXJGb3JYU0wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsaGFuZGxlci9Nb2RlbEhhbmRsZXJGb3JYU0wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTRkNGI5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9tb2RlbGhhbmRsZXIvTW9kZWxIYW5kbGVyRm9yWFNMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudENoYXJzZXREZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSURvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLklNb2RlbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWE1MRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhTTERvY3VtZW50TG9hZGVyOwotCi0KLS8qKgotICogUHJvdmlkZXMgZ2VuZXJpYyBYTUwgbW9kZWwgaGFuZGxpbmcuIEl0IGlzIGFsc28gbWFya2VkIGFzIHRoZSBkZWZhdWx0Ci0gKiBjb250ZW50IHR5cGUgaGFuZGxlci4gVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGltcGxlbWVudGF0aW9uIG9mIHRoZQotICogZGVmYXVsdC4KLSAqLwotcHVibGljIGNsYXNzIE1vZGVsSGFuZGxlckZvclhTTCBleHRlbmRzIE1vZGVsSGFuZGxlckZvclhNTCBpbXBsZW1lbnRzIElNb2RlbEhhbmRsZXIgewotCS8qKgotCSAqIE5lZWRzIHRvIG1hdGNoIHdoYXQncyBpbiBwbHVnaW4gcmVnaXN0cnkuIEluIGZhY3QsIGNhbiBiZSBvdmVyd3JpdHRlbgotCSAqIGF0IHJ1biB0aW1lIHdpdGggd2hhdCdzIGluIHJlZ2lzdHJ5ISAoc28gc2hvdWxkIG5ldmVyIGJlICdmaW5hbCcpCi0JICovCi0Jc3RhdGljIFN0cmluZyBBc3NvY2lhdGVkQ29udGVudFR5cGVJRCA9IFhTTENvcmUuWFNMX0NPTlRFTlRfVFlQRTsKLQkvKioKLQkgKiBOZWVkcyB0byBtYXRjaCB3aGF0J3MgaW4gcGx1Z2luIHJlZ2lzdHJ5LiBJbiBmYWN0LCBjYW4gYmUgb3ZlcndyaXR0ZW4KLQkgKiBhdCBydW4gdGltZSB3aXRoIHdoYXQncyBpbiByZWdpc3RyeSEgKHNvIHNob3VsZCBuZXZlciBiZSAnZmluYWwnKQotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBNb2RlbEhhbmRsZXJJRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWxoYW5kbGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIE1vZGVsSGFuZGxlckZvclhTTCgpIHsKLQkJc3VwZXIoKTsJCi0JCXNldElkKE1vZGVsSGFuZGxlcklEKTsKLQkJc2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoQXNzb2NpYXRlZENvbnRlbnRUeXBlSUQpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJRG9jdW1lbnRMb2FkZXIgZ2V0RG9jdW1lbnRMb2FkZXIoKSB7Ci0JCXJldHVybiBuZXcgWFNMRG9jdW1lbnRMb2FkZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSURvY3VtZW50Q2hhcnNldERldGVjdG9yIGdldEVuY29kaW5nRGV0ZWN0b3IoKSB7Ci0JCXJldHVybiBuZXcgWE1MRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3IoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSU1vZGVsTG9hZGVyIGdldE1vZGVsTG9hZGVyKCkgewotCQlyZXR1cm4gbmV3IFhTTE1vZGVsTG9hZGVyKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9tb2RlbGhhbmRsZXIvWFNMTW9kZWxMb2FkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsaGFuZGxlci9YU0xNb2RlbExvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4OGY3YTc5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsaGFuZGxlci9YU0xNb2RlbExvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5Qcm9wYWdhdGluZ0FkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5EZWJ1Z0FkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YTUxNb2RlbExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YU0xEb2N1bWVudExvYWRlcjsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVhZHMgYW4gWE1MIGZpbGUgYW5kIGNyZWF0ZXMgYW4gWE1MIFN0cnVjdHVyZWQgTW9kZWwuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xNb2RlbExvYWRlciBleHRlbmRzIFhNTE1vZGVsTG9hZGVyIHsKLQotCS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJfRU5DT0RJTkcgPSAiZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBYTUxMb2FkZXIgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgWFNMTW9kZWxMb2FkZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0vLwlAT3ZlcnJpZGUKLS8vCXB1YmxpYyBMaXN0IGdldEFkYXB0ZXJGYWN0b3JpZXMoKSB7Ci0vLwkJTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0vLwkJSU5vZGVBZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLS8vCQlmYWN0b3J5ID0gbmV3IE1vZGVsUXVlcnlBZGFwdGVyRmFjdG9yeUZvclhNTCgpOwotLy8JCXJlc3VsdC5hZGQoZmFjdG9yeSk7Ci0vLwkJLy8gRG9lcyBYTUwgbmVlZCBwcm9wYWdhdGluZyBhZGFwdGVyPyBPciBqdXN0IEpTUD8KLS8vCQlmYWN0b3J5ID0gbmV3IFByb3BhZ2F0aW5nQWRhcHRlckZhY3RvcnlJbXBsKCk7Ci0vLwkJcmVzdWx0LmFkZChmYWN0b3J5KTsKLS8vCQlyZXR1cm4gcmVzdWx0OwotLy8JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIElEb2N1bWVudExvYWRlciBnZXREb2N1bWVudExvYWRlcigpIHsKLQkJaWYgKGRvY3VtZW50TG9hZGVySW5zdGFuY2UgPT0gbnVsbCkgewotCQkJZG9jdW1lbnRMb2FkZXJJbnN0YW5jZSA9IG5ldyBYU0xEb2N1bWVudExvYWRlcigpOwotCQl9Ci0JCXJldHVybiBkb2N1bWVudExvYWRlckluc3RhbmNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJTW9kZWxMb2FkZXIgbmV3SW5zdGFuY2UoKSB7Ci0JCXJldHVybiBuZXcgWFNMTW9kZWxMb2FkZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCgpIHsKLQkJcmV0dXJuIG5ldyBET01Nb2RlbEltcGwoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBwcmVMb2FkQWRhcHQoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQkJc3VwZXIucHJlTG9hZEFkYXB0KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUlET01Nb2RlbCBkb21Nb2RlbCA9IChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbDsKLQkJLy8gaWYgdGhlcmUgaXMgYSBtb2RlbCBpbiB0aGUgYWRhcHRlciwgdGhpcyB3aWxsIGFkYXB0IGl0IHRvCi0JCS8vIGZpcnN0IG5vZGUuIEFmdGVyIHRoYXQgdGhlIFByb3BhZ2F0aW5nQWRhdGVyIHNwcmVhZHMgb3ZlciB0aGUKLQkJLy8gY2hpbGRyZW4gYmVpbmcKLQkJLy8gY3JlYXRlZC4gRWFjaCB0aW1lIHRoYXQgaGFwcGVuZHMsIGEgc2lkZSBlZmZlY3QgaXMgdG8KLQkJLy8gYWxzbyAic3ByZWFkIiBzcHJlY2lmaWMgcmVnaXN0ZXJlZCBhZGFwdGVycywKLQkJLy8gdGhleSB0d28gY2FuIHByb3BpZ2F0ZSBpcyBuZWVkZWQuCi0JCSgoSU5vZGVOb3RpZmllcikgZG9tTW9kZWwuZ2V0RG9jdW1lbnQoKSkuZ2V0QWRhcHRlckZvcihQcm9wYWdhdGluZ0FkYXB0ZXIuY2xhc3MpOwotCi0JCWlmIChEZWJ1Zy5kZWJ1Z05vdGlmaWNhdGlvbkFuZEV2ZW50cykgewotCQkJUHJvcGFnYXRpbmdBZGFwdGVyIHByb3BhZ2F0aW5nQWRhcHRlciA9IChQcm9wYWdhdGluZ0FkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9tTW9kZWwuZ2V0RG9jdW1lbnQoKSkuZ2V0QWRhcHRlckZvcihQcm9wYWdhdGluZ0FkYXB0ZXIuY2xhc3MpOwotCQkJcHJvcGFnYXRpbmdBZGFwdGVyLmFkZEFkYXB0T25DcmVhdGVGYWN0b3J5KG5ldyBEZWJ1Z0FkYXB0ZXJGYWN0b3J5KCkpOwotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3BhcnNlci9YU0xTb3VyY2VQYXJzZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3BhcnNlci9YU0xTb3VyY2VQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjljYWEyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wYXJzZXIvWFNMU291cmNlUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wYXJzZXIuWE1MU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0xTb3VyY2VQYXJzZXIgZXh0ZW5kcyBYTUxTb3VyY2VQYXJzZXIgewotCi0KLQlwdWJsaWMgWFNMU291cmNlUGFyc2VyKCkgewotCQlzdXBlcigpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgUmVnaW9uUGFyc2VyIG5ld0luc3RhbmNlKCkgewotCQlYU0xTb3VyY2VQYXJzZXIgbmV3SW5zdGFuY2UgPSBuZXcgWFNMU291cmNlUGFyc2VyKCk7Ci0JCW5ld0luc3RhbmNlLnNldFRva2VuaXplcihnZXRUb2tlbml6ZXIoKS5uZXdJbnN0YW5jZSgpKTsKLQkJcmV0dXJuIG5ld0luc3RhbmNlOwotCX0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRUb2tlbml6ZXIoQmxvY2tUb2tlbml6ZXIgbmV3VG9rZW5pemVyKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJc3VwZXIuc2V0VG9rZW5pemVyKG5ld1Rva2VuaXplcik7Ci0JfQotCQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHBhcnNlTm9kZXMoKSB7Ci0JCS8vIHJlZ2lvbnMgYXJlIGluaXRpYWxseSByZXBvcnRlZCBhcyBjb21wbGV0ZSBvZmZzZXRzIHdpdGhpbiB0aGUKLQkJLy8gc2Nhbm5lZCBpbnB1dAotCQkvLyB0aGV5IGFyZSBhZGp1c3RlZCBoZXJlIHRvIGJlIGluZGV4ZXMgZnJvbSB0aGUgY3VycmVudE5vZGUncyBzdGFydAotCQkvLyBvZmZzZXQKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBoZWFkTm9kZSA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gbGFzdE5vZGUgPSBudWxsOwotCQlJVGV4dFJlZ2lvbiByZWdpb24gPSBudWxsOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGN1cnJlbnROb2RlID0gbnVsbDsKLQkJU3RyaW5nIHR5cGUgPSBudWxsOwotCi0JCXdoaWxlICgocmVnaW9uID0gZ2V0TmV4dFJlZ2lvbigpKSAhPSBudWxsKSB7Ci0JCQl0eXBlID0gcmVnaW9uLmdldFR5cGUoKTsKLQkJCS8vIHRoZXNlIHR5cGVzIChtaWdodCkgZGVtYW5kIGEgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmb3IgZWFjaAotCQkJLy8gb2YgdGhlbQotCQkJCi0JCQlpZiAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQpIHsKLQkJCQlpZiAoY3VycmVudE5vZGUgIT0gbnVsbCAmJiBjdXJyZW50Tm9kZS5nZXRMYXN0UmVnaW9uKCkuZ2V0VHlwZSgpID09IERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCkgewotCQkJCQkvLyBtdWx0aXBsZSBibG9jayB0ZXh0cyBpbmRpY2F0ZWQgZW1iZWRkZWQgY29udGFpbmVyczsgbm8KLQkJCQkJLy8gbmV3IElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24KLQkJCQkJY3VycmVudE5vZGUuYWRkUmVnaW9uKHJlZ2lvbik7Ci0JCQkJCWN1cnJlbnROb2RlLnNldExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSArIHJlZ2lvbi5nZXRMZW5ndGgoKSAtIGN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCQlyZWdpb24uYWRqdXN0U3RhcnQoLWN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCQkvLyBEVyA0LzE2LzIwMDMgcmVnaW9ucyBubyBsb25nZXIgaGF2ZSBwYXJlbnRzCi0JCQkJCS8vIHJlZ2lvbi5zZXRQYXJlbnQoY3VycmVudE5vZGUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gbm90IGNvbnRpbnVpbmcgYSBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uCi0JCQkJCWlmIChjdXJyZW50Tm9kZSAhPSBudWxsKSB7Ci0JCQkJCQkvLyBlbnN1cmUgdGhhdCBhbnkgZXhpc3Rpbmcgbm9kZSBpcyBhdCBsZWFzdAotCQkJCQkJLy8gdGVybWluYXRlZAotCQkJCQkJaWYgKCFjdXJyZW50Tm9kZS5pc0VuZGVkKCkpIHsKLQkJCQkJCQljdXJyZW50Tm9kZS5zZXRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgLSBjdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkJCQkvLyBmQ3VycmVudE5vZGUuc2V0VGV4dExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSAtCi0JCQkJCQkJLy8gZkN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCQkJfQotCQkJCQkJbGFzdE5vZGUgPSBjdXJyZW50Tm9kZTsKLQkJCQkJfQotCQkJCQlmaXJlTm9kZVBhcnNlZChjdXJyZW50Tm9kZSk7Ci0JCQkJCWN1cnJlbnROb2RlID0gY3JlYXRlU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKHR5cGUpOwotCQkJCQlpZiAobGFzdE5vZGUgIT0gbnVsbCkgewotCQkJCQkJbGFzdE5vZGUuc2V0TmV4dChjdXJyZW50Tm9kZSk7Ci0JCQkJCX0KLQkJCQkJY3VycmVudE5vZGUuc2V0UHJldmlvdXMobGFzdE5vZGUpOwotCQkJCQljdXJyZW50Tm9kZS5zZXRTdGFydChyZWdpb24uZ2V0U3RhcnQoKSk7Ci0JCQkJCWN1cnJlbnROb2RlLnNldExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSArIHJlZ2lvbi5nZXRMZW5ndGgoKSAtIGN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCQljdXJyZW50Tm9kZS5zZXRFbmRlZCh0cnVlKTsKLQkJCQkJcmVnaW9uLmFkanVzdFN0YXJ0KC1jdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkJY3VycmVudE5vZGUuYWRkUmVnaW9uKHJlZ2lvbik7Ci0JCQkJCS8vIERXIDQvMTYvMjAwMyByZWdpb25zIG5vIGxvbmdlciBoYXZlIHBhcmVudHMKLQkJCQkJLy8gcmVnaW9uLnNldFBhcmVudChjdXJyZW50Tm9kZSk7Ci0JCQkJfQotCQkJfQotCQkJLy8gdGhlIGZvbGxvd2luZyBjb250ZXh0cyBPUEVOIG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zCi0JCQllbHNlIGlmICgoY3VycmVudE5vZGUgIT0gbnVsbCAmJiBjdXJyZW50Tm9kZS5pc0VuZGVkKCkpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlQpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NIQVJfUkVGRVJFTkNFKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9FTlRJVFlfUkVGRVJFTkNFKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9QSV9PUEVOKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTikgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4pIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX09QRU4pIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0RFQ0xBUkFUSU9OX09QRU4pKSB7Ci0JCQkJaWYgKGN1cnJlbnROb2RlICE9IG51bGwpIHsKLQkJCQkJLy8gZW5zdXJlIHRoYXQgYW55IGV4aXN0aW5nIG5vZGUgaXMgYXQgbGVhc3QgdGVybWluYXRlZAotCQkJCQlpZiAoIWN1cnJlbnROb2RlLmlzRW5kZWQoKSkgewotCQkJCQkJY3VycmVudE5vZGUuc2V0TGVuZ3RoKHJlZ2lvbi5nZXRTdGFydCgpIC0gY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJCQkvLyBmQ3VycmVudE5vZGUuc2V0VGV4dExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSAtCi0JCQkJCQkvLyBmQ3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJCX0KLQkJCQkJbGFzdE5vZGUgPSBjdXJyZW50Tm9kZTsKLQkJCQl9Ci0JCQkJZmlyZU5vZGVQYXJzZWQoY3VycmVudE5vZGUpOwotCQkJCWN1cnJlbnROb2RlID0gY3JlYXRlU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKHR5cGUpOwotCQkJCWlmIChsYXN0Tm9kZSAhPSBudWxsKSB7Ci0JCQkJCWxhc3ROb2RlLnNldE5leHQoY3VycmVudE5vZGUpOwotCQkJCX0KLQkJCQljdXJyZW50Tm9kZS5zZXRQcmV2aW91cyhsYXN0Tm9kZSk7Ci0JCQkJY3VycmVudE5vZGUuc2V0U3RhcnQocmVnaW9uLmdldFN0YXJ0KCkpOwotCQkJCWN1cnJlbnROb2RlLmFkZFJlZ2lvbihyZWdpb24pOwotCQkJCWN1cnJlbnROb2RlLnNldExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSArIHJlZ2lvbi5nZXRMZW5ndGgoKSAtIGN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCXJlZ2lvbi5hZGp1c3RTdGFydCgtY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJLy8gRFcgNC8xNi8yMDAzIHJlZ2lvbnMgbm8gbG9uZ2VyIGhhdmUgcGFyZW50cwotCQkJCS8vIHJlZ2lvbi5zZXRQYXJlbnQoY3VycmVudE5vZGUpOwotCQkJfQotCQkJLy8gdGhlIGZvbGxvd2luZyBjb250ZXh0cyBuZWl0aGVyIG9wZW4gbm9yIGNsb3NlCi0JCQkvLyBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zOyBqdXN0IGFkZCB0byB0aGVtCi0JCQllbHNlIGlmICgodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUykgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhUKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DT05URU5UKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9ET0NUWVBFX0lOVEVSTkFMX1NVQlNFVCkpIHsKLQkJCQljdXJyZW50Tm9kZS5hZGRSZWdpb24ocmVnaW9uKTsKLQkJCQljdXJyZW50Tm9kZS5zZXRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgKyByZWdpb24uZ2V0TGVuZ3RoKCkgLSBjdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQlyZWdpb24uYWRqdXN0U3RhcnQoLWN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCS8vIERXIDQvMTYvMjAwMyByZWdpb25zIG5vIGxvbmdlciBoYXZlIHBhcmVudHMKLQkJCQkvLyByZWdpb24uc2V0UGFyZW50KGN1cnJlbnROb2RlKTsKLQkJCX0KLQkJCS8vIHRoZSBmb2xsb3dpbmcgY29udGV4dHMgY2xvc2Ugb2ZmIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMKLQkJCS8vIGNsZWFubHkKLQkJCWVsc2UgaWYgKCh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfREVDTEFSQVRJT05fQ0xPU0UpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX0NMT1NFKSkgewotCQkJCWN1cnJlbnROb2RlLnNldEVuZGVkKHRydWUpOwotCQkJCWN1cnJlbnROb2RlLnNldExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSArIHJlZ2lvbi5nZXRMZW5ndGgoKSAtIGN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCWN1cnJlbnROb2RlLmFkZFJlZ2lvbihyZWdpb24pOwotCQkJCXJlZ2lvbi5hZGp1c3RTdGFydCgtY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJLy8gRFcgNC8xNi8yMDAzIHJlZ2lvbnMgbm8gbG9uZ2VyIGhhdmUgcGFyZW50cwotCQkJCS8vIHJlZ2lvbi5zZXRQYXJlbnQoY3VycmVudE5vZGUpOwotCQkJfQotCQkJLy8gdGhpcyBpcyBleHRyZW1lbHkgcmFyZSwgYnV0IHZhbGlkCi0JCQllbHNlIGlmICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0UpIHsKLQkJCQlJVGV4dFJlZ2lvbiBsYXN0UmVnaW9uID0gY3VycmVudE5vZGUuZ2V0TGFzdFJlZ2lvbigpOwotCQkJCS8vIHBhY2sgdGhlIGVtYmVkZGVkIGNvbnRhaW5lciB3aXRoIHRoaXMgcmVnaW9uCi0JCQkJaWYgKGxhc3RSZWdpb24gaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikgewotCQkJCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBjb250YWluZXIgPSAoSVRleHRSZWdpb25Db250YWluZXIpIGxhc3RSZWdpb247Ci0JCQkJCWNvbnRhaW5lci5nZXRSZWdpb25zKCkuYWRkKHJlZ2lvbik7Ci0JCQkJCS8vIGNvbnRhaW5lcnMgbXVzdCBoYXZlIHBhcmVudCBzZXQgLi4uCi0JCQkJCS8vIHNldHRpbmcgZm9yIEVBQ0ggc3VicmVnaW9uIGlzIHJlZHVuZGVudCwgYnV0IG5vdCBzdXJlCi0JCQkJCS8vIHdoZXJlIGVsc2UgdG8gZG8sIHNvIHdpbGwgZG8gaGVyZSBmb3Igbm93LgotCQkJCQljb250YWluZXIuc2V0UGFyZW50KGN1cnJlbnROb2RlKTsKLQkJCQkJLy8gRFcgNC8xNi8yMDAzIHJlZ2lvbnMgbm8gbG9uZ2VyIGhhdmUgcGFyZW50cwotCQkJCQkvLyByZWdpb24uc2V0UGFyZW50KGNvbnRhaW5lcik7Ci0JCQkJCXJlZ2lvbi5hZGp1c3RTdGFydChjb250YWluZXIuZ2V0TGVuZ3RoKCkgLSByZWdpb24uZ2V0U3RhcnQoKSk7Ci0JCQkJfQotCQkJCWN1cnJlbnROb2RlLmdldExhc3RSZWdpb24oKS5hZGp1c3RMZW5ndGgocmVnaW9uLmdldExlbmd0aCgpKTsKLQkJCQljdXJyZW50Tm9kZS5hZGp1c3RMZW5ndGgocmVnaW9uLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5VTkRFRklORUQgJiYgY3VycmVudE5vZGUgIT0gbnVsbCkgewotCQkJCS8vIHNraXAgb24gYSB2ZXJ5LWZpcnN0IHJlZ2lvbiBzaXR1YXRpb24gYXMgdGhlIGRlZmF1bHQKLQkJCQkvLyBiZWhhdmlvciBpcyBnb29kIGVub3VnaAotCQkJCS8vIGNvbWJpbmUgd2l0aCBwcmV2aW91cyBpZiBhbHNvIHVuZGVmaW5lZAotCQkJCWlmIChjdXJyZW50Tm9kZS5nZXRMYXN0UmVnaW9uKCkgIT0gbnVsbCAmJiBjdXJyZW50Tm9kZS5nZXRMYXN0UmVnaW9uKCkuZ2V0VHlwZSgpID09IERPTVJlZ2lvbkNvbnRleHQuVU5ERUZJTkVEKSB7Ci0JCQkJCWN1cnJlbnROb2RlLmdldExhc3RSZWdpb24oKS5hZGp1c3RMZW5ndGgocmVnaW9uLmdldExlbmd0aCgpKTsKLQkJCQkJY3VycmVudE5vZGUuYWRqdXN0TGVuZ3RoKHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCS8vIHByZXZpb3VzIHdhc24ndCB1bmRlZmluZWQKLQkJCQllbHNlIHsKLQkJCQkJY3VycmVudE5vZGUuYWRkUmVnaW9uKHJlZ2lvbik7Ci0JCQkJCWN1cnJlbnROb2RlLnNldExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSArIHJlZ2lvbi5nZXRMZW5ndGgoKSAtIGN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCQlyZWdpb24uYWRqdXN0U3RhcnQoLWN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIGlmIGFuIHVua25vd24gdHlwZSBpcyB0aGUgZmlyc3QgcmVnaW9uIGluIHRoZSBkb2N1bWVudCwKLQkJCQkvLyBlbnN1cmUgdGhhdCBhIG5vZGUgZXhpc3RzCi0JCQkJaWYgKGN1cnJlbnROb2RlID09IG51bGwpIHsKLQkJCQkJY3VycmVudE5vZGUgPSBjcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24odHlwZSk7Ci0JCQkJCWN1cnJlbnROb2RlLnNldFN0YXJ0KHJlZ2lvbi5nZXRTdGFydCgpKTsKLQkJCQl9Ci0JCQkJY3VycmVudE5vZGUuYWRkUmVnaW9uKHJlZ2lvbik7Ci0JCQkJY3VycmVudE5vZGUuc2V0TGVuZ3RoKHJlZ2lvbi5nZXRTdGFydCgpICsgcmVnaW9uLmdldExlbmd0aCgpIC0gY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJcmVnaW9uLmFkanVzdFN0YXJ0KC1jdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkvLyBEVyA0LzE2LzIwMDMgcmVnaW9ucyBubyBsb25nZXIgaGF2ZSBwYXJlbnRzCi0JCQkJLy8gcmVnaW9uLnNldFBhcmVudChjdXJyZW50Tm9kZSk7Ci0JCQkJaWYgKERlYnVnLmRlYnVnVG9rZW5pemVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGZvdW5kIHJlZ2lvbiBvZiBub3Qgc3BlY2lmaWNhbGx5IGhhbmRsZWQgdHlwZSAiICsgcmVnaW9uLmdldFR5cGUoKSArICIgQCAiICsgcmVnaW9uLmdldFN0YXJ0KCkgKyAiWyIgKyByZWdpb24uZ2V0TGVuZ3RoKCkgKyAiXSIpOyAvLyROT04tTkxTLTQkLy8kTk9OLU5MUy0zJC8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCQkJLy8kTk9OLU5MUy0zJC8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCS8vIHRoZXNlIHJlZ2lvbnMgYWxzbyBnZXQgdGhlaXIgb3duIG5vZGUsIHNvIGNsb3NlIHRoZW0gY2xlYW5seQotCQkJLy8gTk9URTogdGhlc2UgcmVnaW9ucyBoYXZlIG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zIGNyZWF0ZWQKLQkJCS8vIGZvciB0aGVtIGFib3ZlOyBpdCBtYXkKLQkJCS8vIGJlIG1vcmUgcmVhZGFibGUgaWYgdGhhdCBpcyBoYW5kbGVkIGhlcmUgYXMgd2VsbCwgYnV0IHRoZQotCQkJLy8gY3VycmVudCBsYXlvdXQKLQkJCS8vIGVuc3VyZXMgdGhhdCB0aGV5IG9wZW4gU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyB0aGUgc2FtZSB3YXkKLQkJCWlmICgodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9DSEFSX1JFRkVSRU5DRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfRU5USVRZX1JFRkVSRU5DRSkpIHsKLQkJCQljdXJyZW50Tm9kZS5zZXRFbmRlZCh0cnVlKTsKLQkJCX0KLQkJCWlmIChoZWFkTm9kZSA9PSBudWxsICYmIGN1cnJlbnROb2RlICE9IG51bGwpIHsKLQkJCQloZWFkTm9kZSA9IGN1cnJlbnROb2RlOwotCQkJfQotCQl9Ci0JCWlmIChjdXJyZW50Tm9kZSAhPSBudWxsKSB7Ci0JCQlmaXJlTm9kZVBhcnNlZChjdXJyZW50Tm9kZSk7Ci0JCQljdXJyZW50Tm9kZS5zZXRQcmV2aW91cyhsYXN0Tm9kZSk7Ci0JCX0KLQkJLy8gZlN0cmluZ0lucHV0ID0gbnVsbDsKLQkJcHJpbVJlc2V0KCk7Ci0JCXJldHVybiBoZWFkTm9kZTsKLQl9Ci0JCi19Ci0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3BhcnNlci9yZWdpb25zL1hQYXRoU2VwYXJhdG9yUmVnaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wYXJzZXIvcmVnaW9ucy9YUGF0aFNlcGFyYXRvclJlZ2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyZDU2M2NmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3BhcnNlci9yZWdpb25zL1hQYXRoU2VwYXJhdG9yUmVnaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9ucy5SZWdpb25Ub1N0cmluZ1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotCi0KLXB1YmxpYyBjbGFzcyBYUGF0aFNlcGFyYXRvclJlZ2lvbiBpbXBsZW1lbnRzIElUZXh0UmVnaW9uIHsKLQlzdGF0aWMgcHJpdmF0ZSBmaW5hbCBieXRlIGZUZXh0TGVuZ3RoID0gMTsKLQlzdGF0aWMgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlR5cGUgPSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUzsKLQlwcml2YXRlIHNob3J0IGZMZW5ndGg7Ci0JcHJpdmF0ZSBpbnQgZlN0YXJ0OwotCi0KLQlwdWJsaWMgWFBhdGhTZXBhcmF0b3JSZWdpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIFhQYXRoU2VwYXJhdG9yUmVnaW9uKGludCBzdGFydCwgaW50IHRleHRMZW5ndGgsIGludCBsZW5ndGgpIHsKLQkJdGhpcygpOwotCQlmU3RhcnQgPSBzdGFydDsKLQkJZkxlbmd0aCA9IChzaG9ydCkgbGVuZ3RoOwotCX0KLQotCi0JcHVibGljIHZvaWQgYWRqdXN0TGVuZ3RoKGludCBpKSB7Ci0JCWZMZW5ndGggKz0gaTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIGFkanVzdFN0YXJ0KGludCBpKSB7Ci0JCWZTdGFydCArPSBpOwotCi0JfQotCi0JcHVibGljIHZvaWQgYWRqdXN0VGV4dExlbmd0aChpbnQgaSkgewotCQkvLyBub3Qgc3VwcG9ydGVkCi0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBlcXVhdGVQb3NpdGlvbnMoSVRleHRSZWdpb24gcmVnaW9uKSB7Ci0JCWZTdGFydCA9IHJlZ2lvbi5nZXRTdGFydCgpOwotCQlmTGVuZ3RoID0gKHNob3J0KSByZWdpb24uZ2V0TGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIGludCBnZXRFbmQoKSB7Ci0JCXJldHVybiBmU3RhcnQgKyBmTGVuZ3RoOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQlyZXR1cm4gZkxlbmd0aDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFN0YXJ0KCkgewotCQlyZXR1cm4gZlN0YXJ0OwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0VGV4dEVuZCgpIHsKLQkJcmV0dXJuIGZTdGFydCArIGZUZXh0TGVuZ3RoOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0VGV4dExlbmd0aCgpIHsKLQkJcmV0dXJuIGZUZXh0TGVuZ3RoOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKLQkJcmV0dXJuIGZUeXBlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBSZWdpb25Ub1N0cmluZ1V0aWwudG9TdHJpbmcodGhpcyk7Ci0JfQotCi0JcHVibGljIFN0cnVjdHVyZWREb2N1bWVudEV2ZW50IHVwZGF0ZVJlZ2lvbihPYmplY3QgcmVxdWVzdGVyLCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHBhcmVudCwgU3RyaW5nIGNoYW5nZXMsIGludCByZXF1ZXN0U3RhcnQsIGludCBsZW5ndGhUb1JlcGxhY2UpIHsKLQkJLy8gY2FuIG5ldmVyIGJlIHVwZGF0ZWQKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvcmVnaW9ucy9YUGF0aFJlZ2lvbkNvbnRleHQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3JlZ2lvbnMvWFBhdGhSZWdpb25Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY0NmRiOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvcmVnaW9ucy9YUGF0aFJlZ2lvbkNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9uczsKLQotcHVibGljIGludGVyZmFjZSBYUGF0aFJlZ2lvbkNvbnRleHQgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkxPQ0tfVEVYVCA9ICJCTE9DS19URVhUIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5ERUZJTkVEID0gIlVOREVGSU5FRCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdISVRFX1NQQUNFID0gIldISVRFX1NQQUNFIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfQ09OVEVOVCA9ICJYUEFUSF9DT05URU5UIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX1NFUEFSQVRPUl9ESVYgPSAiWFBBVEhfU0VQQVJBVE9SX0RJViI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX09QRU4gPSAiWFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19PUEVOIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfQ0xPU0UgPSAiWFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19DTE9TRSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9GVU5DVElPTl9OQU1FID0gIlhQQVRIX0ZVTkNUSU9OX05BTUUiOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9yZWdpb25zL1hTTFBhcnNlclJlZ2lvbkZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3JlZ2lvbnMvWFNMUGFyc2VyUmVnaW9uRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWMxMWRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3JlZ2lvbnMvWFNMUGFyc2VyUmVnaW9uRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnMuWE1MUGFyc2VyUmVnaW9uRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIFhTTFBhcnNlclJlZ2lvbkZhY3RvcnkgZXh0ZW5kcyBYTUxQYXJzZXJSZWdpb25GYWN0b3J5IHsKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdGV4dC9JWFNMUGFydGl0aW9ucy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdGV4dC9JWFNMUGFydGl0aW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0OGIxYzQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3RleHQvSVhTTFBhcnRpdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dDsKLQotCi0KLS8qKgotICogVGhpcyBpbnRlcmZhY2UgaXMgbm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkLgotICogSXQgZGVmaW5lcyB0aGUgcGFydGl0aW9uIHR5cGVzIGZvciBYU0wuCi0gKiBDbGllbnRzIHNob3VsZCByZWZlcmVuY2UgdGhlIHBhcnRpdGlvbiB0eXBlIFN0cmluZ3MgZGVmaW5lZCBoZXJlIGRpcmVjdGx5LgotICogCi0gKiBAc2luY2UgMC41TTcKLSAqLwotcHVibGljIGludGVyZmFjZSBJWFNMUGFydGl0aW9ucyB7Ci0JCi0JU3RyaW5nIFhTTF9YUEFUSCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLlhTTF9YUEFUSCI7IC8vJE5PTi1OTFMtMSQKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3RleHQvcnVsZXMvU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdGV4dC9ydWxlcy9TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFmNzM3NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdGV4dC9ydWxlcy9TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5JWFNMUGFydGl0aW9uczsKLQotLyoqCi0gKiBDb250YWlucyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byBzZXR0aW5nIHVwIFN0cnVjdHVyZWQgRG9jdW1lbnQgUGFydGlvbnMgCi0gKiBpbiBYU0wgZG9jdW1lbnRzLiAKLSAqIEBhdXRob3IgZGNhcnZlcgotICoKLSAqLwotcHVibGljIGNsYXNzIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wgZXh0ZW5kcyBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MIGltcGxlbWVudHMgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgewotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0NEQVRBLCBJWE1MUGFydGl0aW9ucy5YTUxfUEksIElYTUxQYXJ0aXRpb25zLlhNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0NPTU1FTlQsIElYTUxQYXJ0aXRpb25zLkRURF9TVUJTRVQsIElYU0xQYXJ0aXRpb25zLlhTTF9YUEFUSH07Ci0KLQkvKioKLQkgKiBUaGUgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCBhZGRzIHRoZSBuZWNlc3NhcnkKLQkgKiBQYXJ0aXRpb24gdHlwZXMgdG8gaGVscCBJZGVudGlmeSBwb3RlbnRpYWwgWFBhdGggYXJlYXMuCi0JICogVGhpcyBpcyBhbHNvIHVzZWQgZm9yIExpbmUgU3R5bGluZyBhbmQgQ29udGVudCBBc3Npc3RhbmNlLgotCSAqLwotCXB1YmxpYyBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMKCkgewotCQlzdXBlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0UGFydGl0aW9uVHlwZShJVGV4dFJlZ2lvbiByZWdpb24sIGludCBvZmZzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCWlmIChyZWdpb24uZ2V0VHlwZSgpID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUpIHsKLQkJCQkJcmVzdWx0ID0gSVhTTFBhcnRpdGlvbnMuWFNMX1hQQVRIOwotCQl9IGVsc2UgewotCQkJcmVzdWx0ID0gc3VwZXIuZ2V0UGFydGl0aW9uVHlwZShyZWdpb24sIG9mZnNldCk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCQlyZXR1cm4gY29uZmlndXJlZENvbnRlbnRUeXBlcy5jbG9uZSgpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSURvY3VtZW50UGFydGl0aW9uZXIgbmV3SW5zdGFuY2UoKSB7Ci0JCVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wgaW5zdGFuY2UgPSBuZXcgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCgpOwotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCQotCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS94c2x0LXNjaGVtYXMveGluY2x1ZGUueHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hpbmNsdWRlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIxY2IzMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS94c2x0LXNjaGVtYXMveGluY2x1ZGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBXM0PCriBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UKLSAqIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LXNvZnR3YXJlLTE5OTgwNzIwCi0gKgotICogQ29weXJpZ2h0IMKpIDE5OTQtMjAwMiBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YKLSAqIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsCi0gKiBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLwotICoKLSAqIFRoaXMgVzNDIHdvcmsgKGluY2x1ZGluZyBzb2Z0d2FyZSwgZG9jdW1lbnRzLCBvciBvdGhlciByZWxhdGVkIGl0ZW1zKSBpcyBiZWluZwotICogcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4gQnkgb2J0YWluaW5nLAotICogdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLAotICogdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczoKLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLSAqIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sICBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCi0gKiBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcwotICogb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zLCB0aGF0Ci0gKiB5b3UgbWFrZToKLSAqCi0gKiAgMS4gVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkCi0gKiAgICAgb3IgZGVyaXZhdGl2ZSB3b3JrLgotICogIDIuIEFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQKLSAqICAgICBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCBhIHNob3J0IG5vdGljZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0gKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSBzaG91bGQgYmUgdXNlZCB3aXRoaW4gdGhlIGJvZHkgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlOiAiQ29weXJpZ2h0IMKpIFskZGF0ZS1vZi1zb2Z0d2FyZV0gV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvIgotICogIDMuIE5vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBXM0MgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZSBjaGFuZ2VzCi0gKiAgICAgd2VyZSBtYWRlLiAoV2UgcmVjb21tZW5kIHlvdSBwcm92aWRlIFVSSXMgdG8gdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGNvZGUgaXMKLSAqICAgICBkZXJpdmVkLikKLSAqCi0gKiBUSElTIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIAotICogUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgCi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRgotICogVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsCi0gKiBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4KLSAqCi0gKiBDT1BZUklHSFQgSE9MREVSUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KLSAqCi0gKiBUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5Ci0gKiBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodAotICogaW4gdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQKLSAqIGhvbGRlcnMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0gLS0+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIKLSAgICAgICAgICAgZmluYWxEZWZhdWx0PSJleHRlbnNpb24iPgotCi0gIDx4czplbGVtZW50IG5hbWU9ImluY2x1ZGUiIHR5cGU9InhpOmluY2x1ZGVUeXBlIiAvPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJpbmNsdWRlVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcgPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSd4aTpmYWxsYmFjaycgLz4KLSAgICAgIDx4czphbnkgbmFtZXNwYWNlPScjI290aGVyJyBwcm9jZXNzQ29udGVudHM9J2xheCcgLz4KLSAgICAgIDx4czphbnkgbmFtZXNwYWNlPScjI2xvY2FsJyBwcm9jZXNzQ29udGVudHM9J2xheCcgLz4KLSAgICA8L3hzOmNob2ljZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOmFueVVSSSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGFyc2UiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9InhtbCIKLSAgICAgICAgICAgICAgICAgIHR5cGU9InhpOnBhcnNlVHlwZSIgLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Inhwb2ludGVyIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuY29kaW5nIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFjY2VwdCIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhY2NlcHQtbGFuZ3VhZ2UiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnN0cmluZyIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InBhcnNlVHlwZSI+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieG1sIi8+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRleHQiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0gIAotICA8eHM6ZWxlbWVudCBuYW1lPSJmYWxsYmFjayIgdHlwZT0ieGk6ZmFsbGJhY2tUeXBlIiAvPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJmYWxsYmFja1R5cGUiIG1peGVkPSJ0cnVlIj4KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4aTppbmNsdWRlIi8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI2xvY2FsIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgIDwveHM6Y2hvaWNlPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS94c2x0LXNjaGVtYXMveHNsdC0xLjAueHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hzbHQtMS4wLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhMWJhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS94c2x0LXNjaGVtYXMveHNsdC0xLjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgLSBXM0MsIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwKLSAqIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSAyMDA3MTIyOCAtIFNUQVIgLSBVcGRhdGVkIHRvIFhNTCBTY2hlbWFzIDIwMDEgMS4wCi0gKiAgICAgICAgIE5vdGUgdGhpcyBzY2hlbWFzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgc2NoZW1hIGZvciBYU0xUIDIuMCwgaXQgaGFzCi0gKiAgICAgICAgIGJlZW4gc3RyaXBwZWQgb2YgYWxsIFhTTFQgMi4wIGFkZGl0aW9ucywgdG8gYnJpbmcgaXQgaW4gbGluZSB3aXRoIHRoZSBYU0xUIDEuMAotICogICAgICAgICBzcGVjaWZpY2F0aW9uLgotICogICAgICAgICBUaGUgb3JpZ2luYWwgdmVyc2lvbiBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3d3dy53My5vcmcvMjAwNy9zY2hlbWEtZm9yLXhzbHQyMC54c2QKLSAqICAgICAgICAgVGhlIG9yaWdpbmFsIFczQyBjb3B5cmlnaHQgbm90aWNlIGlzIGluY2x1ZGVkOgotICogICAgIERhdmlkIENhcnZlciAtIDIwMDgwMzMwIC0gU1RBUiAtIGJ1ZyAyMjQ4MTkgLSBjaGFuZ2VkIHByb2Nlc0NvbnRlbnRzIGZyb20gbGF4IHRvIHNraXAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI5MzkwMiAtIGNvcnJlY3QgZXhjbHVkZS1yZXN1bHQtcHJlZml4IHRvIHVzZSBwcmVmaXgtbGlzdAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBXM0PCriBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UKLSAqIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LXNvZnR3YXJlLTE5OTgwNzIwCi0gKgotICogQ29weXJpZ2h0IMKpIDE5OTQtMjAwMiBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YKLSAqIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsCi0gKiBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLwotICoKLSAqIFRoaXMgVzNDIHdvcmsgKGluY2x1ZGluZyBzb2Z0d2FyZSwgZG9jdW1lbnRzLCBvciBvdGhlciByZWxhdGVkIGl0ZW1zKSBpcyBiZWluZwotICogcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4gQnkgb2J0YWluaW5nLAotICogdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLAotICogdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczoKLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLSAqIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sICBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCi0gKiBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcwotICogb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zLCB0aGF0Ci0gKiB5b3UgbWFrZToKLSAqCi0gKiAgMS4gVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkCi0gKiAgICAgb3IgZGVyaXZhdGl2ZSB3b3JrLgotICogIDIuIEFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQKLSAqICAgICBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCBhIHNob3J0IG5vdGljZSBvZiB0aGUgZm9sbG93aW5nIGZvcm0gKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSBzaG91bGQgYmUgdXNlZCB3aXRoaW4gdGhlIGJvZHkgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlOiAiQ29weXJpZ2h0IMKpIFskZGF0ZS1vZi1zb2Z0d2FyZV0gV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvIgotICogIDMuIE5vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBXM0MgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZSBjaGFuZ2VzCi0gKiAgICAgd2VyZSBtYWRlLiAoV2UgcmVjb21tZW5kIHlvdSBwcm92aWRlIFVSSXMgdG8gdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGNvZGUgaXMKLSAqICAgICBkZXJpdmVkLikKLSAqCi0gKiBUSElTIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIAotICogUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgCi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRgotICogVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsCi0gKiBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4KLSAqCi0gKiBDT1BZUklHSFQgSE9MREVSUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KLSAqCi0gKiBUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5Ci0gKiBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodAotICogaW4gdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQKLSAqIGhvbGRlcnMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0gLS0+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIAotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgCi0gICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiA+Ci0KLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci08eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gIAotICAgPC94czpkb2N1bWVudGF0aW9uPgotPC94czphbm5vdGF0aW9uPiAgIAotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLSAKLTwhLS0KLVRoZSBkZWNsYXJhdGlvbiBvZiB4bWw6c3BhY2UgYW5kIHhtbDpsYW5nIG1heSBuZWVkIHRvIGJlIGNvbW1lbnRlZCBvdXQgYmVjYXVzZQotb2YgcHJvYmxlbXMgcHJvY2Vzc2luZyB0aGUgc2NoZW1hIHVzaW5nIHZhcmlvdXMgdG9vbHMKLS0tPgotICAgICAgCi08eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiAKLSAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotICAgIFBBUlQgQTogZGVmaW5pdGlvbnMgb2YgY29tcGxleCB0eXBlcyBhbmQgbW9kZWwgZ3JvdXBzIHVzZWQgYXMgdGhlIGJhc2lzIAotICAgICAgICAgICAgZm9yIGVsZW1lbnQgZGVmaW5pdGlvbnMKLSAgPC94czpkb2N1bWVudGF0aW9uPgotPC94czphbm5vdGF0aW9uPiAgIAotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdlbmVyaWMtZWxlbWVudC10eXBlIiBtaXhlZD0idHJ1ZSI+Ci0gIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLTwhLS0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InZlcnNpb25lZC1lbGVtZW50LXR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIj4gICAgCi0gICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzOmRlY2ltYWwiIHVzZT0ib3B0aW9uYWwiLz4KLQotICAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotPC94czpjb21wbGV4VHlwZT4KLS0tPgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiIG1peGVkPSJmYWxzZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIj4KLSAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotCi08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0ic2VxdWVuY2UtY29uc3RydWN0b3IiPgotICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIj4gICAgCi0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLTx4czpncm91cCBuYW1lPSJzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCI+Ci0gIDx4czpjaG9pY2U+Ci0KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp2YXJpYWJsZSIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmluc3RydWN0aW9uIi8+Ci0gICAgPHhzOmdyb3VwIHJlZj0ieHNsOnJlc3VsdC1lbGVtZW50cyIvPgotICA8L3hzOmNob2ljZT4KLTwveHM6Z3JvdXA+Ci0KLTx4czplbGVtZW50IG5hbWU9ImRlY2xhcmF0aW9uIiB0eXBlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiIGFic3RyYWN0PSJ0cnVlIi8+Ci0KLTx4czplbGVtZW50IG5hbWU9Imluc3RydWN0aW9uIiB0eXBlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiIGFic3RyYWN0PSJ0cnVlIi8+Ci0KLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci08eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0KLSAgICBQQVJUIEI6IGRlZmluaXRpb25zIG9mIGluZGl2aWR1YWwgWFNMVCBlbGVtZW50cyAgICAKLSAgICBFbGVtZW50cyBhcmUgbGlzdGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci4gICAgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0KLTx4czplbGVtZW50IG5hbWU9ImFwcGx5LWltcG9ydHMiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgVGhpcyBjb21tYW5kIGFwcGxpZXMgdGVtcGxhdGUgcnVsZSBmcm9tIGFuIGltcG9ydGVkIHN0eWxlIHNoZWV0LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIi8+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iYXBwbHktdGVtcGxhdGVzIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIEFwcGxpZXMgdGVtcGxhdGUgcnVsZXMgYmFzZWQgb24gYSBnaXZlbiBYUGF0aCBzZWxlY3Rpb24gY3JpdGVyaWEuICBJZiBubyB0ZW1wbGF0ZQotICAgICAgICBpcyBmb3VuZCB0aGUgYnVpbHQgaW4gdGVtcGxhdGVzIGFyZSB1c2VkLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnNvcnQiLz4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aXRoLXBhcmFtIi8+Ci0gICAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIGRlZmF1bHQ9ImNoaWxkOjpub2RlKCkiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFNwZWNpZmllcyB0aGUgWFBhdGggY3JpdGVyaWEgdG8gYmUgdXNlZCB0byBhcHBseSB0aGUgdGVtcGxhdGVzLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9kZSIgdHlwZT0ieHNsOm1vZGUiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGVtcGxhdGUgdG8gYmUgdXNlZCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4KLSAgICAgICAgICAgICAgICAgb25lIHdheSBpbiB3aGljaCB0byBwcm9jZXNzIHRoZSBnaXZlbiBjcml0ZXJpYS4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBEZWZpbmVzIGFuIGF0dHJpYnV0ZSB0aGF0IHdpbGwgYmUgcHV0IGluIHRoZSByZXN1bHQgc2V0LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6YXZ0IiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBiZSBjcmVhdGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4c2w6YXZ0Ij4KLSAgICAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlLgotICAgICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PiAgICAgICAgCi0KLTx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZS1zZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIERlZmluZXMgYSBncm91cCBvZiBhdHRyaWJ1dGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBjYW4gYmUgcmV1c2VkCi0gICAgICAgICBieSBvdGhlciBwb3J0aW9ucyBvZiB0aGUgc3R5bGVzaGVldCBkdXJpbmcgcHJvY2Vzc2luZy4gIFRoZXNlIGF0dHJpYnV0ZXMKLSAgICAgICAgIHdpbGwgYXBwZWFyIG9uIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgd2hlbiB1c2VkLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6YXR0cmlidXRlIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIE5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBzZXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGF0dHJpYnV0ZXMtc2V0cyBzZXBhcmF0ZWQgYnkgc3BhY2VzIHRvIGJlIHVzZWQgaW4gdGhpcwotICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHNldC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY2FsbC10ZW1wbGF0ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSB0ZW1wbGF0ZSB0byBiZSBjYWxsZWQuIEEgY2FsbGVkIHRlbXBsYXRlCi0gICAgICAgIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBpdCBpcyBjYWxsZWQuICBJdCBpcyBub3QgZXhlY3V0ZWQgZGlyZWN0bHkgYnkKLSAgICAgICAgYW4gYXBwbHktdGVtcGxhdGVzIGNvbW1hbmQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLQotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOndpdGgtcGFyYW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBUaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUgdG8gYmUgY2FsbGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJjaG9vc2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIENob29zZSBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgV2hlbi9PdGhlcndpc2UgY29tYmluYXRpb24uICBJdCBpcwotICAgICAgICAgdGhlIHdheSB0byBpbXBsZW1lbnQgY2FzZSBzZWxlY3Rpb24gb2YgSWYvVGhlbi9FbHNlSWYgdHlwZSBsb2dpY2FsCi0gICAgICAgICBwcm9jZXNzaW5nLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOndoZW4iIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6b3RoZXJ3aXNlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImNvbW1lbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgQ3JlYXRlcyBhIGNvbW1lbnQgbm9kZSBpbiB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciIvPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImNvcHkiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIENvcHkgY3JlYXRlcyBhIGR1cGxpY2F0ZSBvZiB0aGUgY3VycmVudCBub2RlIGJlaW5nIHByb2Nlc3NlZC4gIEl0Ci0gICAgICAgICBkb2VzIG5vdCBjb3B5IHRoZSBhdHRyaWJ1dGVzIG9yIGNoaWxkcmVuIG5vZGVzLiAgU2VlIGNvcHktb2YgZm9yCi0gICAgICAgICBjb3B5aW5nIGF0dHJpYnV0ZXMgYW5kIGNoaWxkcmVuIG5vZGVzLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2w6UU5hbWVzIiBkZWZhdWx0PSIiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgc2V0cyB0byBhcHBseSB0byB0aGUKLSAgICAgICAgICAgICAgICAgcmVzdWx0IGRvY3VtZW50LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJjb3B5LW9mIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBDcmVhdGVzIGEgY29weS1vZiB0aGUgY3VycmVudCBub2RlIGFuZCBhbGwgYXR0cmlidXRlcywgYW5kIGNoaWxkcmVuIG5vZGVzLgotICAgICAgICAgSXQgY29waWVzIHRoZSBub2RlcyBzcGVjaWZpZWQgYnkgdGhlIFhQYXRoIHNlbGVjdGlvbiBjcml0ZXJpYS4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgWFBhdGggZXhwcmVzc2lvbnMgdGhhdCBzZWxlY3QgdGhlIG5vZGVzIHRvIGJlIGNvcGllZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZGVjaW1hbC1mb3JtYXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIERlZmluZXMgdGhlIG91dHB1dCBmb3JtYXQgdG8gYmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgbnVtYmVycyBpbnRvIHN0cmluZ3Mgd2hlbgotICAgICAgICAgdXNlZCB3aXRoIHRoZSBYUGF0aCBmdW5jdGlvbiBmb3JtYXQtbnVtYmVyKCkuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIHVuaXF1ZSBuYW1lIGZvciB0aGlzIGZvcm1hdC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlY2ltYWwtc2VwYXJhdG9yIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iLiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBUaGUgY2hhcmFjdGVyIHRvIHVzZSB0byByZXByZXNlbnQgYSBkZWNpbWFsIHBvaW50LgotICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBwZXJpb2QuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzbDpjaGFyIiBkZWZhdWx0PSIsIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIHRvIHNlcGVyYXRlIHRob3VzYW5kcy4gIFRoZQotICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBhIGNvbW1hLiAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmZpbml0eSIgdHlwZT0ieHM6c3RyaW5nIiBkZWZhdWx0PSJJbmZpbml0eSI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBzdHJpbmcgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgaW5maW5pdHkuIFRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICBpcyBJbmZpbml0eS4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1pbnVzLXNpZ24iIHR5cGU9InhzbDpjaGFyIiBkZWZhdWx0PSItIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBuZWdhdGl2ZSBudW1iZXJzLgotICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgdGhlIG1pbnVzIHNpZ24uCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJOYU4iIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iTmFOIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBzdHJpbmcgdG8gYmUgdXNlZCB3aGVuIHRoZSBpbnB1dCBpcyBOb3QgYSBOdW1iZXIuCi0gICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyBOYU4uCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJjZW50IiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iJSI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBjaGFyYWN0ZXIgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgYSBwZXJjZW50LgotICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgYSBwZXJjZW50IHNpZ24uCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXItbWlsbGUiIHR5cGU9InhzbDpjaGFyIiBkZWZhdWx0PSImI3gyMDMwOyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBUaGUgY2hhcmFjdGVyIHRvIGJlIHVzZWQgdG8gcmVwcmVzZXQgcGVyIHRob3VzYW5kLgotICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgJiN4MjAzMDsKLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Inplcm8tZGlnaXQiIHR5cGU9InhzbDpjaGFyIiBkZWZhdWx0PSIwIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGlnaXQgemVyby4KLSAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIHRoZSBudW1iZXIgemVyby4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRpZ2l0IiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iIyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgY2hhcmFjdGVyIHRvIGJlIHVzZWQgdG8gaW5kaWNhdGVkIHdoZXJlIGEgZGlnaXQKLSAgICAgICAgICAgICAgICAgICBpcyByZXF1aXJlZC4gIFRoZSBkZWZhdWx0IHZhbHVlcyBpcyAjIGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhdHRlcm4tc2VwYXJhdG9yIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iOyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgY2hhcmFjdGVyIHRvIGJlIHVzZWQgdG8gc2VwYXJhdGUgcG9zaXRpdmUgYW5kCi0gICAgICAgICAgICAgICAgICAgbmVnYXRpdmUgc3ViLXBhdHRlcm5zIGluIGEgcGF0dGVybi4gIFRoZSBkZWZhdWx0IGlzIGEgc2VtaS1jb2xvbi4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIENyZWF0ZXMgYW4gZWxlbWVudCBpbiB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOmF2dCIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBiZSBjcmVhdGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4c2w6YXZ0Ij4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBuYW1lc3BhY2UgdGhlIGVsZW1lbnQgYmVsb25ncy4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNsOlFOYW1lcyIgZGVmYXVsdD0iIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZS1zZXQgbmFtZXMgdG8gCi0gICAgICAgICAgICAgICAgICAgYmUgaW5jbHVkZWQgb24gdGhlIGVsZW1lbnQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImZhbGxiYWNrIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIiB0eXBlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICBTcGVjaWZpZXMgYWx0ZXJuYXRlIGNvZGUgdG8gYmUgcnVuIGlmIHRoZSBYU0xUIHByb2Nlc3NvciBkb2Vzbid0IHVuZGVyc3RhbmQKLSAgICAgICAgICBhIHBhcnRpY3VsYXIgeHNsIGVsZW1lbnQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJmb3ItZWFjaCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgQSBsb29waW5nIGNvbW1hbmQgdGhhdCBwcm9jZXNzZXMgZWFjaCBub2RlIHJldHVybmVkIGZyb20gdGhlCi0gICAgICAgICBYUGF0aCBzZWxlY3Rpb24gY3JpdGVyaWEuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnNvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIFhQYXRoIHNlbGVjdGlvbiBjcml0ZXJpYSB0byBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZQotICAgICAgICAgICAgICAgICAgICBub2RlIHNldCB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIGxvb3AuICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iaWYiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIEEgbG9naWNhbCBjb25zdHJ1Y3QsIHRoYXQgd2lsbCBvbmx5IGJlIGFwcGxpZWQgd2hlbiB0aGUgWFBhdGggZXhwcmVzc2lvbgotICAgICAgICAgdGVzdCByZXR1cm5zIHRydWUuICBJdCBkb2VzIG5vdCBzdXBwb3J0IGEgRWxzZSBzdGF0ZW1lbnQsIHNlZSBDaG9vc2UKLSAgICAgICAgIGZvciBpbXBsZW1lbnRpbmcgSWYvVGhlbi9FbHNlSWYgbG9naWMuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBYUGF0aCBleHByZXNzaW9uIHRvIHRlc3QgdGhlIHZhcmlhYmxlIG9yIG5vZGUgYWdhaW5zdC4KLSAgICAgICAgICAgICAgICAgICAgVGhlIHN0YXRlbWVudHMgbmVzdGVkIHdpbGwgb25seSBiZSBleGVjdXRlZCBpZiB0aGUgdGVzdCByZXR1cm5zCi0gICAgICAgICAgICAgICAgICAgIHRydWUuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImltcG9ydCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBBbGxvd3MgdGhlIGluY2x1c2lvbiBvZiBvbmUgc3R5bGVzaGVldCBpbnRvIGFub3RoZXIuICBJZiB0aGVyZSBhcmUKLSAgICAgICAgdGVtcGxhdGVzIHRoYXQgYXJlIHRoZSBzYW1lIGluIHRoZSBwYXJlbnQgc3R5bGVzaGVldCB0aGF0IGFyZSBpbiB0aGUKLSAgICAgICAgc3R5bGVzaGVldCBiZWluZyBpbXBvcnRlZCwgdGhlIHBhcmVudCBzdHlsZXNoZWV0J3MgdGVtcGxhdGVzIHdpbGwgCi0gICAgICAgIHRha2UgcHJlY2VkZW5jZS4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBVUkkgZm9yIHRoZSBzdHlsZXNoZWV0LiAgVGhpcyBpcyBlaXRoZXIgYSByZWxhdGl2ZQotICAgICAgICAgICAgICAgICAgb3IgcGh5c2ljYWwgVVJJLiAgSWYgaXQgaXMgcmVsYXRpdmUsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgb2YgdGhlIHN0eWxlc2hlZXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLQotPHhzOmVsZW1lbnQgbmFtZT0iaW5jbHVkZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgSW5jbHVkZSBicmluZ3MgaW4gYW5vdGhlciBzdHlsZXNoZWV0IGludG8gdGhlIGN1cnJlbnQgb25lLiAgVW5saWtlCi0gICAgICAgICB0aGUgSW1wb3J0IHN0YXRlbWVudCwgdGhlIHN0eWxlc2hlZXQgdGVtcGxhdGVzIGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZQotICAgICAgICAgYXMgdGhlIG9uZSBiZWluZyBpbmNsdWRlZCBpbiB0by4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJocmVmIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIFVSSSBmb3IgdGhlIHN0eWxlc2hlZXQuICBUaGlzIGlzIGVpdGhlciBhIHJlbGF0aXZlCi0gICAgICAgICAgICAgICAgICAgICBvciBwaHlzaWNhbCBVUkkuICBJZiBpdCBpcyByZWxhdGl2ZSwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3R5bGVzaGVldC4KLSAgICAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ia2V5IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIEEga2V5IGlzIGEgd2F5IHRvIGluZGV4IGEgc2V0IG9mIG5vZGVzIHRvIGJlIHJldHJpZXZlZCBsYXRlciBieSB0aGUgWFBhdGgKLSAgICAgICAga2V5KCkgZnVuY3Rpb24uICBJdCBhbGxvd3MgZmFzdGVyIGFjY2VzcyB0byBhIHNlcmllcyBvZiBub2RlcyBiYXNlZCBvZmYgb2YgYQotICAgICAgICB1bmlxdWUga2V5IHdpdGggaW4gYSBsaXN0IG9mIG5vZGVzLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIG5hbWUgb2YgdGhlIGtleSB0byBiZSBjcmVhdGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InhzbDpwYXR0ZXJuIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIERlZmluZXMgdGhlIFhQYXRoIGV4cHJlc3Npb24gdG8gd2hpY2ggdGhlIG5vZGVzIHdpbGwKLSAgICAgICAgICAgICAgICAgIGJlIGFwcGxpZWQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIHZhbHVlIG9mIHRoZSBrZXkgZm9yIGVhY2ggb2YgdGhlIG5vZGVzLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im1lc3NhZ2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIFdyaXRlcyBhIG1lc3NhZ2UgdG8gdGhlIG91dHB1dCwgdXN1YWxseSBzdGRvdXQgb3Igc3RkZXJyby4gIFR5cGljYWxseQotICAgICAgICAgdXNlZCB0byByZXBvcnQgZXJyb3JzIGR1cmluZyBwcm9jZXNzaW5nLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVybWluYXRlIiB0eXBlPSJ4c2w6YXZ0IiBkZWZhdWx0PSJubyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBJbmRpY2F0ZXMgd2hldGhlciBwcm9jZXNzaW5nIHNob3VsZCBiZSBlbmRlZCBhZnRlcgotICAgICAgICAgICAgICAgICAgcHJvZHVjaW5nIHRoZSBtZXNzYWdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgbm8uCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im5hbWVzcGFjZS1hbGlhcyIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgQWxsb3dzIHJlcGxhY2luZyBvZiBhIHBhcnRpY3VsYXIgbmFtZXNwYWNlIGZyb20gdGhlIHN0eWxlIHNoZWV0IHRvIGEgZGlmZmVyZW50Ci0gICAgICAgICBuYW1lc3BhY2Ugd2hlbiB3cml0aW5nIHRoZSByZXN1bHQgZG9jdW1lbnQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3R5bGVzaGVldC1wcmVmaXgiIHR5cGU9InhzbDpwcmVmaXgtb3ItZGVmYXVsdCIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHByZWZpeCB5b3Ugd2FudCB0byBjaGFuZ2UuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXN1bHQtcHJlZml4IiB0eXBlPSJ4c2w6cHJlZml4LW9yLWRlZmF1bHQiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBwcmVmaXggdGhlIHJlc3VsdCBpcyB0byB1c2UuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im51bWJlciIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBVc2VkIHRvIGRldGVybWluZSB0aGUgaW50ZWdlciBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBub2RlLiAgQWxzbyB1c2VkCi0gICAgICAgIGluIGZvcm1hdHRpbmcgYSBudW1iZXIuICAgICAKLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsdWUiIHR5cGU9InhzbDpleHByZXNzaW9uIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIEEgbnVtYmVyIHByb3ZpZGVkIGJ5IHRoZSBpbXBsZW1lbnRvciBpbnN0ZWFkIG9mCi0gICAgICAgICAgICAgICAgICBhIHN5c3RlbSBnZW5lcmF0ZWQgbnVtYmVyLiAgVGhlIHBvc2l0aW9uKCkgeHBhdGggZnVuY3Rpb24gY2FuCi0gICAgICAgICAgICAgICAgICBiZSB1c2VkIGFzIHdlbGwuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsZXZlbCIgdHlwZT0ieHNsOmxldmVsIiBkZWZhdWx0PSJzaW5nbGUiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFNwZWNpZmllcyBob3cgdGhlIHNlcXVlbmNlIG51bWJlciBpcyBhc3NpZ25lZC4gIFZhbGlkIHZhbHVlcwotICAgICAgICAgICAgICAgICBhcmUgc2luZ2xlIChkZWZhdWx0KSwgbXVsdGlwbGUsIGFuZCBhbnkuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb3VudCIgdHlwZT0ieHNsOnBhdHRlcm4iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBbiBYUGF0aCBleHByZXNzaW9uIHRoYXQgaW5kaWNhdGVzIHdoYXQgbm9kZXMgYXJlIHRvIGJlCi0gICAgICAgICAgICAgICAgIGNvdW50ZWQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmcm9tIiB0eXBlPSJ4c2w6cGF0dGVybiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIEFuIFhQYXRoIGV4cHJlc3Npb24gdGhhdCBpbmRpY2F0ZXMgd2hlcmUgY291bnRpbmcgd2lsbCBzdGFydC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0iMSI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBmb3JtYXQgc3RyaW5nIGluIHdoaWNoIHRoZSBudW1iZXIgaXMgdG8gYmUgZm9ybWF0dGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNsOmF2dCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBsYW5ndWFnZSBjb2RlIHVzZWQgdG8gaW5kaWNhdGUgd2hhdCBzcG9rZW4gbGFuZ3VhZ2UgaXMKLSAgICAgICAgICAgICAgICAgdG8gYmUgdXNlZCBmb3IgdGhlIGZvcm1hdCBzdHJpbmcuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsZXR0ZXItdmFsdWUiIHR5cGU9InhzbDphdnQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBTcGVjaWZpZXMgd2hldGhlciB0aGUgbnVtYmVyIGlzIGFscGhhYmV0aWNhbCBvciB0cmFkaXRpb25hbC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNlcGFyYXRvciIgdHlwZT0ieHNsOmF2dCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBjaGFyYWN0ZXIgdG8gYmUgdXNlZCB0byBzZXBlcmF0ZSBhIGdyb3VwIG9mIG51bWJlcnMuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zaXplIiB0eXBlPSJ4c2w6YXZ0Ij4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gQSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiBhIGdyb3VwLiAgVGhlCi0gICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIDMuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im90aGVyd2lzZSIgdHlwZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgT3RoZXJ3aXNlIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGRlZmF1bHQgYWN0aW9uIHdoZW4gbm9uZSBvZiB0aGUgCi0gICAgICAgICBXaGVuIHRlc3RzIGFyZSB0cnVlLCBpbiBhIENob29zZSBzdGF0ZW1lbnQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ib3V0cHV0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgU3BlY2lmaWVzIHRoZSBmb3JtYXQgZm9yIHRoZSByZXN1bHQgZG9jdW1lbnQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWV0aG9kIiB0eXBlPSJ4c2w6bWV0aG9kIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVmFsaWQgdmFsdWVzIGFyZSB4bWwsIGh0bWwsIGFuZCB0ZXh0LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2RhdGEtc2VjdGlvbi1lbGVtZW50cyIgdHlwZT0ieHNsOlFOYW1lcyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gQSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB3aG9zZSBjb250ZW50IHNob3VsZAotICAgICAgICAgICAgICAgICBiZSB3cmFwcGVkIHdpdGggQ0RBVEEuICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1wdWJsaWMiIHR5cGU9InhzOnN0cmluZyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gU2V0cyB0aGUgdmFsdWUgb2YgdGhlIFB1YmxpYyBkb2N0eXBlIGF0dHJpYnV0ZS4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRvY3R5cGUtc3lzdGVtIiB0eXBlPSJ4czpzdHJpbmciPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBTeXN0ZW0gZG9jdHlwZSBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgZW5jb2RpbmcgdG8gdXNlLiAgaS5lLiBVVEYtOCwgVVRGLTE2LCBldGMuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRlbnQiIHR5cGU9InhzbDp5ZXMtb3Itbm8iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFNob3VsZCB0aGUgcmVzdWx0IGRvY3VtZW50IGJlIHByZXR0eS1wcmludGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWVkaWEtdHlwZSIgdHlwZT0ieHM6c3RyaW5nIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIG1pbWUgdHlwZSBvZiB0aGUgcmVzdWx0IGRvY3VtZW50LiAgaS5lLiB0ZXh0L3htbAotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib21pdC14bWwtZGVjbGFyYXRpb24iIHR5cGU9InhzbDp5ZXMtb3Itbm8iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgV2hldGhlciB0aGUgeG1sIGRlY2xhdGlvbiBzaG91bGQgYmUgY3JlYXRlZCBpbiB0aGUgCi0gICAgICAgICAgICAgICAgICByZXN1bHQgZG9jdW1lbnQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGFuZGFsb25lIiB0eXBlPSJ4c2w6eWVzLW9yLW5vLW9yLW9taXQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIEluZGljYXRlcyBpZiBhIHN0YW5kYWxvbmUgZGVjbGFydGlvbiBzaG91bGQgb2NjY3VyIGluIHRoZQotICAgICAgICAgICAgICAgICByZXN1bHQgZG9jdW1lbnQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpOTVRPS0VOIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBTZXRzIHRoZSBXM0MgdmVyc2lvbiBudW1iZXIgdG8gYmUgdXNlZCB3aXRoIHRoZQotICAgICAgICAgICAgICAgICByZXN1bHQgZG9jdW1lbnQuICBPbmx5IHVzZWQgZm9yIEhUTUwgb3IgWE1MIG91dHB1dC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0icGFyYW0iPgotICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgIFVzZWQgdG8gZGVjbGFyZSBhIGxvY2FsIG9yIGdsb2JhbCBwYXJhbWV0ZXIuCi0gICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB0byBiZSBjcmVhdGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBbiBYUGF0aCBleHByZXNzaW9uIHRvIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICAgaWYgbm90aGluZyBpcyBwYXNzZWQgdG8gaXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLQotPHhzOmVsZW1lbnQgbmFtZT0icHJlc2VydmUtc3BhY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBJbmRpY2F0ZXMgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIHRvIGhhdmUgd2hpdGUgc3BhY2UgcHJlc2VydmVkIHdoZW4KLSAgICAgICAgIGNyZWF0aW5nIHRoZSByZXN1bHQgZG9jdW1lbnQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50cyIgdHlwZT0ieHNsOm5hbWV0ZXN0cyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBIHNwYWNlIHNlcGVyYXRlZCBsaXN0IG9mIGVsZW1lbnRzIGluIHdoaWNoCi0gICAgICAgICAgICAgICAgICB3aGl0ZSBzcGFjZSBpcyBzaWduaWZpY2FudCBhbmQgc2hvdWxkIGJlIHByZXNlcnZlZCB3aGVuCi0gICAgICAgICAgICAgICAgICBjcmVhdGluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgQ3JlYXRlcyBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gaW4gdGhlIHJlc3VsdCBkb2N1bWVudC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6YXZ0IiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIG5hbWUgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG8gYmUgY3JlYXRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ic29ydCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBTb3J0cyB0aGUgb3V0cHV0IG9mIHRoZSBub2RlIHNldC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFNwZWNpZmllcyB0aGUgWFBhdGggZXhwcmVzc2lvbiB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbm9kZXNldAotICAgICAgICAgICAgICAgICB0byBiZSBzb3J0ZWQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4gIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzbDphdnQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgbGFuZ3VhZ2UgY29kZSB0byBiZSB1c2VkIGZvciBzb3J0aW5nLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+ICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkYXRhLXR5cGUiIHR5cGU9InhzbDphdnQiIGRlZmF1bHQ9InRleHQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVGhlIHR5cGUgb2YgZGF0YSB0aGF0IGlzIGJlaW5nIHNvcnRlZC4gVGhlIGRlZmF1bHQKLSAgICAgICAgICAgICAgICAgIGlzIHRleHQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4gICAgICAgIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9yZGVyIiB0eXBlPSJ4c2w6YXZ0IiBkZWZhdWx0PSJhc2NlbmRpbmciPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBkYXRhIGlzIHRvIGJlIHNvcnRlZC4gIFRoZQotICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBhc2NlbmRpbmcuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4gICAgICAgIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhc2Utb3JkZXIiIHR5cGU9InhzbDphdnQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgU3BlY2lmaWVzIGlmIHVwcGVyIG9yIGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSB0byAKLSAgICAgICAgICAgICAgICAgIGJlIHNvcnRlZCBmaXJzdC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ic3RyaXAtc3BhY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgRGVmaW5lcyB3aGljaCBlbGVtZW50cyBhcmUgdG8gaGF2ZSB3aGl0ZSBzcGFjZSBzdHJpcHBlZCB3aGVuCi0gICAgICAgIHdyaXRpbmcgdGhlIHJlc3VsdCBkb2N1bWVudC4gICAgIAotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50cyIgdHlwZT0ieHNsOm5hbWV0ZXN0cyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIEEgc3BhY2Ugc2VwYXJlYXRlZCBsaXN0IG9mIGVsZW1lbnRzIGFyZSB0byBoYXZlCi0gICAgICAgICAgICAgICAgIHdoaXRlIHNwYWNlIHJlbW92ZWQgd2hlbiB3cml0aW5nIHRoZSByZXN1bHQgZG9jdW1lbnQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InN0eWxlc2hlZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6dHJhbnNmb3JtIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBUaGUgcm9vdCBlbGVtZW50IG9mIGEgc3R5bGUgc2hlZXQuICBBbHNvIHNlZSB0aGUgdHJhbnNmb3JtIGVsZW1lbnQuCi0gICAgICAgICBFaXRoZXIgc3R5bGVzaGVldCBvciB0cmFuc2Zvcm0gY2FuIGJlIHVzZWQuICBUeXBpY2FsbHkgc3R5bHNoZWV0IGlzCi0gICAgICAgICB1c2VkLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0idGVtcGxhdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIEEgdGVtcGxhdGUgY29udGFpbnMgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYW5kIGNvbW1hbmRzIGZvciBub2RlcyBpbiB0aGUKLSAgICAgICAgaW5wdXQgZG9jdW1lbnQgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIFhQYXRoIGV4cHJlc3Npb24uCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpwYXJhbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hdGNoIiB0eXBlPSJ4c2w6cGF0dGVybiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gQW4gWFBhdGggZXhwcmVzc2lvbiBvciBleHByZXNzaW9ucyB0aGF0IHRoaXMgdGVtcGxhdGUgd2lsbAotICAgICAgICAgICAgICAgICBiZSBhcHBsaWVkIHRvLiAgTm90ZSBpZiB0aGlzIGlzIG9taXR0ZWQsIHRoZW4gYSBuYW1lIGF0dHJpYnV0ZSBtdXN0Ci0gICAgICAgICAgICAgICAgIGJlIHVzZWQuICBFaXRoZXIgYSBuYW1vZSBvciBhIG1hdGNoIGFyZSB0byBiZSB1c2VkLCBidXQgbm90IGJvdGguCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwcmlvcml0eSIgdHlwZT0ieHM6ZGVjaW1hbCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBJbmRpY2F0ZXMgdGhlIG51bWVyaWMgcHJpb3J0aXR5IGZvciBwcm9jZXNzaW5nIHRoZQotICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtb2RlIiB0eXBlPSJ4c2w6bW9kZXMiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVGhlIG5hbWUgb2YgdGhlIG1vZGUgZm9yIHRoaXMgdGVtcGxhdGUuICBVc2VkIHRvIG1hdGNoCi0gICAgICAgICAgICAgICAgICB1cCB3aXRoIHRoZSBhcHBseS10ZW1wbGF0ZXMgbW9kZSBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVGhlIG5hbWUgb2YgYSBjYWxsZWQgdGVtcGxhdGUuICBOb3RlIHRoYXQgaWYgbmFtZSBpcwotICAgICAgICAgICAgICAgICAgbm90IHVzZWQsIHRoZW4gbWF0Y2ggbXVzdCBiZSB1c2VkLiAgWW91IGNhbiBoYXZlIG9uZSBvciB0aGUgb3RoZXIKLSAgICAgICAgICAgICAgICAgIGJ1dCBub3QgYm90aC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRleHQtZWxlbWVudC1iYXNlLXR5cGUiPgotICA8eHM6c2ltcGxlQ29udGVudD4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIj4KLQotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZUNvbnRlbnQ+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6ZWxlbWVudCBuYW1lPSJ0ZXh0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBXcml0ZXMgdGV4dCBkYXRhIHRvIHRoZSBvdXRwdXQuICBpLmUuICNQQ0RhdGEKLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp0ZXh0LWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ibm8iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBJbmRpY2F0ZXMgaWYgbm9uIGZyaWVuZGx5IGh0bWwgYW5kIHhtbCBjb250ZW50IHNob3VsZCBiZSBjb252ZXJ0ZWQKLSAgICAgICAgICAgICAgICAgdG8gdGhlaXIgZW50aXR5IHR5cGVzLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czpjb21wbGV4VHlwZSBuYW1lPSJ0cmFuc2Zvcm0tZWxlbWVudC1iYXNlLXR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpkZWNpbWFsIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIHZlcnNpb24gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdGhlIHRoZQotICAgICAgICAgICAgICAgICBYU0xUIHNwZWNpZmljYXRpb24gYmVpbmcgdXNlZC4gIEZvciBYU0xUIDEuMCwgdGhpcyB3aWxsCi0gICAgICAgICAgICAgICAgIGJlIDEuMC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMiIHR5cGU9InhzbDpwcmVmaXgtbGlzdCIgdXNlPSJvcHRpb25hbCI+Ci0gICAgICAJPHhzOmFubm90YXRpb24+Ci0gICAgICAJCTx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgIAkJCU9wdGlvbmFsLiBBIGxpc3Qgb2YgbmFtZXNwYWNlIHByZWZpeGVzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcmVzdWx0IGRvY3VtZW50LiAjZGVmYXVsdCBleGNsdWRlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCi0gICAgICAJCTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIAk8L3hzOmFubm90YXRpb24+Ci0gICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXMiIHR5cGU9InhzbDpwcmVmaXgtbGlzdCIgdXNlPSJvcHRpb25hbCI+Ci0gICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgQSBsaXN0IG9mIGV4dGVuc2lvbiBuYW1lc3BhY2UgcHJlZml4ZXMuICBUaGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgbmFtZXNwYWNlcyB0aGF0Ci0gICAgICAgICAgICAgICBjb250YWluIFhTTFQgcHJvY2Vzc29yIGV4dGVuc2lvbnMuICAjZGVmYXVsdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KLSAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmVsZW1lbnQgbmFtZT0idHJhbnNmb3JtIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBUaGUgcm9vdCBlbGVtZW50IG9mIGEgc3R5bGUgc2hlZXQuICBBbHNvIHNlZSB0aGUgc3R5bGVzaGVldCBlbGVtZW50LgotICAgICAgICAgRWl0aGVyIHN0eWxlc2hlZXQgb3IgdHJhbnNmb3JtIGNhbiBiZSB1c2VkLiAgVHlwaWNhbGx5IHN0eWxzaGVldCBpcwotICAgICAgICAgdXNlZC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp0cmFuc2Zvcm0tZWxlbWVudC1iYXNlLXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6aW1wb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmRlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp2YXJpYWJsZSIvPgotICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6cGFyYW0iLz4gICAgICAgICAgICAgIAotICAgICAgICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPiA8IS0tIHdlYWtlciB0aGFuIFhTTFQgMS4wIC0tPgotICAgICAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIEEgdW5pcXVlIElEIGZvciB0aGUgc3R5bGVzaGVldC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0idmFsdWUtb2YiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgVXNlZCB0byBwdWxsIHRoZSBkYXRhIHZhbHVlIGZyb20gdGhlIHNlbGVjdGVkIG5vZGUgb3IgWFBhdGggZXhwcmVzc2lvbi4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBYUGF0aCBleHByZXNzaW9uIG9yIGN1cnJlbnQgbm9kZSB0byBiZSB1c2VkCi0gICAgICAgICAgICAgICAgIHRvIHB1bGwgdGhlIGRhdGEgZnJvbS4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJubyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFdoZXRoZXIgbm9uLXhtbCBmcmllbmRseSBkYXRhIHNob3VsZCBiZSBlbnRpdHkgZXNjYXBlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0idmFyaWFibGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgRGVjbGFyZXMgYSBsb2NhbCBvciBnbG9iYWwgdmFyaWFibGUgdG8gYmUgdXNlZCBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgICAgICAgVGhlIGNvbnRlbnRzIG9mIHZhcmlhYmxlIGNhbiBiZSBwb3B1bGF0ZWQgYnkgZWl0aGVyIGEgc2VyaWVzIG9mCi0gICAgICAgIFhTTFQgY29tbWFuZHMgb3IgWFBhdGggZXhwcmVzc2lvbnMuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS4gIFRoaXMgaXMgaG93IHRoZQotICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBhY2Nlc3NlZCBsYXRlciBpbiB0aGUgc3R5bGVzaGVldC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0ib3B0aW9uYWwiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVGhlIFhQYXRoIGV4cHJlc3Npb24gaW4gd2hpY2ggdGhlIHZhcmlhYmxlIGlzCi0gICAgICAgICAgICAgICAgICBwb3B1bGF0ZWQgZnJvbS4gIFRoaXMgc3BlY2lmaWVzIHdoZXJlIHRoZSB2YXJpYWJsZSBpcyB0byBnZXQKLSAgICAgICAgICAgICAgICAgIGl0J3MgZGF0YSB2YWx1ZSBmcm9tLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJ3aGVuIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBBIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBzaW1pbGlhciB0byBhbiBpZiBzdGF0ZW1lbnQsIHVzZWQgdG8gdGVzdAotICAgICAgICAgaWYgYSBwYXJ0aWN1bGFyIGV4cHJlc3Npb24gaXMgdHJ1ZSBvciBmYWxzZS4gIFVzZSB3aXRoIHRoZSBDaG9vc2UgYW5kCi0gICAgICAgICBPdGhlciB3aXNlIGVsZW1lbnRzLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBBbiBYUGF0aCBleHByZXNzaW9uIHRoYXQgdGVzdHMgdG8gdHJ1ZSBvciBmYWxzZS4gIElmIHRydWUKLSAgICAgICAgICAgICAgICAgdGhlIHN0YXRlbWVudHMgd2l0aGluIGFyZSBleGVjdXRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0id2l0aC1wYXJhbSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBEZWZpbmVzIHRoZSB2YWx1ZSBvZiBhIHBhcmFtZXRlciB0byBiZSBwYXNzZWQgdG8gYSBjYWxsZWQgdGVtcGxhdGUuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHRvIGJlIHNldC4gIFRoaXMKLSAgICAgICAgICAgICAgICAgIG11c3QgZXhpc3QgaW4gdGhlIHRlbXBsYXRlIHRoYXQgaXMgYmVpbmcgY2FsbGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBbiBYUGF0aCBleHByZXNzaW9uIHRoYXQgaXMgdXNlZCB0byBzZXQKLSAgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBiZWluZyBwYXNzZWQgdG8gYSB0ZW1wbGF0ZS4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLTx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQQVJUIEM6IGRlZmluaXRpb24gb2YgbGl0ZXJhbCByZXN1bHQgZWxlbWVudHMKLSAgICAKLSAgICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBkZWZpbmUgdGhlIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnRzCi0gICAgcGVybWlzc2libGUgaW4gYSBzdHlsZXNoZWV0LgotICAgIAotICAgIChhKSBkbyBub3RoaW5nLiBUaGlzIGFsbG93cyBhbnkgZWxlbWVudCB0byBiZSB1c2VkIGFzIGEgbGl0ZXJhbAotICAgICAgICByZXN1bHQgZWxlbWVudCwgcHJvdmlkZWQgaXQgaXMgbm90IGluIHRoZSBYU0xUIG5hbWVzcGFjZQotICAgIAotICAgIChiKSBkZWNsYXJlIGFsbCBwZXJtaXR0ZWQgbGl0ZXJhbCByZXN1bHQgZWxlbWVudHMgYXMgbWVtYmVycwotICAgICAgICBvZiB0aGUgeHNsOmxpdGVyYWwtcmVzdWx0LWVsZW1lbnQgc3Vic3RpdHV0aW9uIGdyb3VwCi0gICAgICAgIAotICAgIChjKSByZWRlZmluZSB0aGUgbW9kZWwgZ3JvdXAgeHNsOnJlc3VsdC1lbGVtZW50cyB0byBhY2NvbW1vZGF0ZQotICAgICAgICBhbGwgcGVybWl0dGVkIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnRzLgotICAgICAgICAKLSAgICBMaXRlcmFsIHJlc3VsdCBlbGVtZW50cyBhcmUgYWxsb3dlZCB0byB0YWtlIGNlcnRhaW4gYXR0cmlidXRlcwotICAgIGluIHRoZSBYU0xUIG5hbWVzcGFjZS4gVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGF0dHJpYnV0ZSBncm91cAotICAgIGxpdGVyYWwtcmVzdWx0LWVsZW1lbnQtYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIGluY2x1ZGVkIGluIHRoZQotICAgIGRlZmluaXRpb24gb2YgYW55IGxpdGVyYWwgcmVzdWx0IGVsZW1lbnQuCi0gICAgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLQotPC94czphbm5vdGF0aW9uPiAgIAotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLQotPHhzOmVsZW1lbnQgbmFtZT0ibGl0ZXJhbC1yZXN1bHQtZWxlbWVudCIgYWJzdHJhY3Q9InRydWUiIHR5cGU9InhzOmFueVR5cGUiLz4KLQotPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWwtcmVzdWx0LWVsZW1lbnQtYXR0cmlidXRlcyI+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdC1jb2xsYXRpb24iIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnVyaS1saXN0Ii8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0iZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnByZWZpeGVzIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnByZWZpeGVzIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0ieHBhdGgtZGVmYXVsdC1uYW1lc3BhY2UiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHM6YW55VVJJIi8+ICAgIAotICA8eHM6YXR0cmlidXRlIG5hbWU9ImluaGVyaXQtbmFtZXNwYWNlcyIgZm9ybT0icXVhbGlmaWVkIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJ5ZXMiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOlFOYW1lcyIgZGVmYXVsdD0iIi8+Ci0KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2Utd2hlbiIgZm9ybT0icXVhbGlmaWVkIiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHM6ZGVjaW1hbCIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRhdGlvbiIgZm9ybT0icXVhbGlmaWVkIiB0eXBlPSJ4c2w6dmFsaWRhdGlvbi10eXBlIi8+Ci08L3hzOmF0dHJpYnV0ZUdyb3VwPgotCi08eHM6Z3JvdXAgbmFtZT0icmVzdWx0LWVsZW1lbnRzIj4KLSAgPHhzOmNob2ljZT4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpsaXRlcmFsLXJlc3VsdC1lbGVtZW50Ii8+Ci0gICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgotCi0gICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjbG9jYWwiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgotICA8L3hzOmNob2ljZT4KLTwveHM6Z3JvdXA+Ci0KLQotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLTx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQQVJUIEQ6IGRlZmluaXRpb25zIG9mIHNpbXBsZSB0eXBlcyB1c2VkIGluIHN0eWxlc2hlZXQgYXR0cmlidXRlcyAKLSAgPC94czpkb2N1bWVudGF0aW9uPgotPC94czphbm5vdGF0aW9uPiAgIAotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iYXZ0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGlzIHR5cGUgaXMgdXNlZCBmb3IgYWxsIGF0dHJpYnV0ZXMgdGhhdCBhbGxvdyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGVtcGxhdGUuCi0gICAgICBUaGUgZ2VuZXJhbCBydWxlcyBmb3IgdGhlIHN5bnRheCBvZiBhdHRyaWJ1dGUgdmFsdWUgdGVtcGxhdGVzLCBhbmQgdGhlIHNwZWNpZmljCi0gICAgICBydWxlcyBmb3IgZWFjaCBzdWNoIGF0dHJpYnV0ZSwgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNMVCAyLjAgUmVjb21tZW5kYXRpb24uCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iY2hhciI+Ci0gIDx4czphbm5vdGF0aW9uPgotCi0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBIHN0cmluZyBjb250YWluaW5nIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0gICAgPHhzOmxlbmd0aCB2YWx1ZT0iMSIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJleHByZXNzaW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEFuIFhQYXRoIDIuMCBleHByZXNzaW9uLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgIDx4czpwYXR0ZXJuIHZhbHVlPSIuKyIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJpbnB1dC10eXBlLWFubm90YXRpb25zLXR5cGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLQotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRGVzY3JpYmVzIGhvdyB0eXBlIGFubm90YXRpb25zIGluIHNvdXJjZSBkb2N1bWVudHMgYXJlIGhhbmRsZWQuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzZXJ2ZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaXAiLz4gICAKLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVuc3BlY2lmaWVkIi8+ICAgICAgICAKLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ibGV2ZWwiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBsZXZlbCBhdHRyaWJ1dGUgb2YgeHNsOm51bWJlcjogCi0gICAgICBvbmUgb2Ygc2luZ2xlLCBtdWx0aXBsZSwgb3IgYW55LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNpbmdsZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibXVsdGlwbGUiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFueSIvPgotCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Im1vZGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBtb2RlIGF0dHJpYnV0ZSBvZiB4c2w6YXBwbHktdGVtcGxhdGVzOiAKLSAgICAgIGVpdGhlciBhIFFOYW1lLCBvciAjY3VycmVudCwgb3IgI2RlZmF1bHQuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHNsOlFOYW1lIj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLQotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjZGVmYXVsdCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNjdXJyZW50Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ibW9kZXMiPgotICA8eHM6YW5ub3RhdGlvbj4KLQotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgVGhlIG1vZGUgYXR0cmlidXRlIG9mIHhzbDp0ZW1wbGF0ZTogCi0gICAgICBlaXRoZXIgYSBsaXN0LCBlYWNoIG1lbWJlciBiZWluZyBlaXRoZXIgYSBRTmFtZSBvciAjZGVmYXVsdDsKLSAgICAgIG9yIHRoZSB2YWx1ZSAjYWxsCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpsaXN0PgotICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzbDpRTmFtZSI+Ci0KLSAgICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2RlZmF1bHQiLz4KLSAgICAgICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8L3hzOnVuaW9uPgotICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzOmxpc3Q+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotCi0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNhbGwiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJuYW1ldGVzdHMiPgotICA8eHM6YW5ub3RhdGlvbj4KLQotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgQSBsaXN0IG9mIE5hbWVUZXN0cywgYXMgZGVmaW5lZCBpbiB0aGUgWFBhdGggMi4wIFJlY29tbWVuZGF0aW9uLgotICAgICAgRWFjaCBOYW1lVGVzdCBpcyBlaXRoZXIgYSBRTmFtZSwgb3IgIioiLCBvciAicHJlZml4OioiLCBvciAiKjpsb2NhbG5hbWUiCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpsaXN0PgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2w6UU5hbWUiPgotICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotCi0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IioiLz4KLSAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXGlcYyo6XCoiLz4KLSAgICAgICAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJcKjpcaVxjKiIvPiAgICAgICAgICAgIAotICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLQotICAgICAgPC94czp1bmlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6bGlzdD4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0icHJlZml4ZXMiPgotICA8eHM6bGlzdCBpdGVtVHlwZT0ieHM6TkNOYW1lIi8+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InByZWZpeC1saXN0LW9yLWFsbCI+Ci0gIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHNsOnByZWZpeC1saXN0Ij4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLQotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLSAgICAgIAotPHhzOnNpbXBsZVR5cGUgbmFtZT0icHJlZml4LWxpc3QiPgotICA8eHM6bGlzdCBpdGVtVHlwZT0ieHNsOnByZWZpeC1vci1kZWZhdWx0Ii8+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Im1ldGhvZCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgVGhlIG1ldGhvZCBhdHRyaWJ1dGUgb2YgeHNsOm91dHB1dDoKLSAgICAgIEVpdGhlciBvbmUgb2YgdGhlIHJlY29nbml6ZWQgbmFtZXMgInhtbCIsICJ4aHRtbCIsICJodG1sIiwgInRleHQiLAotICAgICAgb3IgYSBRTmFtZSB0aGF0IG11c3QgaW5jbHVkZSBhIHByZWZpeC4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnVuaW9uPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieG1sIi8+Ci0KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ4aHRtbCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imh0bWwiLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXh0Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4c2w6UU5hbWUiPgotICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXGMqOlxjKiIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLQotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0icGF0dGVybiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgQSBtYXRjaCBwYXR0ZXJuIGFzIGRlZmluZWQgaW4gdGhlIFhTTFQgMi4wIFJlY29tbWVuZGF0aW9uLgotICAgICAgVGhlIHN5bnRheCBmb3IgcGF0dGVybnMgaXMgYSByZXN0cmljdGVkIGZvcm0gb2YgdGhlIHN5bnRheCBmb3IKLSAgICAgIFhQYXRoIDIuMCBleHByZXNzaW9ucy4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzbDpleHByZXNzaW9uIi8+Ci0KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0icHJlZml4LW9yLWRlZmF1bHQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEVpdGhlciBhIG5hbWVzcGFjZSBwcmVmaXgsIG9yICNkZWZhdWx0LgotICAgICAgVXNlZCBpbiB0aGUgeHNsOm5hbWVzcGFjZS1hbGlhcyBlbGVtZW50LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzOk5DTmFtZSI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotCi0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2RlZmF1bHQiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJRTmFtZXMiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEEgbGlzdCBvZiBRTmFtZXMuCi0gICAgICBVc2VkIGluIHRoZSBbeHNsOl11c2UtYXR0cmlidXRlLXNldHMgYXR0cmlidXRlIG9mIHZhcmlvdXMgZWxlbWVudHMsCi0gICAgICBhbmQgaW4gdGhlIGNkYXRhLXNlY3Rpb24tZWxlbWVudHMgYXR0cmlidXRlIG9mIHhzbDpvdXRwdXQKLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6bGlzdCBpdGVtVHlwZT0ieHNsOlFOYW1lIi8+ICAgICAgICAgIAotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJRTmFtZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgQSBRTmFtZS4KLSAgICAgIFRoaXMgc2NoZW1hIGRvZXMgbm90IHVzZSB0aGUgYnVpbHQtaW4gdHlwZSB4czpRTmFtZSwgYnV0IHJhdGhlciBkZWZpbmVzIGl0cyBvd24KLSAgICAgIFFOYW1lIHR5cGUuIEFsdGhvdWdoIHhzOlFOYW1lIHdvdWxkIGRlZmluZSB0aGUgY29ycmVjdCB2YWxpZGF0aW9uIG9uIHRoZXNlIGF0dHJpYnV0ZXMsCi0gICAgICBhIHNjaGVtYSBwcm9jZXNzb3Igd291bGQgZXhwYW5kIHVucHJlZml4ZWQgUU5hbWVzIGluY29ycmVjdGx5IHdoZW4gY29uc3RydWN0aW5nIHRoZSBQU1ZJLAotICAgICAgYmVjYXVzZSAoYXMgZGVmaW5lZCBpbiBYTUwgU2NoZW1hIGVycmF0YSkgYW4gdW5wcmVmaXhlZCB4czpRTmFtZSBpcyBhc3N1bWVkIHRvIGJlIGluCi0gICAgICB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIHdoaWNoIGlzIG5vdCB0aGUgY29ycmVjdCBhc3N1bXB0aW9uIGZvciBYU0xULgotICAgICAgVGhlIGRhdGEgdHlwZSBpcyBkZWZpbmVkIGFzIGEgcmVzdHJpY3Rpb24gb2YgdGhlIGJ1aWx0LWluIHR5cGUgTmFtZSwgcmVzdHJpY3RlZAotICAgICAgc28gdGhhdCBpdCBjYW4gb25seSBjb250YWluIG9uZSBjb2xvbiB3aGljaCBtdXN0IG5vdCBiZSB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOYW1lIj4KLQotICAgIDx4czpwYXR0ZXJuIHZhbHVlPSIoW146XSs6KT9bXjpdKyIvPiAgICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPiAgICAgICAgCi08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InNlcXVlbmNlLXR5cGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBkZXNjcmlwdGlvbiBvZiBhIGRhdGEgdHlwZSwgY29uZm9ybWluZyB0byB0aGUKLSAgICAgIFNlcXVlbmNlVHlwZSBwcm9kdWN0aW9uIGRlZmluZWQgaW4gdGhlIFhQYXRoIDIuMCBSZWNvbW1lbmRhdGlvbgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotCi0gICAgPHhzOnBhdHRlcm4gdmFsdWU9Ii4rIi8+ICAgICAgCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InVyaS1saXN0Ij4KLSAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOmFueVVSSSIvPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJ2YWxpZGF0aW9uLXN0cmlwLW9yLXByZXNlcnZlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBEZXNjcmliZXMgZGlmZmVyZW50IHdheXMgb2YgdHlwZS1hbm5vdGF0aW5nIGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLQotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4c2w6dmFsaWRhdGlvbi10eXBlIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNlcnZlIi8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdHJpcCIvPiAgICAKLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0idmFsaWRhdGlvbi10eXBlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBEZXNjcmliZXMgZGlmZmVyZW50IHdheXMgb2YgdHlwZS1hbm5vdGF0aW5nIGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLQotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdHJpY3QiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxheCIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0cmlwIi8+ICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJ5ZXMtb3Itbm8iPgotICA8eHM6YW5ub3RhdGlvbj4KLQotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgT25lIG9mIHRoZSB2YWx1ZXMgInllcyIgb3IgIm5vIi4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InllcyIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm8iLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ieWVzLW9yLW5vLW9yLW9taXQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE9uZSBvZiB0aGUgdmFsdWVzICJ5ZXMiIG9yICJubyIgb3IgIm9taXQiLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJubyIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib21pdCIvPgotCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hzbHQtMi4wLnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3hzbHQtc2NoZW1hcy94c2x0LTIuMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNTczY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hzbHQtMi4wLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExNzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyAtIFczQywgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsLAotICogYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIDIwMDgwMzMwIC0gU1RBUiAtIGJ1ZyAyMjQ4MTkgLSBjaGFuZ2VkIHByb2Nlc0NvbnRlbnRzIGZyb20gbGF4IHRvIHNraXAKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI3OTczNyAtIHVzZSBuYW1lc3BhY2UgdG8gaW1wb3J0IHhtbCBzY2hlbWEgZGVmaW5pdGlvbnMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVzNDwq4gU09GVFdBUkUgTk9USUNFIEFORCBMSUNFTlNFCi0gKiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMAotICoKLSAqIENvcHlyaWdodCDCqSAxOTk0LTIwMDIgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mCi0gKiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLAotICogS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KLSAqCi0gKiBUaGlzIFczQyB3b3JrIChpbmNsdWRpbmcgc29mdHdhcmUsIGRvY3VtZW50cywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcKLSAqIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuIEJ5IG9idGFpbmluZywKLSAqIHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwKLSAqIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi0gKiBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQotICogb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMKLSAqIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucywgdGhhdAotICogeW91IG1ha2U6Ci0gKgotICogIDEuIFRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZAotICogICAgIG9yIGRlcml2YXRpdmUgd29yay4KLSAqICAyLiBBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kCi0gKiAgICAgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgYSBzaG9ydCBub3RpY2Ugb2YgdGhlIGZvbGxvd2luZyBmb3JtIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkgc2hvdWxkIGJlIHVzZWQgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZTogIkNvcHlyaWdodCDCqSBbJGRhdGUtb2Ytc29mdHdhcmVdIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyIKLSAqICAzLiBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgVzNDIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcwotICogICAgIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzCi0gKiAgICAgZGVyaXZlZC4pCi0gKgotICogVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBOTyAKLSAqIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YKLSAqIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLAotICogVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCi0gKgotICogQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04uCi0gKgotICogVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eQotICogcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQKLSAqIGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggY29weXJpZ2h0Ci0gKiBob2xkZXJzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gLS0+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0KLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci08eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gIAotICAgIFRoaXMgaXMgYSBzY2hlbWEgZm9yIFhTTFQgMi4wIHN0eWxlc2hlZXRzLgotICAgIAotICAgIEl0IGRlZmluZXMgYWxsIHRoZSBlbGVtZW50cyB0aGF0IGFwcGVhciBpbiB0aGUgWFNMVCBuYW1lc3BhY2U7IGl0IGFsc28KLSAgICBwcm92aWRlcyBob29rcyB0aGF0IGFsbG93IHRoZSBpbmNsdXNpb24gb2YgdXNlci1kZWZpbmVkIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnRzLAotICAgIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMsIGFuZCB0b3AtbGV2ZWwgZGF0YSBlbGVtZW50cy4KLSAgICAKLSAgICBUaGUgc2NoZW1hIGlzIGRlcml2ZWQgKHdpdGgga2luZCBwZXJtaXNzaW9uKSBmcm9tIGEgc2NoZW1hIGZvciBYU0xUIDEuMCBzdHlsZXNoZWV0cwotICAgIHByb2R1Y2VkIGJ5IEFzaXIgUyBWZWRhbXV0aHUgb2YgV2ViTWV0aG9kcyBJbmMuCi0gICAgCi0gICAgVGhpcyBzY2hlbWEgaXMgYXZhaWxhYmxlIGZvciB1c2UgdW5kZXIgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIFczQyBTb2Z0d2FyZSBMaWNlbnNlCi0gICAgcHVibGlzaGVkIGF0IGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LXNvZnR3YXJlLTE5OTgwNzIwCi0gICAgCi0gICAgVGhlIHNjaGVtYSBpcyBvcmdhbml6ZWQgYXMgZm9sbG93czoKLSAgICAKLSAgICBQQVJUIEE6IGRlZmluaXRpb25zIG9mIGNvbXBsZXggdHlwZXMgYW5kIG1vZGVsIGdyb3VwcyB1c2VkIGFzIHRoZSBiYXNpcyAKLSAgICAgICAgICAgIGZvciBlbGVtZW50IGRlZmluaXRpb25zCi0gICAgUEFSVCBCOiBkZWZpbml0aW9ucyBvZiBpbmRpdmlkdWFsIFhTTFQgZWxlbWVudHMKLSAgICBQQVJUIEM6IGRlZmluaXRpb25zIGZvciBsaXRlcmFsIHJlc3VsdCBlbGVtZW50cwotICAgIFBBUlQgRDogZGVmaW5pdGlvbnMgb2Ygc2ltcGxlIHR5cGVzIHVzZWQgaW4gYXR0cmlidXRlIGRlZmluaXRpb25zCi0gICAgCi0gICAgVGhpcyBzY2hlbWEgZG9lcyBub3QgYXR0ZW1wdCB0byBkZWZpbmUgYWxsIHRoZSBjb25zdHJhaW50cyB0aGF0IGFwcGx5IHRvIGEgdmFsaWQKLSAgICBYU0xUIDIuMCBzdHlsZXNoZWV0IG1vZHVsZS4gSXQgaXMgdGhlIGludGVudGlvbiB0aGF0IGFsbCB2YWxpZCBzdHlsZXNoZWV0IG1vZHVsZXMgCi0gICAgc2hvdWxkIGNvbmZvcm0gdG8gdGhpcyBzY2hlbWE7IGhvd2V2ZXIsIHRoZSBzY2hlbWEgaXMgbm9uLW5vcm1hdGl2ZSBhbmQgaW4gdGhlIGV2ZW50IAotICAgIG9mIGFueSBjb25mbGljdCwgdGhlIHRleHQgb2YgdGhlIFJlY29tbWVuZGF0aW9uIHRha2VzIHByZWNlZGVuY2UuCi0KLSAgICBUaGlzIHNjaGVtYSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgcnVsZXMgdGhhdCBhcHBseSB3aGVuIGEgc3R5bGVzaGVldAotICAgIGhhcyBzZWN0aW9ucyB0aGF0IHVzZSBmb3J3YXJkcy1jb21wYXRpYmxlLW1vZGUuIEluIHRoaXMgbW9kZSwgc2V0dGluZyB2ZXJzaW9uPSIzLjAiCi0gICAgYWxsb3dzIGVsZW1lbnRzIGZyb20gdGhlIFhTTFQgbmFtZXNwYWNlIHRvIGJlIHVzZWQgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gWFNMVCAyLjAuCi0KLSAgICBTaW1wbGlmaWVkIHN0eWxlc2hlZXRzICh0aG9zZSB3aXRoIGEgbGl0ZXJhbCByZXN1bHQgZWxlbWVudCBhcyB0aGUgb3V0ZXJtb3N0IGVsZW1lbnQpCi0gICAgd2lsbCB2YWxpZGF0ZSBhZ2FpbnN0IHRoaXMgc2NoZW1hIG9ubHkgaWYgdmFsaWRhdGlvbiBzdGFydHMgaW4gbGF4IG1vZGUuCi0gICAgCi0gICAgVGhpcyB2ZXJzaW9uIGlzIGRhdGVkIDIwMDUtMDItMTEKLSAgICBBdXRob3JzOiBNaWNoYWVsIEggS2F5LCBTYXhvbmljYSBMaW1pdGVkCi0gICAgICAgICAgICAgSmVuaSBUZW5uaXNvbiwgSmVuaSBUZW5uaXNvbiBDb25zdWx0aW5nIEx0ZC4KLSAgICAKLSAgPC94czpkb2N1bWVudGF0aW9uPgotPC94czphbm5vdGF0aW9uPiAgIAotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLSAKLTwhLS0KLVRoZSBkZWNsYXJhdGlvbiBvZiB4bWw6c3BhY2UgYW5kIHhtbDpsYW5nIG1heSBuZWVkIHRvIGJlIGNvbW1lbnRlZCBvdXQgYmVjYXVzZQotb2YgcHJvYmxlbXMgcHJvY2Vzc2luZyB0aGUgc2NoZW1hIHVzaW5nIHZhcmlvdXMgdG9vbHMKLS0tPgotICAgICAgCi08eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiAKLSAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCi08IS0tIAotICAgIEFuIFhTTFQgc3R5bGVzaGVldCBtYXkgY29udGFpbiBhbiBpbi1saW5lIHNjaGVtYSB3aXRoaW4gYW4geHNsOmltcG9ydC1zY2hlbWEgZWxlbWVudCwKLSAgICBzbyB0aGUgU2NoZW1hIGZvciBzY2hlbWFzIG5lZWRzIHRvIGJlIGltcG9ydGVkCi0tLT4KLSAgCi08eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLz4KLQotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLTx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQQVJUIEE6IGRlZmluaXRpb25zIG9mIGNvbXBsZXggdHlwZXMgYW5kIG1vZGVsIGdyb3VwcyB1c2VkIGFzIHRoZSBiYXNpcyAKLSAgICAgICAgICAgIGZvciBlbGVtZW50IGRlZmluaXRpb25zCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0KLTx4czpjb21wbGV4VHlwZSBuYW1lPSJnZW5lcmljLWVsZW1lbnQtdHlwZSIgbWl4ZWQ9InRydWUiPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlZmF1bHQtY29sbGF0aW9uIiB0eXBlPSJ4c2w6dXJpLWxpc3QiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJleGNsdWRlLXJlc3VsdC1wcmVmaXhlcyIgdHlwZT0ieHNsOnByZWZpeC1saXN0LW9yLWFsbCIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzIiB0eXBlPSJ4c2w6cHJlZml4LWxpc3QiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2Utd2hlbiIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cGF0aC1kZWZhdWx0LW5hbWVzcGFjZSIgdHlwZT0ieHM6YW55VVJJIi8+Ci0gIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLTx4czpjb21wbGV4VHlwZSBuYW1lPSJ2ZXJzaW9uZWQtZWxlbWVudC10eXBlIiBtaXhlZD0idHJ1ZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+ICAgIAotICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpkZWNpbWFsIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiIG1peGVkPSJmYWxzZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0ic2VxdWVuY2UtY29uc3RydWN0b3IiPgotICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiPiAgICAKLSAgICAgIDx4czpncm91cCByZWY9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmdyb3VwIG5hbWU9InNlcXVlbmNlLWNvbnN0cnVjdG9yLWdyb3VwIj4KLSAgPHhzOmNob2ljZT4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp2YXJpYWJsZSIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmluc3RydWN0aW9uIi8+Ci0gICAgPHhzOmdyb3VwIHJlZj0ieHNsOnJlc3VsdC1lbGVtZW50cyIvPgotICA8L3hzOmNob2ljZT4KLTwveHM6Z3JvdXA+Ci0KLTx4czplbGVtZW50IG5hbWU9ImRlY2xhcmF0aW9uIiB0eXBlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiIGFic3RyYWN0PSJ0cnVlIi8+Ci0KLTx4czplbGVtZW50IG5hbWU9Imluc3RydWN0aW9uIiB0eXBlPSJ4c2w6dmVyc2lvbmVkLWVsZW1lbnQtdHlwZSIgYWJzdHJhY3Q9InRydWUiLz4KLQotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLTx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQQVJUIEI6IGRlZmluaXRpb25zIG9mIGluZGl2aWR1YWwgWFNMVCBlbGVtZW50cyAgICAKLSAgICBFbGVtZW50cyBhcmUgbGlzdGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci4gICAgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0KLTx4czplbGVtZW50IG5hbWU9ImFuYWx5emUtc3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOm1hdGNoaW5nLXN1YnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6bm9uLW1hdGNoaW5nLXN1YnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6ZmFsbGJhY2siIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVnZXgiIHR5cGU9InhzbDphdnQiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmbGFncyIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0iIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJhcHBseS1pbXBvcnRzIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOndpdGgtcGFyYW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImFwcGx5LXRlbXBsYXRlcyIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6c29ydCIvPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOndpdGgtcGFyYW0iLz4KLSAgICAgICAgPC94czpjaG9pY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgZGVmYXVsdD0iY2hpbGQ6Om5vZGUoKSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzbDptb2RlIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6YXZ0IiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlcGFyYXRvciIgdHlwZT0ieHNsOmF2dCIvPiAgIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzbDpRTmFtZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRpb24iIHR5cGU9InhzbDp2YWxpZGF0aW9uLXR5cGUiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+ICAgICAgICAKLQotPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlLXNldCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDphdHRyaWJ1dGUiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY2FsbC10ZW1wbGF0ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aXRoLXBhcmFtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJjaGFyYWN0ZXItbWFwIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOm91dHB1dC1jaGFyYWN0ZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtY2hhcmFjdGVyLW1hcHMiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY2hvb3NlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOndoZW4iIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6b3RoZXJ3aXNlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImNvbW1lbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJjb3B5IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29weS1uYW1lc3BhY2VzIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJ5ZXMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmhlcml0LW5hbWVzcGFjZXMiIHR5cGU9InhzbDp5ZXMtb3Itbm8iIGRlZmF1bHQ9InllcyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNsOlFOYW1lcyIgZGVmYXVsdD0iIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRhdGlvbiIgdHlwZT0ieHNsOnZhbGlkYXRpb24tdHlwZSIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY29weS1vZiIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvcHktbmFtZXNwYWNlcyIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ieWVzIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRhdGlvbiIgdHlwZT0ieHNsOnZhbGlkYXRpb24tdHlwZSIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZGVjaW1hbC1mb3JtYXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlY2ltYWwtc2VwYXJhdG9yIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iLiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNlcGFyYXRvciIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IiwiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmZpbml0eSIgdHlwZT0ieHM6c3RyaW5nIiBkZWZhdWx0PSJJbmZpbml0eSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1pbnVzLXNpZ24iIHR5cGU9InhzbDpjaGFyIiBkZWZhdWx0PSItIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFOIiB0eXBlPSJ4czpzdHJpbmciIGRlZmF1bHQ9Ik5hTiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBlcmNlbnQiIHR5cGU9InhzbDpjaGFyIiBkZWZhdWx0PSIlIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGVyLW1pbGxlIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iJiN4MjAzMDsiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ6ZXJvLWRpZ2l0IiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iMCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRpZ2l0IiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iIyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhdHRlcm4tc2VwYXJhdG9yIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iOyIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZWxlbWVudCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDphdnQiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmhlcml0LW5hbWVzcGFjZXMiIHR5cGU9InhzbDp5ZXMtb3Itbm8iIGRlZmF1bHQ9InllcyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNsOlFOYW1lcyIgZGVmYXVsdD0iIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRhdGlvbiIgdHlwZT0ieHNsOnZhbGlkYXRpb24tdHlwZSIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZmFsbGJhY2siIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iIHR5cGU9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciIvPgotCi08eHM6ZWxlbWVudCBuYW1lPSJmb3ItZWFjaCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpzb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yLWdyb3VwIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZm9yLWVhY2gtZ3JvdXAiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6c29ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cC1ieSIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cC1hZGphY2VudCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4gICAgICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cC1zdGFydGluZy13aXRoIiB0eXBlPSJ4c2w6cGF0dGVybiIvPiAgICAgICAgICAgIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Imdyb3VwLWVuZGluZy13aXRoIiB0eXBlPSJ4c2w6cGF0dGVybiIvPiAgICAgICAgICAgIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbGxhdGlvbiIgdHlwZT0ieHM6YW55VVJJIi8+ICAgICAgICAgICAgCi0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJmdW5jdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpwYXJhbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im92ZXJyaWRlIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJ5ZXMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcyIgdHlwZT0ieHNsOnNlcXVlbmNlLXR5cGUiIGRlZmF1bHQ9Iml0ZW0oKSoiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImlmIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImltcG9ydCI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnQtc2NoZW1hIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6c2NoZW1hIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHM6YW55VVJJIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hLWxvY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiLz4gICAgICAgICAgICAgICAgICAKLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImluY2x1ZGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ia2V5IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InhzbDpwYXR0ZXJuIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlIiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbGxhdGlvbiIgdHlwZT0ieHM6YW55VVJJIi8+ICAgICAgICAgICAgICAgCi0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJtYXRjaGluZy1zdWJzdHJpbmciIHR5cGU9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciIvPgotCi08eHM6ZWxlbWVudCBuYW1lPSJtZXNzYWdlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRlcm1pbmF0ZSIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0ibm8iLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im5hbWVzcGFjZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDphdnQiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJuYW1lc3BhY2UtYWxpYXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0eWxlc2hlZXQtcHJlZml4IiB0eXBlPSJ4c2w6cHJlZml4LW9yLWRlZmF1bHQiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXN1bHQtcHJlZml4IiB0eXBlPSJ4c2w6cHJlZml4LW9yLWRlZmF1bHQiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im5leHQtbWF0Y2giIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOndpdGgtcGFyYW0iLz4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpmYWxsYmFjayIvPgotICAgICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im5vbi1tYXRjaGluZy1zdWJzdHJpbmciIHR5cGU9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciIvPgotCi08eHM6ZWxlbWVudCBuYW1lPSJudW1iZXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsZXZlbCIgdHlwZT0ieHNsOmxldmVsIiBkZWZhdWx0PSJzaW5nbGUiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb3VudCIgdHlwZT0ieHNsOnBhdHRlcm4iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmcm9tIiB0eXBlPSJ4c2w6cGF0dGVybiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0iMSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsZXR0ZXItdmFsdWUiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcmRpbmFsIiB0eXBlPSJ4c2w6YXZ0Ii8+ICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zaXplIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJvdGhlcndpc2UiIHR5cGU9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciIvPgotCi08eHM6ZWxlbWVudCBuYW1lPSJvdXRwdXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXRob2QiIHR5cGU9InhzbDptZXRob2QiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJieXRlLW9yZGVyLW1hcmsiIHR5cGU9InhzbDp5ZXMtb3Itbm8iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjZGF0YS1zZWN0aW9uLWVsZW1lbnRzIiB0eXBlPSJ4c2w6UU5hbWVzIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1wdWJsaWMiIHR5cGU9InhzOnN0cmluZyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRvY3R5cGUtc3lzdGVtIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZXNjYXBlLXVyaS1hdHRyaWJ1dGVzIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5jbHVkZS1jb250ZW50LXR5cGUiIHR5cGU9InhzbDp5ZXMtb3Itbm8iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRlbnQiIHR5cGU9InhzbDp5ZXMtb3Itbm8iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZWRpYS10eXBlIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3JtYWxpemF0aW9uLWZvcm0iIHR5cGU9InhzOk5NVE9LRU4iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbWl0LXhtbC1kZWNsYXJhdGlvbiIgdHlwZT0ieHNsOnllcy1vci1ubyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0YW5kYWxvbmUiIHR5cGU9InhzbDp5ZXMtb3Itbm8tb3Itb21pdCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVuZGVjbGFyZS1wcmVmaXhlcyIgdHlwZT0ieHNsOnllcy1vci1ubyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVzZS1jaGFyYWN0ZXItbWFwcyIgdHlwZT0ieHNsOlFOYW1lcyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzOk5NVE9LRU4iLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im91dHB1dC1jaGFyYWN0ZXIiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNoYXJhY3RlciIgdHlwZT0ieHNsOmNoYXIiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdHJpbmciIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0icGFyYW0iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXMiIHR5cGU9InhzbDpzZXF1ZW5jZS10eXBlIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVxdWlyZWQiIHR5cGU9InhzbDp5ZXMtb3Itbm8iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0dW5uZWwiIHR5cGU9InhzbDp5ZXMtb3Itbm8iLz4gICAgICAgIAotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0icGVyZm9ybS1zb3J0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp2ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnNvcnQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJwcmVzZXJ2ZS1zcGFjZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzbDpuYW1ldGVzdHMiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6YXZ0IiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0icmVzdWx0LWRvY3VtZW50IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZm9ybWF0IiB0eXBlPSJ4c2w6UU5hbWUiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJocmVmIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRhdGlvbiIgdHlwZT0ieHNsOnZhbGlkYXRpb24tdHlwZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1ldGhvZCIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJ5dGUtb3JkZXItbWFyayIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNkYXRhLXNlY3Rpb24tZWxlbWVudHMiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXB1YmxpYyIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRvY3R5cGUtc3lzdGVtIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW5jb2RpbmciIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlc2NhcGUtdXJpLWF0dHJpYnV0ZXMiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmNsdWRlLWNvbnRlbnQtdHlwZSIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImluZGVudCIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1lZGlhLXR5cGUiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3JtYWxpemF0aW9uLWZvcm0iIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvbWl0LXhtbC1kZWNsYXJhdGlvbiIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0YW5kYWxvbmUiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bmRlY2xhcmUtcHJlZml4ZXMiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtY2hhcmFjdGVyLW1hcHMiIHR5cGU9InhzbDpRTmFtZXMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdXRwdXQtdmVyc2lvbiIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ic2VxdWVuY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXMiIHR5cGU9InhzbDpzZXF1ZW5jZS10eXBlIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJzb3J0Ij4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPiAgCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNsOmF2dCIvPiAgICAgICAgCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGF0YS10eXBlIiB0eXBlPSJ4c2w6YXZ0IiBkZWZhdWx0PSJ0ZXh0Ii8+ICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcmRlciIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0iYXNjZW5kaW5nIi8+ICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXNlLW9yZGVyIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29sbGF0aW9uIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RhYmxlIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJzdHJpcC1zcGFjZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzbDpuYW1ldGVzdHMiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InN0eWxlc2hlZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6dHJhbnNmb3JtIi8+Ci0KLTx4czplbGVtZW50IG5hbWU9InRlbXBsYXRlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp2ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnBhcmFtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yLWdyb3VwIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InhzbDpwYXR0ZXJuIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHJpb3JpdHkiIHR5cGU9InhzOmRlY2ltYWwiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtb2RlIiB0eXBlPSJ4c2w6bW9kZXMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcyIgdHlwZT0ieHNsOnNlcXVlbmNlLXR5cGUiIGRlZmF1bHQ9Iml0ZW0oKSoiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czpjb21wbGV4VHlwZSBuYW1lPSJ0ZXh0LWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgPHhzOnNpbXBsZUNvbnRlbnQ+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzbDp2ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVDb250ZW50PgotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmVsZW1lbnQgbmFtZT0idGV4dCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6c2ltcGxlQ29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnRleHQtZWxlbWVudC1iYXNlLXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJubyIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpzaW1wbGVDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0idHJhbnNmb3JtLWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpkZWNpbWFsIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLTx4czplbGVtZW50IG5hbWU9InRyYW5zZm9ybSI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp0cmFuc2Zvcm0tZWxlbWVudC1iYXNlLXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6aW1wb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmRlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp2YXJpYWJsZSIvPgotICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6cGFyYW0iLz4gICAgICAgICAgICAgIAotICAgICAgICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPiA8IS0tIHdlYWtlciB0aGFuIFhTTFQgMS4wIC0tPgotICAgICAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlZmF1bHQtdmFsaWRhdGlvbiIgdHlwZT0ieHNsOnZhbGlkYXRpb24tc3RyaXAtb3ItcHJlc2VydmUiIGRlZmF1bHQ9InN0cmlwIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5wdXQtdHlwZS1hbm5vdGF0aW9ucyIgdHlwZT0ieHNsOmlucHV0LXR5cGUtYW5ub3RhdGlvbnMtdHlwZSIgZGVmYXVsdD0idW5zcGVjaWZpZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InZhbHVlLW9mIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlcGFyYXRvciIgdHlwZT0ieHNsOmF2dCIvPiAgICAgICAgICAgIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJubyIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0idmFyaWFibGUiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXMiIHR5cGU9InhzbDpzZXF1ZW5jZS10eXBlIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJ3aGVuIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9IndpdGgtcGFyYW0iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXMiIHR5cGU9InhzbDpzZXF1ZW5jZS10eXBlIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHVubmVsIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+ICAgCi0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotICAgIFBBUlQgQzogZGVmaW5pdGlvbiBvZiBsaXRlcmFsIHJlc3VsdCBlbGVtZW50cwotICAgIAotICAgIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIGRlZmluZSB0aGUgbGl0ZXJhbCByZXN1bHQgZWxlbWVudHMKLSAgICBwZXJtaXNzaWJsZSBpbiBhIHN0eWxlc2hlZXQuCi0gICAgCi0gICAgKGEpIGRvIG5vdGhpbmcuIFRoaXMgYWxsb3dzIGFueSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgYSBsaXRlcmFsCi0gICAgICAgIHJlc3VsdCBlbGVtZW50LCBwcm92aWRlZCBpdCBpcyBub3QgaW4gdGhlIFhTTFQgbmFtZXNwYWNlCi0gICAgCi0gICAgKGIpIGRlY2xhcmUgYWxsIHBlcm1pdHRlZCBsaXRlcmFsIHJlc3VsdCBlbGVtZW50cyBhcyBtZW1iZXJzCi0gICAgICAgIG9mIHRoZSB4c2w6bGl0ZXJhbC1yZXN1bHQtZWxlbWVudCBzdWJzdGl0dXRpb24gZ3JvdXAKLSAgICAgICAgCi0gICAgKGMpIHJlZGVmaW5lIHRoZSBtb2RlbCBncm91cCB4c2w6cmVzdWx0LWVsZW1lbnRzIHRvIGFjY29tbW9kYXRlCi0gICAgICAgIGFsbCBwZXJtaXR0ZWQgbGl0ZXJhbCByZXN1bHQgZWxlbWVudHMuCi0gICAgICAgIAotICAgIExpdGVyYWwgcmVzdWx0IGVsZW1lbnRzIGFyZSBhbGxvd2VkIHRvIHRha2UgY2VydGFpbiBhdHRyaWJ1dGVzCi0gICAgaW4gdGhlIFhTTFQgbmFtZXNwYWNlLiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0aGUgYXR0cmlidXRlIGdyb3VwCi0gICAgbGl0ZXJhbC1yZXN1bHQtZWxlbWVudC1hdHRyaWJ1dGVzLCB3aGljaCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlCi0gICAgZGVmaW5pdGlvbiBvZiBhbnkgbGl0ZXJhbCByZXN1bHQgZWxlbWVudC4KLSAgICAKLSAgPC94czpkb2N1bWVudGF0aW9uPgotPC94czphbm5vdGF0aW9uPiAgIAotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLQotPHhzOmVsZW1lbnQgbmFtZT0ibGl0ZXJhbC1yZXN1bHQtZWxlbWVudCIgYWJzdHJhY3Q9InRydWUiIHR5cGU9InhzOmFueVR5cGUiLz4KLQotPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImxpdGVyYWwtcmVzdWx0LWVsZW1lbnQtYXR0cmlidXRlcyI+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdC1jb2xsYXRpb24iIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnVyaS1saXN0Ii8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0iZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnByZWZpeGVzIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnByZWZpeGVzIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0ieHBhdGgtZGVmYXVsdC1uYW1lc3BhY2UiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHM6YW55VVJJIi8+ICAgIAotICA8eHM6YXR0cmlidXRlIG5hbWU9ImluaGVyaXQtbmFtZXNwYWNlcyIgZm9ybT0icXVhbGlmaWVkIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJ5ZXMiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOlFOYW1lcyIgZGVmYXVsdD0iIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLXdoZW4iIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzOmRlY2ltYWwiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpRTmFtZSIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRpb24iIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnZhbGlkYXRpb24tdHlwZSIvPgotPC94czphdHRyaWJ1dGVHcm91cD4KLQotPHhzOmdyb3VwIG5hbWU9InJlc3VsdC1lbGVtZW50cyI+Ci0gIDx4czpjaG9pY2U+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6bGl0ZXJhbC1yZXN1bHQtZWxlbWVudCIvPgotICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLSAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNsb2NhbCIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci0gIDwveHM6Y2hvaWNlPgotPC94czpncm91cD4KLQotCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotICAgIFBBUlQgRDogZGVmaW5pdGlvbnMgb2Ygc2ltcGxlIHR5cGVzIHVzZWQgaW4gc3R5bGVzaGVldCBhdHRyaWJ1dGVzIAotICA8L3hzOmRvY3VtZW50YXRpb24+Ci08L3hzOmFubm90YXRpb24+ICAgCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJhdnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoaXMgdHlwZSBpcyB1c2VkIGZvciBhbGwgYXR0cmlidXRlcyB0aGF0IGFsbG93IGFuIGF0dHJpYnV0ZSB2YWx1ZSB0ZW1wbGF0ZS4KLSAgICAgIFRoZSBnZW5lcmFsIHJ1bGVzIGZvciB0aGUgc3ludGF4IG9mIGF0dHJpYnV0ZSB2YWx1ZSB0ZW1wbGF0ZXMsIGFuZCB0aGUgc3BlY2lmaWMKLSAgICAgIHJ1bGVzIGZvciBlYWNoIHN1Y2ggYXR0cmlidXRlLCBhcmUgZGVzY3JpYmVkIGluIHRoZSBYU0xUIDIuMCBSZWNvbW1lbmRhdGlvbi4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJjaGFyIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBIHN0cmluZyBjb250YWluaW5nIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0gICAgPHhzOmxlbmd0aCB2YWx1ZT0iMSIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJleHByZXNzaW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBbiBYUGF0aCAyLjAgZXhwcmVzc2lvbi4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6cGF0dGVybiB2YWx1ZT0iLisiLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iaW5wdXQtdHlwZS1hbm5vdGF0aW9ucy10eXBlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBEZXNjcmliZXMgaG93IHR5cGUgYW5ub3RhdGlvbnMgaW4gc291cmNlIGRvY3VtZW50cyBhcmUgaGFuZGxlZC4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNlcnZlIi8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdHJpcCIvPiAgIAotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idW5zcGVjaWZpZWQiLz4gICAgICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJsZXZlbCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgVGhlIGxldmVsIGF0dHJpYnV0ZSBvZiB4c2w6bnVtYmVyOiAKLSAgICAgIG9uZSBvZiBzaW5nbGUsIG11bHRpcGxlLCBvciBhbnkuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOQ05hbWUiPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic2luZ2xlIi8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtdWx0aXBsZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYW55Ii8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Im1vZGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBtb2RlIGF0dHJpYnV0ZSBvZiB4c2w6YXBwbHktdGVtcGxhdGVzOiAKLSAgICAgIGVpdGhlciBhIFFOYW1lLCBvciAjY3VycmVudCwgb3IgI2RlZmF1bHQuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHNsOlFOYW1lIj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2RlZmF1bHQiLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjY3VycmVudCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6dW5pb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Im1vZGVzIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGUgbW9kZSBhdHRyaWJ1dGUgb2YgeHNsOnRlbXBsYXRlOiAKLSAgICAgIGVpdGhlciBhIGxpc3QsIGVhY2ggbWVtYmVyIGJlaW5nIGVpdGhlciBhIFFOYW1lIG9yICNkZWZhdWx0OwotICAgICAgb3IgdGhlIHZhbHVlICNhbGwKLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnVuaW9uPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOmxpc3Q+Ci0gICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHNsOlFOYW1lIj4KLSAgICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2RlZmF1bHQiLz4KLSAgICAgICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8L3hzOnVuaW9uPgotICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzOmxpc3Q+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ibmFtZXRlc3RzIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBIGxpc3Qgb2YgTmFtZVRlc3RzLCBhcyBkZWZpbmVkIGluIHRoZSBYUGF0aCAyLjAgUmVjb21tZW5kYXRpb24uCi0gICAgICBFYWNoIE5hbWVUZXN0IGlzIGVpdGhlciBhIFFOYW1lLCBvciAiKiIsIG9yICJwcmVmaXg6KiIsIG9yICIqOmxvY2FsbmFtZSIKLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmxpc3Q+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzbDpRTmFtZSI+Ci0gICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IioiLz4KLSAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXGlcYyo6XCoiLz4KLSAgICAgICAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJcKjpcaVxjKiIvPiAgICAgICAgICAgIAotICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgIDwveHM6dW5pb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOmxpc3Q+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InByZWZpeGVzIj4KLSAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOk5DTmFtZSIvPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJwcmVmaXgtbGlzdC1vci1hbGwiPgotICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzbDpwcmVmaXgtbGlzdCI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNhbGwiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotPC94czpzaW1wbGVUeXBlPgotICAgICAgCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJwcmVmaXgtbGlzdCI+Ci0gIDx4czpsaXN0IGl0ZW1UeXBlPSJ4c2w6cHJlZml4LW9yLWRlZmF1bHQiLz4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ibWV0aG9kIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGUgbWV0aG9kIGF0dHJpYnV0ZSBvZiB4c2w6b3V0cHV0OgotICAgICAgRWl0aGVyIG9uZSBvZiB0aGUgcmVjb2duaXplZCBuYW1lcyAieG1sIiwgInhodG1sIiwgImh0bWwiLCAidGV4dCIsCi0gICAgICBvciBhIFFOYW1lIHRoYXQgbXVzdCBpbmNsdWRlIGEgcHJlZml4LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIj4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ4bWwiLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ4aHRtbCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imh0bWwiLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXh0Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4c2w6UU5hbWUiPgotICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXGMqOlxjKiIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6dW5pb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InBhdHRlcm4iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEEgbWF0Y2ggcGF0dGVybiBhcyBkZWZpbmVkIGluIHRoZSBYU0xUIDIuMCBSZWNvbW1lbmRhdGlvbi4KLSAgICAgIFRoZSBzeW50YXggZm9yIHBhdHRlcm5zIGlzIGEgcmVzdHJpY3RlZCBmb3JtIG9mIHRoZSBzeW50YXggZm9yCi0gICAgICBYUGF0aCAyLjAgZXhwcmVzc2lvbnMuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJwcmVmaXgtb3ItZGVmYXVsdCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRWl0aGVyIGEgbmFtZXNwYWNlIHByZWZpeCwgb3IgI2RlZmF1bHQuCi0gICAgICBVc2VkIGluIHRoZSB4c2w6bmFtZXNwYWNlLWFsaWFzIGVsZW1lbnQuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHM6TkNOYW1lIj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2RlZmF1bHQiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJRTmFtZXMiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEEgbGlzdCBvZiBRTmFtZXMuCi0gICAgICBVc2VkIGluIHRoZSBbeHNsOl11c2UtYXR0cmlidXRlLXNldHMgYXR0cmlidXRlIG9mIHZhcmlvdXMgZWxlbWVudHMsCi0gICAgICBhbmQgaW4gdGhlIGNkYXRhLXNlY3Rpb24tZWxlbWVudHMgYXR0cmlidXRlIG9mIHhzbDpvdXRwdXQKLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmxpc3QgaXRlbVR5cGU9InhzbDpRTmFtZSIvPiAgICAgICAgICAKLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iUU5hbWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEEgUU5hbWUuCi0gICAgICBUaGlzIHNjaGVtYSBkb2VzIG5vdCB1c2UgdGhlIGJ1aWx0LWluIHR5cGUgeHM6UU5hbWUsIGJ1dCByYXRoZXIgZGVmaW5lcyBpdHMgb3duCi0gICAgICBRTmFtZSB0eXBlLiBBbHRob3VnaCB4czpRTmFtZSB3b3VsZCBkZWZpbmUgdGhlIGNvcnJlY3QgdmFsaWRhdGlvbiBvbiB0aGVzZSBhdHRyaWJ1dGVzLAotICAgICAgYSBzY2hlbWEgcHJvY2Vzc29yIHdvdWxkIGV4cGFuZCB1bnByZWZpeGVkIFFOYW1lcyBpbmNvcnJlY3RseSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgUFNWSSwKLSAgICAgIGJlY2F1c2UgKGFzIGRlZmluZWQgaW4gWE1MIFNjaGVtYSBlcnJhdGEpIGFuIHVucHJlZml4ZWQgeHM6UU5hbWUgaXMgYXNzdW1lZCB0byBiZSBpbgotICAgICAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLCB3aGljaCBpcyBub3QgdGhlIGNvcnJlY3QgYXNzdW1wdGlvbiBmb3IgWFNMVC4KLSAgICAgIFRoZSBkYXRhIHR5cGUgaXMgZGVmaW5lZCBhcyBhIHJlc3RyaWN0aW9uIG9mIHRoZSBidWlsdC1pbiB0eXBlIE5hbWUsIHJlc3RyaWN0ZWQKLSAgICAgIHNvIHRoYXQgaXQgY2FuIG9ubHkgY29udGFpbiBvbmUgY29sb24gd2hpY2ggbXVzdCBub3QgYmUgdGhlIGZpcnN0IG9yIGxhc3QgY2hhcmFjdGVyLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TmFtZSI+Ci0gICAgPHhzOnBhdHRlcm4gdmFsdWU9IihbXjpdKzopP1teOl0rIi8+ICAgICAgCi0gIDwveHM6cmVzdHJpY3Rpb24+ICAgICAgICAKLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ic2VxdWVuY2UtdHlwZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgVGhlIGRlc2NyaXB0aW9uIG9mIGEgZGF0YSB0eXBlLCBjb25mb3JtaW5nIHRvIHRoZQotICAgICAgU2VxdWVuY2VUeXBlIHByb2R1Y3Rpb24gZGVmaW5lZCBpbiB0aGUgWFBhdGggMi4wIFJlY29tbWVuZGF0aW9uCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOnBhdHRlcm4gdmFsdWU9Ii4rIi8+ICAgICAgCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InVyaS1saXN0Ij4KLSAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOmFueVVSSSIvPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJ2YWxpZGF0aW9uLXN0cmlwLW9yLXByZXNlcnZlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBEZXNjcmliZXMgZGlmZmVyZW50IHdheXMgb2YgdHlwZS1hbm5vdGF0aW5nIGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOnZhbGlkYXRpb24tdHlwZSI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzZXJ2ZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaXAiLz4gICAgCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InZhbGlkYXRpb24tdHlwZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRGVzY3JpYmVzIGRpZmZlcmVudCB3YXlzIG9mIHR5cGUtYW5ub3RhdGluZyBhbiBlbGVtZW50IG9yIGF0dHJpYnV0ZS4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0cmljdCIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGF4Ii8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzZXJ2ZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaXAiLz4gICAgCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Inllcy1vci1ubyI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgT25lIG9mIHRoZSB2YWx1ZXMgInllcyIgb3IgIm5vIi4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InllcyIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm8iLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ieWVzLW9yLW5vLW9yLW9taXQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE9uZSBvZiB0aGUgdmFsdWVzICJ5ZXMiIG9yICJubyIgb3IgIm9taXQiLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJubyIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib21pdCIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08L3hzOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjAyOWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWphdmFDb21waWxlci4uLmFyZ3MKLWJ1aWxkLnhtbAotQGRvdAotdGVtcC5mb2xkZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVkMzQyZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE3YmI2ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGh1IEphbiAwMyAyMjoyNDowMSBFU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM5ODE4OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotI1RodSBKdW4gMTEgMDE6MzM6MzAgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjdiNDc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jRnJpIE1heSAwOSAxNTozMjozNCBCU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZDg1NjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jRnJpIEphbiAwNCAwOTowNDo0MyBFU1QgMjAwOAotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctYnVuZGxlLWNsYXNzcGF0aC1lbnRyaWVzPTAKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MQotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MQotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZDJmMTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW07YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy41LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5vc2dpLnV0aWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLG9yZy5lY2xpcHNlLndzdC5qYXhwLmRlYnVnLnVpLG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmciLAotIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWk7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLG9yZy5lY2xpcHNlLndzdC5qYXhwLmRlYnVnLnVpLG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmciLAotIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9uczt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcsb3JnLmVjbGlwc2Uud3N0LmpheHAuZGVidWcudWksb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5icmVha3BvaW50O3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZyxvcmcuZWNsaXBzZS53c3QuamF4cC5kZWJ1Zy51aSxvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLm1vZGVsO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZyxvcmcuZWNsaXBzZS53c3QuamF4cC5kZWJ1Zy51aSxvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcsb3JnLmVjbGlwc2Uud3N0LmpheHAuZGVidWcudWksb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcsb3JnLmVjbGlwc2Uud3N0LmpheHAuZGVidWcudWksb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OGRhMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMvYnJrcF9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL2Jya3Bfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzMWZlNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMvYnJrcF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL2xvY2FsdmFyaWFibGVfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9sb2NhbHZhcmlhYmxlX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNDRiMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL2xvY2FsdmFyaWFibGVfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9vcGVyYXRpb24uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL29wZXJhdGlvbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NWQ5ZTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL29wZXJhdGlvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMvc2FtcGxlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9zYW1wbGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGZiM2M5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9zYW1wbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL3hzbHRfbGF1bmNoLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy94c2x0X2xhdW5jaC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZTE1ZjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL3hzbHRfbGF1bmNoLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy94c2x0X291dHB1dC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMveHNsdF9vdXRwdXQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWZiMDhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy94c2x0X291dHB1dC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZDY1YzkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aQotQnVuZGxlLU5hbWUuMCA9IFhTTCBEZWJ1Z2dlciBVSQotbGF1bmNoTW9kZS5kZXNjcmlwdGlvbi4wID0gQ3JlYXRlIGEgY29uZmlndXJhdGlvbiB0byBkZWJ1ZyBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uCi1sYXVuY2hNb2RlLmRlc2NyaXB0aW9uLjEgPSBDcmVhdGUgYSBjb25maWd1cmF0aW9uIHRvIHJ1biBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uCi1jb250ZXh0LmRlc2NyaXB0aW9uLjAgPSBDb250ZXh0IGZvciBkZWJ1Z2dpbmcgWFNMVAotY29udGV4dC5uYW1lLjAgPSBYU0xUIERlYnVnZ2luZwotc2hvcnRjdXQubGFiZWwuMCA9IFhTTCBUcmFuc2Zvcm1hdGlvbgotc2hvcnRjdXQubGFiZWwuMSA9IFhTTFQgVHJhbnNmb3JtYXRpb24KLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1kZXNjcmlwdGlvbi5kZXNjcmlwdGlvbi4wID0gUnVuIGFuIFhTTFQgdHJhbnNmb3JtYXRpb24gdXNpbmcgdGhlIHNlbGVjdGVkIGZpbGUocykKLWRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uLjEgPSBEZWJ1ZyBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uIHVzaW5nIHRoZSBzZWxlY3RlZCBmaWxlKHMpCi1kZXNjcmlwdGlvbi5kZXNjcmlwdGlvbi4yID0gUHJvZmlsZSBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uIHVzaW5nIHRoZSBzZWxlY3RlZCBmaWxlKHMpCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjc0MGZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Ci08cGx1Z2luPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBlcnNwZWN0aXZlRXh0ZW5zaW9ucyI+Ci0JCTxwZXJzcGVjdGl2ZUV4dGVuc2lvbgotCQkJdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC54bWwucGVyc3BlY3RpdmUiPgotCQkJPGFjdGlvblNldCBpZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuZGVidWdBY3Rpb25TZXQiIC8+Ci0JCQk8YWN0aW9uU2V0IGlkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hBY3Rpb25TZXQiIC8+Ci0JCQk8YWN0aW9uU2V0IGlkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5icmVha3BvaW50QWN0aW9uU2V0IiAvPgotCQkJPGFjdGlvblNldCBpZD0ib3JnLmVjbGlwc2UuZGVidWcudWkucHJvZmlsZUFjdGlvblNldCIgLz4KLQkJPC9wZXJzcGVjdGl2ZUV4dGVuc2lvbj4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9uVHlwZUltYWdlcyI+Ci0JCTxsYXVuY2hDb25maWd1cmF0aW9uVHlwZUltYWdlIGljb249Imljb25zL3hzbHRfbGF1bmNoLmdpZiIKLQkJCWNvbmZpZ1R5cGVJRD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9uVHlwZUltYWdlIiAvPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwcyI+Ci0JCTxsYXVuY2hDb25maWd1cmF0aW9uVGFiR3JvdXAKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTFRUYWJHcm91cCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cC54c2x0IgotCQkJdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgotCQkJPGxhdW5jaE1vZGUgZGVzY3JpcHRpb249IiVsYXVuY2hNb2RlLmRlc2NyaXB0aW9uLjAiCi0JCQkJbW9kZT0iZGVidWciIHBlcnNwZWN0aXZlPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIiAvPgotCQkJPGxhdW5jaE1vZGUgZGVzY3JpcHRpb249IiVsYXVuY2hNb2RlLmRlc2NyaXB0aW9uLjEiCi0JCQkJbW9kZT0icnVuIiBwZXJzcGVjdGl2ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5wZXJzcGVjdGl2ZSIgLz4KLQkJPC9sYXVuY2hDb25maWd1cmF0aW9uVGFiR3JvdXA+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29udGV4dHMiPgotCQk8Y29udGV4dCBkZXNjcmlwdGlvbj0iJWNvbnRleHQuZGVzY3JpcHRpb24uMCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLmNvbnRleHQiIG5hbWU9IiVjb250ZXh0Lm5hbWUuMCIKLQkJCXBhcmVudElkPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z2dpbmciPgotCQk8L2NvbnRleHQ+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z01vZGVsUHJlc2VudGF0aW9ucyI+Ci0JCTxkZWJ1Z01vZGVsUHJlc2VudGF0aW9uCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5tb2RlbC5YU0xNb2RlbFByZXNlbnRhdGlvbiIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xEZWJ1Z01vZGVsIj4KLQkJPC9kZWJ1Z01vZGVsUHJlc2VudGF0aW9uPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoU2hvcnRjdXRzIj4KLQkJPHNob3J0Y3V0Ci0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTExhdW5jaFNob3J0Y3V0IgotICAgICAgICBpY29uPSJpY29ucy94c2x0X2xhdW5jaC5naWYiCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLmxhdW5jaHNob3J0Y3V0IgotICAgICAgICBsYWJlbD0iJXNob3J0Y3V0LmxhYmVsLjAiCi0gICAgICAgIG1vZGVzPSJydW4sIGRlYnVnLCBwcm9maWxlIj4KLQkJCTxjb250ZXh0dWFsTGF1bmNoPgotCQkJCTxlbmFibGVtZW50PgotCQkJCQk8d2l0aCB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KLQkJCQkJCTxpdGVyYXRlPgotCQkJCQkJCTxhZGFwdAotCQkJCQkJCQl0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSI+Ci0JCQkJCQkJCTxvcj4KLQkJCQkJCQkJCTx0ZXN0Ci0JCQkJCQkJCQkJcHJvcGVydHk9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLmNvbnRlbnRUeXBlSWQiCi0JCQkJCQkJCQkJdmFsdWU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiIC8+Ci0JCQkJCQkJCQk8dGVzdAotCQkJCQkJCQkJCXByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5jb250ZW50VHlwZUlkIgotCQkJCQkJCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlIiAvPgotCQkJCQkJCQkJPHRlc3QKLQkJCQkJCQkJCQlwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuY29udGVudFR5cGVJZCIKLQkJCQkJCQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSIgLz4KLQkJCQkJCQkJCTx0ZXN0Ci0JCQkJCQkJCQkJcHJvcGVydHk9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLmNvbnRlbnRUeXBlSWQiCi0JCQkJCQkJCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QuY29yZS54c2Rzb3VyY2UiIC8+Ci0JCQkJCQkJCTwvb3I+Ci0JCQkJCQkJPC9hZGFwdD4KLQkJCQkJCTwvaXRlcmF0ZT4KLQkJCQkJPC93aXRoPgotCQkJCTwvZW5hYmxlbWVudD4KLQkJCTwvY29udGV4dHVhbExhdW5jaD4KLQkJICAgPGRlc2NyaXB0aW9uCi0JCSAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGVzY3JpcHRpb24uZGVzY3JpcHRpb24uMCIKLQkJICAgICAgICAgbW9kZT0icnVuIj4KLQkJICAgPC9kZXNjcmlwdGlvbj4KLQkJICAgPGRlc2NyaXB0aW9uCi0JCSAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGVzY3JpcHRpb24uZGVzY3JpcHRpb24uMSIKLQkJICAgICAgICAgbW9kZT0iZGVidWciPgotCQkgICA8L2Rlc2NyaXB0aW9uPgotCQkgICA8ZGVzY3JpcHRpb24KLQkJICAgICAgICAgZGVzY3JpcHRpb249IiVkZXNjcmlwdGlvbi5kZXNjcmlwdGlvbi4yIgotCQkgICAgICAgICBtb2RlPSJwcm9maWxlIj4KLQkJICAgPC9kZXNjcmlwdGlvbj4KLQkJPC9zaG9ydGN1dD4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5kZWJ1Z01vZGVsQ29udGV4dEJpbmRpbmdzIj4KLQkJPG1vZGVsQ29udGV4dEJpbmRpbmcKLQkJCWNvbnRleHRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5jb250ZXh0IgotCQkJZGVidWdNb2RlbElkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xEZWJ1Z01vZGVsIj4KLQkJPC9tb2RlbENvbnRleHRCaW5kaW5nPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuYnJlYWtwb2ludCI+Ci0JCTxicmVha3BvaW50Q29udHJpYnV0aW9uCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5wcm92aWRlcnMiPgkJCi0JCQk8cHJvdmlkZXIgY29udGVudFR5cGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmJyZWFrcG9pbnQuWFNMQnJlYWtwb2ludFByb3ZpZGVyOip4c2wsKnhzbHQiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuWFNMQnJlYWtwb2ludFByb3ZpZGVyIiAvPgotCQkJPCEtLSBUT0RPIGFkZCB0aGlzIGJhY2sgaW4gd2hlbiB3ZSBjYW4gZG8gc29tZXRoaW5nIHdpdGggYnJlYWtwb2ludHMgb24gWE1MIGZpbGVzCi0JCQk8cHJvdmlkZXIgY29udGVudFR5cGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlLG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2Usb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5icmVha3BvaW50LlhTTEJyZWFrcG9pbnRQcm92aWRlcjoqeHNsLCp4c2x0LCp4bWwiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuWFNMQnJlYWtwb2ludFByb3ZpZGVyIiAvPiAgLS0+Ci0JCTwvYnJlYWtwb2ludENvbnRyaWJ1dGlvbj4KLQk8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZGVidWcvaW50ZXJuYWwvdXRpbC9YU0xEZWJ1Z1BsdWdpbkltYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2RlYnVnL2ludGVybmFsL3V0aWwvWFNMRGVidWdQbHVnaW5JbWFnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTljNjUzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZGVidWcvaW50ZXJuYWwvdXRpbC9YU0xEZWJ1Z1BsdWdpbkltYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjIzNTU3IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSG9sZ2VyIFZvb3JtYW5uIC0gSWNvbnMgZm9yIFByb2Nlc3NvciwgT3V0cHV0LCBhbmQgTGF1bmNoIHRhYnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWw7Ci0KLS8qKgotICogQnVuZGxlIG9mIG1vc3QgaW1hZ2VzIHVzZWQgYnkgdGhlIFhTTCBEZWJ1ZyBQbHVnaW5zCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xEZWJ1Z1BsdWdpbkltYWdlcyB7Ci0KLQkvKioKLQkgKiBQYXRoIHRvIHRoZSBYU0xUIFByb2Nlc3NvciBJbWFnZXMgdXNlZCBmb3IgbGF1bmNoIGNvbmZpZ3VyYXRpb25zCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX1BST0NFU1NPUl9UQUIgPSAiaWNvbnMveHNsdF9wcm9jZXNzb3IuZ2lmIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFNMVCBPdXRwdXQgSW1hZ2VzIHVzZWQgZm9yIGxhdW5jaCBjb25maWd1cmF0aW9ucwotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19PVVRQVVRfVEFCID0gImljb25zL3hzbHRfb3V0cHV0LmdpZiI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFBhdGggdG8gdGhlIFhTTFQgTGF1bmNoIEltYWdlcyB1c2VkIGZvciBsYXVuY2ggY29uZmlndXJhdGlvbnMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfTUFJTl9UQUIgPSAiaWNvbnMveHNsdF9sYXVuY2guZ2lmIjsgLy8kTk9OLU5MUy0xJAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZGVidWcvaW50ZXJuYWwvdXRpbC9YU0xQbHVnaW5JbWFnZUhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2RlYnVnL2ludGVybmFsL3V0aWwvWFNMUGx1Z2luSW1hZ2VIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzQzOTZhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZGVidWcvaW50ZXJuYWwvdXRpbC9YU0xQbHVnaW5JbWFnZUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDIxMzg0OSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgdG8gaGFuZGxlIGltYWdlcyBwcm92aWRlZCBieSB0aGlzIHBsdWctaW4uCi0gKiAKLSAqIE5PVEU6IEZvciBpbnRlcm5hbCB1c2Ugb25seS4gRm9yIGltYWdlcyB1c2VkIGV4dGVybmFsbHksIHBsZWFzZSB1c2UgdGhlCi0gKiBTaGFyZWQqKipJbWFnZUhlbHBlciBjbGFzcyBpbnN0ZWFkLgotICogCi0gKiBAYXV0aG9yIGRhdmlkIGNhcnZlciBiYXNlZCBvbiB3b3JrIGJ5IGFteXd1Ci0gKi8KLXB1YmxpYyBjbGFzcyBYU0xQbHVnaW5JbWFnZUhlbHBlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgWFNMUGx1Z2luSW1hZ2VIZWxwZXIgaW5zdGFuY2UgPSBudWxsOwotCi0JLyoqCi0JICogR2V0cyB0aGUgaW5zdGFuY2UuCi0JICogCi0JICogQHJldHVybiBSZXR1cm5zIGEgWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBYU0xQbHVnaW5JbWFnZUhlbHBlciBnZXRJbnN0YW5jZSgpIHsKLQkJaWYgKGluc3RhbmNlID09IG51bGwpIHsKLQkJCWluc3RhbmNlID0gbmV3IFhTTFBsdWdpbkltYWdlSGVscGVyKCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQotCS8vIHNhdmUgYSBkZXNjcmlwdG9yIGZvciBlYWNoIGltYWdlCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSBIYXNoTWFwIGZJbWFnZURlc2NSZWdpc3RyeSA9IG51bGw7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUExVR0lOSUQgPSBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW1hZ2UgZnJvbSB0aGUgZ2l2ZW4gcmVzb3VyY2UgYW5kIGFkZHMgdGhlIGltYWdlIHRvIHRoZSBpbWFnZQotCSAqIHJlZ2lzdHJ5LgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqIEByZXR1cm4gSW1hZ2UKLQkgKi8KLQlwcml2YXRlIEltYWdlIGNyZWF0ZUltYWdlKFN0cmluZyByZXNvdXJjZSkgewotCQlJbWFnZURlc2NyaXB0b3IgZGVzYyA9IGdldEltYWdlRGVzY3JpcHRvcihyZXNvdXJjZSk7Ci0JCUltYWdlIGltYWdlID0gbnVsbDsKLQotCQlpZiAoZGVzYyAhPSBudWxsKSB7Ci0JCQlpbWFnZSA9IGRlc2MuY3JlYXRlSW1hZ2UoKTsKLQkJCS8vIGRvbnQgYWRkIHRoZSBtaXNzaW5nIGltYWdlIGRlc2NyaXB0b3IgaW1hZ2UgdG8gdGhlIGltYWdlCi0JCQkvLyByZWdpc3RyeQotCQkJaWYgKCFkZXNjLmVxdWFscyhJbWFnZURlc2NyaXB0b3IuZ2V0TWlzc2luZ0ltYWdlRGVzY3JpcHRvcigpKSkgewotCQkJCWdldEltYWdlUmVnaXN0cnkoKS5wdXQocmVzb3VyY2UsIGltYWdlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW1hZ2U7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZyb20gdGhlIGdpdmVuIGltYWdlRmlsZVBhdGggYW5kIGFkZHMgdGhlCi0JICogaW1hZ2UgZGVzY3JpcHRvciB0byB0aGUgaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeS4gSWYgYW4gaW1hZ2UgZGVzY3JpcHRvcgotCSAqIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB0aGUgZGVmYXVsdCAibWlzc2luZyIgaW1hZ2UgZGVzY3JpcHRvciBpcyByZXR1cm5lZAotCSAqIGJ1dCBub3QgYWRkZWQgdG8gdGhlIGltYWdlIGRlc2NyaXB0b3IgcmVnaXN0cnkuCi0JICogCi0JICogQHBhcmFtIGltYWdlRmlsZVBhdGgKLQkgKiBAcmV0dXJuIEltYWdlRGVzY3JpcHRvciBpbWFnZSBkZXNjcmlwdG9yIGZvciBpbWFnZUZpbGVQYXRoIG9yIGRlZmF1bHQKLQkgKiAgICAgICAgICJtaXNzaW5nIiBpbWFnZSBkZXNjcmlwdG9yIGlmIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZAotCSAqLwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgSW1hZ2VEZXNjcmlwdG9yIGNyZWF0ZUltYWdlRGVzY3JpcHRvcihTdHJpbmcgaW1hZ2VGaWxlUGF0aCkgewotCQlJbWFnZURlc2NyaXB0b3IgaW1hZ2VEZXNjcmlwdG9yID0gQWJzdHJhY3RVSVBsdWdpbgotCQkJCS5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTklELCBpbWFnZUZpbGVQYXRoKTsKLQkJaWYgKGltYWdlRGVzY3JpcHRvciAhPSBudWxsKSB7Ci0JCQlnZXRJbWFnZURlc2NyaXB0b3JSZWdpc3RyeSgpLnB1dChpbWFnZUZpbGVQYXRoLCBpbWFnZURlc2NyaXB0b3IpOwotCQl9IGVsc2UgewotCQkJaW1hZ2VEZXNjcmlwdG9yID0gSW1hZ2VEZXNjcmlwdG9yLmdldE1pc3NpbmdJbWFnZURlc2NyaXB0b3IoKTsKLQkJfQotCi0JCXJldHVybiBpbWFnZURlc2NyaXB0b3I7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2UgZnJvbSB0aGUgaW1hZ2UgcmVnaXN0cnkuIElmCi0JICogdGhlIGltYWdlIGNhbm5vdCBiZSByZXRyaWV2ZWQsIGF0dGVtcHQgdG8gZmluZCBhbmQgbG9hZCB0aGUgaW1hZ2UgYXQgdGhlCi0JICogbG9jYXRpb24gc3BlY2lmaWVkIGluIHJlc291cmNlLgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqICAgICAgICAgICAgdGhlIGltYWdlIHRvIHJldHJpZXZlCi0JICogQHJldHVybiBJbWFnZSB0aGUgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIG9yIG51bGwgaWYgb25lIGNvdWxkIG5vdAotCSAqICAgICAgICAgYmUgZm91bmQKLQkgKi8KLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoU3RyaW5nIHJlc291cmNlKSB7Ci0JCUltYWdlIGltYWdlID0gZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldChyZXNvdXJjZSk7Ci0JCWlmIChpbWFnZSA9PSBudWxsKSB7Ci0JCQkvLyBjcmVhdGUgYW4gaW1hZ2UKLQkJCWltYWdlID0gY3JlYXRlSW1hZ2UocmVzb3VyY2UpOwotCQl9Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIGZyb20gdGhlIGltYWdlCi0JICogZGVzY3JpcHRvciByZWdpc3RyeS4gSWYgdGhlIGltYWdlIGRlc2NyaXB0b3IgY2Fubm90IGJlIHJldHJpZXZlZCwgYXR0ZW1wdAotCSAqIHRvIGZpbmQgYW5kIGxvYWQgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbgotCSAqIHJlc291cmNlLgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqICAgICAgICAgICAgdGhlIGltYWdlIGRlc2NyaXB0b3IgdG8gcmV0cmlldmUKLQkgKiBAcmV0dXJuIEltYWdlRGVzY3JpcHRvciB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhc3NvY2F0ZWQgd2l0aCByZXNvdXJjZSBvcgotCSAqICAgICAgICAgdGhlIGRlZmF1bHQgIm1pc3NpbmciIGltYWdlIGRlc2NyaXB0b3IgaWYgb25lIGNvdWxkIG5vdCBiZSBmb3VuZAotCSAqLwotCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyByZXNvdXJjZSkgewotCQlJbWFnZURlc2NyaXB0b3IgaW1hZ2VEZXNjcmlwdG9yID0gbnVsbDsKLQkJT2JqZWN0IG8gPSBnZXRJbWFnZURlc2NyaXB0b3JSZWdpc3RyeSgpLmdldChyZXNvdXJjZSk7Ci0JCWlmIChvID09IG51bGwpIHsKLQkJCS8vIGNyZWF0ZSBhIGRlc2NyaXB0b3IKLQkJCWltYWdlRGVzY3JpcHRvciA9IGNyZWF0ZUltYWdlRGVzY3JpcHRvcihyZXNvdXJjZSk7Ci0JCX0gZWxzZSB7Ci0JCQlpbWFnZURlc2NyaXB0b3IgPSAoSW1hZ2VEZXNjcmlwdG9yKSBvOwotCQl9Ci0JCXJldHVybiBpbWFnZURlc2NyaXB0b3I7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeSBmb3IgdGhpcyBwbHVnaW4uCi0JICogCi0JICogQHJldHVybiBIYXNoTWFwIC0gaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeSBmb3IgdGhpcyBwbHVnaW4KLQkgKi8KLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIEhhc2hNYXAgZ2V0SW1hZ2VEZXNjcmlwdG9yUmVnaXN0cnkoKSB7Ci0JCWlmIChmSW1hZ2VEZXNjUmVnaXN0cnkgPT0gbnVsbCkgewotCQkJZkltYWdlRGVzY1JlZ2lzdHJ5ID0gbmV3IEhhc2hNYXAoKTsKLQkJfQotCQlyZXR1cm4gZkltYWdlRGVzY1JlZ2lzdHJ5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGltYWdlIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbi4KLQkgKiAKLQkgKiBAcmV0dXJuIEltYWdlUmVnaXN0cnkgLSBpbWFnZSByZWdpc3RyeSBmb3IgdGhpcyBwbHVnaW4KLQkgKi8KLQlwcml2YXRlIEltYWdlUmVnaXN0cnkgZ2V0SW1hZ2VSZWdpc3RyeSgpIHsKLQkJcmV0dXJuIEpGYWNlUmVzb3VyY2VzLmdldEltYWdlUmVnaXN0cnkoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvQWJzdHJhY3RUYWJsZUJsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvQWJzdHJhY3RUYWJsZUJsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMDg1YTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL0Fic3RyYWN0VGFibGVCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLQotLyoqCi0gKiBBbiA8Y29kZT5BYnN0cmFjdExhdW5jaENvbmZpZ3VyYXRpb25UYWI8L2NvZGU+IHNwZWNpYWxpc2VkIGZvciBibG9ja3MgdGhhdAotICogY29udGFpbiBhIHRhYmxlLiBUaGlzIGFic3RyYWN0IGNsYXNzIGNvbnZlbmllbnRseSBzYXZlcyBhbmQgcmVzdG9yZXMgdGhlCi0gKiB0YWJsZSdzIGNvbHVtbiBzZXR0aW5ncy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUYWJsZUJsb2NrIGV4dGVuZHMgQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiIHsKLQlwcml2YXRlIGludCBmU29ydENvbHVtbjsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCBUYWJsZSBnZXRUYWJsZSgpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IElEaWFsb2dTZXR0aW5ncyBnZXREaWFsb2dTZXR0aW5ncygpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRRdWFsaWZpZXIoKTsKLQotCXByb3RlY3RlZCB2b2lkIHNldFNvcnRDb2x1bW4oaW50IGNvbHVtbikgewotCQlmU29ydENvbHVtbiA9IGNvbHVtbjsKLQl9Ci0KLQkvKioKLQkgKiBQZXJzaXN0IHRhYmxlIHNldHRpbmdzIGludG8gdGhlIGdpdmUgZGlhbG9nIHN0b3JlLCBwcmVmaXhlZCB3aXRoIHRoZQotCSAqIGdpdmVuIGtleS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzYXZlQ29sdW1uU2V0dGluZ3MoKSB7Ci0JCWludCBjb2x1bW5Db3VudCA9IGdldFRhYmxlKCkuZ2V0Q29sdW1uQ291bnQoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7Ci0JCQlnZXREaWFsb2dTZXR0aW5ncygpCi0JCQkJCS5wdXQoCi0JCQkJCQkJZ2V0UXVhbGlmaWVyKCkgKyAiLmNvbHVtbldpZHRoIiArIGksIGdldFRhYmxlKCkuZ2V0Q29sdW1uKGkpLmdldFdpZHRoKCkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZ2V0RGlhbG9nU2V0dGluZ3MoKS5wdXQoZ2V0UXVhbGlmaWVyKCkgKyAiLnNvcnRDb2x1bW4iLCBmU29ydENvbHVtbik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBSZXN0b3JlIHRhYmxlIHNldHRpbmdzIGZyb20gdGhlIGdpdmVuIGRpYWxvZyBzdG9yZSB1c2luZyB0aGUgZ2l2ZW4ga2V5LgotCSAqLwotCXB1YmxpYyB2b2lkIHJlc3RvcmVDb2x1bW5TZXR0aW5ncygpIHsKLQkJZ2V0VGFibGUoKS5sYXlvdXQodHJ1ZSk7Ci0JCXJlc3RvcmVDb2x1bW5XaWR0aHMoZ2V0RGlhbG9nU2V0dGluZ3MoKSwgZ2V0UXVhbGlmaWVyKCkpOwotCQlpbnQgY29sID0gMDsKLQkJdHJ5IHsKLQkJCWNvbCA9IGdldERpYWxvZ1NldHRpbmdzKCkuZ2V0SW50KGdldFF1YWxpZmllcigpICsgIi5zb3J0Q29sdW1uIik7IC8vJE5PTi1OTFMtMSQKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCWNvbCA9IDE7Ci0JCX0KLQkJc2V0U29ydENvbHVtbihjb2wpOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXN0b3JlQ29sdW1uV2lkdGhzKElEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncywgU3RyaW5nIHF1YWxpZmllcikgewotCQlpbnQgY29sdW1uQ291bnQgPSBnZXRUYWJsZSgpLmdldENvbHVtbkNvdW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykgewotCQkJaW50IHdpZHRoID0gLTE7Ci0JCQl0cnkgewotCQkJCXdpZHRoID0gc2V0dGluZ3MuZ2V0SW50KHF1YWxpZmllciArICIuY29sdW1uV2lkdGgiICsgaSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0KLQkJCWlmICh3aWR0aCA+IDApCi0JCQkJZ2V0VGFibGUoKS5nZXRDb2x1bW4oaSkuc2V0V2lkdGgod2lkdGgpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJaWYgKGdldFRhYmxlKCkgIT0gbnVsbCAmJiAhZ2V0VGFibGUoKS5pc0Rpc3Bvc2VkKCkpCi0JCQlzYXZlQ29sdW1uU2V0dGluZ3MoKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1M2EzOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIHVwZGF0ZWQgdG8gbWVldCBHYWxpbGVvIHJlcXVpcmVtZW50cwotICogICAgIFN0dWFydCBIYXJwZXIgLSBhZGRlZCAib3BlbiBmaWxlcyIgc2VsZWN0b3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiBNZXNzYWdlcyBmb3IgdGhlIGRlYnVnLnVpIHBhY2thZ2UuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIEEgbmFtZSBmb3IgdGhlIHJlbW92ZSBhY3Rpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUmVtb3ZlQWN0aW9uX1RleHQ7Ci0KLQkvKioKLQkgKiBBIG5hbWUgZm9yIHRoZSA8Y29kZT5BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uPC9jb2RlPiBhY3Rpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkV29ya3NwYWNlRmlsZUFjdGlvbl9UZXh0OwotCi0JLyoqCi0JICogQSBuYW1lIGZvciB0aGUgPGNvZGU+QWRkRXh0ZXJuYWxGaWxlQWN0aW9uPC9jb2RlPiBhY3Rpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkRXh0ZXJuYWxGaWxlQWN0aW9uX1RleHQ7Ci0KLQkvKioKLQkgKiBBIG5hbWUgZm9yIHRoZSA8Y29kZT5Nb3ZlRG93bkFjdGlvbjwvY29kZT4gYWN0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1vdmVEb3duQWN0aW9uX1RleHQ7Ci0KLQkvKioKLQkgKiBBIG5hbWUgZm9yIHRoZSA8Y29kZT5Nb3ZlVXBBY3Rpb248L2NvZGU+IGFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNb3ZlVXBBY3Rpb25fVGV4dDsKLQotCS8qKgotCSAqIEEgaGVhZGluZyBmb3IgdGhlIDxjb2RlPkFkZEV4dGVybmFsRmlsZUFjdGlvbjwvY29kZT4gZGlhbG9nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZEV4dGVybmFsRmlsZUFjdGlvbl9TZWxlY3Rpb25fMzsKLQotCS8qKgotCSAqIEEgbWVzc2FnZSBmb3IgdGhlIDxjb2RlPkFkZFdvcmtzcGFjZUZpbGVBY3Rpb248L2NvZGU+IGRpYWxvZy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX0RpYWxvZ01lc3NhZ2U7Ci0KLQkvKioKLQkgKiBBIHRpdGxlIGZvciB0aGUgPGNvZGU+QWRkV29ya3NwYWNlRmlsZUFjdGlvbjwvY29kZT4gZGlhbG9nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fRGlhbG9nVGl0bGU7Ci0KLQkvKioKLQkgKiBBIG5hbWUgZm9yIHRoZSA8Y29kZT5BZGRQYXJhbWV0ZXJBY3Rpb248L2NvZGU+IGFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQYXJhbWV0ZXJBY3Rpb247Ci0KLQkvKioKLQkgKiBBIG5hbWUgZm9yIHRoZSA8Y29kZT5SZW1vdmVQYXJhbWV0ZXJBY3Rpb248L2NvZGU+IGFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBSZW1vdmVQYXJhbWV0ZXJBY3Rpb247Ci0KLQkvKioKLQkgKiBBIGxhYmVsIGZvciB0aGUgVmFyaWFibGVzIGJ1dHRvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBWYXJpYWJsZXNGaWVsZEJ1dHRvbl9UZXh0OwotCi0JLyoqCi0JICogQSB0aXRsZSBmb3IgdGhlIDxjb2RlPkFkZFBhcmFtZXRlckFjdGlvbjwvY29kZT4gZGlhbG9nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2c7Ci0KLQkvKioKLQkgKiBBIGxhYmVsIGZvciB0aGUgPGNvZGU+QWRkUGFyYW1ldGVyQWN0aW9uPC9jb2RlPiBuYW1lIHRleHQgYm94LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2dfTmFtZTsKLQotCS8qKgotCSAqIEEgbGFiZWwgZm9yIHRoZSA8Y29kZT5BZGRQYXJhbWV0ZXJBY3Rpb248L2NvZGU+IHR5cGUgY29tYm8uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19UeXBlOwotCi0JLyoqCi0JICogQSBsYWJlbCBmb3IgdGhlIDxjb2RlPkFkZFBhcmFtZXRlckFjdGlvbjwvY29kZT4gdmFsdWUgdGV4dCBib3guCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19WYWx1ZTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTEJyZWFrcG9pbnRQcm92aWRlcl8wOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU3R5bGVzaGVldEVudHJ5TGFiZWxQcm92aWRlcl9JbnZhbGlkX3BhdGg7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUcmFuc2Zvcm1zQmxvY2tfMDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRyYW5zZm9ybXNCbG9ja19OYW1lOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1Q7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19HUk9VUF9OQU1FOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfREVGQVVMVF9SQURJTzsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX09USEVSX1JBRElPOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfRElBTE9HX01FU1NBR0U7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19WQVJJQUJMRVNfQlVUVE9OOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfRklMRV9TWVNURU1fQlVUVE9OOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfV09SS1NQQUNFX0JVVFRPTjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX09QRU5GSUxFU19CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19PUEVORklMRVNfRElBTE9HOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfTmFtZTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX0V4Y2VwdGlvbl9vY2N1cnJlZF9yZWFkaW5nX2NvbmZpZ3VyYXRpb247Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX1RJVExFOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMTWFpblRhYl9UYWJOYW1lOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVHJhbnNmb3Jtc0Jsb2NrX1BhcmFtZXRlcnNMYWJlbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRyYW5zZm9ybXNCbG9ja19TdHlsZXNoZWV0c0xhYmVsOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFyYW1ldGVyc0Jsb2NrXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFyYW1ldGVyc0Jsb2NrXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFyYW1ldGVyc0Jsb2NrXzEwOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja18xMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfMzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfNDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfODsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfOTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja18wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja18xOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja18xMzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfNDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfODsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfOTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRUYWJfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRUYWJfMTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFR5cGVCbG9ja19Hcm91cF9OYW1lOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrXzA7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfMTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja18yOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrXzc7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfODsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja185OwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19HUk9VUF9OQU1FOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX0RFRkFVTFRfUkFESU87Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfT1RIRVJfUkFESU87Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfRElBTE9HX01FU1NBR0U7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19NRVNTQUdFOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX1ZBUklBQkxFU19CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfRklMRV9TWVNURU1fQlVUVE9OOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX1dPUktTUEFDRV9CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfTmFtZTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19FeGNlcHRpb25fb2NjdXJyZWRfcmVhZGluZ19jb25maWd1cmF0aW9uOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfVElUTEU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3NhdmluZ19jb25maWd1cmF0aW9uOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1Q7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19HUk9VUF9OQU1FOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfREVGQVVMVF9SQURJTzsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX09USEVSX1JBRElPOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfRElBTE9HX01FU1NBR0U7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19WQVJJQUJMRVNfQlVUVE9OOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfRklMRV9TWVNURU1fQlVUVE9OOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfV09SS1NQQUNFX0JVVFRPTjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX05hbWU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19FeGNlcHRpb25fb2NjdXJyZWRfcmVhZGluZ19jb25maWd1cmF0aW9uOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19USVRMRTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX0V4Y2VwdGlvbl9vY2N1cnJlZF9zYXZpbmdfY29uZmlndXJhdGlvbjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJlc291cmNlU2VsZWN0aW9uQmxvY2tfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xMYXVuY2hTaG9ydGN1dF8wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTExhdW5jaFNob3J0Y3V0XzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMTGF1bmNoU2hvcnRjdXRfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xMYXVuY2hTaG9ydGN1dF82OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFNlbGVjdEV4aXN0aW5nOwotCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQl9Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvUmVzb3VyY2VTZWxlY3Rpb25CbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL1Jlc291cmNlU2VsZWN0aW9uQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1Njg2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvUmVzb3VyY2VTZWxlY3Rpb25CbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIFN0dWFydCBIYXJwZXIgLSBidWcgMjY0Nzg4IC0gYWRkZWQgIm9wZW4gZmlsZXMiIHNlbGVjdG9yCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNjQ3ODggLSBwdWxsZWQgdXAgZ2V0RmlsZUV4dGVuc2lvbnMgZnJvbSBJbnB1dEZpbGVCbG9jawotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBjbGVhbiB1cCBmaW5kIGJ1Z3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5JU3RyaW5nVmFyaWFibGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5TdHJpbmdWYXJpYWJsZVNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5FbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklTZWxlY3Rpb25TdGF0dXNWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MubmF2aWdhdG9yLlJlc291cmNlQ29tcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5YTUxDb250ZW50VHlwZTsKLQotLyoqCi0gKiBBIGJsb2NrIHRoYXQgc2hvd3MgYSB0ZXh0IGJveCB3aXRoIGJ1dHRvbnMgZm9yIGJyb3dzaW5nIHdvcmtzcGFjZSBvciB0aGUKLSAqIGZpbGVzeXN0ZW0gaW4gb3JkZXIgdG8gcG9wdWxhdGUgdGhlIHRleHQgYm94IHdpdGggYSBmaWxlIHBhdGguCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlc291cmNlU2VsZWN0aW9uQmxvY2sgZXh0ZW5kcwotCQlBYnN0cmFjdExhdW5jaENvbmZpZ3VyYXRpb25UYWIgewotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEID0gMTsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1QgPSAyOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEdST1VQX05BTUUgPSAzOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFVTRV9ERUZBVUxUX1JBRElPID0gNDsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBVU0VfT1RIRVJfUkFESU8gPSA1OwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IERJUkVDVE9SWV9ESUFMT0dfTUVTU0FHRSA9IDY7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgV09SS1NQQUNFX0RJQUxPR19NRVNTQUdFID0gNzsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBWQVJJQUJMRVNfQlVUVE9OID0gODsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBGSUxFX1NZU1RFTV9CVVRUT04gPSA5OwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFdPUktTUEFDRV9CVVRUT04gPSAxMDsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBXT1JLU1BBQ0VfRElBTE9HX1RJVExFID0gMTE7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgT1BFTkZJTEVTX0JVVFRPTiA9IDEyOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE9QRU5GSUxFU19ESUFMT0dfVElUTEUgPSAxMzsKLQotCXByb3RlY3RlZCBCdXR0b24gZldvcmtzcGFjZUJ1dHRvbjsKLQlwcm90ZWN0ZWQgQnV0dG9uIGZGaWxlU3lzdGVtQnV0dG9uOwotCXByb3RlY3RlZCBCdXR0b24gZlZhcmlhYmxlc0J1dHRvbjsKLQlwcm90ZWN0ZWQgQnV0dG9uIGZPcGVuRmlsZXNCdXR0b247Ci0JcHJvdGVjdGVkIEJ1dHRvbiB1c2VEZWZhdWx0Q2hlY2tCdXR0b247Ci0JcHJvdGVjdGVkIFRleHQgcmVzb3VyY2VUZXh0OwotCXByb3RlY3RlZCBXaWRnZXRMaXN0ZW5lciB3aWRnZXRMaXN0ZW5lciA9IG5ldyBXaWRnZXRMaXN0ZW5lcigpOwotCXByaXZhdGUgSUxhdW5jaENvbmZpZ3VyYXRpb24gZkxhdW5jaENvbmZpZ3VyYXRpb247Ci0JcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gc2hvd0RlZmF1bHQ7Ci0JcHJpdmF0ZSBmaW5hbCBpbnQgcmVzb3VyY2VUeXBlOwotCXByaXZhdGUgZmluYWwgYm9vbGVhbiBtdXN0RXhpc3Q7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gcmVxdWlyZWQ7Ci0JcHJvdGVjdGVkIFN0cmluZyBkZWZhdWx0UmVzb3VyY2U7Ci0JcHJvdGVjdGVkIFN0cmluZyByZXNvdXJjZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIGZpbGVMYWJlbCA9IE1lc3NhZ2VzLlJlc291cmNlU2VsZWN0aW9uQmxvY2tfMDsKLQotCXByaXZhdGUgZmluYWwgSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvcigpIHsKLQkJcHVibGljIElTdGF0dXMgdmFsaWRhdGUoT2JqZWN0W10gc2VsZWN0aW9uKSB7Ci0JCQlpZiAoc2VsZWN0aW9uLmxlbmd0aCA9PSAwKSB7Ci0JCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsCi0JCQkJCQkiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKHJlc291cmNlVHlwZSA9PSBJUmVzb3VyY2UuRk9MREVSCi0JCQkJCQkmJiAhKHNlbGVjdGlvbltpXSBpbnN0YW5jZW9mIElDb250YWluZXIpKQotCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJCVhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLCAiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCQllbHNlIGlmIChyZXNvdXJjZVR5cGUgPT0gSVJlc291cmNlLkZJTEUKLQkJCQkJCSYmICEoc2VsZWN0aW9uW2ldIGluc3RhbmNlb2YgSUZpbGUpKQotCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJCVhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLCAiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLAotCQkJCQkiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX07Ci0KLQljbGFzcyBXaWRnZXRMaXN0ZW5lciBleHRlbmRzIFNlbGVjdGlvbkFkYXB0ZXIgaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJdGV4dE1vZGlmaWVkKCk7Ci0JCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJT2JqZWN0IHNvdXJjZSA9IGUuZ2V0U291cmNlKCk7Ci0JCQlpZiAoc291cmNlID09IGZXb3Jrc3BhY2VCdXR0b24pIHsKLQkJCQloYW5kbGVXb3Jrc3BhY2VSZXNvdXJjZUJyb3dzZUJ1dHRvblNlbGVjdGVkKCk7Ci0JCQl9IGVsc2UgaWYgKHNvdXJjZSA9PSBmRmlsZVN5c3RlbUJ1dHRvbikgewotCQkJCWhhbmRsZUV4dGVybmFsUmVzb3VyY2VCcm93c2VCdXR0b25TZWxlY3RlZCgpOwotCQkJfSBlbHNlIGlmIChzb3VyY2UgPT0gZlZhcmlhYmxlc0J1dHRvbikgewotCQkJCWhhbmRsZVJlc291cmNlVmFyaWFibGVzQnV0dG9uU2VsZWN0ZWQoKTsKLQkJCX0gZWxzZSBpZiAoc291cmNlID09IHVzZURlZmF1bHRDaGVja0J1dHRvbikgewotCQkJCXVwZGF0ZVJlc291cmNlVGV4dCh1c2VEZWZhdWx0Q2hlY2tCdXR0b24uZ2V0U2VsZWN0aW9uKCkpOwotCQkJfSBlbHNlIGlmIChzb3VyY2UgPT0gZk9wZW5GaWxlc0J1dHRvbikgewotCQkJCWhhbmRsZU9wZW5GaWxlc1Jlc291cmNlQnJvd3NlQnV0dG9uU2VsZWN0ZWQoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFNhbWUgYXMgPGNvZGU+bmV3IFJlc291cmNlU2VsZWN0aW9uQmxvY2sodHJ1ZSk8L2NvZGU+Ci0JICovCi0JcHVibGljIFJlc291cmNlU2VsZWN0aW9uQmxvY2soKSB7Ci0JCXRoaXModHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogU2FtZSBhcwotCSAqIDxjb2RlPm5ldyBSZXNvdXJjZVNlbGVjdGlvbkJsb2NrKElSZXNvdXJjZS5GT0xERVIsc2hvd0RlZmF1bHQpPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSBzaG93RGVmYXVsdAotCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGlzIHNob3VsZCBoYXZlIGEgJ1Nob3cgRGVmYXVsdCcgYnV0dG9uCi0JICovCi0JcHVibGljIFJlc291cmNlU2VsZWN0aW9uQmxvY2soYm9vbGVhbiBzaG93RGVmYXVsdCkgewotCQl0aGlzKElSZXNvdXJjZS5GT0xERVIsIHNob3dEZWZhdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBTYW1lIGFzCi0JICogPGNvZGU+bmV3IFJlc291cmNlU2VsZWN0aW9uQmxvY2socmVzb3VyY2VUeXBlLHNob3dEZWZhdWx0LHRydWUpPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZVR5cGUKLQkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIHNlbGVjdCAtIElSZXNvdXJjZS5GT0xERVIgb3IKLQkgKiAgICAgICAgICAgIElSZXNvdXJjZS5GSUxFCi0JICogQHBhcmFtIHNob3dEZWZhdWx0Ci0JICogICAgICAgICAgICB0cnVlIGlmIHRoaXMgc2hvdWxkIGhhdmUgYSAnU2hvdyBEZWZhdWx0JyBidXR0b24KLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25CbG9jayhpbnQgcmVzb3VyY2VUeXBlLCBib29sZWFuIHNob3dEZWZhdWx0KSB7Ci0JCXRoaXMocmVzb3VyY2VUeXBlLCBzaG93RGVmYXVsdCwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogU2FtZSBhcwotCSAqIDxjb2RlPm5ldyBSZXNvdXJjZVNlbGVjdGlvbkJsb2NrKHJlc291cmNlVHlwZSxzaG93RGVmYXVsdCxyZXF1aXJlZCx0cnVlKTwvY29kZT4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2VUeXBlCi0JICogICAgICAgICAgICB0aGUgdHlwZSBvZiByZXNvdXJjZSB0byBzZWxlY3QgLSBJUmVzb3VyY2UuRk9MREVSIG9yCi0JICogICAgICAgICAgICBJUmVzb3VyY2UuRklMRQotCSAqIEBwYXJhbSBzaG93RGVmYXVsdAotCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGlzIHNob3VsZCBoYXZlIGEgJ1Nob3cgRGVmYXVsdCcgYnV0dG9uCi0JICogQHBhcmFtIHJlcXVpcmVkCi0JICogICAgICAgICAgICB0cnVlIGlmIGEgYmxhbmsgdGV4dCBib3ggaXMgaW52YWxpZAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZVNlbGVjdGlvbkJsb2NrKGludCByZXNvdXJjZVR5cGUsIGJvb2xlYW4gc2hvd0RlZmF1bHQsCi0JCQlib29sZWFuIHJlcXVpcmVkKSB7Ci0JCXRoaXMocmVzb3VyY2VUeXBlLCBzaG93RGVmYXVsdCwgcmVxdWlyZWQsIHRydWUpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZVR5cGUKLQkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIHNlbGVjdCAtIElSZXNvdXJjZS5GT0xERVIgb3IKLQkgKiAgICAgICAgICAgIElSZXNvdXJjZS5GSUxFCi0JICogQHBhcmFtIHNob3dEZWZhdWx0Ci0JICogICAgICAgICAgICB0cnVlIGlmIHRoaXMgc2hvdWxkIGhhdmUgYSAnU2hvdyBEZWZhdWx0JyBidXR0b24KLQkgKiBAcGFyYW0gcmVxdWlyZWQKLQkgKiAgICAgICAgICAgIHRydWUgaWYgYSBibGFuayB0ZXh0IGJveCBpcyBpbnZhbGlkCi0JICogQHBhcmFtIG11c3RFeGlzdAotCSAqICAgICAgICAgICAgdHJ1ZSBvZiB0aGUgc2VsZWN0ZWQgcmVzb3VyY2UgbXVzdCBhbHJlYWR5IGV4aXN0Ci0JICovCi0JcHVibGljIFJlc291cmNlU2VsZWN0aW9uQmxvY2soaW50IHJlc291cmNlVHlwZSwgYm9vbGVhbiBzaG93RGVmYXVsdCwKLQkJCWJvb2xlYW4gcmVxdWlyZWQsIGJvb2xlYW4gbXVzdEV4aXN0KSB7Ci0JCXN1cGVyKCk7Ci0JCXRoaXMuc2hvd0RlZmF1bHQgPSBzaG93RGVmYXVsdDsKLQkJdGhpcy5yZXNvdXJjZVR5cGUgPSByZXNvdXJjZVR5cGU7Ci0JCXRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDsKLQkJdGhpcy5tdXN0RXhpc3QgPSBtdXN0RXhpc3Q7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBncm91cCA9IGNyZWF0ZUNvbnRhaW5lcihwYXJlbnQpOwotCQlzZXRDb250cm9sKGdyb3VwKTsKLQkJY3JlYXRlQ29udGVudHMoZ3JvdXApOwotCX0KLQotCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlQ29udGFpbmVyKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWdyb3VwLnNldFRleHQoZ2V0TWVzc2FnZShHUk9VUF9OQU1FKSk7Ci0JCS8vIFRPRE8gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscC4uLgotCQlHcmlkTGF5b3V0IGdyb3VwTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ3JvdXBMYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWdyb3VwTGF5b3V0Lm1ha2VDb2x1bW5zRXF1YWxXaWR0aCA9IGZhbHNlOwotCQlncm91cC5zZXRMYXlvdXQoZ3JvdXBMYXlvdXQpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlncm91cC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJZ3JvdXAuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJcmV0dXJuIGdyb3VwOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJY3JlYXRlQ2hlY2tib3hBbmRUZXh0KHBhcmVudCk7Ci0JCWNyZWF0ZUJ1dHRvbnMocGFyZW50KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDaGVja2JveEFuZFRleHQoQ29tcG9zaXRlIHBhcmVudCkgewotCQlpZiAoc2hvd0RlZmF1bHQpIHsKLQkJCXVzZURlZmF1bHRDaGVja0J1dHRvbiA9IGNyZWF0ZUNoZWNrQnV0dG9uKHBhcmVudCwKLQkJCQkJZ2V0TWVzc2FnZShVU0VfREVGQVVMVF9SQURJTykpOwotCQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpOwotCQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQkJdXNlRGVmYXVsdENoZWNrQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotCQkJdXNlRGVmYXVsdENoZWNrQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQkJfQotCi0JCUNvbXBvc2l0ZSBzcGVjaWZpY0ZpbGVDb21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgyLCBmYWxzZSk7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWlmIChzaG93RGVmYXVsdCkKLQkJCWxheW91dC5tYXJnaW5MZWZ0ID0gMjA7Ci0JCWVsc2UKLQkJCWxheW91dC5tYXJnaW5MZWZ0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXNwZWNpZmljRmlsZUNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMjsKLQkJc3BlY2lmaWNGaWxlQ29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlpZiAoc2hvd0RlZmF1bHQpIHsKLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHNwZWNpZmljRmlsZUNvbXAsIFNXVC5OT05FKTsKLQkJCWxhYmVsLnNldFRleHQoZmlsZUxhYmVsKTsKLQkJfQotCi0JCXJlc291cmNlVGV4dCA9IG5ldyBUZXh0KHNwZWNpZmljRmlsZUNvbXAsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSBzaG93RGVmYXVsdCA/IDEgOiAyOwotCQlyZXNvdXJjZVRleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXJlc291cmNlVGV4dC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQlyZXNvdXJjZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnMoQ29tcG9zaXRlIHBhcmVudCkgewotCQkvLyBmaWxsZXIKLQkJbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOwotCi0JCUNvbXBvc2l0ZSBidXR0b25Db21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCg0LCBmYWxzZSk7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlidXR0b25Db21wLnNldExheW91dChsYXlvdXQpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0VORCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMTsKLQkJYnV0dG9uQ29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJYnV0dG9uQ29tcC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCi0JCWZXb3Jrc3BhY2VCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbkNvbXAsCi0JCQkJZ2V0TWVzc2FnZShXT1JLU1BBQ0VfQlVUVE9OKSwgbnVsbCk7Ci0JCWZXb3Jrc3BhY2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCi0JCWZGaWxlU3lzdGVtQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25Db21wLAotCQkJCWdldE1lc3NhZ2UoRklMRV9TWVNURU1fQlVUVE9OKSwgbnVsbCk7Ci0JCWZGaWxlU3lzdGVtQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQotCQlmVmFyaWFibGVzQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25Db21wLAotCQkJCWdldE1lc3NhZ2UoVkFSSUFCTEVTX0JVVFRPTiksIG51bGwpOwotCQlmVmFyaWFibGVzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQotCQlmT3BlbkZpbGVzQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25Db21wLAotCQkJCWdldE1lc3NhZ2UoT1BFTkZJTEVTX0JVVFRPTiksIG51bGwpOwotCQlmT3BlbkZpbGVzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVSZXNvdXJjZVRleHQoYm9vbGVhbiB1c2VEZWZhdWx0KSB7Ci0JCWlmICh1c2VEZWZhdWx0KSB7Ci0JCQlyZXNvdXJjZVRleHQKLQkJCQkJLnNldFRleHQoZGVmYXVsdFJlc291cmNlID09IG51bGwgPyAiIiA6IGRlZmF1bHRSZXNvdXJjZSk7IC8vJE5PTi1OTFMtMSQKLQkJfSBlbHNlIHsKLQkJCXJlc291cmNlVGV4dC5zZXRUZXh0KHJlc291cmNlID09IG51bGwgPyAiIiA6IHJlc291cmNlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJlc291cmNlVGV4dC5zZXRFbmFibGVkKCF1c2VEZWZhdWx0KTsKLQkJZkZpbGVTeXN0ZW1CdXR0b24uc2V0RW5hYmxlZCghdXNlRGVmYXVsdCk7Ci0JCWZWYXJpYWJsZXNCdXR0b24uc2V0RW5hYmxlZCghdXNlRGVmYXVsdCk7Ci0JCWZXb3Jrc3BhY2VCdXR0b24uc2V0RW5hYmxlZCghdXNlRGVmYXVsdCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVFeHRlcm5hbFJlc291cmNlQnJvd3NlQnV0dG9uU2VsZWN0ZWQoKSB7Ci0JCVN0cmluZyBjdXJyZW50V29ya2luZ0RpciA9IGdldFRleHQoKTsKLQkJU3RyaW5nIHNlbGVjdGVkID0gbnVsbDsKLQkJaWYgKHJlc291cmNlVHlwZSA9PSBJUmVzb3VyY2UuRk9MREVSKSB7Ci0JCQlEaXJlY3RvcnlEaWFsb2cgZGlhbG9nID0gbmV3IERpcmVjdG9yeURpYWxvZyhnZXRTaGVsbCgpKTsKLQkJCWRpYWxvZy5zZXRNZXNzYWdlKGdldE1lc3NhZ2UoRElSRUNUT1JZX0RJQUxPR19NRVNTQUdFKSk7Ci0JCQlpZiAoIWN1cnJlbnRXb3JraW5nRGlyLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQl7Ci0JCQkJRmlsZSBwYXRoID0gbmV3IEZpbGUoY3VycmVudFdvcmtpbmdEaXIpOwotCQkJCWlmIChwYXRoLmV4aXN0cygpKSB7Ci0JCQkJCWRpYWxvZy5zZXRGaWx0ZXJQYXRoKGN1cnJlbnRXb3JraW5nRGlyKTsKLQkJCQl9Ci0JCQl9Ci0JCQlzZWxlY3RlZCA9IGRpYWxvZy5vcGVuKCk7Ci0JCX0gZWxzZSB7Ci0JCQlGaWxlRGlhbG9nIGRpYWxvZyA9IG5ldyBGaWxlRGlhbG9nKGdldFNoZWxsKCkpOwotCQkJaWYgKCFjdXJyZW50V29ya2luZ0Rpci50cmltKCkuZXF1YWxzKCIiKSkgLy8kTk9OLU5MUy0xJAotCQkJewotCQkJCUZpbGUgcGF0aCA9IG5ldyBGaWxlKGN1cnJlbnRXb3JraW5nRGlyKTsKLQkJCQlpZiAocGF0aC5leGlzdHMoKSkgewotCQkJCQlkaWFsb2cuc2V0RmlsdGVyUGF0aChjdXJyZW50V29ya2luZ0Rpcik7Ci0JCQkJfQotCQkJfQotCQkJU3RyaW5nW10gZmlsZUV4dGVuc2lvbnMgPSBnZXRGaWxlRXh0ZW5zaW9ucygpOwotCQkJaWYgKGZpbGVFeHRlbnNpb25zICE9IG51bGwpIHsKLQkJCQlTdHJpbmdbXSBmaWx0ZXJFeHRlbnNpb25zID0gbmV3IFN0cmluZ1tmaWxlRXh0ZW5zaW9ucy5sZW5ndGhdOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUV4dGVuc2lvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJU3RyaW5nIGV4dCA9IGZpbGVFeHRlbnNpb25zW2ldOwotCQkJCQlmaWx0ZXJFeHRlbnNpb25zW2ldID0gIiouIiArIGV4dDsgLy8kTk9OLU5MUy0xJAotCQkJCX0KLQkJCQlkaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhmaWx0ZXJFeHRlbnNpb25zKTsKLQkJCX0KLQkJCXNlbGVjdGVkID0gZGlhbG9nLm9wZW4oKTsKLQkJfQotCQlpZiAoc2VsZWN0ZWQgIT0gbnVsbCkgewotCQkJcmVzb3VyY2VUZXh0LnNldFRleHQoc2VsZWN0ZWQpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZ1tdIGdldEZpbGVFeHRlbnNpb25zKCkgewotCQlyZXR1cm4gbmV3IFhNTENvbnRlbnRUeXBlKCkuZ2V0RmlsZUV4dGVuc2lvbnMoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVPcGVuRmlsZXNSZXNvdXJjZUJyb3dzZUJ1dHRvblNlbGVjdGVkKCkgewotCQlTdHJpbmcgcGF0aCA9IG9wZW5GaWxlTGlzdFJlc291cmNlRGlhbG9nKCk7Ci0JCWlmIChwYXRoICE9IG51bGwpCi0JCQlzZXRUZXh0KCIke3dvcmtzcGFjZV9sb2M6IiArIHBhdGggKyAifSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci0KLQkvKioKLQkgKiBPcGVucyBhIGRpYWxvZyBkaXNwbGF5aW5nIGEgbGlzdCBvZiBhbGwgWE1MIGZpbGVzIGluIHRoZSBlZGl0b3IgYW5kCi0JICogYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBvbmUgb2YgdGhlbS4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBwYXRoIHRvIHRoZSBzZWxlY3RlZCBYTUwgZmlsZSBvciBudWxsIGlmIG5vbmUgd2FzIGNob3Nlbi4KLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIG9wZW5GaWxlTGlzdFJlc291cmNlRGlhbG9nKCkgewotCQlJRWRpdG9yUmVmZXJlbmNlW10gZWRpdG9ycyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkKLQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpCi0JCQkJLmdldEVkaXRvclJlZmVyZW5jZXMoKTsKLQotCQlTdHJpbmdbXSBwYXRocyA9IGZpbHRlck9wZW5FZGl0b3JzQnlGaWxlRXh0ZW5zaW9uKGVkaXRvcnMpOwotCi0JCUVsZW1lbnRMaXN0U2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IG5ldyBFbGVtZW50TGlzdFNlbGVjdGlvbkRpYWxvZygKLQkJCQlnZXRTaGVsbCgpLCBuZXcgTGFiZWxQcm92aWRlcigpKTsKLQotCQlkaWFsb2cuc2V0VGl0bGUoZ2V0TWVzc2FnZShPUEVORklMRVNfRElBTE9HX1RJVExFKSk7Ci0JCWRpYWxvZy5zZXRFbGVtZW50cyhwYXRocyk7Ci0JCWRpYWxvZy5vcGVuKCk7Ci0KLQkJcmV0dXJuIChTdHJpbmcpIGRpYWxvZy5nZXRGaXJzdFJlc3VsdCgpOwotCi0JfQotCi0JcHJpdmF0ZSBTdHJpbmdbXSBmaWx0ZXJPcGVuRWRpdG9yc0J5RmlsZUV4dGVuc2lvbihJRWRpdG9yUmVmZXJlbmNlW10gZWRpdG9ycykgewotCQlTdHJpbmdbXSBwYXRocyA9IG5ldyBTdHJpbmdbZWRpdG9ycy5sZW5ndGhdOwotCQlTdHJpbmdbXSBmaWxlRXh0cyA9IGdldEZpbGVFeHRlbnNpb25zKCk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlZGl0b3JzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJRWRpdG9yUmVmZXJlbmNlIGN1cnJlbnRFZGl0b3IgPSBlZGl0b3JzW2ldOwotCQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGN1cnJlbnRFZGl0b3IuZ2V0RWRpdG9yKHRydWUpOwotCQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpLmdldEFkYXB0ZXIoCi0JCQkJCUlGaWxlLmNsYXNzKTsKLQkJCWlmIChmaWxlICE9IG51bGwpIHsKLQkJCQlJUGF0aCBwYXRoID0gZmlsZS5nZXRGdWxsUGF0aCgpOwotCQkJCXBhdGhzW2ldID0gZ2V0RWRpdG9yUGF0aChwYXRoLCBmaWxlRXh0cyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHBhdGhzOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEVkaXRvclBhdGgoSVBhdGggZmlsZVBhdGgsIFN0cmluZ1tdIGZpbGVFeHRzKSB7Ci0JCWlmIChmaWxlRXh0cyA9PSBudWxsIHx8IGZpbGVFeHRzLmxlbmd0aCA9PSAwKSB7Ci0JCQlyZXR1cm4gZmlsZVBhdGgudG9PU1N0cmluZygpOwotCQl9Ci0KLQkJU3RyaW5nIHBhdGggPSBudWxsOwotCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCBmaWxlRXh0cy5sZW5ndGg7IGNudCsrKSB7Ci0JCQlpZiAoZmlsZVBhdGguZ2V0RmlsZUV4dGVuc2lvbigpLmVxdWFscyhmaWxlRXh0c1tjbnRdKSkgewotCQkJCXBhdGggPSBmaWxlUGF0aC50b09TU3RyaW5nKCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHBhdGg7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaGFuZGxlV29ya3NwYWNlUmVzb3VyY2VCcm93c2VCdXR0b25TZWxlY3RlZCgpIHsKLQkJSVBhdGggcGF0aCA9IG9wZW5Xb3Jrc3BhY2VSZXNvdXJjZURpYWxvZygpOwotCQlpZiAocGF0aCAhPSBudWxsKQotCQkJc2V0VGV4dCgiJHt3b3Jrc3BhY2VfbG9jOiIgKyBwYXRoLnRvU3RyaW5nKCkgKyAifSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci0KLQlwcm90ZWN0ZWQgSVBhdGggb3BlbldvcmtzcGFjZVJlc291cmNlRGlhbG9nKCkgewotCQlJUmVzb3VyY2UgY3VycmVudFJlc291cmNlID0gZ2V0UmVzb3VyY2UoKTsKLQkJRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IEVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nKAotCQkJCWdldFNoZWxsKCksIG5ldyBXb3JrYmVuY2hMYWJlbFByb3ZpZGVyKCksCi0JCQkJbmV3IFdvcmtiZW5jaENvbnRlbnRQcm92aWRlcigpKTsKLQkJZGlhbG9nLnNldFRpdGxlKGdldE1lc3NhZ2UoV09SS1NQQUNFX0RJQUxPR19USVRMRSkpOwotCQlkaWFsb2cuc2V0TWVzc2FnZShnZXRNZXNzYWdlKFdPUktTUEFDRV9ESUFMT0dfTUVTU0FHRSkpOwotCQlkaWFsb2cuc2V0VmFsaWRhdG9yKHZhbGlkYXRvcik7Ci0JCWRpYWxvZy5hZGRGaWx0ZXIobmV3IFZpZXdlckZpbHRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRFbGVtZW50LAotCQkJCQlPYmplY3QgZWxlbWVudCkgewotCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUNvbnRhaW5lcikKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJaWYgKHJlc291cmNlVHlwZSAhPSBJUmVzb3VyY2UuRklMRSkKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0JCQkJU3RyaW5nW10gZXh0ZW5zaW9ucyA9IGdldEZpbGVFeHRlbnNpb25zKCk7Ci0JCQkJaWYgKGV4dGVuc2lvbnMgPT0gbnVsbCkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJU3RyaW5nIGZpbGVFeHQgPSBmaWxlLmdldEZpbGVFeHRlbnNpb24oKTsKLQkJCQlpZiAoZmlsZUV4dCAhPSBudWxsKSB7Ci0JCQkJCWZvciAoU3RyaW5nIGV4dCA6IGV4dGVuc2lvbnMpIHsKLQkJCQkJCWlmIChmaWxlRXh0LmVxdWFsc0lnbm9yZUNhc2UoZXh0KSkKLQkJCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQkJfQotCQkJCX0KLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0pOwotCQlWaWV3ZXJGaWx0ZXIgZmlsdGVyID0gZ2V0UmVzb3VyY2VGaWx0ZXIoKTsKLQkJaWYgKGZpbHRlciAhPSBudWxsKQotCQkJZGlhbG9nLmFkZEZpbHRlcihmaWx0ZXIpOwotCQlkaWFsb2cuc2V0SW5wdXQoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKSk7Ci0JCWRpYWxvZy5zZXRJbml0aWFsU2VsZWN0aW9uKGN1cnJlbnRSZXNvdXJjZSk7Ci0JCWRpYWxvZy5zZXRDb21wYXJhdG9yKG5ldyBSZXNvdXJjZUNvbXBhcmF0b3IoUmVzb3VyY2VDb21wYXJhdG9yLk5BTUUpKTsKLQkJZGlhbG9nLnNldEFsbG93TXVsdGlwbGUoZmFsc2UpOwotCi0JCWlmIChkaWFsb2cub3BlbigpID09IFdpbmRvdy5PSykgewotCQkJT2JqZWN0W10gZWxlbWVudHMgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0JCQlpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkKLQkJCQlyZXR1cm4gKChJUmVzb3VyY2UpIGVsZW1lbnRzWzBdKS5nZXRGdWxsUGF0aCgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByb3RlY3RlZCBWaWV3ZXJGaWx0ZXIgZ2V0UmVzb3VyY2VGaWx0ZXIoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNlbGVjdGVkIHdvcmtzcGFjZSBjb250YWluZXIsb3IgPGNvZGU+bnVsbDwvY29kZT4KLQkgKi8KLQlwcm90ZWN0ZWQgSVJlc291cmNlIGdldFJlc291cmNlKCkgewotCQlTdHJpbmcgcGF0aCA9IGdldFRleHQoKTsKLQkJaWYgKHBhdGgubGVuZ3RoKCkgPiAwKSB7Ci0JCQlJUmVzb3VyY2UgcmVzID0gbnVsbDsKLQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJdHJ5IHsKLQkJCQlpZiAocGF0aC5zdGFydHNXaXRoKCIke3dvcmtzcGFjZV9sb2M6IikpIC8vJE5PTi1OTFMtMSQKLQkJCQl7Ci0JCQkJCUlTdHJpbmdWYXJpYWJsZU1hbmFnZXIgbWFuYWdlciA9IFZhcmlhYmxlc1BsdWdpbgotCQkJCQkJCS5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCk7Ci0JCQkJCXBhdGggPSBtYW5hZ2VyLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24ocGF0aCwgZmFsc2UpOwotCQkJCX0KLQkJCQlGaWxlIGYgPSBuZXcgRmlsZShwYXRoKTsKLQkJCQlpZiAocmVzb3VyY2VUeXBlID09IElSZXNvdXJjZS5GT0xERVIpIHsKLQkJCQkJSUNvbnRhaW5lcltdIGNvbnRhaW5lcnMgPSByb290Ci0JCQkJCQkJLmZpbmRDb250YWluZXJzRm9yTG9jYXRpb25VUkkoZi50b1VSSSgpKTsKLQkJCQkJaWYgKGNvbnRhaW5lcnMubGVuZ3RoID4gMCkgewotCQkJCQkJcmVzID0gY29udGFpbmVyc1swXTsKLQkJCQkJfQotCQkJCX0gZWxzZSBpZiAocmVzb3VyY2VUeXBlID09IElSZXNvdXJjZS5GSUxFKSB7Ci0JCQkJCUlGaWxlW10gZmlsZXMgPSByb290LmZpbmRGaWxlc0ZvckxvY2F0aW9uVVJJKGYudG9VUkkoKSk7Ci0JCQkJCWlmIChmaWxlcy5sZW5ndGggPiAwKSB7Ci0JCQkJCQlyZXMgPSBmaWxlc1swXTsKLQkJCQkJfQotCQkJCX0KLQkJCQlyZXR1cm4gcmVzOwotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaGFuZGxlUmVzb3VyY2VWYXJpYWJsZXNCdXR0b25TZWxlY3RlZCgpIHsKLQkJU3RyaW5nVmFyaWFibGVTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IFN0cmluZ1ZhcmlhYmxlU2VsZWN0aW9uRGlhbG9nKAotCQkJCWdldFNoZWxsKCkpOwotCQlkaWFsb2cub3BlbigpOwotCQlTdHJpbmcgdmFyaWFibGVUZXh0ID0gZGlhbG9nLmdldFZhcmlhYmxlRXhwcmVzc2lvbigpOwotCQlpZiAodmFyaWFibGVUZXh0ICE9IG51bGwpIHsKLQkJCXJlc291cmNlVGV4dC5pbnNlcnQodmFyaWFibGVUZXh0KTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzVmFsaWQoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0JCXNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJc2V0TWVzc2FnZShudWxsKTsKLQkJLy8gaWYgdmFyaWFibGVzIGFyZSBwcmVzZW50LCB3ZSBjYW5ub3QgcmVzb2x2ZSB0aGUgZGlyZWN0b3J5Ci0JCVN0cmluZyB3b3JraW5nRGlyUGF0aCA9IGdldFRleHQoKTsKLQkJaWYgKHdvcmtpbmdEaXJQYXRoLmluZGV4T2YoIiR7IikgPj0gMCkgLy8kTk9OLU5MUy0xJAotCQl7Ci0JCQlJU3RyaW5nVmFyaWFibGVNYW5hZ2VyIG1hbmFnZXIgPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJCS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKTsKLQkJCXRyeSB7Ci0JCQkJbWFuYWdlci52YWxpZGF0ZVN0cmluZ1ZhcmlhYmxlcyh3b3JraW5nRGlyUGF0aCk7Ci0JCQkJaWYgKG11c3RFeGlzdCkgewotCQkJCQlTdHJpbmcgcGF0aCA9IG1hbmFnZXIKLQkJCQkJCQkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbih3b3JraW5nRGlyUGF0aCk7Ci0JCQkJCXZhbGlkYXRlUmVzb3VyY2UocGF0aCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJc2V0RXJyb3JNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobXVzdEV4aXN0ICYmIHdvcmtpbmdEaXJQYXRoLmxlbmd0aCgpID4gMCkgewotCQkJcmV0dXJuIHZhbGlkYXRlUmVzb3VyY2Uod29ya2luZ0RpclBhdGgpOwotCQl9IGVsc2UgaWYgKHJlcXVpcmVkICYmIHdvcmtpbmdEaXJQYXRoLmxlbmd0aCgpID09IDApIHsKLQkJCXNldEVycm9yTWVzc2FnZShnZXRNZXNzYWdlKEVSUk9SX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEKSk7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVSZXNvdXJjZShTdHJpbmcgd29ya2luZ0RpclBhdGgpIHsKLQkJaWYgKHJlc291cmNlVHlwZSA9PSBJUmVzb3VyY2UuRk9MREVSKSB7Ci0JCQlJQ29udGFpbmVyIGNvbnRhaW5lciA9IChJQ29udGFpbmVyKSBnZXRSZXNvdXJjZSgpOwotCQkJaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7Ci0JCQkJRmlsZSBkaXIgPSBuZXcgRmlsZSh3b3JraW5nRGlyUGF0aCk7Ci0JCQkJaWYgKGRpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCXJldHVybiB0cnVlOwotCQl9IGVsc2UgaWYgKHJlc291cmNlVHlwZSA9PSBJUmVzb3VyY2UuRklMRSkgewotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUod29ya2luZ0RpclBhdGgpOwotCQkJaWYgKGZpbGUuaXNGaWxlKCkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlzZXRFcnJvck1lc3NhZ2UoZ2V0TWVzc2FnZShFUlJPUl9ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1QpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0TWVzc2FnZShpbnQgdHlwZSk7Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZXh0TW9kaWZpZWQoKSB7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRUZXh0KCkgewotCQlyZXR1cm4gcmVzb3VyY2VUZXh0LmdldFRleHQoKS50cmltKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkgewotCQlyZXNvdXJjZVRleHQuc2V0VGV4dCh0ZXh0KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRMYXVuY2hDb25maWd1cmF0aW9uKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZykgewotCQlmTGF1bmNoQ29uZmlndXJhdGlvbiA9IGNvbmZpZzsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUxhdW5jaENvbmZpZ3VyYXRpb24gZ2V0TGF1bmNoQ29uZmlndXJhdGlvbigpIHsKLQkJcmV0dXJuIGZMYXVuY2hDb25maWd1cmF0aW9uOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSUNvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL1hTTERlYnVnVUlDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhZTc5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aTsKLQotLyoqCi0gKiBDb25zdGFudHMgZm9yIHRoZSBYU0wgRGVidWcgVUkuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTERlYnVnVUlDb25zdGFudHMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGSVggPSBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCArICcuJzsKLQkvKioKLQkgKiBDb25zdGFudCB1c2VkIHRvIHN0b3JlIGNvbHVtbiBzZXR0aW5nIHByZWZlcmVuY2VzIGZvciB0aGUKLQkgKiA8Y29kZT5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2s8L2NvZGU+Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPQ0VTU09SX0RFVEFJTFNfRElBTE9HID0gUFJFRklYCi0JCQkrICJQUk9DRVNTT1JfREVUQUlMU19ESUFMT0ciOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogQ29uc3RhbnQgdXNlZCB0byBzdG9yZSBjb2x1bW4gc2V0dGluZyBwcmVmZXJlbmNlcyBmb3IgdGhlCi0JICogPGNvZGU+UGFyYW1ldGVyc0Jsb2NrPC9jb2RlPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BSU5fUEFSQU1BVEVSU19CTE9DSyA9IFBSRUZJWAotCQkJKyAiTUFJTl9QQVJBTUFURVJTX0JMT0NLIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIENvbnN0YW50IHVzZWQgdG8gc3RvcmUgY29sdW1uIHNldHRpbmcgcHJlZmVyZW5jZXMgZm9yIHRoZQotCSAqIDxjb2RlPlRyYW5zZm9ybXNCbG9jazwvY29kZT4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQUlOX1RSQU5TRk9STVNfQkxPQ0sgPSBQUkVGSVgKLQkJCSsgIk1BSU5fVFJBTlNGT1JNU19CTE9DSyI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBDb25zdGFudCB1c2VkIHRvIHN0b3JlIGNvbHVtbiBzZXR0aW5nIHByZWZlcmVuY2VzIGZvciB0aGUKLQkgKiA8Y29kZT5PdXRwdXRCbG9jazwvY29kZT4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRQVVRfQkxPQ0sgPSBQUkVGSVggKyAiT1VUUFVUX0JMT0NLIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBpZCBvZiB0aGUgWFNMIGVkaXRvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTF9FRElUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5YU0xFZGl0b3IiOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSUxhdW5jaExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSUxhdW5jaExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNjBhNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL1hTTERlYnVnVUlMYXVuY2hMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLmNvbW1vbi5Db21tYW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZXN5c3RlbS5FRlM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLklGaWxlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hlc0xpc3RlbmVyMjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSUhhbmRsZXJTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkJhc2VMYXVuY2hIZWxwZXI7Ci0KLS8qKgotICogQSBsaXN0ZW5lciB0byBYU0wgbGF1bmNoZXMuIFdoZW4gYW4gWFNMIGxhdW5jaCBpcyB0ZXJtaW5hdGVkLCB0aGlzIHBlcmZvcm1zCi0gKiB0aGUgVUkgcGFydHMgb2YgdGhlIFhTTCBsYXVuY2hpbmcgLSBzdWNoIGFzIG9wZW4gdGhlIGVkaXRvciBvbiB0aGUgb3V0cHV0Ci0gKiBmaWxlLCBhbmQgZm9ybWF0IGl0LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xEZWJ1Z1VJTGF1bmNoTGlzdGVuZXIgaW1wbGVtZW50cyBJTGF1bmNoZXNMaXN0ZW5lcjIgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTF9MQVVOQ0hfQ09ORklHVVJBVElPTl9UWVBFID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogU3RhcnRzIHRoZSBsYXVuY2ggbGlzdGVuaW5nCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoKSB7Ci0JCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMYXVuY2hNYW5hZ2VyKCkuYWRkTGF1bmNoTGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JLyoqCi0JICogU3RvcHMgdGhlIGxhdW5jaCBsaXN0ZW5pbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKCkgewotCQlEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TGF1bmNoTWFuYWdlcigpLnJlbW92ZUxhdW5jaExpc3RlbmVyKHRoaXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIGxhdW5jaGVzVGVybWluYXRlZChJTGF1bmNoW10gbGF1bmNoZXMpIHsKLQkJZm9yIChJTGF1bmNoIGxhdW5jaCA6IGxhdW5jaGVzKSB7Ci0JCQlJTGF1bmNoQ29uZmlndXJhdGlvblR5cGUgY29uZmlnVHlwZSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWNvbmZpZ1R5cGUgPSBsYXVuY2guZ2V0TGF1bmNoQ29uZmlndXJhdGlvbigpLmdldFR5cGUoKTsKLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8vIGRvIG5vdGhpbmcKLQkJCX0KLQkJCWlmIChjb25maWdUeXBlICE9IG51bGwKLQkJCQkJJiYgWFNMX0xBVU5DSF9DT05GSUdVUkFUSU9OX1RZUEUuZXF1YWxzKGNvbmZpZ1R5cGUKLQkJCQkJCQkuZ2V0SWRlbnRpZmllcigpKSkgewotCQkJCXRyeSB7Ci0JCQkJCUJhc2VMYXVuY2hIZWxwZXIgbGF1bmNoSGVscGVyID0gbmV3IEJhc2VMYXVuY2hIZWxwZXIobGF1bmNoCi0JCQkJCQkJLmdldExhdW5jaENvbmZpZ3VyYXRpb24oKSk7Ci0JCQkJCUZpbGUgZmlsZSA9IGxhdW5jaEhlbHBlci5nZXRUYXJnZXQoKTsKLQkJCQkJSUZpbGUgaWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpCi0JCQkJCQkJLmdldEZpbGVGb3JMb2NhdGlvbigKLQkJCQkJCQkJCW5ldyBQYXRoKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpKTsKLQkJCQkJaWYgKGlmaWxlICE9IG51bGwpIHsvLyByZWZyZXNoIHRoaXMgd29ya3NwYWNlIGZpbGUuLgotCQkJCQkJdHJ5IHsKLQkJCQkJCQlpZmlsZS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX1pFUk8sCi0JCQkJCQkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCW9wZW5GaWxlSWZSZXF1aXJlZChsYXVuY2hIZWxwZXIpOwotCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBsYXVuY2hlc0FkZGVkKElMYXVuY2hbXSBsYXVuY2hlcykgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgbGF1bmNoZXNDaGFuZ2VkKElMYXVuY2hbXSBsYXVuY2hlcykgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgbGF1bmNoZXNSZW1vdmVkKElMYXVuY2hbXSBsYXVuY2hlcykgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHJpdmF0ZSB2b2lkIG9wZW5GaWxlSWZSZXF1aXJlZChmaW5hbCBCYXNlTGF1bmNoSGVscGVyIGxhdW5jaEhlbHBlcikgewotCQlpZiAobGF1bmNoSGVscGVyLmdldE9wZW5GaWxlT25Db21wbGV0aW9uKCkpIHsKLQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQl0cnkgewotCQkJCQkJLy8gT3BlbiBlZGl0b3Igb24gbmV3IGZpbGUuCi0JCQkJCQlJV29ya2JlbmNoV2luZG93IGR3ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKQotCQkJCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJCQlGaWxlIGZpbGUgPSBsYXVuY2hIZWxwZXIuZ2V0VGFyZ2V0KCk7Ci0JCQkJCQlQYXRoIHBhdGggPSBuZXcgUGF0aChmaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJCQkJCUlGaWxlU3RvcmUgZmlsZXN0b3JlID0gRUZTLmdldExvY2FsRmlsZVN5c3RlbSgpCi0JCQkJCQkJCS5nZXRTdG9yZShwYXRoKTsKLQkJCQkJCUlERQotCQkJCQkJCQkub3BlbkVkaXRvck9uRmlsZVN0b3JlKGR3LmdldEFjdGl2ZVBhZ2UoKSwKLQkJCQkJCQkJCQlmaWxlc3RvcmUpOwotCi0JCQkJCQlpZiAobGF1bmNoSGVscGVyLmdldEZvcm1hdEZpbGVPbkNvbXBsZXRpb24oKSkgewotCQkJCQkJCS8vIGZvcm1hdCB0aGUgZWRpdG9yIGNvbnRlbnRzCi0JCQkJCQkJSUhhbmRsZXJTZXJ2aWNlIHAgPSAoSUhhbmRsZXJTZXJ2aWNlKSBQbGF0Zm9ybVVJCi0JCQkJCQkJCQkuZ2V0V29ya2JlbmNoKCkuZ2V0U2VydmljZSgKLQkJCQkJCQkJCQkJSUhhbmRsZXJTZXJ2aWNlLmNsYXNzKTsKLQkJCQkJCQlwCi0JCQkJCQkJCQkuZXhlY3V0ZUNvbW1hbmQoCi0JCQkJCQkJCQkJCSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmZvcm1hdC5kb2N1bWVudCIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpIHsKLQkJCQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQkJCQl9IGNhdGNoIChDb21tYW5kRXhjZXB0aW9uIGUpIHsKLQkJCQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL1hTTERlYnVnVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZlZjM2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VOb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgWFNMIERlYnVnIFVJIHBsdWdpbi4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWFNMRGVidWdVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCS8qKgotCSAqIFRoZSBpZCBvZiB0aGlzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpIjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIFhTTERlYnVnVUlQbHVnaW4gcGx1Z2luOwotCi0JcHJpdmF0ZSBYU0xEZWJ1Z1VJTGF1bmNoTGlzdGVuZXIgbGF1bmNoTGlzdGVuZXIgPSBuZXcgWFNMRGVidWdVSUxhdW5jaExpc3RlbmVyKCk7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKi8KLQlwdWJsaWMgWFNMRGVidWdVSVBsdWdpbigpIHsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJbGF1bmNoTGlzdGVuZXIuc3RhcnQoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCWxhdW5jaExpc3RlbmVyLnN0b3AoKTsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbgotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNMRGVidWdVSVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIEdldCBhbiBJbWFnZURlc2NyaXB0b3IgZnJvbSBhIHBhdGggaW4gdGhpcyBidW5kbGUuCi0JICogCi0JICogQHBhcmFtIHBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIHRoZSBpbWFnZQotCSAqIEByZXR1cm4gdGhlIEltYWdlRGVzY3JpcHRvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgewotCQlyZXR1cm4gaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIHBhdGgpOwotCX0KLQotCS8qKgotCSAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3Igb3BlbmluZyBhIGdpdmVuIHByZWZlcmVuY2UgcGFnZS4KLQkgKiAKLQkgKiBAcGFyYW0gaWQKLQkgKiAgICAgICAgICAgIHRoZSBpZCBvZiB0aGUgcHJlZmVyZW5jZSBwYWdlCi0JICogQHBhcmFtIHBhZ2UKLQkgKiAgICAgICAgICAgIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gc2hvdwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBzaG93UHJlZmVyZW5jZVBhZ2UoU3RyaW5nIGlkLCBJUHJlZmVyZW5jZVBhZ2UgcGFnZSkgewotCQlmaW5hbCBJUHJlZmVyZW5jZU5vZGUgdGFyZ2V0Tm9kZSA9IG5ldyBQcmVmZXJlbmNlTm9kZShpZCwgcGFnZSk7Ci0KLQkJUHJlZmVyZW5jZU1hbmFnZXIgbWFuYWdlciA9IG5ldyBQcmVmZXJlbmNlTWFuYWdlcigpOwotCQltYW5hZ2VyLmFkZFRvUm9vdCh0YXJnZXROb2RlKTsKLQkJZmluYWwgUHJlZmVyZW5jZURpYWxvZyBkaWFsb2cgPSBuZXcgUHJlZmVyZW5jZURpYWxvZyhYU0xEZWJ1Z1VJUGx1Z2luCi0JCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFNoZWxsKCksIG1hbmFnZXIpOwotCQlmaW5hbCBib29sZWFuW10gcmVzdWx0ID0gbmV3IGJvb2xlYW5bXSB7IGZhbHNlIH07Ci0JCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKFhTTERlYnVnVUlQbHVnaW4uZ2V0U3RhbmRhcmREaXNwbGF5KCksCi0JCQkJbmV3IFJ1bm5hYmxlKCkgewotCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQlkaWFsb2cuY3JlYXRlKCk7Ci0JCQkJCQlkaWFsb2cuc2V0TWVzc2FnZSh0YXJnZXROb2RlLmdldExhYmVsVGV4dCgpKTsKLQkJCQkJCXJlc3VsdFswXSA9IChkaWFsb2cub3BlbigpID09IFdpbmRvdy5PSyk7Ci0JCQkJCX0KLQkJCQl9KTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGN1cnJlbnQgRGlzcGxheSBpZiBwb3NzaWJsZSwgb3IgZWxzZSB0aGUgZGVmYXVsdCBEaXNwbGF5LgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgb3IgZGVmYXVsdCBEaXNwbGF5Ci0JICovCi0JcHVibGljIHN0YXRpYyBEaXNwbGF5IGdldFN0YW5kYXJkRGlzcGxheSgpIHsKLQkJRGlzcGxheSBkaXNwbGF5OwotCQlkaXNwbGF5ID0gRGlzcGxheS5nZXRDdXJyZW50KCk7Ci0JCWlmIChkaXNwbGF5ID09IG51bGwpCi0JCQlkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0JCXJldHVybiBkaXNwbGF5OwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgYWN0aXZlIHdvcmtiZW5jaCB3aW5kb3cgZnJvbSB0aGUgd29ya2JlbmNoLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGFjdGl2ZSB3b3JrYmVuY2ggd2luZG93Ci0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya2JlbmNoV2luZG93IGdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpIHsKLQkJcmV0dXJuIGdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHNoZWxsIG9mIHRoZSBhY3RpdmUgd29ya2JlbmNoIHdpbmRvdy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBhY3RpdmUgd29ya2JlbmNoIHNoZWxsCi0JICovCi0JcHVibGljIHN0YXRpYyBTaGVsbCBnZXRBY3RpdmVXb3JrYmVuY2hTaGVsbCgpIHsKLQkJSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBnZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJaWYgKHdpbmRvdyAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gd2luZG93LmdldFNoZWxsKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBhY3RpdmUgcGFnZSBvZiB0aGUgYWN0aXZlIHdvcmtiZW5jaCB3aW5kb3cuCi0JICogCi0JICogQHJldHVybiB0aGUgYWN0aXZlIHBhZ2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3JrYmVuY2hQYWdlIGdldEFjdGl2ZVBhZ2UoKSB7Ci0JCUlXb3JrYmVuY2hXaW5kb3cgdyA9IGdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQlpZiAodyAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogTG9nIHRoZSBnaXZlbiBleGNlcHRpb24gYnkgY3JlYXRpbmcgYSBuZXcgU3RhdHVzLgotCSAqIAotCSAqIEBwYXJhbSBlCi0JICogICAgICAgICAgICB0aGUgZXhjZXB0aW9uIHRvIGxvZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coRXhjZXB0aW9uIGUpIHsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZygKLQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFBMVUdJTl9JRCwgMCwgIiIsIGUpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIExvZyB0aGUgZ2l2ZW4gY29yZSBleGNlcHRpb24uCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIHRoZSBleGNlcHRpb24gdG8gbG9nCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhDb3JlRXhjZXB0aW9uIGUpIHsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhlLmdldFN0YXR1cygpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL1hTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmNDY5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5BYnN0cmFjdExhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotCi0vKioKLSAqIFRoZSBiYXNlIGNsYXNzIGZvciBYU0wgbGF1bmNoIGNvbmZpZ3VyYXRpb24gdGFicyB3aGljaCBhbGxvd3MgYSBudW1iZXIgb2YKLSAqICdibG9ja3MnIHRvIGJlIGFkZGVkLiBFYWNoIGJsb2NrIG11c3QgaXRzZWxmIGZ1bGx5IGltcGxlbWVudAotICogPGNvZGU+SUxhdW5jaENvbmZpZ3VyYXRpb25UYWI8L2NvZGU+LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0xMYXVuY2hDb25maWd1cmF0aW9uVGFiIGV4dGVuZHMKLQkJQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiIHsKLQlwcml2YXRlIElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10gYmxvY2tzOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0QmxvY2tzKElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10gYmxvY2tzKSB7Ci0JCXRoaXMuYmxvY2tzID0gYmxvY2tzOwotCX0KLQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWNvbXAuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJLy8gVE9ETyBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKGdldENvbnRyb2woKSwKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0JCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCXNldENvbnRyb2woY29tcCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JCWZvciAoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIgZWxlbWVudCA6IGJsb2NrcykKLQkJCWVsZW1lbnQuc2V0RGVmYXVsdHMoY29uZmlndXJhdGlvbik7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpCi0JCQllbGVtZW50LmluaXRpYWxpemVGcm9tKGNvbmZpZ3VyYXRpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pIHsKLQkJZm9yIChJTGF1bmNoQ29uZmlndXJhdGlvblRhYiBlbGVtZW50IDogYmxvY2tzKQotCQkJZWxlbWVudC5wZXJmb3JtQXBwbHkoY29uZmlndXJhdGlvbik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc2V0TGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZyhJTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZyBkaWFsb2cpIHsKLQkJc3VwZXIuc2V0TGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZyhkaWFsb2cpOwotCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpCi0JCQllbGVtZW50LnNldExhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coZGlhbG9nKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpCi0JCQllbGVtZW50LmRpc3Bvc2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBhY3RpdmF0ZWQoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSB3b3JraW5nQ29weSkgewotCQkvLyBkb24ndCBjYWxsIGluaXRpYWxpemVGcm9tCi0JCS8vIHN1cGVyLmFjdGl2YXRlZCh3b3JraW5nQ29weSk7Ci0JCWZvciAoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIgZWxlbWVudCA6IGJsb2NrcykKLQkJCWVsZW1lbnQuYWN0aXZhdGVkKHdvcmtpbmdDb3B5KTsKLQl9Ci0KLQkvLyBAT3ZlcnJpZGUKLQkvLyBwcm90ZWN0ZWQgYm9vbGVhbiBpc0RpcnR5KCkKLQkvLyB7Ci0JLy8gZm9yIChJTGF1bmNoQ29uZmlndXJhdGlvblRhYiBlbGVtZW50IDogYmxvY2tzKQotCS8vIGlmICgoKFhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIpZWxlbWVudCkuaXNEaXJ0eSgpKQotCS8vIHJldHVybiB0cnVlOwotCS8vIHJldHVybiBzdXBlci5pc0RpcnR5KCk7Ci0JLy8gfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNWYWxpZChJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0JCWJvb2xlYW4gdmFsaWQgPSB0cnVlOwotCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpCi0JCQl2YWxpZCAmPSBlbGVtZW50LmlzVmFsaWQoY29uZmlndXJhdGlvbik7Ci0JCXJldHVybiB2YWxpZDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKLQkJU3RyaW5nIG0gPSBzdXBlci5nZXRFcnJvck1lc3NhZ2UoKTsKLQkJaWYgKG0gPT0gbnVsbCkgewotCQkJZm9yIChJTGF1bmNoQ29uZmlndXJhdGlvblRhYiBlbGVtZW50IDogYmxvY2tzKSB7Ci0JCQkJbSA9IGVsZW1lbnQuZ2V0RXJyb3JNZXNzYWdlKCk7Ci0JCQkJaWYgKG0gIT0gbnVsbCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG07Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlTdHJpbmcgbSA9IHN1cGVyLmdldE1lc3NhZ2UoKTsKLQkJaWYgKG0gPT0gbnVsbCkgewotCQkJZm9yIChJTGF1bmNoQ29uZmlndXJhdGlvblRhYiBlbGVtZW50IDogYmxvY2tzKSB7Ci0JCQkJbSA9IGVsZW1lbnQuZ2V0TWVzc2FnZSgpOwotCQkJCWlmIChtICE9IG51bGwpCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiBtOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL1hTTExhdW5jaFNob3J0Y3V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMTGF1bmNoU2hvcnRjdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwZGQ1MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMTGF1bmNoU2hvcnRjdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5WYXJpYWJsZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnVUlUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JRGVidWdNb2RlbFByZXNlbnRhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JTGF1bmNoU2hvcnRjdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuU3RhdHVzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5FbGVtZW50TGlzdFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5JbnB1dEZpbGVCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5CYXNlTGF1bmNoSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hQaXBlbGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi0vKioKLSAqIDx0YWJsZSBib3JkZXI9MT4KLSAqIDx0aD4KLSAqIDx0cj4KLSAqIDx0ZD5YTUwgRmlsZXM8L3RkPgotICogPHRkPlhTTCBGaWxlczwvdGQ+Ci0gKiA8dGQ+QWN0aW9uPC90ZD4KLSAqIDwvdHI+Ci0gKiA8L3RoPgotICogPHRib2R5PgotICogPHRyPgotICogPHRkPjE8L3RkPgotICogPHRkPjA8L3RkPgotICogPHRkPkxhdW5jaCBhc3N1bWluZyBlbWJlZGRlZCBzdHlsZXNoZWV0IGluc3RydWN0aW9uPC90ZD4KLSAqIDwvdHI+Ci0gKiA8dHI+Ci0gKiA8dGQ+MDwvdGQ+Ci0gKiA8dGQ+Jmd0Oz0xPC90ZD4KLSAqIDx0ZD5PcGVuIGRpYWxvZyAtIHByb21wdCBmb3IgaW5wdXQgZmlsZTwvdGQ+Ci0gKiA8L3RyPgotICogPHRyPgotICogPHRkPjE8L3RkPgotICogPHRkPiZndDs9MTwvdGQ+Ci0gKiA8dGQ+TGF1bmNoPC90ZD4KLSAqIDwvdHI+Ci0gKiA8L3Rib2R5PgotICogPC90YWJsZT4KLSAqIAotICogPHA+Ci0gKiBUaGUgbGF1bmNoIHNob3J0Y3V0IHNob3VsZCBub3QgYXBwZWFyIGluIHRoZSBtZW51IGZvciBhbnkgb3RoZXIgY29tYmluYXRpb24KLSAqIG9mIGZpbGVzCi0gKiA8L3A+Ci0gKiA8cD4KLSAqIEluIGFsbCBjYXNlcywgYSBjaGVjayBtdXN0IGJlIHBlcmZvcm1lZCB0byBmaW5kIGFueSBleGlzdGluZyBsYXVuY2gKLSAqIGNvbmZpZ3VyYXRpb24gdGhhdCB1c2VzIHRoZSBzZWxlY3RlZCBmaWxlcy4KLSAqIDwvcD4KLSAqIAotICogQGF1dGhvciBEb3VnCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xMYXVuY2hTaG9ydGN1dCBpbXBsZW1lbnRzIElMYXVuY2hTaG9ydGN1dCB7Ci0JcHJpdmF0ZSBJRmlsZSB4bWxGaWxlOwotCXByaXZhdGUgSVBhdGggeG1sRmlsZVBhdGg7Ci0JcHJpdmF0ZSBJRmlsZVtdIHhzbEZpbGVzOwotCi0JcHVibGljIHZvaWQgbGF1bmNoKElTZWxlY3Rpb24gc2VsZWN0aW9uLCBTdHJpbmcgbW9kZSkgewotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNzZWwgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQkJCXNlYXJjaEFuZExhdW5jaChzc2VsLnRvQXJyYXkoKSwgbW9kZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBsYXVuY2goSUVkaXRvclBhcnQgZWRpdG9yLCBTdHJpbmcgbW9kZSkgewotCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKTsKLQkJaWYgKGlucHV0ICE9IG51bGwpIHsKLQkJCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGlucHV0LmdldEFkYXB0ZXIoSUZpbGUuY2xhc3MpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkKLQkJCQlzZWFyY2hBbmRMYXVuY2gobmV3IE9iamVjdFtdIHsgZmlsZSB9LCBtb2RlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzZWFyY2hBbmRMYXVuY2goT2JqZWN0W10gb2JqZWN0cywgU3RyaW5nIG1vZGUpIHsKLQkJaWYgKGZpbGxGaWxlcyhvYmplY3RzKSkgewotCQkJLy8gZW5zdXJlIHdlIGhhdmUgYW4gaW5wdXQgZmlsZQotCQkJaWYgKHhtbEZpbGUgPT0gbnVsbCkKLQkJCQlwcm9tcHRGb3JJbnB1dCgpOwotCQkJaWYgKHhtbEZpbGUgIT0gbnVsbCB8fCB4bWxGaWxlUGF0aCAhPSBudWxsKQotCQkJCWxhdW5jaChtb2RlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcm9tcHRGb3JJbnB1dCgpIHsKLQkJLy8gcHJvbXB0IGZvciBpbnB1dCB4bWwgZmlsZQotCQlTdGF0dXNEaWFsb2cgZGlhbG9nID0gbmV3IFN0YXR1c0RpYWxvZyhnZXRTaGVsbCgpKSB7Ci0JCQlwcml2YXRlIElucHV0RmlsZUJsb2NrIGlucHV0RmlsZUJsb2NrID0gbmV3IElucHV0RmlsZUJsb2NrKG51bGwpOwotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQkJCUNvbXBvc2l0ZSBjb21wID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJCWNvbXAuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKTsKLQkJCQljb21wLnNldExheW91dChsYXlvdXQpOwotCi0JCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29tcCwgU1dULk5PTkUpOwotCQkJCWxhYmVsLnNldEZvbnQoY29tcC5nZXRGb250KCkpOwotCQkJCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0JCQkJZ2QuaG9yaXpvbnRhbEluZGVudCA9IDU7Ci0JCQkJZ2QudmVydGljYWxJbmRlbnQgPSA1OwotCQkJCWdkLndpZHRoSGludCA9IDM4MDsKLQkJCQlsYWJlbC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLlhTTExhdW5jaFNob3J0Y3V0XzApOwotCi0JCQkJaW5wdXRGaWxlQmxvY2suY3JlYXRlQ29udHJvbChjb21wKTsKLQkJCQlyZXR1cm4gY29tcDsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQkJSVJlc291cmNlIHJlcyA9IGlucHV0RmlsZUJsb2NrLmdldFJlc291cmNlKCk7Ci0JCQkJaWYgKHJlcyA9PSBudWxsKQotCQkJCQl4bWxGaWxlUGF0aCA9IG5ldyBQYXRoKGlucHV0RmlsZUJsb2NrLmdldFRleHQoKSk7Ci0JCQkJZWxzZSBpZiAoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5leGlzdHMoCi0JCQkJCQlyZXMuZ2V0RnVsbFBhdGgoKSkKLQkJCQkJCSYmIHJlcy5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0JCQkJCXhtbEZpbGUgPSAoSUZpbGUpIHJlczsKLQkJCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJCX0KLQotCQl9OwotCQlkaWFsb2cuc2V0SGVscEF2YWlsYWJsZShmYWxzZSk7Ci0JCWRpYWxvZy5zZXRTdGF0dXNMaW5lQWJvdmVCdXR0b25zKHRydWUpOwotCQlkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuWFNMTGF1bmNoU2hvcnRjdXRfMSk7Ci0JCWRpYWxvZy5vcGVuKCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGZpbGxGaWxlcyhPYmplY3RbXSBzZWxlY3Rpb25zKSB7Ci0JCXhtbEZpbGUgPSBudWxsOwotCQl4bWxGaWxlUGF0aCA9IG51bGw7Ci0JCUxpc3Q8SUZpbGU+IHhzbEZpbGVMaXN0ID0gbmV3IEFycmF5TGlzdDxJRmlsZT4oKTsKLQkJZm9yIChPYmplY3Qgb2JqZWN0IDogc2VsZWN0aW9ucykgewotCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgb2JqZWN0OwotCQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgewotCQkJCUlGaWxlIGZpbGUgPSAoSUZpbGUpIHJlc291cmNlOwotCQkJCWlmIChYU0xDb3JlLmlzWE1MRmlsZShmaWxlKSkgewotCQkJCQlpZiAoWFNMQ29yZS5pc1hTTEZpbGUoZmlsZSkpCi0JCQkJCQl4c2xGaWxlTGlzdC5hZGQoZmlsZSk7Ci0JCQkJCWVsc2UgaWYgKHhtbEZpbGUgPT0gbnVsbCkKLQkJCQkJCXhtbEZpbGUgPSBmaWxlOwotCQkJCQllbHNlCi0JCQkJCQlyZXR1cm4gZmFsc2U7IC8vIG5vIGFjdGlvbiBpZiB3ZSBoYXZlIG1vcmUgdGhhbiB0aGFuIDEKLQkJCQkJCQkJCQkvLyB4bWwgZmlsZQotCQkJCX0KLQkJCX0KLQkJfQotCQl4c2xGaWxlcyA9IHhzbEZpbGVMaXN0LnRvQXJyYXkobmV3IElGaWxlWzBdKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGxhdW5jaChTdHJpbmcgbW9kZSkgewotCQlpZiAoeG1sRmlsZSAhPSBudWxsKQotCQkJeG1sRmlsZVBhdGggPSB4bWxGaWxlLmdldExvY2F0aW9uKCk7Ci0JCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQljb25maWcgPSBmaW5kT3JDcmVhdGVMYXVuY2hDb25maWd1cmF0aW9uKCk7Ci0JCQlpZiAoY29uZmlnICE9IG51bGwpCi0JCQkJRGVidWdVSVRvb2xzLmxhdW5jaChjb25maWcsIG1vZGUpOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIElMYXVuY2hNYW5hZ2VyIGdldExhdW5jaE1hbmFnZXIoKSB7Ci0JCXJldHVybiBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TGF1bmNoTWFuYWdlcigpOwotCX0KLQotCXByb3RlY3RlZCBJTGF1bmNoQ29uZmlndXJhdGlvblR5cGUgZ2V0Q29uZmlndXJhdGlvblR5cGUoKSB7Ci0JCXJldHVybiBnZXRMYXVuY2hNYW5hZ2VyKCkuZ2V0TGF1bmNoQ29uZmlndXJhdGlvblR5cGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5JRF9MQVVOQ0hfQ09ORklHX1RZUEUpOwotCX0KLQotCXByaXZhdGUgSUxhdW5jaENvbmZpZ3VyYXRpb24gZmluZE9yQ3JlYXRlTGF1bmNoQ29uZmlndXJhdGlvbigpCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlMYXVuY2hDb25maWd1cmF0aW9uW10gY29uZmlncyA9IGdldExhdW5jaE1hbmFnZXIoKQotCQkJCS5nZXRMYXVuY2hDb25maWd1cmF0aW9ucyhnZXRDb25maWd1cmF0aW9uVHlwZSgpKTsKLQkJTGlzdDxJTGF1bmNoQ29uZmlndXJhdGlvbj4gY2FuZGlkYXRlQ29uZmlncyA9IG5ldyBBcnJheUxpc3Q8SUxhdW5jaENvbmZpZ3VyYXRpb24+KAotCQkJCWNvbmZpZ3MubGVuZ3RoKTsKLQkJZm9yIChJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWcgOiBjb25maWdzKSB7Ci0JCQlTdHJpbmcgaW5wdXRGaWxlID0gY29uZmlnLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0lOUFVUX0ZJTEUsCi0JCQkJCShTdHJpbmcpIG51bGwpOwotCQkJdHJ5IHsKLQkJCQlpbnB1dEZpbGUgPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJCQkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbigKLQkJCQkJCQkJaW5wdXRGaWxlKTsKLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCS8vIGp1c3QgaWdub3JlIHRoaXMgb25lCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlQYXRoIHBhdGggPSBuZXcgUGF0aChpbnB1dEZpbGUpOwotCQkJLy8gdGhlIHNvdXJjZSB4bWwgZmlsZSBtdXN0IGJlIHRoZSBzYW1lCi0JCQlpZiAocGF0aC5lcXVhbHMoeG1sRmlsZVBhdGgpKSB7Ci0JCQkJQmFzZUxhdW5jaEhlbHBlciBsaCA9IG5ldyBCYXNlTGF1bmNoSGVscGVyKGNvbmZpZyk7Ci0JCQkJLy8gYWxsIHRoZSBzZWxlY3RlZCBzdHlsZXNoZWV0cyBtdXN0IGJlIGluIHRoZSBwaXBlbGluZQotCQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJCQlmb3IgKElGaWxlIHN0eWxlc2hlZXQgOiB4c2xGaWxlcykgewotCQkJCQlmb3VuZCA9IGZhbHNlOwotCQkJCQlmb3IgKEl0ZXJhdG9yPExhdW5jaFRyYW5zZm9ybT4gaXRlciA9IGxoLmdldFBpcGVsaW5lKCkKLQkJCQkJCQkuZ2V0VHJhbnNmb3JtRGVmcygpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCQkJTGF1bmNoVHJhbnNmb3JtIGx0ID0gaXRlci5uZXh0KCk7Ci0JCQkJCQlpZiAobHQuZ2V0TG9jYXRpb24oKS5lcXVhbHMoc3R5bGVzaGVldC5nZXRMb2NhdGlvbigpKSkgewotCQkJCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAoIWZvdW5kKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChmb3VuZCkKLQkJCQkJY2FuZGlkYXRlQ29uZmlncy5hZGQoY29uZmlnKTsKLQkJCX0KLQkJfQotCi0JCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZyA9IG51bGw7Ci0JCWludCBjYW5kaWRhdGVDb3VudCA9IGNhbmRpZGF0ZUNvbmZpZ3Muc2l6ZSgpOwotCQlpZiAoY2FuZGlkYXRlQ291bnQgPT0gMSkKLQkJCWNvbmZpZyA9IGNhbmRpZGF0ZUNvbmZpZ3MuZ2V0KDApOwotCQllbHNlIGlmIChjYW5kaWRhdGVDb3VudCA+IDEpCi0JCQljb25maWcgPSBjaG9vc2VDb25maWd1cmF0aW9uKGNhbmRpZGF0ZUNvbmZpZ3MpOwotCQllbHNlCi0JCQljb25maWcgPSBjcmVhdGVDb25maWd1cmF0aW9uKCk7Ci0KLQkJcmV0dXJuIGNvbmZpZzsKLQl9Ci0KLQlwcml2YXRlIElMYXVuY2hDb25maWd1cmF0aW9uIGNob29zZUNvbmZpZ3VyYXRpb24oCi0JCQlMaXN0PElMYXVuY2hDb25maWd1cmF0aW9uPiBjb25maWdMaXN0KSB7Ci0JCUlEZWJ1Z01vZGVsUHJlc2VudGF0aW9uIGxhYmVsUHJvdmlkZXIgPSBEZWJ1Z1VJVG9vbHMKLQkJCQkubmV3RGVidWdNb2RlbFByZXNlbnRhdGlvbigpOwotCQlFbGVtZW50TGlzdFNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2coCi0JCQkJZ2V0U2hlbGwoKSwgbGFiZWxQcm92aWRlcik7Ci0JCWRpYWxvZy5zZXRFbGVtZW50cyhjb25maWdMaXN0LnRvQXJyYXkoKSk7Ci0JCWRpYWxvZy5zZXRUaXRsZShNZXNzYWdlcy5YU0xMYXVuY2hTaG9ydGN1dF8yKTsKLQkJZGlhbG9nLnNldE1lc3NhZ2UoTWVzc2FnZXMuWFNMU2VsZWN0RXhpc3RpbmcpOwotCQlkaWFsb2cuc2V0TXVsdGlwbGVTZWxlY3Rpb24oZmFsc2UpOwotCQlpbnQgcmVzdWx0ID0gZGlhbG9nLm9wZW4oKTsKLQkJbGFiZWxQcm92aWRlci5kaXNwb3NlKCk7Ci0JCWlmIChyZXN1bHQgPT0gV2luZG93Lk9LKSB7Ci0JCQlyZXR1cm4gKElMYXVuY2hDb25maWd1cmF0aW9uKSBkaWFsb2cuZ2V0Rmlyc3RSZXN1bHQoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIElMYXVuY2hDb25maWd1cmF0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7Ci0JCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTGF1bmNoQ29uZmlndXJhdGlvblR5cGUgY29uZmlnVHlwZSA9IGdldENvbmZpZ3VyYXRpb25UeXBlKCk7Ci0JCQlJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IHdjID0gY29uZmlnVHlwZS5uZXdJbnN0YW5jZShudWxsLAotCQkJCQlnZXRMYXVuY2hNYW5hZ2VyKCkKLQkJCQkJCQkuZ2VuZXJhdGVVbmlxdWVMYXVuY2hDb25maWd1cmF0aW9uTmFtZUZyb20oCi0JCQkJCQkJCQl4bWxGaWxlUGF0aC5sYXN0U2VnbWVudCgpKSk7Ci0JCQlpZiAoeG1sRmlsZSAhPSBudWxsKQotCQkJCXdjCi0JCQkJCQkuc2V0QXR0cmlidXRlKAotCQkJCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwKLQkJCQkJCQkJIiR7d29ya3NwYWNlX2xvYzoiICsgeG1sRmlsZS5nZXRGdWxsUGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKSArICJ9Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJZWxzZQotCQkJCXdjLnNldEF0dHJpYnV0ZSgKLQkJCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9JTlBVVF9GSUxFLAotCQkJCQkJeG1sRmlsZVBhdGgudG9Qb3J0YWJsZVN0cmluZygpKTsKLQotCQkJd2MKLQkJCQkJLnNldEF0dHJpYnV0ZSgKLQkJCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUsCi0JCQkJCQkJdHJ1ZSk7Ci0JCQl3Yy5zZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09QRU5fRklMRSwKLQkJCQkJdHJ1ZSk7Ci0KLQkJCUxhdW5jaFBpcGVsaW5lIHBpcGVsaW5lID0gbmV3IExhdW5jaFBpcGVsaW5lKCk7Ci0JCQlmb3IgKElGaWxlIGVsZW1lbnQgOiB4c2xGaWxlcykgewotCQkJCXBpcGVsaW5lLmFkZFRyYW5zZm9ybURlZihuZXcgTGF1bmNoVHJhbnNmb3JtKGVsZW1lbnQKLQkJCQkJCS5nZXRGdWxsUGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKSwKLQkJCQkJCUxhdW5jaFRyYW5zZm9ybS5SRVNPVVJDRV9UWVBFKSk7Ci0JCQl9Ci0JCQl3Yy5zZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BJUEVMSU5FLAotCQkJCQlwaXBlbGluZS50b1hNTCgpKTsKLQkJCWlmICh4bWxGaWxlICE9IG51bGwpCi0JCQkJd2Muc2V0TWFwcGVkUmVzb3VyY2VzKG5ldyBJUmVzb3VyY2VbXSB7IHhtbEZpbGUuZ2V0UHJvamVjdCgpIH0pOwotCQkJY29uZmlnID0gd2MuZG9TYXZlKCk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihnZXRTaGVsbCgpLCBNZXNzYWdlcy5YU0xMYXVuY2hTaG9ydGN1dF82LAotCQkJCQlleGNlcHRpb24uZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQlyZXR1cm4gY29uZmlnOwotCX0KLQotCXByb3RlY3RlZCBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJcmV0dXJuIFhTTERlYnVnVUlQbHVnaW4uZ2V0QWN0aXZlV29ya2JlbmNoU2hlbGwoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMVFRhYkdyb3VwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMVFRhYkdyb3VwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOTg0NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL1hTTFRUYWJHcm91cC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkNvbW1vblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JTGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5zb3VyY2Vsb29rdXAuU291cmNlTG9va3VwVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlhTTE1haW5UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dC5PdXRwdXRUYWI7Ci0KLS8qKgotICogVGhlIHRhYiBncm91cCBmb3IgdGhlIFhTTCB0YWJzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xUVGFiR3JvdXAgZXh0ZW5kcyBBYnN0cmFjdExhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cCB7Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICovCi0JcHVibGljIFhTTFRUYWJHcm91cCgpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVUYWJzKElMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nIGRpYWxvZywgU3RyaW5nIG1vZGUpIHsKLQkJWFNMTWFpblRhYiBtYWluID0gbmV3IFhTTE1haW5UYWIoKTsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB0YWJzID0gbmV3IElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10geyBtYWluLAotCQkJCW5ldyBPdXRwdXRUYWIobWFpbikgfTsKLQkJdGFicyA9IGFkZFRhYnModGFicywgbmV3IElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10gewotCQkJCW5ldyBTb3VyY2VMb29rdXBUYWIoKSwgbmV3IENvbW1vblRhYigpIH0pOwotCi0JCXNldFRhYnModGFicyk7Ci0JfQotCi0JcHJpdmF0ZSBJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdIGFkZFRhYnMoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB0YWJzMSwKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uVGFiW10gdGFiczIpIHsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSBuZXdUYWJzID0gbmV3IElMYXVuY2hDb25maWd1cmF0aW9uVGFiW3RhYnMxLmxlbmd0aAotCQkJCSsgdGFiczIubGVuZ3RoXTsKLQkJU3lzdGVtLmFycmF5Y29weSh0YWJzMSwgMCwgbmV3VGFicywgMCwgdGFiczEubGVuZ3RoKTsKLQkJU3lzdGVtLmFycmF5Y29weSh0YWJzMiwgMCwgbmV3VGFicywgdGFiczEubGVuZ3RoLCB0YWJzMi5sZW5ndGgpOwotCQlyZXR1cm4gbmV3VGFiczsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRUYWJzKElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10gdGFicykgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXN1cGVyLnNldFRhYnModGFicyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0Fic3RyYWN0UGFyYW1ldGVyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjJkNTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLlNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlBhcmFtZXRlclZpZXdlcjsKLQotLyoqCi0gKiBBIGNvbnZlbmllbnQgYmFzZSBjbGFzcyBmb3IgYWRkL3JlbW92ZSBwYXJhbWV0ZXIgYWN0aW9ucy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24gZXh0ZW5kcyBTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbiB7Ci0JcHJpdmF0ZSBQYXJhbWV0ZXJWaWV3ZXIgdmlld2VyOwotCXByaXZhdGUgQnV0dG9uIGJ1dHRvbjsKLQlwcml2YXRlIFNoZWxsIHNoZWxsOwotCi0JcHJvdGVjdGVkIEFic3RyYWN0UGFyYW1ldGVyQWN0aW9uKFN0cmluZyB0ZXh0LCBQYXJhbWV0ZXJWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKHRleHQpOwotCQlzZXRWaWV3ZXIodmlld2VyKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHZpZXdlci4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICB0aGUgcGFyYW1ldGVyZSB2aWV3ZXIKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWaWV3ZXIoUGFyYW1ldGVyVmlld2VyIHZpZXdlcikgewotCQlpZiAodGhpcy52aWV3ZXIgIT0gbnVsbCkgewotCQkJdGhpcy52aWV3ZXIuZ2V0Vmlld2VyKCkucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQl9Ci0JCXRoaXMudmlld2VyID0gdmlld2VyOwotCQlpZiAodmlld2VyICE9IG51bGwpIHsKLQkJCXZpZXdlci5nZXRWaWV3ZXIoKS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCQl1cGRhdGUoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBQYXJhbWV0ZXJWaWV3ZXIgZ2V0Vmlld2VyKCkgewotCQlyZXR1cm4gdmlld2VyOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgYnV0dG9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBidXR0b24KLQkgKiAgICAgICAgICAgIHRoZSBidXR0b24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCdXR0b24oQnV0dG9uIGJ1dHRvbikgewotCQl0aGlzLmJ1dHRvbiA9IGJ1dHRvbjsKLQkJYnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldnQpIHsKLQkJCQlydW4oKTsKLQkJCX0KLQkJfSk7Ci0JCWJ1dHRvbi5zZXRFbmFibGVkKGlzRW5hYmxlZCgpKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewotCQlzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOwotCQlpZiAoYnV0dG9uICE9IG51bGwpIHsKLQkJCWJ1dHRvbi5zZXRFbmFibGVkKGVuYWJsZWQpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlKCkgewotCQlzZWxlY3Rpb25DaGFuZ2VkKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0Vmlld2VyKCkuZ2V0Vmlld2VyKCkKLQkJCQkuZ2V0U2VsZWN0aW9uKCkpOwotCX0KLQotCXByb3RlY3RlZCBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJaWYgKHNoZWxsID09IG51bGwpIHsKLQkJCXNoZWxsID0gZ2V0Vmlld2VyKCkuZ2V0U2hlbGwoKTsKLQkJfQotCQlyZXR1cm4gc2hlbGw7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBzaGVsbCB0aGF0IHdpbGwgYmUgdXNlZCBmb3Igb3BlbmluZyBhIGRpYWxvZy4KLQkgKiAKLQkgKiBAcGFyYW0gc2hlbGwKLQkgKiAgICAgICAgICAgIHRoZSBzaGVsbCB0byB1c2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTaGVsbChTaGVsbCBzaGVsbCkgewotCQl0aGlzLnNoZWxsID0gc2hlbGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlyZXR1cm4gZ2V0Vmlld2VyKCkudXBkYXRlU2VsZWN0aW9uKGdldEFjdGlvblR5cGUoKSwgc2VsZWN0aW9uKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgaW50IGdldEFjdGlvblR5cGUoKSB7Ci0JCXJldHVybiBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24uREVGQVVMVDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0Fic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTE3NzIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0Fic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoUGlwZWxpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotLyoqCi0gKiBBIGNvbnZlbmllbnQgYmFzZSBjbGFzcyBmb3IgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0eWxlc2hlZXQgdmlld2VyLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24gZXh0ZW5kcyBTZWxlY3Rpb25MaXN0ZW5lckFjdGlvbiB7Ci0JLyoqCi0JICogVGhlIGRlZmF1bHQgYWN0aW9uIHR5cGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVCA9IDA7Ci0JLyoqCi0JICogVGhlIGFjdGlvbiB0eXBlIGZvciBhZGQgYWN0aW9ucy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBREQgPSAxOwotCS8qKgotCSAqIFRoZSBhY3Rpb24gdHlwZSBmb3IgcmVtb3ZlIGFjdGlvbnMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVNT1ZFID0gMjsKLQkvKioKLQkgKiBUaGUgYWN0aW9uIHR5cGUgZm9yIG1vdmUgYWN0aW9ucy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT1ZFID0gMzsKLQotCXByaXZhdGUgU3R5bGVzaGVldFZpZXdlciB2aWV3ZXI7Ci0JcHJpdmF0ZSBCdXR0b24gYnV0dG9uOwotCXByaXZhdGUgU2hlbGwgc2hlbGw7Ci0KLQlwcm90ZWN0ZWQgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uKFN0cmluZyB0ZXh0LCBTdHlsZXNoZWV0Vmlld2VyIHZpZXdlcikgewotCQlzdXBlcih0ZXh0KTsKLQkJc2V0Vmlld2VyKHZpZXdlcik7Ci0JfQotCi0JLyoqCi0JICogQWRkIGFuIGFycmF5IG9mIExhdW5jaFRyYW5zZm9ybSdzIHRvIHRoZSB2aWV3ZXIuCi0JICogCi0JICogQHBhcmFtIHJlcwotCSAqICAgICAgICAgICAgbGF1bmNoIHRyYW5zZm9ybXMgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkVHJhbnNmb3JtcyhMYXVuY2hUcmFuc2Zvcm1bXSByZXMpIHsKLQkJdmlld2VyLmFkZFRyYW5zZm9ybXMocmVzKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHZpZXdlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24uCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqICAgICAgICAgICAgdGhlIHZpZXdlcgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZpZXdlcihTdHlsZXNoZWV0Vmlld2VyIHZpZXdlcikgewotCQlpZiAodGhpcy52aWV3ZXIgIT0gbnVsbCkgewotCQkJdGhpcy52aWV3ZXIuZ2V0Vmlld2VyKCkucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQl9Ci0JCXRoaXMudmlld2VyID0gdmlld2VyOwotCQlpZiAodmlld2VyICE9IG51bGwpIHsKLQkJCXZpZXdlci5nZXRWaWV3ZXIoKS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCQl1cGRhdGUoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBTdHlsZXNoZWV0Vmlld2VyIGdldFZpZXdlcigpIHsKLQkJcmV0dXJuIHZpZXdlcjsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIGJ1dHRvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24uCi0JICogCi0JICogQHBhcmFtIGJ1dHRvbgotCSAqICAgICAgICAgICAgdGhlIGJ1dHRvbgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJ1dHRvbihCdXR0b24gYnV0dG9uKSB7Ci0JCXRoaXMuYnV0dG9uID0gYnV0dG9uOwotCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkgewotCQkJCXJ1bigpOwotCQkJfQotCQl9KTsKLQkJYnV0dG9uLnNldEVuYWJsZWQoaXNFbmFibGVkKCkpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0JCXN1cGVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCWlmIChidXR0b24gIT0gbnVsbCkgewotCQkJYnV0dG9uLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGUoKSB7Ci0JCXNlbGVjdGlvbkNoYW5nZWQoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRWaWV3ZXIoKS5nZXRWaWV3ZXIoKQotCQkJCS5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHJvdGVjdGVkIFNoZWxsIGdldFNoZWxsKCkgewotCQlpZiAoc2hlbGwgPT0gbnVsbCkgewotCQkJc2hlbGwgPSBnZXRWaWV3ZXIoKS5nZXRTaGVsbCgpOwotCQl9Ci0JCXJldHVybiBzaGVsbDsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHNoZWxsIHRvIGJlIHVzZWQgZm9yIG9wZW5pbmcgYSBkaWFsb2cuCi0JICogCi0JICogQHBhcmFtIHNoZWxsCi0JICogICAgICAgICAgICB0aGUgc2hlbGwgdG8gdXNlCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2hlbGwoU2hlbGwgc2hlbGwpIHsKLQkJdGhpcy5zaGVsbCA9IHNoZWxsOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJcmV0dXJuIGdldFZpZXdlcigpLnVwZGF0ZVNlbGVjdGlvbihnZXRBY3Rpb25UeXBlKCksIHNlbGVjdGlvbik7Ci0JfQotCi0JcHJvdGVjdGVkIGludCBnZXRBY3Rpb25UeXBlKCkgewotCQlyZXR1cm4gREVGQVVMVDsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdDw/PiBnZXRPcmRlcmVkU2VsZWN0aW9uKCkgewotCQlMaXN0PD8+IHNlbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFZpZXdlcigpLmdldFZpZXdlcigpCi0JCQkJLmdldFNlbGVjdGlvbigpKS50b0xpc3QoKTsKLQkJcmV0dXJuIHNlbGVjdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdDxMYXVuY2hUcmFuc2Zvcm0+IGdldEVudHJpZXNBc0xpc3QoKSB7Ci0JCS8vIElTdHlsZXNoZWV0RW50cnlbXSBlbnRyaWVzID0gZ2V0Vmlld2VyKCkuZ2V0RW50cmllcygpOwotCQkvLyBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KGVudHJpZXMubGVuZ3RoKTsKLQkJLy8gZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCS8vIGxpc3QuYWRkKGVudHJpZXNbaV0pOwotCQkvLyB9Ci0JCUxhdW5jaFBpcGVsaW5lIGxwID0gKExhdW5jaFBpcGVsaW5lKSBnZXRWaWV3ZXIoKS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpOwotCQlyZXR1cm4gbHAuZ2V0VHJhbnNmb3JtRGVmcygpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldEVudHJpZXMoTGlzdDw/PiBsaXN0KSB7Ci0JCWdldFZpZXdlcigpLnNldEVudHJpZXMobGlzdC50b0FycmF5KG5ldyBMYXVuY2hUcmFuc2Zvcm1bbGlzdC5zaXplKCldKSk7Ci0JCS8vIC8vIHVwZGF0ZSBhbGwgc2VsZWN0aW9uIGxpc3RlbmVycwotCQkvLyBnZXRWaWV3ZXIoKS5zZXRTZWxlY3Rpb24oZ2V0Vmlld2VyKCkuZ2V0U2VsZWN0aW9uKCkpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGlzSW5kZXhTZWxlY3RlZChJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sIGludCBpbmRleCkgewotCQlpZiAoc2VsZWN0aW9uLmlzRW1wdHkoKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCUl0ZXJhdG9yPD8+IGVudHJpZXMgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsKLQkJTGlzdDw/PiBsaXN0ID0gZ2V0RW50cmllc0FzTGlzdCgpOwotCQl3aGlsZSAoZW50cmllcy5oYXNOZXh0KCkpIHsKLQkJCU9iamVjdCBuZXh0ID0gZW50cmllcy5uZXh0KCk7Ci0JCQlpZiAobGlzdC5pbmRleE9mKG5leHQpID09IGluZGV4KSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWRkRXh0ZXJuYWxGaWxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BZGRFeHRlcm5hbEZpbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI3YWE5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BZGRFeHRlcm5hbEZpbGVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1NzcyIC0gTkxTIE1lc3NhZ2UgcmVmYWN0b3JpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLQotLyoqCi0gKiBBbiBhY3Rpb24gdGhhdCBvcGVucyBhIGRpYWxvZyB0byBhbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgYSBmaWxlIGZyb20gdGhlCi0gKiBmaWxlIHN5c3RlbS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgQWRkRXh0ZXJuYWxGaWxlQWN0aW9uIGV4dGVuZHMgT3BlbkRpYWxvZ0FjdGlvbiB7Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqICAgICAgICAgICAgdGhlIHN0eWxlc2hlZXQgdmlld2VyCi0JICogQHBhcmFtIGRpYWxvZ1NldHRpbmdzUHJlZml4Ci0JICogICAgICAgICAgICBhIHByZWZpeCB0byB1c2UgZm9yIHNhdmluZyBkaWFsb2cgcHJlZmVyZW5jZXMKLQkgKi8KLQlwdWJsaWMgQWRkRXh0ZXJuYWxGaWxlQWN0aW9uKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyLAotCQkJU3RyaW5nIGRpYWxvZ1NldHRpbmdzUHJlZml4KSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLkFkZEV4dGVybmFsRmlsZUFjdGlvbl9UZXh0LCB2aWV3ZXIsIGRpYWxvZ1NldHRpbmdzUHJlZml4KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCVN0cmluZyBsYXN0VXNlZFBhdGggPSBnZXREaWFsb2dTZXR0aW5nKExBU1RfUEFUSF9TRVRUSU5HKTsKLQkJaWYgKGxhc3RVc2VkUGF0aCA9PSBudWxsKSB7Ci0JCQlsYXN0VXNlZFBhdGggPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2coZ2V0U2hlbGwoKSwgU1dULk1VTFRJKTsKLQkJZGlhbG9nLnNldFRleHQoTWVzc2FnZXMuQWRkRXh0ZXJuYWxGaWxlQWN0aW9uX1NlbGVjdGlvbl8zKTsKLQkJZGlhbG9nLnNldEZpbHRlclBhdGgobGFzdFVzZWRQYXRoKTsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciBjb250ZW50VHlwZU1hbmFnZXIgPSBQbGF0Zm9ybQotCQkJCS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKTsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGVNYW5hZ2VyCi0JCQkJLmdldENvbnRlbnRUeXBlKFhTTENvcmUuWFNMX0NPTlRFTlRfVFlQRSk7Ci0JCVN0cmluZ1tdIHhzbENvbnRlbnRUeXBlcyA9IGNvbnRlbnRUeXBlCi0JCQkJLmdldEZpbGVTcGVjcyhJQ29udGVudFR5cGUuRklMRV9FWFRFTlNJT05fU1BFQyk7Ci0KLQkJLy8gYWRkICouIHRvIGZyb250Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgeHNsQ29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgc3RyaW5nID0geHNsQ29udGVudFR5cGVzW2ldOwotCQkJeHNsQ29udGVudFR5cGVzW2ldID0gIiouIiArIHN0cmluZzsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJZGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMoeHNsQ29udGVudFR5cGVzKTsKLQkJU3RyaW5nIHJlcyA9IGRpYWxvZy5vcGVuKCk7Ci0JCWlmIChyZXMgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJSVBhdGggZmlsdGVyUGF0aCA9IG5ldyBQYXRoKGRpYWxvZy5nZXRGaWx0ZXJQYXRoKCkpOwotCQlMYXVuY2hUcmFuc2Zvcm1bXSBsdHMgPSBuZXcgTGF1bmNoVHJhbnNmb3JtWzFdOwotCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgocmVzKS5tYWtlQWJzb2x1dGUoKTsKLQkJbHRzWzBdID0gbmV3IExhdW5jaFRyYW5zZm9ybShwYXRoLnRvUG9ydGFibGVTdHJpbmcoKSwKLQkJCQlMYXVuY2hUcmFuc2Zvcm0uRVhURVJOQUxfVFlQRSk7Ci0KLQkJc2V0RGlhbG9nU2V0dGluZyhMQVNUX1BBVEhfU0VUVElORywgZmlsdGVyUGF0aC50b09TU3RyaW5nKCkpOwotCi0JCWFkZFRyYW5zZm9ybXMobHRzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BZGRQYXJhbWV0ZXJBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0FkZFBhcmFtZXRlckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjdiNTYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0FkZFBhcmFtZXRlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDU3NzIgLSBOTFMgTWVzc2FnZSByZWZhY3RvcmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5QYXJhbWV0ZXJWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLQotLyoqCi0gKiBBbiBhY3Rpb24gdGhhdCBvcGVucyBhIGRpYWxvZyB0byBhbGxvdyB0aGUgdXNlciB0byBhZGQgYSBwYXJhbWV0ZXIgdG8gYQotICogdHJhbnNmb3JtLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGRQYXJhbWV0ZXJBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdFBhcmFtZXRlckFjdGlvbiB7Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqICAgICAgICAgICAgdGVoIHZpZXdlcgotCSAqLwotCXB1YmxpYyBBZGRQYXJhbWV0ZXJBY3Rpb24oUGFyYW1ldGVyVmlld2VyIHZpZXdlcikgewotCQlzdXBlcihNZXNzYWdlcy5BZGRQYXJhbWV0ZXJBY3Rpb24sIHZpZXdlcik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlNdWx0aXBsZUlucHV0RGlhbG9nIGRpYWxvZyA9IG5ldyBNdWx0aXBsZUlucHV0RGlhbG9nKGdldFNoZWxsKCksCi0JCQkJTWVzc2FnZXMuQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZyk7Ci0JCVN0cmluZyBuYW1lbGFiZWwgPSBNZXNzYWdlcy5BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nX05hbWU7Ci0JCWRpYWxvZy5hZGRUZXh0RmllbGQobmFtZWxhYmVsLCBudWxsLCBmYWxzZSk7Ci0JCVN0cmluZyB2YXJpYWJsZXNsYWJlbCA9IE1lc3NhZ2VzLkFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2dfVmFsdWU7Ci0JCWRpYWxvZy5hZGRWYXJpYWJsZXNGaWVsZCh2YXJpYWJsZXNsYWJlbCwgbnVsbCwgZmFsc2UpOwotCQlkaWFsb2cub3BlbigpOwotCi0JCWlmIChkaWFsb2cuZ2V0UmV0dXJuQ29kZSgpID09IFdpbmRvdy5PSykgewotCQkJU3RyaW5nIG5hbWUgPSBkaWFsb2cuZ2V0U3RyaW5nVmFsdWUobmFtZWxhYmVsKTsKLQkJCVN0cmluZyB2YWx1ZSA9IGRpYWxvZy5nZXRTdHJpbmdWYWx1ZSh2YXJpYWJsZXNsYWJlbCk7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgcGFyYW1ldGVyID0gbnVsbDsKLQkJCWlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmluZGV4T2YoIiR7IikgPiAtMSkgLy8kTk9OLU5MUy0xJAotCQkJCXBhcmFtZXRlciA9IG5ldyBMYXVuY2hBdHRyaWJ1dGUobmFtZSwgbnVsbCwgdmFsdWUpOwotCQkJZWxzZQotCQkJCXBhcmFtZXRlciA9IG5ldyBMYXVuY2hBdHRyaWJ1dGUobmFtZSwgbnVsbCwgdmFsdWUpOwotCQkJZ2V0Vmlld2VyKCkuYWRkUGFyYW1ldGVyKHBhcmFtZXRlcik7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjU5ZjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWRkV29ya3NwYWNlRmlsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyNDU3NzIgLSBOTFMgTWVzc2FnZSByZWZhY3RvcmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5uYXZpZ2F0b3IuUmVzb3VyY2VDb21wYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotLyoqCi0gKiBBbiBhY3Rpb24gdGhhdCBvcGVucyBhIGRpYWxvZyB0byBhbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgYSBmaWxlIGluIHRoZQotICogd29ya3NwYWNlLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGRXb3Jrc3BhY2VGaWxlQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uIHsKLQlwcml2YXRlIGZpbmFsIElTZWxlY3Rpb25TdGF0dXNWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IElTZWxlY3Rpb25TdGF0dXNWYWxpZGF0b3IoKSB7Ci0JCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlKE9iamVjdFtdIHNlbGVjdGlvbikgewotCQkJaWYgKHNlbGVjdGlvbi5sZW5ndGggPT0gMCkgewotCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLAotCQkJCQkJIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykgewotCQkJCWlmICghKHNlbGVjdGlvbltpXSBpbnN0YW5jZW9mIElGaWxlKSkgewotCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJCVhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLCAiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwKLQkJCQkJIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9OwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqICAgICAgICAgICAgdGhlIHZpZXdlcgotCSAqLwotCXB1YmxpYyBBZGRXb3Jrc3BhY2VGaWxlQWN0aW9uKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLkFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fVGV4dCwgdmlld2VyKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0KLQkJLy8gVmlld2VyRmlsdGVyIGZpbHRlcj0gbmV3IFN0eWxlc2hlZXRGaWx0ZXIoZ2V0U2VsZWN0ZWRKYXJzKCkpOwotCi0JCUlMYWJlbFByb3ZpZGVyIGxwID0gbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKTsKLQkJSVRyZWVDb250ZW50UHJvdmlkZXIgY3AgPSBuZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCk7Ci0KLQkJRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IEVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nKAotCQkJCWdldFNoZWxsKCksIGxwLCBjcCk7Ci0JCWRpYWxvZy5zZXRWYWxpZGF0b3IodmFsaWRhdG9yKTsKLQkJZGlhbG9nLnNldFRpdGxlKE1lc3NhZ2VzLkFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fRGlhbG9nVGl0bGUpOwotCQlkaWFsb2cuc2V0TWVzc2FnZShNZXNzYWdlcy5BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX0RpYWxvZ01lc3NhZ2UpOwotCQlkaWFsb2cuYWRkRmlsdGVyKG5ldyBWaWV3ZXJGaWx0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBib29sZWFuIHNlbGVjdChWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50RWxlbWVudCwKLQkJCQkJT2JqZWN0IGVsZW1lbnQpIHsKLQkJCQlpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSkKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2UpIGVsZW1lbnQ7Ci0JCQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgewotCQkJCQlpZiAoIVhTTENvcmUuaXNYU0xGaWxlKChJRmlsZSkgcmVzb3VyY2UpKQotCQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfSk7Ci0JCWRpYWxvZy5zZXRJbnB1dChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpKTsKLQkJZGlhbG9nLnNldENvbXBhcmF0b3IobmV3IFJlc291cmNlQ29tcGFyYXRvcihSZXNvdXJjZUNvbXBhcmF0b3IuTkFNRSkpOwotCi0JCWlmIChkaWFsb2cub3BlbigpID09IFdpbmRvdy5PSykgewotCQkJT2JqZWN0W10gZWxlbWVudHMgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0JCQlMYXVuY2hUcmFuc2Zvcm1bXSByZXMgPSBuZXcgTGF1bmNoVHJhbnNmb3JtW2VsZW1lbnRzLmxlbmd0aF07Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykgewotCQkJCUlSZXNvdXJjZSBlbGVtID0gKElSZXNvdXJjZSkgZWxlbWVudHNbaV07Ci0JCQkJcmVzW2ldID0gbmV3IExhdW5jaFRyYW5zZm9ybShlbGVtLmdldEZ1bGxQYXRoKCkKLQkJCQkJCS50b1BvcnRhYmxlU3RyaW5nKCksIExhdW5jaFRyYW5zZm9ybS5SRVNPVVJDRV9UWVBFKTsKLQkJCX0KLQkJCWFkZFRyYW5zZm9ybXMocmVzKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBpbnQgZ2V0QWN0aW9uVHlwZSgpIHsKLQkJcmV0dXJuIEFERDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Db250cm9sQWNjZXNzaWJsZUxpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Db250cm9sQWNjZXNzaWJsZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzZTZmY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQ29udHJvbEFjY2Vzc2libGVMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci0KLS8qKgotICogVXNlZCB0byBoZWxwIHdpdGggYWNjZXNzaWJpbGl0eS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgQ29udHJvbEFjY2Vzc2libGVMaXN0ZW5lciBleHRlbmRzIEFjY2Vzc2libGVBZGFwdGVyIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBjb250cm9sTmFtZTsKLQotCXByaXZhdGUgQ29udHJvbEFjY2Vzc2libGVMaXN0ZW5lcihTdHJpbmcgbmFtZSkgewotCQljb250cm9sTmFtZSA9IG5hbWU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZ2V0TmFtZShBY2Nlc3NpYmxlRXZlbnQgZSkgewotCQllLnJlc3VsdCA9IGNvbnRyb2xOYW1lOwotCX0KLQotCS8qKgotCSAqIEhlbHBlciBmb3IgYWRkaW5nIGFuIGluc3RhbmNlIG9mIHRoaXMgdG8gdGhlIGdpdmVuIGNvbnRyb2wuCi0JICogCi0JICogQHBhcmFtIGNvbXAKLQkgKiAgICAgICAgICAgIHRoZSBjb250cm9sIHRvIGFkZCB0aGlzIHRvCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHRoZSBuYW1lIGZvciB0aGlzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZExpc3RlbmVyKENvbnRyb2wgY29tcCwgU3RyaW5nIG5hbWUpIHsKLQkJLy8gc3RyaXAgbW5lbW9uaWMKLQkJU3RyaW5nW10gc3RycyA9IG5hbWUuc3BsaXQoIiYiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmdCdWZmZXIgc3RyaXBwZWQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWZvciAoU3RyaW5nIGVsZW1lbnQgOiBzdHJzKSB7Ci0JCQlzdHJpcHBlZC5hcHBlbmQoZWxlbWVudCk7Ci0JCX0KLQkJY29tcC5nZXRBY2Nlc3NpYmxlKCkuYWRkQWNjZXNzaWJsZUxpc3RlbmVyKAotCQkJCW5ldyBDb250cm9sQWNjZXNzaWJsZUxpc3RlbmVyKHN0cmlwcGVkLnRvU3RyaW5nKCkpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Nb3ZlRG93bkFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvTW92ZURvd25BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZhMGMxMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Nb3ZlRG93bkFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi0vKioKLSAqIFRoZSBhY3Rpb24gZm9yIG1vdmluZyBhIHN0eWxlc2hlZXQgZnVydGhlciBkb3duIGluIHRoZSB0cmFuc2Zvcm1hdGlvbgotICogcGlwZWxpbmUuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIE1vdmVEb3duQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uIHsKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICovCi0JcHVibGljIE1vdmVEb3duQWN0aW9uKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLk1vdmVEb3duQWN0aW9uX1RleHQsIHZpZXdlcik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlMaXN0PD8+IHRhcmdldHMgPSBnZXRPcmRlcmVkU2VsZWN0aW9uKCk7Ci0JCWlmICh0YXJnZXRzLmlzRW1wdHkoKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCUxpc3Q8TGF1bmNoVHJhbnNmb3JtPiBsaXN0ID0gZ2V0RW50cmllc0FzTGlzdCgpOwotCQlpbnQgYm90dG9tID0gbGlzdC5zaXplKCkgLSAxOwotCQlpbnQgaW5kZXggPSAwOwotCQlmb3IgKGludCBpID0gdGFyZ2V0cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotCQkJT2JqZWN0IHRhcmdldCA9IHRhcmdldHMuZ2V0KGkpOwotCQkJaW5kZXggPSBsaXN0LmluZGV4T2YodGFyZ2V0KTsKLQkJCWlmIChpbmRleCA8IGJvdHRvbSkgewotCQkJCWJvdHRvbSA9IGluZGV4ICsgMTsKLQkJCQlPYmplY3QgdGVtcCA9IGxpc3QuZ2V0KGJvdHRvbSk7Ci0JCQkJbGlzdC5zZXQoYm90dG9tLCAoTGF1bmNoVHJhbnNmb3JtKSB0YXJnZXQpOwotCQkJCWxpc3Quc2V0KGluZGV4LCAoTGF1bmNoVHJhbnNmb3JtKSB0ZW1wKTsKLQkJCX0KLQkJCWJvdHRvbSA9IGluZGV4OwotCQl9Ci0JCXNldEVudHJpZXMobGlzdCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlpZiAoc2VsZWN0aW9uLmlzRW1wdHkoKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiBnZXRWaWV3ZXIoKS51cGRhdGVTZWxlY3Rpb24oZ2V0QWN0aW9uVHlwZSgpLCBzZWxlY3Rpb24pCi0JCQkJJiYgIWlzSW5kZXhTZWxlY3RlZChzZWxlY3Rpb24sIGdldEVudHJpZXNBc0xpc3QoKS5zaXplKCkgLSAxKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgaW50IGdldEFjdGlvblR5cGUoKSB7Ci0JCXJldHVybiBNT1ZFOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL01vdmVVcEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvTW92ZVVwQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MTNkYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvTW92ZVVwQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NTc3MiAtIE5MUyBNZXNzYWdlIHJlZmFjdG9yaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotLyoqCi0gKiBUaGUgYWN0aW9uIGZvciBtb3ZpbmcgYSBzdHlsZXNoZWV0IGZ1cnRoZXIgdXAgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5lLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBNb3ZlVXBBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24gewotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKi8KLQlwdWJsaWMgTW92ZVVwQWN0aW9uKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLk1vdmVVcEFjdGlvbl9UZXh0LCB2aWV3ZXIpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJTGlzdDw/PiB0YXJnZXRzID0gZ2V0T3JkZXJlZFNlbGVjdGlvbigpOwotCQlpZiAodGFyZ2V0cy5pc0VtcHR5KCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQlpbnQgdG9wID0gMDsKLQkJaW50IGluZGV4ID0gMDsKLQkJTGlzdDxMYXVuY2hUcmFuc2Zvcm0+IGxpc3QgPSBnZXRFbnRyaWVzQXNMaXN0KCk7Ci0JCUl0ZXJhdG9yPD8+IGVudHJpZXMgPSB0YXJnZXRzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChlbnRyaWVzLmhhc05leHQoKSkgewotCQkJT2JqZWN0IHRhcmdldCA9IGVudHJpZXMubmV4dCgpOwotCQkJaW5kZXggPSBsaXN0LmluZGV4T2YodGFyZ2V0KTsKLQkJCWlmIChpbmRleCA+IHRvcCkgewotCQkJCXRvcCA9IGluZGV4IC0gMTsKLQkJCQlPYmplY3QgdGVtcCA9IGxpc3QuZ2V0KHRvcCk7Ci0JCQkJbGlzdC5zZXQodG9wLCAoTGF1bmNoVHJhbnNmb3JtKSB0YXJnZXQpOwotCQkJCWxpc3Quc2V0KGluZGV4LCAoTGF1bmNoVHJhbnNmb3JtKSB0ZW1wKTsKLQkJCX0KLQkJCXRvcCA9IGluZGV4OwotCQl9Ci0JCXNldEVudHJpZXMobGlzdCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlpZiAoc2VsZWN0aW9uLmlzRW1wdHkoKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiBnZXRWaWV3ZXIoKS51cGRhdGVTZWxlY3Rpb24oZ2V0QWN0aW9uVHlwZSgpLCBzZWxlY3Rpb24pCi0JCQkJJiYgIWlzSW5kZXhTZWxlY3RlZChzZWxlY3Rpb24sIDApOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBpbnQgZ2V0QWN0aW9uVHlwZSgpIHsKLQkJcmV0dXJuIE1PVkU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvTXVsdGlwbGVJbnB1dERpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvTXVsdGlwbGVJbnB1dERpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWQ0NzA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL011bHRpcGxlSW5wdXREaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NTc3MiAtIE5MUyBNZXNzYWdlIHJlZmFjdG9yCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLlN0cmluZ1ZhcmlhYmxlU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2Nyb2xsYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotCi0vKioKLSAqIEEgZGlhbG9nIHdpdGggaGFuZHkgbWV0aG9kcyBmb3IgYWRkaW5nIHNpbXBsZSBjb250cm9scyB0byBpdHNlbGYuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIE11bHRpcGxlSW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEZJRUxEX05BTUUgPSAiRklFTERfTkFNRSI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBURVhUID0gMTAwOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEJST1dTRSA9IDEwMTsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBWQVJJQUJMRSA9IDEwMjsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBDT01CTyA9IDEwMzsKLQotCXByb3RlY3RlZCBDb21wb3NpdGUgcGFuZWw7Ci0KLQlwcm90ZWN0ZWQgTGlzdDxGaWVsZFN1bW1hcnk+IGZpZWxkTGlzdCA9IG5ldyBBcnJheUxpc3Q8RmllbGRTdW1tYXJ5PigpOwotCXByb3RlY3RlZCBMaXN0PFNjcm9sbGFibGU+IGNvbnRyb2xMaXN0ID0gbmV3IEFycmF5TGlzdDxTY3JvbGxhYmxlPigpOwotCXByb3RlY3RlZCBMaXN0PFZhbGlkYXRvcj4gdmFsaWRhdG9ycyA9IG5ldyBBcnJheUxpc3Q8VmFsaWRhdG9yPigpOwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByb3RlY3RlZCBNYXA8T2JqZWN0LCBDb21wYXJhYmxlPiB2YWx1ZU1hcCA9IG5ldyBIYXNoTWFwPE9iamVjdCwgQ29tcGFyYWJsZT4oKTsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIHRpdGxlOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHNoZWxsCi0JICogICAgICAgICAgICB0aGUgc2hlbGwgdG8gb3BlbiB0aGUgZGlhbG9nIG9uCi0JICogQHBhcmFtIHRpdGxlCi0JICogICAgICAgICAgICB0aGUgdGl0bGUgZm9yIHRoZSBkaWFsb2cKLQkgKi8KLQlwdWJsaWMgTXVsdGlwbGVJbnB1dERpYWxvZyhmaW5hbCBTaGVsbCBzaGVsbCwgZmluYWwgU3RyaW5nIHRpdGxlKSB7Ci0JCXN1cGVyKHNoZWxsKTsKLQkJdGhpcy50aXRsZSA9IHRpdGxlOwotCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIHNoZWxsKSB7Ci0JCXN1cGVyLmNvbmZpZ3VyZVNoZWxsKHNoZWxsKTsKLQkJaWYgKHRpdGxlICE9IG51bGwpIHsKLQkJCXNoZWxsLnNldFRleHQodGl0bGUpOwotCQl9Ci0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb250cm9sIGJhciA9IHN1cGVyLmNyZWF0ZUJ1dHRvbkJhcihwYXJlbnQpOwotCQl2YWxpZGF0ZUZpZWxkcygpOwotCQlyZXR1cm4gYmFyOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgY29udGFpbmVyID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkvLyAoKEdyaWREYXRhKSBwYXJlbnQuZ2V0TGF5b3V0RGF0YSgpKS5oZWlnaHRIaW50ID0gNDAwOwotCQkvLyAoKEdyaWREYXRhKSBwYXJlbnQuZ2V0TGF5b3V0RGF0YSgpKS53aWR0aEhpbnQgPSA0MDA7Ci0KLQkJY29udGFpbmVyLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCBmYWxzZSkpOwotCi0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCS8vIGdkLmhlaWdodEhpbnQgPSAyMDA7Ci0JCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlwYW5lbCA9IG5ldyBDb21wb3NpdGUoY29udGFpbmVyLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpOwotCQlwYW5lbC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLQkJZm9yIChJdGVyYXRvcjxGaWVsZFN1bW1hcnk+IGkgPSBmaWVsZExpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlGaWVsZFN1bW1hcnkgZmllbGQgPSBpLm5leHQoKTsKLQkJCXN3aXRjaCAoZmllbGQudHlwZSkgewotCQkJY2FzZSBURVhUOgotCQkJCWNyZWF0ZVRleHRGaWVsZChmaWVsZC5uYW1lLCBmaWVsZC5pbml0aWFsVmFsdWUsCi0JCQkJCQlmaWVsZC5hbGxvd3NFbXB0eSk7Ci0JCQkJYnJlYWs7Ci0JCQkvLyBjYXNlIEJST1dTRToKLQkJCS8vIGNyZWF0ZUJyb3dzZUZpZWxkKGZpZWxkLm5hbWUsIGZpZWxkLmluaXRpYWxWYWx1ZSwKLQkJCS8vIGZpZWxkLmFsbG93c0VtcHR5KTsKLQkJCS8vIGJyZWFrOwotCQkJY2FzZSBWQVJJQUJMRToKLQkJCQljcmVhdGVWYXJpYWJsZXNGaWVsZChmaWVsZC5uYW1lLCBmaWVsZC5pbml0aWFsVmFsdWUsCi0JCQkJCQlmaWVsZC5hbGxvd3NFbXB0eSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENPTUJPOgotCQkJCWNyZWF0ZUNvbWJvRmllbGQoZmllbGQubmFtZSwgZmllbGQuaW5pdGlhbEluZGV4LCBmaWVsZC5pdGVtcyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlmaWVsZExpc3QgPSBudWxsOyAvLyBhbGxvdyBpdCB0byBiZSBnYydkCi0JCURpYWxvZy5hcHBseURpYWxvZ0ZvbnQoY29udGFpbmVyKTsKLQotCQlyZXR1cm4gY29udGFpbmVyOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGxhYmVsLCB0ZXh0IGJveCBhbmQgYnV0dG9uIGZvciBicm93c2luZyB0aGUgZm9yIGEgZmlsZS4KLQkgKiAKLQkgKiBAcGFyYW0gbGFiZWxUZXh0Ci0JICogICAgICAgICAgICB0aGUgbGFiZWwKLQkgKiBAcGFyYW0gaW5pdGlhbFZhbHVlCi0JICogICAgICAgICAgICB0aGUgaW5pdGlhbCB2YWx1ZQotCSAqIEBwYXJhbSBhbGxvd3NFbXB0eQotCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgdGV4dCBib3ggY2FuIGJlIGVtcHR5Ci0JICovCi0JcHVibGljIHZvaWQgYWRkQnJvd3NlRmllbGQoU3RyaW5nIGxhYmVsVGV4dCwgU3RyaW5nIGluaXRpYWxWYWx1ZSwKLQkJCWJvb2xlYW4gYWxsb3dzRW1wdHkpIHsKLQkJZmllbGRMaXN0LmFkZChuZXcgRmllbGRTdW1tYXJ5KEJST1dTRSwgbGFiZWxUZXh0LCBpbml0aWFsVmFsdWUsCi0JCQkJYWxsb3dzRW1wdHkpKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYSBsYWJlbCBhbmQgYSB0ZXh0IGJveC4KLQkgKiAKLQkgKiBAcGFyYW0gbGFiZWxUZXh0Ci0JICogICAgICAgICAgICB0aGUgbGFiZWwKLQkgKiBAcGFyYW0gaW5pdGlhbFZhbHVlCi0JICogICAgICAgICAgICB0aGUgaW5pdGlhbCB2YWx1ZQotCSAqIEBwYXJhbSBhbGxvd3NFbXB0eQotCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgdGV4dCBib3ggY2FuIGJlIGVtcHR5Ci0JICovCi0JcHVibGljIHZvaWQgYWRkVGV4dEZpZWxkKFN0cmluZyBsYWJlbFRleHQsIFN0cmluZyBpbml0aWFsVmFsdWUsCi0JCQlib29sZWFuIGFsbG93c0VtcHR5KSB7Ci0JCWZpZWxkTGlzdC5hZGQobmV3IEZpZWxkU3VtbWFyeShURVhULCBsYWJlbFRleHQsIGluaXRpYWxWYWx1ZSwKLQkJCQlhbGxvd3NFbXB0eSkpOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGxhYmVsLCBhIHRleHQgYm94IGFuZCBhIGJ1dHRvbiBmb3Igc2VsZWN0aW5nIHZhcmlhYmxlcy4KLQkgKiAKLQkgKiBAcGFyYW0gbGFiZWxUZXh0Ci0JICogICAgICAgICAgICB0aGUgbGFiZWwKLQkgKiBAcGFyYW0gaW5pdGlhbFZhbHVlCi0JICogICAgICAgICAgICB0aGUgaW5pdGlhbCB2YWx1ZQotCSAqIEBwYXJhbSBhbGxvd3NFbXB0eQotCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgdGV4dCBib3ggY2FuIGJlIGVtcHR5Ci0JICovCi0JcHVibGljIHZvaWQgYWRkVmFyaWFibGVzRmllbGQoU3RyaW5nIGxhYmVsVGV4dCwgU3RyaW5nIGluaXRpYWxWYWx1ZSwKLQkJCWJvb2xlYW4gYWxsb3dzRW1wdHkpIHsKLQkJZmllbGRMaXN0LmFkZChuZXcgRmllbGRTdW1tYXJ5KFZBUklBQkxFLCBsYWJlbFRleHQsIGluaXRpYWxWYWx1ZSwKLQkJCQlhbGxvd3NFbXB0eSkpOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGxhYmVsIGFuZCBhIGNvbWJvLgotCSAqIAotCSAqIEBwYXJhbSBsYWJlbFRleHQKLQkgKiAgICAgICAgICAgIHRoZSBsYWJlbAotCSAqIEBwYXJhbSBpbml0aWFsSW5kZXgKLQkgKiAgICAgICAgICAgIHRoZSBpbml0aWFsIHNlbGVjdGlvbiBpbmRleAotCSAqIEBwYXJhbSBpdGVtcwotCSAqICAgICAgICAgICAgdGhlIGFycmF5IG9mIGl0ZW1zIGZvciB0aGUgY29tYm8KLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRDb21ib0ZpZWxkKFN0cmluZyBsYWJlbFRleHQsIGludCBpbml0aWFsSW5kZXgsIFN0cmluZ1tdIGl0ZW1zKSB7Ci0JCWZpZWxkTGlzdC5hZGQobmV3IEZpZWxkU3VtbWFyeShDT01CTywgbGFiZWxUZXh0LCBpdGVtcywgaW5pdGlhbEluZGV4KSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlVGV4dEZpZWxkKFN0cmluZyBsYWJlbFRleHQsIFN0cmluZyBpbml0aWFsVmFsdWUsCi0JCQlib29sZWFuIGFsbG93RW1wdHkpIHsKLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFuZWwsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChsYWJlbFRleHQpOwotCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORykpOwotCi0JCWZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHBhbmVsLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0JCXRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0JCXRleHQuc2V0RGF0YShGSUVMRF9OQU1FLCBsYWJlbFRleHQpOwotCi0JCS8vIG1ha2Ugc3VyZSByb3dzIGFyZSB0aGUgc2FtZSBoZWlnaHQgb24gYm90aCBwYW5lbHMuCi0JCWxhYmVsLnNldFNpemUobGFiZWwuZ2V0U2l6ZSgpLngsIHRleHQuZ2V0U2l6ZSgpLnkpOwotCi0JCWlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkgewotCQkJdGV4dC5zZXRUZXh0KGluaXRpYWxWYWx1ZSk7Ci0JCX0KLQotCQlpZiAoIWFsbG93RW1wdHkpIHsKLQkJCXZhbGlkYXRvcnMuYWRkKG5ldyBWYWxpZGF0b3IoKSB7Ci0JCQkJQE92ZXJyaWRlCi0JCQkJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7Ci0JCQkJCXJldHVybiAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCX0KLQkJCX0pOwotCQkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkJCXZhbGlkYXRlRmllbGRzKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQotCQljb250cm9sTGlzdC5hZGQodGV4dCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlVmFyaWFibGVzRmllbGQoU3RyaW5nIGxhYmVsVGV4dCwgU3RyaW5nIGluaXRpYWxWYWx1ZSwKLQkJCWJvb2xlYW4gYWxsb3dFbXB0eSkgewotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYW5lbCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KGxhYmVsVGV4dCk7Ci0JCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0KLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhbmVsLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWNvbXAuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLQkJZmluYWwgVGV4dCB0ZXh0ID0gbmV3IFRleHQoY29tcCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWRhdGEud2lkdGhIaW50ID0gMjAwOwotCQl0ZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0JCXRleHQuc2V0RGF0YShGSUVMRF9OQU1FLCBsYWJlbFRleHQpOwotCi0JCS8vIG1ha2Ugc3VyZSByb3dzIGFyZSB0aGUgc2FtZSBoZWlnaHQgb24gYm90aCBwYW5lbHMuCi0JCWxhYmVsLnNldFNpemUobGFiZWwuZ2V0U2l6ZSgpLngsIHRleHQuZ2V0U2l6ZSgpLnkpOwotCi0JCWlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkgewotCQkJdGV4dC5zZXRUZXh0KGluaXRpYWxWYWx1ZSk7Ci0JCX0KLQotCQlpZiAoIWFsbG93RW1wdHkpIHsKLQkJCXZhbGlkYXRvcnMuYWRkKG5ldyBWYWxpZGF0b3IoKSB7Ci0JCQkJQE92ZXJyaWRlCi0JCQkJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7Ci0JCQkJCXJldHVybiAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCX0KLQkJCX0pOwotCi0JCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCQkJdmFsaWRhdGVGaWVsZHMoKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCi0JCUJ1dHRvbiBidXR0b24gPSBjcmVhdGVCdXR0b24oY29tcCwgSURpYWxvZ0NvbnN0YW50cy5JR05PUkVfSUQsCi0JCQkJTWVzc2FnZXMuVmFyaWFibGVzRmllbGRCdXR0b25fVGV4dCwgZmFsc2UpOwotCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlTdHJpbmdWYXJpYWJsZVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgU3RyaW5nVmFyaWFibGVTZWxlY3Rpb25EaWFsb2coCi0JCQkJCQlnZXRTaGVsbCgpKTsKLQkJCQlpbnQgY29kZSA9IGRpYWxvZy5vcGVuKCk7Ci0JCQkJaWYgKGNvZGUgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkgewotCQkJCQlTdHJpbmcgdmFyaWFibGUgPSBkaWFsb2cuZ2V0VmFyaWFibGVFeHByZXNzaW9uKCk7Ci0JCQkJCWlmICh2YXJpYWJsZSAhPSBudWxsKSB7Ci0JCQkJCQl0ZXh0Lmluc2VydCh2YXJpYWJsZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCWNvbnRyb2xMaXN0LmFkZCh0ZXh0KTsKLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbWJvRmllbGQoU3RyaW5nIGxhYmVsVGV4dCwgaW50IGluaXRpYWxWYWx1ZSwKLQkJCVN0cmluZ1tdIGl0ZW1zKSB7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhbmVsLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQobGFiZWxUZXh0KTsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFuZWwsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJY29tcC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQlmaW5hbCBDb21ibyBjb21ibyA9IG5ldyBDb21ibyhjb21wLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUgotCQkJCXwgU1dULlJFQURfT05MWSk7Ci0JCS8vIEdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJLy8gZGF0YS53aWR0aEhpbnQgPSAyMDA7Ci0JCS8vIGNvbWJvLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJY29tYm8uc2V0RGF0YShGSUVMRF9OQU1FLCBsYWJlbFRleHQpOwotCi0JCS8vIG1ha2Ugc3VyZSByb3dzIGFyZSB0aGUgc2FtZSBoZWlnaHQgb24gYm90aCBwYW5lbHMuCi0JCWxhYmVsLnNldFNpemUobGFiZWwuZ2V0U2l6ZSgpLngsIGNvbWJvLmdldFNpemUoKS55KTsKLQotCQljb21iby5zZXRJdGVtcyhpdGVtcyk7Ci0JCWNvbWJvLnNlbGVjdChpbml0aWFsVmFsdWUpOwotCi0JCWNvbnRyb2xMaXN0LmFkZChjb21ibyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQlmb3IgKEl0ZXJhdG9yPFNjcm9sbGFibGU+IGkgPSBjb250cm9sTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUNvbnRyb2wgY29udHJvbCA9IGkubmV4dCgpOwotCQkJaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0KSB7Ci0JCQkJdmFsdWVNYXAucHV0KGNvbnRyb2wuZ2V0RGF0YShGSUVMRF9OQU1FKSwgKChUZXh0KSBjb250cm9sKQotCQkJCQkJLmdldFRleHQoKSk7Ci0JCQl9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb21ibykgewotCQkJCUNvbWJvIGNvbWJvID0gKENvbWJvKSBjb250cm9sOwotCQkJCXZhbHVlTWFwLnB1dChjb250cm9sLmdldERhdGEoRklFTERfTkFNRSksIEludGVnZXIudmFsdWVPZihjb21ibwotCQkJCQkJLmdldFNlbGVjdGlvbkluZGV4KCkpKTsKLQkJCX0KLQkJfQotCQljb250cm9sTGlzdCA9IG51bGw7Ci0JCXN1cGVyLm9rUHJlc3NlZCgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBpbnQgb3BlbigpIHsKLQkJYXBwbHlEaWFsb2dGb250KHBhbmVsKTsKLQkJcmV0dXJuIHN1cGVyLm9wZW4oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgT2JqZWN0IGdldFZhbHVlKFN0cmluZyBrZXkpIHsKLQkJcmV0dXJuIHZhbHVlTWFwLmdldChrZXkpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoU3RyaW5nIGtleSkgewotCQlyZXR1cm4gKFN0cmluZykgZ2V0VmFsdWUoa2V5KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgaW50IGdldEludFZhbHVlKFN0cmluZyBrZXkpIHsKLQkJcmV0dXJuICgoSW50ZWdlcikgZ2V0VmFsdWUoa2V5KSkuaW50VmFsdWUoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZUZpZWxkcygpIHsKLQkJZm9yIChJdGVyYXRvcjxWYWxpZGF0b3I+IGkgPSB2YWxpZGF0b3JzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJVmFsaWRhdG9yIHZhbGlkYXRvciA9IGkubmV4dCgpOwotCQkJaWYgKCF2YWxpZGF0b3IudmFsaWRhdGUoKSkgewotCQkJCWdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJZ2V0QnV0dG9uKElEaWFsb2dDb25zdGFudHMuT0tfSUQpLnNldEVuYWJsZWQodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGlhbG9nU2V0dGluZ3NTZWN0aW9uTmFtZSgpIHsKLQkJcmV0dXJuIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lEICsgIi5NVUxUSVBMRV9JTlBVVF9ESUFMT0ciOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElEaWFsb2dTZXR0aW5ncyBnZXREaWFsb2dCb3VuZHNTZXR0aW5ncygpIHsKLQkJSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzID0gWFNMRGVidWdVSVBsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkuZ2V0RGlhbG9nU2V0dGluZ3MoKTsKLQkJSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24gPSBzZXR0aW5ncwotCQkJCS5nZXRTZWN0aW9uKGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKSk7Ci0JCWlmIChzZWN0aW9uID09IG51bGwpIHsKLQkJCXNlY3Rpb24gPSBzZXR0aW5ncy5hZGROZXdTZWN0aW9uKGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIHNlY3Rpb247Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBGaWVsZFN1bW1hcnkgewotCQlpbnQgaW5pdGlhbEluZGV4OwotCQlpbnQgdHlwZTsKLQkJU3RyaW5nIG5hbWU7Ci0JCVN0cmluZyBpbml0aWFsVmFsdWU7Ci0JCWJvb2xlYW4gYWxsb3dzRW1wdHk7Ci0JCVN0cmluZ1tdIGl0ZW1zOwotCi0JCXB1YmxpYyBGaWVsZFN1bW1hcnkoaW50IHR5cGUsIFN0cmluZyBuYW1lLCBTdHJpbmcgaW5pdGlhbFZhbHVlLAotCQkJCWJvb2xlYW4gYWxsb3dzRW1wdHkpIHsKLQkJCXRoaXMudHlwZSA9IHR5cGU7Ci0JCQl0aGlzLm5hbWUgPSBuYW1lOwotCQkJdGhpcy5pbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWU7Ci0JCQl0aGlzLmFsbG93c0VtcHR5ID0gYWxsb3dzRW1wdHk7Ci0JCX0KLQotCQlwdWJsaWMgRmllbGRTdW1tYXJ5KGludCB0eXBlLCBTdHJpbmcgbmFtZSwgU3RyaW5nW10gaXRlbXMsCi0JCQkJaW50IGluaXRpYWxJbmRleCkgewotCQkJdGhpcy50eXBlID0gdHlwZTsKLQkJCXRoaXMubmFtZSA9IG5hbWU7Ci0JCQl0aGlzLml0ZW1zID0gaXRlbXM7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgVmFsaWRhdG9yIHsKLQkJYm9vbGVhbiB2YWxpZGF0ZSgpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9PcGVuRGlhbG9nQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9PcGVuRGlhbG9nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YmFmNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvT3BlbkRpYWxvZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRWaWV3ZXI7Ci0KLS8qKgotICogQW4gYWN0aW9uIHRoYXQgb3BlbnMgYSBkaWFsb2cuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIE9wZW5EaWFsb2dBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24gewotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBU1RfUEFUSF9TRVRUSU5HID0gIkxBU1RfUEFUSF9TRVRUSU5HIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgU3RyaW5nIGZQcmVmaXggPSBudWxsOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMKLQkgKiAKLQkgKiBAcGFyYW0gbGFiZWwKLQkgKiAgICAgICAgICAgIHRoZSBkaWFsb2cgdGl0bGUKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICBhIHZpZXdlciB0aGF0IHRoaXMgZGlhbG9nIGlzIGFzc29jaWF0ZWQgd2l0aAotCSAqIEBwYXJhbSBkaWFsb2dTZXR0aW5nc1ByZWZpeAotCSAqICAgICAgICAgICAgdGhlIHByZWZpeCB0byB1c2UgZm9yIHNhdmluZyBkaWFsb2cgcHJlZmVyZW5jZXMKLQkgKi8KLQlwdWJsaWMgT3BlbkRpYWxvZ0FjdGlvbihTdHJpbmcgbGFiZWwsIFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyLAotCQkJU3RyaW5nIGRpYWxvZ1NldHRpbmdzUHJlZml4KSB7Ci0JCXN1cGVyKGxhYmVsLCB2aWV3ZXIpOwotCQlmUHJlZml4ID0gZGlhbG9nU2V0dGluZ3NQcmVmaXg7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREaWFsb2dTZXR0aW5nc1ByZWZpeCgpIHsKLQkJcmV0dXJuIGZQcmVmaXg7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREaWFsb2dTZXR0aW5nKFN0cmluZyBzZXR0aW5nTmFtZSkgewotCQlyZXR1cm4gZ2V0RGlhbG9nU2V0dGluZ3MoKS5nZXQoCi0JCQkJZ2V0RGlhbG9nU2V0dGluZ3NQcmVmaXgoKSArICIuIiArIHNldHRpbmdOYW1lKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldERpYWxvZ1NldHRpbmcoU3RyaW5nIHNldHRpbmdOYW1lLCBTdHJpbmcgdmFsdWUpIHsKLQkJZ2V0RGlhbG9nU2V0dGluZ3MoKS5wdXQoCi0JCQkJZ2V0RGlhbG9nU2V0dGluZ3NQcmVmaXgoKSArICIuIiArIHNldHRpbmdOYW1lLCB2YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkgewotCQlJRGlhbG9nU2V0dGluZ3Mgc2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKQotCQkJCS5nZXREaWFsb2dTZXR0aW5ncygpOwotCQlyZXR1cm4gc2V0dGluZ3M7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGludCBnZXRBY3Rpb25UeXBlKCkgewotCQlyZXR1cm4gQUREOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL1JlbW92ZUFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvUmVtb3ZlQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMGQwNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvUmVtb3ZlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NTc3MiAtIE5MUyBNZXNzYWdlIHJlZmFjdG9yaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotLyoqCi0gKiBBbiBhY3Rpb24gdGhhdCByZW1vdmVzIGEgc2VsZWN0aW9uIGZyb20gYSB2aWV3ZXIuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFJlbW92ZUFjdGlvbiBleHRlbmRzIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbiB7Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqICAgICAgICAgICAgdGhlIHZpZXdlciB0aGF0IHdpbGwgaGF2ZSBpdHMgc2VsZWN0aW9uIHJlbW92ZWQKLQkgKi8KLQlwdWJsaWMgUmVtb3ZlQWN0aW9uKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLlJlbW92ZUFjdGlvbl9UZXh0LCB2aWV3ZXIpOwotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRWaWV3ZXIoKQotCQkJCS5nZXRWaWV3ZXIoKS5nZXRTZWxlY3Rpb24oKTsKLQkJZ2V0Vmlld2VyKCkucmVtb3ZlRW50cmllcygKLQkJCQkoTGF1bmNoVHJhbnNmb3JtW10pIHNlbGVjdGlvbi50b0xpc3QoKS50b0FycmF5KAotCQkJCQkJbmV3IExhdW5jaFRyYW5zZm9ybVswXSkpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVNlbGVjdGlvbihJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJaWYgKHNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gZ2V0Vmlld2VyKCkudXBkYXRlU2VsZWN0aW9uKGdldEFjdGlvblR5cGUoKSwgc2VsZWN0aW9uKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgaW50IGdldEFjdGlvblR5cGUoKSB7Ci0JCXJldHVybiBNT1ZFOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL1JlbW92ZVBhcmFtZXRlckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvUmVtb3ZlUGFyYW1ldGVyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1OTUxNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvUmVtb3ZlUGFyYW1ldGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NTc3MiAtIE5MUyBNZXNzYWdlIHJlZmFjdG9yaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlBhcmFtZXRlclZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoQXR0cmlidXRlOwotCi0vKioKLSAqIEFuIGFjdGlvbiB0aGF0IHJlbW92ZXMgYSBzZWxlY3Rpb24gZnJvbSBhIHZpZXdlci4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgUmVtb3ZlUGFyYW1ldGVyQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24gewotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiAgICAgICAgICAgIHRoZSB2aWV3ZXIgdGhhdCB3aWxsIGhhdmUgaXRzIHNlbGVjdGlvbiByZW1vdmVkCi0JICovCi0JcHVibGljIFJlbW92ZVBhcmFtZXRlckFjdGlvbihQYXJhbWV0ZXJWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLlJlbW92ZVBhcmFtZXRlckFjdGlvbiwgdmlld2VyKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9IGdldFN0cnVjdHVyZWRTZWxlY3Rpb24oKTsKLQkJaWYgKHNlbC5zaXplKCkgPiAwKSB7Ci0JCQlMYXVuY2hBdHRyaWJ1dGVbXSBlbnRyaWVzID0gbmV3IExhdW5jaEF0dHJpYnV0ZVtzZWwuc2l6ZSgpXTsKLQkJCWludCBpID0gMDsKLQkJCWZvciAoSXRlcmF0b3I8Pz4gaXRlciA9IHNlbC5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgaSsrKSB7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIGl0ZXIubmV4dCgpOwotCQkJCWVudHJpZXNbaV0gPSBhdHQ7Ci0JCQl9Ci0JCQlnZXRWaWV3ZXIoKS5yZW1vdmVFbnRyaWVzKGVudHJpZXMpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2JyZWFrcG9pbnQvWFNMQnJlYWtwb2ludFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYnJlYWtwb2ludC9YU0xCcmVha3BvaW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk1YTM0YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYnJlYWtwb2ludC9YU0xCcmVha3BvaW50UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NTc3MiAtIE5MUyBNZXNzYWdlIHJlZmFjdG9yaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5icmVha3BvaW50OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4ZWN1dGFibGVFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklCcmVha3BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFJlc291cmNlTWFya2VyQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5JU291cmNlRWRpdGluZ1RleHRUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTExpbmVCcmVha3BvaW50OwotCi0vKioKLSAqIEFuIFNTRSA8Y29kZT5JQnJlYWtwb2ludFByb3ZpZGVyPC9jb2RlPiBmb3IgWFNMIGZpbGVzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xCcmVha3BvaW50UHJvdmlkZXIgaW1wbGVtZW50cyBJQnJlYWtwb2ludFByb3ZpZGVyLAotCQlJRXhlY3V0YWJsZUV4dGVuc2lvbiB7Ci0JcHVibGljIElTdGF0dXMgYWRkQnJlYWtwb2ludChJRG9jdW1lbnQgZG9jdW1lbnQsIElFZGl0b3JJbnB1dCBpbnB1dCwKLQkJCWludCBlZGl0b3JMaW5lTnVtYmVyLCBpbnQgb2Zmc2V0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgdmFsaWQgcG9zaXRpb24gdG8gc2V0IGJyZWFrcG9pbnQKLQkJaW50IHBvcyA9IGdldFZhbGlkUG9zaXRpb24oZG9jdW1lbnQsIGVkaXRvckxpbmVOdW1iZXIpOwotCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCWlmIChwb3MgPj0gMCkgewotCQkJSVJlc291cmNlIHJlcyA9IGdldFJlc291cmNlRnJvbUlucHV0KGlucHV0KTsKLQkJCWlmIChyZXMgIT0gbnVsbCkgewotCQkJCWJvb2xlYW4gYWRkID0gdHJ1ZTsKLQkJCQlpZiAoYWRkKSB7Ci0JCQkJCUlCcmVha3BvaW50IHBvaW50ID0gbmV3IFhTTExpbmVCcmVha3BvaW50KHJlcywKLQkJCQkJCQllZGl0b3JMaW5lTnVtYmVyLCBwb3MsIHBvcyk7Ci0JCQkJCWlmIChwb2ludCA9PSBudWxsKSB7Ci0JCQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQkJCVhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLAotCQkJCQkJCQlNZXNzYWdlcy5YU0xCcmVha3BvaW50UHJvdmlkZXJfMCwgbnVsbCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvLyBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnJlYWtwb2ludE1hbmFnZXIoKS5hZGRCcmVha3BvaW50KHBvaW50KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJcmVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQlTdHJpbmcgaWQgPSBpbnB1dC5nZXROYW1lKCk7Ci0JCQkJaWYgKGlucHV0IGluc3RhbmNlb2YgSVN0b3JhZ2VFZGl0b3JJbnB1dAotCQkJCQkJJiYgKChJU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0U3RvcmFnZSgpICE9IG51bGwKLQkJCQkJCSYmICgoSVN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXQpLmdldFN0b3JhZ2UoKQotCQkJCQkJCQkuZ2V0RnVsbFBhdGgoKSAhPSBudWxsKSB7Ci0JCQkJCWlkID0gKChJU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0U3RvcmFnZSgpCi0JCQkJCQkJLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLQkJCQl9Ci0JCQkJTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0JCQkJYXR0cmlidXRlcwotCQkJCQkJLnB1dCgKLQkJCQkJCQkJU3RydWN0dXJlZFJlc291cmNlTWFya2VyQW5ub3RhdGlvbk1vZGVsLlNFQ09OREFSWV9JRF9LRVksCi0JCQkJCQkJCWlkKTsKLQkJCQlJQnJlYWtwb2ludCBwb2ludCA9IG5ldyBYU0xMaW5lQnJlYWtwb2ludChyZXMsCi0JCQkJCQllZGl0b3JMaW5lTnVtYmVyLCBwb3MsIHBvcyk7Ci0JCQkJaWYgKHBvaW50ID09IG51bGwpIHsKLQkJCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJCVhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLAotCQkJCQkJCU1lc3NhZ2VzLlhTTEJyZWFrcG9pbnRQcm92aWRlcl8wLCBudWxsKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0YXR1cyA9PSBudWxsKSB7Ci0JCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELAotCQkJCQlJU3RhdHVzLk9LLCAiSlNQVUlNZXNzYWdlcy5PSyIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwdWJsaWMgSVJlc291cmNlIGdldFJlc291cmNlKElFZGl0b3JJbnB1dCBpbnB1dCkgewotCQlyZXR1cm4gZ2V0UmVzb3VyY2VGcm9tSW5wdXQoaW5wdXQpOwotCX0KLQotCXByaXZhdGUgSVJlc291cmNlIGdldFJlc291cmNlRnJvbUlucHV0KElFZGl0b3JJbnB1dCBpbnB1dCkgewotCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKSBpbnB1dC5nZXRBZGFwdGVyKElGaWxlLmNsYXNzKTsKLQkJaWYgKHJlc291cmNlID09IG51bGwpIHsKLQkJCXJlc291cmNlID0gKElSZXNvdXJjZSkgaW5wdXQuZ2V0QWRhcHRlcihJUmVzb3VyY2UuY2xhc3MpOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZTsKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRWYWxpZFBvc2l0aW9uKElEb2N1bWVudCBpZG9jLCBpbnQgZWRpdG9yTGluZU51bWJlcikgewotCQlpbnQgcmVzdWx0ID0gLTE7Ci0JCWlmIChpZG9jICE9IG51bGwpIHsKLQkJCWludCBzdGFydE9mZnNldCA9IDA7Ci0JCQlpbnQgZW5kT2Zmc2V0ID0gMDsKLQkJCXRyeSB7Ci0JCQkJSVJlZ2lvbiBsaW5lID0gaWRvYy5nZXRMaW5lSW5mb3JtYXRpb24oZWRpdG9yTGluZU51bWJlciAtIDEpOwotCQkJCXN0YXJ0T2Zmc2V0ID0gbGluZS5nZXRPZmZzZXQoKTsKLQkJCQllbmRPZmZzZXQgPSBNYXRoLm1heChsaW5lLmdldE9mZnNldCgpLCBsaW5lLmdldE9mZnNldCgpCi0JCQkJCQkrIGxpbmUuZ2V0TGVuZ3RoKCkpOwotCi0JCQkJU3RyaW5nIGxpbmVUZXh0ID0gaWRvYwotCQkJCQkJLmdldChzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpLnRyaW0oKTsKLQotCQkJCS8vIGJsYW5rIGxpbmVzIG9yIFBJJ3MgY2Fubm90IGhhdmUgYnJlYWtwb2ludHMKLQkJCQlpZiAobGluZVRleHQudHJpbSgpLmVxdWFscygiIikgfHwgbGluZVRleHQuc3RhcnRzV2l0aCgiPD8iKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJewotCQkJCQlyZXN1bHQgPSAtMTsKLQkJCQl9IGVsc2UgewotCQkJCQkvLyBnZXQgYWxsIHBhcnRpdGlvbnMgZm9yIGN1cnJlbnQgbGluZQotCQkJCQlJVHlwZWRSZWdpb25bXSBwYXJ0aXRpb25zID0gbnVsbDsKLQotCQkJCQlwYXJ0aXRpb25zID0gaWRvYy5jb21wdXRlUGFydGl0aW9uaW5nKHN0YXJ0T2Zmc2V0LAotCQkJCQkJCWVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKLQotCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyArK2kpIHsKLQkJCQkJCS8vIFN0cmluZyB0eXBlID0gcGFydGl0aW9uc1tpXS5nZXRUeXBlKCk7Ci0JCQkJCQlyZXN1bHQgPSBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCXJlc3VsdCA9IC0xOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25EYXRhKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWcsCi0JCQlTdHJpbmcgcHJvcGVydHlOYW1lLCBPYmplY3QgZGF0YSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyBub3QgdXNlZAotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNvdXJjZUVkaXRpbmdUZXh0VG9vbHMoSVNvdXJjZUVkaXRpbmdUZXh0VG9vbHMgdG9vbHMpIHsKLQkJLy8gbm90IHVzZWQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTVlNmM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLVJlc291cmNlU2VsZWN0aW9uQmxvY2tfMD1GaWxlOgotWFNMTGF1bmNoU2hvcnRjdXRfMD1TZWxlY3QgYW4gaW5wdXQgZmlsZSBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uCi1YU0xMYXVuY2hTaG9ydGN1dF8xPUlucHV0IEZpbGUKLVhTTExhdW5jaFNob3J0Y3V0XzI9U2VsZWN0IGEgTGF1bmNoIENvbmZpZ3VyYXRpb24KLVhTTExhdW5jaFNob3J0Y3V0XzY9RXJyb3IKLVhTTFNlbGVjdEV4aXN0aW5nPSZTZWxlY3QgZXhpc3RpbmcgY29uZmlndXJhdGlvbjoKLSNBY3Rpb24gTWVzc2FnZXMKLVJlbW92ZUFjdGlvbl9UZXh0PVJlbW92ZQotQWRkV29ya3NwYWNlRmlsZUFjdGlvbl9UZXh0PUFkZCBGaWxlcwotQWRkRXh0ZXJuYWxGaWxlQWN0aW9uX1RleHQ9QWRkIEV4dGVybmFsIEZpbGVzCi1Nb3ZlRG93bkFjdGlvbl9UZXh0PU1vdmUgRG93bgotTW92ZVVwQWN0aW9uX1RleHQ9TW92ZSBVcAotQWRkRXh0ZXJuYWxGaWxlQWN0aW9uX1NlbGVjdGlvbl8zPQotQWRkV29ya3NwYWNlRmlsZUFjdGlvbl9EaWFsb2dNZXNzYWdlPUNob29zZSBTdHlsZXNoZWV0Ci1BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX0RpYWxvZ1RpdGxlPQotQWRkUGFyYW1ldGVyQWN0aW9uPUFkZCBQYXJhbWV0ZXIKLVJlbW92ZVBhcmFtZXRlckFjdGlvbj1SZW1vdmUgUGFyYW1ldGVyCi1WYXJpYWJsZXNGaWVsZEJ1dHRvbl9UZXh0PVZhcmlhYmxlcy4uLgotQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZz1BZGQgWFNMVCBQYXJhbWV0ZXIKLUFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2dfTmFtZT1OYW1lOgotQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19UeXBlPVR5cGU6Ci1BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nX1ZhbHVlPVZhbHVlOgotI0JyZWFrcG9pbnQKLVhTTEJyZWFrcG9pbnRQcm92aWRlcl8wPXVuc3VwcG9ydGVkIGlucHV0IHR5cGUKLQotU3R5bGVzaGVldEVudHJ5TGFiZWxQcm92aWRlcl9JbnZhbGlkX3BhdGg9SW52YWxpZCBwYXRoCi1YU0xNYWluVGFiX1RhYk5hbWU9TWFpbgotCi1UcmFuc2Zvcm1zQmxvY2tfMD1UcmFuc2Zvcm1zQmxvY2sKLVRyYW5zZm9ybXNCbG9ja19OYW1lPVRyYW5zZm9ybWF0aW9uIFBpcGVsaW5lCi1UcmFuc2Zvcm1zQmxvY2tfUGFyYW1ldGVyc0xhYmVsPVBhcmFtZXRlcnMgZm9yIHN0eWxlc2hlZXQ6Ci1UcmFuc2Zvcm1zQmxvY2tfU3R5bGVzaGVldHNMYWJlbD1TdHlsZXNoZWV0czoKLQotSW5wdXRGaWxlQmxvY2tfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ9SW5wdXQgZmlsZSBub3Qgc3BlY2lmaWVkCi1JbnB1dEZpbGVCbG9ja19ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1Q9SW5wdXQgZmlsZSBkb2VzIG5vdCBleGlzdAotSW5wdXRGaWxlQmxvY2tfR1JPVVBfTkFNRT1YTUwgSW5wdXQgRmlsZQotSW5wdXRGaWxlQmxvY2tfREVGQVVMVF9SQURJTz1Vc2UgZGVmYXVsdAotSW5wdXRGaWxlQmxvY2tfT1RIRVJfUkFESU89T3RoZXIKLUlucHV0RmlsZUJsb2NrX0RJQUxPR19NRVNTQUdFPVNlbGVjdCBhbiBleHRlcm5hbCBpbnB1dCBmaWxlCi1JbnB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U9U2VsZWN0IGFuIGlucHV0IGZpbGUgZnJvbSB0aGUgd29ya3NwYWNlCi1JbnB1dEZpbGVCbG9ja19WQVJJQUJMRVNfQlVUVE9OPVZhcmlhYmxlcy4uLgotSW5wdXRGaWxlQmxvY2tfRklMRV9TWVNURU1fQlVUVE9OPUZpbGUgU3lzdGVtLi4uCi1JbnB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfQlVUVE9OPVdvcmtzcGFjZS4uLgotSW5wdXRGaWxlQmxvY2tfT1BFTkZJTEVTX0JVVFRPTj1PcGVuIEZpbGVzLi4uCi1JbnB1dEZpbGVCbG9ja19PUEVORklMRVNfRElBTE9HPVNlbGVjdCBGaWxlCi1JbnB1dEZpbGVCbG9ja19OYW1lPVhNTCBJbnB1dCBGaWxlCi1JbnB1dEZpbGVCbG9ja19FeGNlcHRpb25fb2NjdXJyZWRfcmVhZGluZ19jb25maWd1cmF0aW9uPUV4Y2VwdGlvbiBvY2N1cnJlZCByZWFkaW5nIGNvbmZpZ3VyYXRpb24KLUlucHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfVElUTEU9RmlsZSBTZWxlY3Rpb24KLQotUmVtb3ZlQWN0aW9uX1RleHQ9UmVtb3ZlCi1BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX1RleHQ9QWRkIEZpbGVzCi1BZGRFeHRlcm5hbEZpbGVBY3Rpb25fVGV4dD1BZGQgRXh0ZXJuYWwgRmlsZXMKLU1vdmVEb3duQWN0aW9uX1RleHQ9TW92ZSBEb3duCi1Nb3ZlVXBBY3Rpb25fVGV4dD1Nb3ZlIFVwCi1BZGRFeHRlcm5hbEZpbGVBY3Rpb25fU2VsZWN0aW9uXzM9Ci1BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX0RpYWxvZ01lc3NhZ2U9Q2hvb3NlIFN0eWxlc2hlZXQKLUFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fRGlhbG9nVGl0bGU9Ci1BZGRQYXJhbWV0ZXJBY3Rpb249QWRkIFBhcmFtZXRlcgotUmVtb3ZlUGFyYW1ldGVyQWN0aW9uPVJlbW92ZSBQYXJhbWV0ZXIKLVZhcmlhYmxlc0ZpZWxkQnV0dG9uX1RleHQ9VmFyaWFibGVzLi4uCi1BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nPUFkZCBYU0xUIFBhcmFtZXRlcgotQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19OYW1lPU5hbWU6Ci1BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nX1R5cGU9VHlwZToKLUFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2dfVmFsdWU9VmFsdWU6Ci0KLVBhcmFtZXRlcnNCbG9ja18wPU5hbWUKLVBhcmFtZXRlcnNCbG9ja18xPVR5cGUKLVBhcmFtZXRlcnNCbG9ja18xMD10eXBlCi1QYXJhbWV0ZXJzQmxvY2tfMTE9dmFsdWUKLVBhcmFtZXRlcnNCbG9ja18yPVZhbHVlCi1QYXJhbWV0ZXJzQmxvY2tfMz1uYW1lCi1QYXJhbWV0ZXJzQmxvY2tfND10eXBlCi1QYXJhbWV0ZXJzQmxvY2tfNT12YWx1ZQotUGFyYW1ldGVyc0Jsb2NrXzY9dHlwZQotUGFyYW1ldGVyc0Jsb2NrXzc9dmFsdWUKLVBhcmFtZXRlcnNCbG9ja184PXR5cGUKLVBhcmFtZXRlcnNCbG9ja185PVRyYW5zZm9ybWF0aW9uIFBhcmFtZXRlcnMKLQotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzA9VXNlIHByb3BlcnRpZXMgZnJvbSBwcmVmZXJlbmNlcwotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzE9Q2hhbmdlIFByZWZlcmVuY2VzLi4uCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMTM9T3V0cHV0IFByb3BlcnRpZXMKLU91dHB1dFByb3BlcnRpZXNCbG9ja18zPVVzZSBzcGVjaWZpYyBwcm9wZXJ0aWVzCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfND1Qcm9wZXJ0eQotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzU9VmFsdWUKLU91dHB1dFByb3BlcnRpZXNCbG9ja183PXByb3BlcnR5Ci1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfOD12YWx1ZQotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzk9dmFsdWUKLU91dHB1dFRhYl8wPU91dHB1dCBQcm9wZXJ0aWVzCi1PdXRwdXRUYWJfMT1PdXRwdXQKLQotCi0KLU91dHB1dFR5cGVCbG9ja19Hcm91cF9OYW1lPU91dHB1dCBUeXBlCi1PdXRwdXRGaWxlQmxvY2tfMD1Vc2UgZGVmYXVsdCBsb2NhdGlvbgotT3V0cHV0RmlsZUJsb2NrXzE9RmlsZW5hbWUKLU91dHB1dEZpbGVCbG9ja18yPUZvcm1hdCBmaWxlIG9uIGNvbXBsZXRpb24KLU91dHB1dEZpbGVCbG9ja183PUxvY2F0aW9uOgotT3V0cHV0RmlsZUJsb2NrXzg9T3BlbiBmaWxlIG9uIGNvbXBsZXRpb24KLU91dHB1dEZpbGVCbG9ja185PU91dHB1dCBGaWxlCi1PdXRwdXRGaWxlQmxvY2tfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ9VHJhbnNmb3JtIG91dHB1dCBmaWxlIG5vdCBzcGVjaWZpZWQKLU91dHB1dEZpbGVCbG9ja19ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1Q9VHJhbnNmb3JtIG91dHB1dCBmaWxlIGRvZXMgbm90IGV4aXN0Ci1PdXRwdXRGaWxlQmxvY2tfR1JPVVBfTkFNRT1UcmFuc2Zvcm0gT3V0cHV0IEZpbGUKLU91dHB1dEZpbGVCbG9ja19ERUZBVUxUX1JBRElPPURlZmF1bHQKLU91dHB1dEZpbGVCbG9ja19PVEhFUl9SQURJTz1PdGhlcgotT3V0cHV0RmlsZUJsb2NrX0RJQUxPR19NRVNTQUdFPVNlbGVjdCBhbiBleHRlcm5hbCBvdXRwdXQgZmlsZQotT3V0cHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfTUVTU0FHRT1TZWxlY3QgYW4gb3V0cHV0IGZpbGUgZnJvbSB0aGUgd29ya3NwYWNlCi1PdXRwdXRGaWxlQmxvY2tfVkFSSUFCTEVTX0JVVFRPTj1WYXJpYWJsZXMuLi4KLU91dHB1dEZpbGVCbG9ja19GSUxFX1NZU1RFTV9CVVRUT049RmlsZSBTeXN0ZW0uLi4KLU91dHB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfQlVUVE9OPVdvcmtzcGFjZS4uLgotT3V0cHV0RmlsZUJsb2NrX05hbWU9VHJhbnNmb3JtIE91dHB1dCBGaWxlCi1PdXRwdXRGaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3JlYWRpbmdfY29uZmlndXJhdGlvbj1FeGNlcHRpb24gb2NjdXJyZWQgcmVhZGluZyBjb25maWd1cmF0aW9uCi1PdXRwdXRGaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3NhdmluZ19jb25maWd1cmF0aW9uPUV4Y2VwdGlvbiBvY2N1cnJlZCBzYXZpbmcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KLU91dHB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX1RJVExFPUZpbGUgU2VsZWN0aW9uCi0KLU91dHB1dEZPRmlsZUJsb2NrX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEPVJlbmRlcmVyIG91dHB1dCBmaWxlIG5vdCBzcGVjaWZpZWQKLU91dHB1dEZPRmlsZUJsb2NrX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVD1SZW5kZXJlciBvdXRwdXQgZmlsZSBkb2VzIG5vdCBleGlzdAotT3V0cHV0Rk9GaWxlQmxvY2tfR1JPVVBfTkFNRT1SZW5kZXJlciBPdXRwdXQgRmlsZQotT3V0cHV0Rk9GaWxlQmxvY2tfREVGQVVMVF9SQURJTz1EZWZhdWx0Ci1PdXRwdXRGT0ZpbGVCbG9ja19PVEhFUl9SQURJTz1PdGhlcgotT3V0cHV0Rk9GaWxlQmxvY2tfRElBTE9HX01FU1NBR0U9U2VsZWN0IGFuIGV4dGVybmFsIG91dHB1dCBmaWxlCi1PdXRwdXRGT0ZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U9U2VsZWN0IGFuIG91dHB1dCBmaWxlIGZyb20gdGhlIHdvcmtzcGFjZQotT3V0cHV0Rk9GaWxlQmxvY2tfVkFSSUFCTEVTX0JVVFRPTj1WYXJpYWJsZXMuLi4KLU91dHB1dEZPRmlsZUJsb2NrX0ZJTEVfU1lTVEVNX0JVVFRPTj1GaWxlIFN5c3RlbS4uLgotT3V0cHV0Rk9GaWxlQmxvY2tfV09SS1NQQUNFX0JVVFRPTj1Xb3Jrc3BhY2UuLi4KLU91dHB1dEZPRmlsZUJsb2NrX05hbWU9UmVuZGVyZXIgT3V0cHV0IEZpbGUKLU91dHB1dEZPRmlsZUJsb2NrX0V4Y2VwdGlvbl9vY2N1cnJlZF9yZWFkaW5nX2NvbmZpZ3VyYXRpb249RXhjZXB0aW9uIG9jY3VycmVkIHJlYWRpbmcgY29uZmlndXJhdGlvbgotT3V0cHV0Rk9GaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3NhdmluZ19jb25maWd1cmF0aW9uPUV4Y2VwdGlvbiBvY2N1cnJlZCBzYXZpbmcgbGF1bmNoIGNvbmZpZ3VyYXRpb24KLU91dHB1dEZPRmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfVElUTEU9RmlsZSBTZWxlY3Rpb24KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21vZGVsL1hTTEJyZWFrcG9pbnRBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21vZGVsL1hTTEJyZWFrcG9pbnRBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzY0ZjBhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9tb2RlbC9YU0xCcmVha3BvaW50QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5hY3Rpb25zLklUb2dnbGVCcmVha3BvaW50c1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotCi0vKioKLSAqIENyZWF0ZXMgYSB0b2dnbGUgYnJlYWtwb2ludCBhZGFwdGVyCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xCcmVha3BvaW50QWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBJQWRhcHRlckZhY3RvcnkgewotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlT2JqZWN0LCBDbGFzcyBhZGFwdGVyVHlwZSkgewotCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpIHsKLQkJCUlUZXh0RWRpdG9yIGVkaXRvclBhcnQgPSAoSVRleHRFZGl0b3IpIGFkYXB0YWJsZU9iamVjdDsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2UpIGVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKQotCQkJCQkuZ2V0QWRhcHRlcihJUmVzb3VyY2UuY2xhc3MpOwotCQkJaWYgKHJlc291cmNlICE9IG51bGwgJiYgcmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZSkgewotCQkJCWlmIChYU0xDb3JlLmlzWFNMRmlsZSgoSUZpbGUpIHJlc291cmNlKSkgewotCQkJCQlyZXR1cm4gbmV3IFhTTExpbmVCcmVha3BvaW50QWRhcHRlcigpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKLQkJcmV0dXJuIG5ldyBDbGFzc1tdIHsgSVRvZ2dsZUJyZWFrcG9pbnRzVGFyZ2V0LmNsYXNzIH07Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21vZGVsL1hTTExpbmVCcmVha3BvaW50QWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21vZGVsL1hTTExpbmVCcmVha3BvaW50QWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmVlZWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9tb2RlbC9YU0xMaW5lQnJlYWtwb2ludEFkYXB0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklMaW5lQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5hY3Rpb25zLklUb2dnbGVCcmVha3BvaW50c1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLklYU0xDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMTGluZUJyZWFrcG9pbnQ7Ci0KLS8qKgotICogQW4gPGNvZGU+SVRvZ2dsZUJyZWFrcG9pbnRzVGFyZ2V0PC9jb2RlPiBmb3IgWFNMIGJyZWFrcG9pbnRzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xMaW5lQnJlYWtwb2ludEFkYXB0ZXIgaW1wbGVtZW50cyBJVG9nZ2xlQnJlYWtwb2ludHNUYXJnZXQgewotCXB1YmxpYyB2b2lkIHRvZ2dsZUxpbmVCcmVha3BvaW50cyhJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEVkaXRvcihwYXJ0KTsKLQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkgewotCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgdGV4dEVkaXRvci5nZXRFZGl0b3JJbnB1dCgpCi0JCQkJCS5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCQlJVGV4dFNlbGVjdGlvbiB0ZXh0U2VsZWN0aW9uID0gKElUZXh0U2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCQlpbnQgbGluZU51bWJlciA9IHRleHRTZWxlY3Rpb24uZ2V0U3RhcnRMaW5lKCk7Ci0JCQlJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzID0gRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJCS5nZXRCcmVha3BvaW50TWFuYWdlcigpLmdldEJyZWFrcG9pbnRzKAotCQkJCQkJCUlYU0xDb25zdGFudHMuSURfWFNMX0RFQlVHX01PREVMKTsKLQkJCWZvciAoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCA6IGJyZWFrcG9pbnRzKSB7Ci0JCQkJaWYgKHJlc291cmNlLmVxdWFscyhicmVha3BvaW50LmdldE1hcmtlcigpLmdldFJlc291cmNlKCkpKSB7Ci0JCQkJCWlmICgoKElMaW5lQnJlYWtwb2ludCkgYnJlYWtwb2ludCkuZ2V0TGluZU51bWJlcigpID09IChsaW5lTnVtYmVyICsgMSkpIHsKLQkJCQkJCS8vIHJlbW92ZQotCQkJCQkJYnJlYWtwb2ludC5kZWxldGUoKTsKLQkJCQkJCXJldHVybjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCS8vIGNyZWF0ZSBsaW5lIGJyZWFrcG9pbnQgKGRvYyBsaW5lIG51bWJlcnMgc3RhcnQgYXQgMCkKLQkJCVhTTExpbmVCcmVha3BvaW50IGxpbmVCcmVha3BvaW50ID0gbmV3IFhTTExpbmVCcmVha3BvaW50KHJlc291cmNlLAotCQkJCQlsaW5lTnVtYmVyICsgMSwgMSwgMSk7Ci0JCQlEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnJlYWtwb2ludE1hbmFnZXIoKS5hZGRCcmVha3BvaW50KAotCQkJCQlsaW5lQnJlYWtwb2ludCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5Ub2dnbGVMaW5lQnJlYWtwb2ludHMoSVdvcmtiZW5jaFBhcnQgcGFydCwKLQkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCXJldHVybiBnZXRFZGl0b3IocGFydCkgIT0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBlZGl0b3IgYmVpbmcgdXNlZCB0byBlZGl0IGEgWFNMIGZpbGUsIGFzc29jaWF0ZWQgd2l0aCB0aGUKLQkgKiBnaXZlbiBwYXJ0LCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lLgotCSAqLwotCXByaXZhdGUgSVRleHRFZGl0b3IgZ2V0RWRpdG9yKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKLQkJaWYgKHBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikgewotCQkJSVRleHRFZGl0b3IgZWRpdG9yUGFydCA9IChJVGV4dEVkaXRvcikgcGFydDsKLQkJCUlSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2UpIGVkaXRvclBhcnQuZ2V0RWRpdG9ySW5wdXQoKQotCQkJCQkuZ2V0QWRhcHRlcihJUmVzb3VyY2UuY2xhc3MpOwotCQkJaWYgKHJlc291cmNlICE9IG51bGwgJiYgcmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7Ci0JCQkJaWYgKFhTTENvcmUuaXNYU0xGaWxlKChJRmlsZSkgcmVzb3VyY2UpKSB7Ci0JCQkJCXJldHVybiBlZGl0b3JQYXJ0OwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0b2dnbGVNZXRob2RCcmVha3BvaW50cyhJV29ya2JlbmNoUGFydCBwYXJ0LAotCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5Ub2dnbGVNZXRob2RCcmVha3BvaW50cyhJV29ya2JlbmNoUGFydCBwYXJ0LAotCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRvZ2dsZVdhdGNocG9pbnRzKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblRvZ2dsZVdhdGNocG9pbnRzKElXb3JrYmVuY2hQYXJ0IHBhcnQsCi0JCQlJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21vZGVsL1hTTE1vZGVsUHJlc2VudGF0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbW9kZWwvWFNMTW9kZWxQcmVzZW50YXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4MzhkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbW9kZWwvWFNMTW9kZWxQcmVzZW50YXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIxNDIzNSAtIEFkZGVkIE5vZGVMaXN0IHNwZWNpZmljIGltYWdlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklMaW5lQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JRGVidWdNb2RlbFByZXNlbnRhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JVmFsdWVEZXRhaWxMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLk5vZGVMaXN0VmFyaWFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMVmFyaWFibGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnV0aWwuU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXI7Ci0KLS8qKgotICogQW4gPGNvZGU+SURlYnVnTW9kZWxQcmVzZW50YXRpb248L2NvZGU+IGZvciBYU0wgZGVidWdnaW5nLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xNb2RlbFByZXNlbnRhdGlvbiBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cwotCQlJRGVidWdNb2RlbFByZXNlbnRhdGlvbiB7Ci0JcHJpdmF0ZSBJbWFnZSBsb2NhbEltZzsKLQotCXB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZShTdHJpbmcgYXR0cmlidXRlLCBPYmplY3QgdmFsdWUpIHsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBYU0xWYXJpYWJsZSkgewotCQkJWFNMVmFyaWFibGUgdmFyID0gKFhTTFZhcmlhYmxlKSBlbGVtZW50OwotCQkJaWYgKHZhci5nZXRTY29wZSgpLmVxdWFscyhYU0xWYXJpYWJsZS5MT0NBTF9TQ09QRSkpIHsKLQkJCQlpZiAobG9jYWxJbWcgPT0gbnVsbCkKLQkJCQkJbG9jYWxJbWcgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldEltYWdlRGVzY3JpcHRvcigKLQkJCQkJCQkiL2ljb25zL2xvY2FsdmFyaWFibGVfb2JqLmdpZiIpLmNyZWF0ZUltYWdlKCk7IC8vJE5PTi1OTFMtMSQKLQkJCQlyZXR1cm4gbG9jYWxJbWc7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdFZhcmlhYmxlKSB7Ci0JCQlOb2RlTGlzdFZhcmlhYmxlIG5vZGVWYXIgPSAoTm9kZUxpc3RWYXJpYWJsZSkgZWxlbWVudDsKLQkJCWlmIChub2RlVmFyLmdldE5vZGUoKSAhPSBudWxsKSB7Ci0JCQkJTm9kZSBub2RlID0gbm9kZVZhci5nZXROb2RlKCk7Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfRUxFTUVOVCk7Ci0JCQkJfQotCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfQVRUUklCVVRFKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkNPTU1FTlRfTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfQ09NTUVOVCk7Ci0JCQkJfQotCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHsKLQkJCQkJbG9jYWxJbWcgPSBTaGFyZWRYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcgotCQkJCQkJCS5nZXRJbWFnZShTaGFyZWRYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlci5JTUdfT0JKX1BST0NFU1NJTkdJTlNUUlVDVElPTik7Ci0JCQkJfQotCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5DREFUQV9TRUNUSU9OX05PREUpIHsKLQkJCQkJbG9jYWxJbWcgPSBTaGFyZWRYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcgotCQkJCQkJCS5nZXRJbWFnZShTaGFyZWRYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlci5JTUdfT0JKX0NEQVRBU0VDVElPTik7Ci0JCQkJfQotCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTlRJVFlfTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfRU5USVRZKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVOVElUWV9SRUZFUkVOQ0VfTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfRU5USVRZX1JFRkVSRU5DRSk7Ci0JCQkJfQotCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpIHsKLQkJCQkJbG9jYWxJbWcgPSBTaGFyZWRYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcgotCQkJCQkJCS5nZXRJbWFnZShTaGFyZWRYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlci5JTUdfT0JKX1RYVEVYVCk7Ci0JCQkJfQotCQkJCXJldHVybiBsb2NhbEltZzsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJaWYgKGxvY2FsSW1nICE9IG51bGwpCi0JCQlsb2NhbEltZy5kaXNwb3NlKCk7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjb21wdXRlRGV0YWlsKElWYWx1ZSB2YWx1ZSwgSVZhbHVlRGV0YWlsTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJU3RyaW5nIGRldGFpbCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCXRyeSB7Ci0JCQlkZXRhaWwgPSB2YWx1ZS5nZXRWYWx1ZVN0cmluZygpOwotCQl9IGNhdGNoIChEZWJ1Z0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJbGlzdGVuZXIuZGV0YWlsQ29tcHV0ZWQodmFsdWUsIGRldGFpbCk7Ci0JfQotCi0JcHVibGljIElFZGl0b3JJbnB1dCBnZXRFZGl0b3JJbnB1dChPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlKSB7Ci0JCQlyZXR1cm4gbmV3IEZpbGVFZGl0b3JJbnB1dCgoSUZpbGUpIGVsZW1lbnQpOwotCQl9Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUxpbmVCcmVha3BvaW50KSB7Ci0JCQlyZXR1cm4gbmV3IEZpbGVFZGl0b3JJbnB1dCgoSUZpbGUpICgoSUxpbmVCcmVha3BvaW50KSBlbGVtZW50KQotCQkJCQkuZ2V0TWFya2VyKCkuZ2V0UmVzb3VyY2UoKSk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRFZGl0b3JJZChJRWRpdG9ySW5wdXQgaW5wdXQsIE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUgfHwgZWxlbWVudCBpbnN0YW5jZW9mIElMaW5lQnJlYWtwb2ludCkgewotCQkJcmV0dXJuIFhTTERlYnVnVUlDb25zdGFudHMuWFNMX0VESVRPUl9JRDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL0lQYXJhbWV0ZXJzQ2hhbmdlZExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL0lQYXJhbWV0ZXJzQ2hhbmdlZExpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhM2FmZTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9JUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW47Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIgewotCXZvaWQgcGFyYW1ldGVyc0NoYW5nZWQoUGFyYW1ldGVyVmlld2VyIHZpZXdlcik7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL0lTdHlsZXNoZWV0RW50cmllc0NoYW5nZWRMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9JU3R5bGVzaGVldEVudHJpZXNDaGFuZ2VkTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwMmEwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL0lTdHlsZXNoZWV0RW50cmllc0NoYW5nZWRMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW47Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyIHsKLQl2b2lkIGVudHJpZXNDaGFuZ2VkKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vSW5wdXRGaWxlQmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vSW5wdXRGaWxlQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjMmY1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL0lucHV0RmlsZUJsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgU3R1YXJ0IEhhcnBlciAtIGFkZGVkICJvcGVuIGZpbGVzIiBzZWxlY3RvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5JU3RyaW5nVmFyaWFibGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuUmVzb3VyY2VTZWxlY3Rpb25CbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIElucHV0RmlsZUJsb2NrIGV4dGVuZHMgUmVzb3VyY2VTZWxlY3Rpb25CbG9jayB7Ci0JcHJpdmF0ZSBmaW5hbCBJRmlsZSBkZWZhdWx0RmlsZTsKLQotCXB1YmxpYyBJbnB1dEZpbGVCbG9jayhJRmlsZSBkZWZhdWx0RmlsZSkgewotCQlzdXBlcihJUmVzb3VyY2UuRklMRSwgZmFsc2UpOwotCQl0aGlzLmRlZmF1bHRGaWxlID0gZGVmYXVsdEZpbGU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JCVN0cmluZyBwYXRoID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGRlZmF1bHRGaWxlICE9IG51bGwpCi0JCQlwYXRoID0gVmFyaWFibGVzUGx1Z2luCi0JCQkJCS5nZXREZWZhdWx0KCkKLQkJCQkJLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpCi0JCQkJCS5nZW5lcmF0ZVZhcmlhYmxlRXhwcmVzc2lvbigKLQkJCQkJCQkid29ya3NwYWNlX2xvYyIsIGRlZmF1bHRGaWxlLmdldEZ1bGxQYXRoKCkudG9Qb3J0YWJsZVN0cmluZygpKTsgLy8kTk9OLU5MUy0xJAotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwgcGF0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQlzZXRMYXVuY2hDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOwotCQl0cnkgewotCQkJU3RyaW5nIHdkID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9JTlBVVF9GSUxFLAotCQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJCWlmICh3ZCAhPSBudWxsKSB7Ci0JCQkJc2V0VGV4dCh3ZCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX0V4Y2VwdGlvbl9vY2N1cnJlZF9yZWFkaW5nX2NvbmZpZ3VyYXRpb24KLQkJCQkJKyBlLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pIHsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0lOUFVUX0ZJTEUsIGdldFRleHQoKSk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfTmFtZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB0ZXh0TW9kaWZpZWQoKSB7Ci0JCUlQYXRoIHBhdGggPSBudWxsOwotCQlTdHJpbmcgd29ya2luZ0RpclBhdGggPSBnZXRUZXh0KCk7Ci0JCWlmICh3b3JraW5nRGlyUGF0aC5pbmRleE9mKCIkeyIpID49IDApIC8vJE5PTi1OTFMtMSQKLQkJewotCQkJSVN0cmluZ1ZhcmlhYmxlTWFuYWdlciBtYW5hZ2VyID0gVmFyaWFibGVzUGx1Z2luLmdldERlZmF1bHQoKQotCQkJCQkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCk7Ci0JCQl0cnkgewotCQkJCW1hbmFnZXIudmFsaWRhdGVTdHJpbmdWYXJpYWJsZXMod29ya2luZ0RpclBhdGgpOwotCQkJCXBhdGggPSBuZXcgUGF0aChtYW5hZ2VyCi0JCQkJCQkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbih3b3JraW5nRGlyUGF0aCkpOwotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAod29ya2luZ0RpclBhdGgubGVuZ3RoKCkgPiAwKSB7Ci0JCQlwYXRoID0gbmV3IFBhdGgod29ya2luZ0RpclBhdGgpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRNZXNzYWdlKGludCB0eXBlKSB7Ci0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEVSUk9SX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEOwotCQljYXNlIEVSUk9SX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVDoKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1Q7Ci0JCWNhc2UgR1JPVVBfTkFNRToKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19HUk9VUF9OQU1FOwotCQljYXNlIFVTRV9ERUZBVUxUX1JBRElPOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX0RFRkFVTFRfUkFESU87Ci0JCWNhc2UgVVNFX09USEVSX1JBRElPOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX09USEVSX1JBRElPOwotCQljYXNlIERJUkVDVE9SWV9ESUFMT0dfTUVTU0FHRToKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19ESUFMT0dfTUVTU0FHRTsKLQkJY2FzZSBXT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U6Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19NRVNTQUdFOwotCQljYXNlIFZBUklBQkxFU19CVVRUT046Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfVkFSSUFCTEVTX0JVVFRPTjsKLQkJY2FzZSBGSUxFX1NZU1RFTV9CVVRUT046Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfRklMRV9TWVNURU1fQlVUVE9OOwotCQljYXNlIFdPUktTUEFDRV9CVVRUT046Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfV09SS1NQQUNFX0JVVFRPTjsKLQkJY2FzZSBXT1JLU1BBQ0VfRElBTE9HX1RJVExFOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfVElUTEU7Ci0JCWNhc2UgT1BFTkZJTEVTX0JVVFRPTjoKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19PUEVORklMRVNfQlVUVE9OOwotCQljYXNlIE9QRU5GSUxFU19ESUFMT0dfVElUTEU6Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfT1BFTkZJTEVTX0RJQUxPRzsKLQkJfQotCQlyZXR1cm4gIiIgKyB0eXBlOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlUmVzb3VyY2VUZXh0KGJvb2xlYW4gdXNlRGVmYXVsdCkgewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyVmlld2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1BhcmFtZXRlclZpZXdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTU2MjM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyVmlld2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5MaXN0ZW5lckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLQotcHVibGljIGNsYXNzIFBhcmFtZXRlclZpZXdlciB7Ci0JcHJpdmF0ZSBmaW5hbCBUYWJsZVZpZXdlciB2aWV3ZXI7Ci0JcHJpdmF0ZSBmaW5hbCBMaXN0ZW5lckxpc3QgZkxpc3RlbmVycyA9IG5ldyBMaXN0ZW5lckxpc3QoKTsKLQotCXB1YmxpYyBQYXJhbWV0ZXJWaWV3ZXIoVGFibGUgdGFibGUpIHsKLQkJdmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQl9Ci0KLQlwdWJsaWMgVGFibGVWaWV3ZXIgZ2V0Vmlld2VyKCkgewotCQlyZXR1cm4gdmlld2VyOwotCX0KLQotCXByaXZhdGUgUGFyYW1ldGVyc0NvbnRlbnRQcm92aWRlciBnZXRQYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyKCkgewotCQlyZXR1cm4gKFBhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIpIHZpZXdlci5nZXRDb250ZW50UHJvdmlkZXIoKTsKLQl9Ci0KLQlwdWJsaWMgU2hlbGwgZ2V0U2hlbGwoKSB7Ci0JCXJldHVybiB2aWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB1cGRhdGVTZWxlY3Rpb24oaW50IGFjdGlvblR5cGUsCi0JCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJc3dpdGNoIChhY3Rpb25UeXBlKSB7Ci0JCWNhc2UgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLkFERDoKLQkJCXJldHVybiB0cnVlOwotCQljYXNlIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5SRU1PVkU6Ci0JCWNhc2UgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLk1PVkU6Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gc2VsZWN0aW9uLnNpemUoKSA+IDA7Ci0JfQotCi0JcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldFNlbGVjdGVkRW50cmllcygpIHsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB2aWV3ZXIKLQkJCQkuZ2V0U2VsZWN0aW9uKCk7Ci0JCXJldHVybiBzZWxlY3Rpb247Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkUGFyYW1ldGVyKExhdW5jaEF0dHJpYnV0ZSBwYXJhbWV0ZXIpIHsKLQkJZ2V0UGFyYW1ldGVyc0NvbnRlbnRQcm92aWRlcigpLmFkZFBhcmFtZXRlcihwYXJhbWV0ZXIpOwotCQlub3RpZnlDaGFuZ2VkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlRW50cmllcyhMYXVuY2hBdHRyaWJ1dGVbXSBlbnRyaWVzKSB7Ci0JCWdldFBhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIoKS5yZW1vdmVQYXJhbWV0ZXJzKGVudHJpZXMpOwotCQlub3RpZnlDaGFuZ2VkKCk7Ci0JfQotCi0JcHVibGljIExhdW5jaEF0dHJpYnV0ZVtdIGdldFBhcmFtZXRlcnMoKSB7Ci0JCXJldHVybiBnZXRQYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyKCkuZ2V0UGFyYW1ldGVycygpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIoSVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJZkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIoCi0JCQlJUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlmTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIG5vdGlmeUNoYW5nZWQoKSB7Ci0JCU9iamVjdFtdIGxpc3RlbmVycyA9IGZMaXN0ZW5lcnMuZ2V0TGlzdGVuZXJzKCk7Ci0JCWZvciAoT2JqZWN0IGVsZW1lbnQgOiBsaXN0ZW5lcnMpIHsKLQkJCSgoSVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIpIGVsZW1lbnQpLnBhcmFtZXRlcnNDaGFuZ2VkKHRoaXMpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1BhcmFtZXRlcnNCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJzQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMxMjkyMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1BhcmFtZXRlcnNCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNlbGxNb2RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRleHRDZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuQWJzdHJhY3RUYWJsZUJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFkZFBhcmFtZXRlckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuUmVtb3ZlUGFyYW1ldGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotcHVibGljIGNsYXNzIFBhcmFtZXRlcnNCbG9jayBleHRlbmRzIEFic3RyYWN0VGFibGVCbG9jayB7Ci0JcHJpdmF0ZSBQYXJhbWV0ZXJWaWV3ZXIgcGFyYW1ldGVyc1ZpZXdlcjsKLQlwcml2YXRlIEJ1dHRvbiBhZGRQYXJhbWV0ZXJCdXR0b247Ci0JcHJpdmF0ZSBCdXR0b24gcmVtb3ZlUGFyYW1ldGVyQnV0dG9uOwotCXByaXZhdGUgZmluYWwgVHJhbnNmb3Jtc0Jsb2NrIHRyYW5zZm9ybXNCbG9jazsKLQlwcml2YXRlIGZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uTGlzdGVuZXIgPSBuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0eWxlc2hlZXRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50Ci0JCQkJCS5nZXRTZWxlY3Rpb24oKTsKLQkJCWlmIChzdHlsZXNoZWV0U2VsZWN0aW9uLnNpemUoKSA9PSAxKQotCQkJCXNldFRyYW5zZm9ybSgoTGF1bmNoVHJhbnNmb3JtKSBzdHlsZXNoZWV0U2VsZWN0aW9uCi0JCQkJCQkuZ2V0Rmlyc3RFbGVtZW50KCkpOwotCQkJZWxzZQotCQkJCXNldFRyYW5zZm9ybShudWxsKTsKLQkJCXVwZGF0ZUVuYWJsZWQoKTsKLQkJfQotCX07Ci0JcHJpdmF0ZSBUYWJsZSBmVGFibGU7Ci0KLQlwdWJsaWMgUGFyYW1ldGVyc0Jsb2NrKFRyYW5zZm9ybXNCbG9jayB0cmFuc2Zvcm1zQmxvY2spIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy50cmFuc2Zvcm1zQmxvY2sgPSB0cmFuc2Zvcm1zQmxvY2s7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VHJhbnNmb3JtKExhdW5jaFRyYW5zZm9ybSB0cmFuc2Zvcm0pIHsKLQkJcGFyYW1ldGVyc1ZpZXdlci5nZXRWaWV3ZXIoKS5zZXRJbnB1dCh0cmFuc2Zvcm0pOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZUVuYWJsZWQoKSB7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0eWxlc2hlZXRTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRyYW5zZm9ybXNCbG9jawotCQkJCS5nZXRTdHlsZXNoZWV0Vmlld2VyKCkuZ2V0U2VsZWN0aW9uKCk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IHN0eWxlc2hlZXRTZWxlY3Rpb24uc2l6ZSgpID09IDE7Ci0JCXBhcmFtZXRlcnNWaWV3ZXIuZ2V0Vmlld2VyKCkuZ2V0VGFibGUoKS5zZXRFbmFibGVkKGVuYWJsZWQpOwotCQlhZGRQYXJhbWV0ZXJCdXR0b24uc2V0RW5hYmxlZChlbmFibGVkKTsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gcGFyYW1ldGVyc1NlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgcGFyYW1ldGVyc1ZpZXdlcgotCQkJCS5nZXRWaWV3ZXIoKS5nZXRTZWxlY3Rpb24oKTsKLQkJcmVtb3ZlUGFyYW1ldGVyQnV0dG9uLnNldEVuYWJsZWQoZW5hYmxlZAotCQkJCSYmICFwYXJhbWV0ZXJzU2VsZWN0aW9uLmlzRW1wdHkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUZvbnQgZm9udCA9IHBhcmVudC5nZXRGb250KCk7Ci0KLQkJR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWdyb3VwLnNldFRleHQoZ2V0TmFtZSgpKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCB0cnVlKTsKLQkJZ3JvdXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAzOwotCQlncm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJZ3JvdXAuc2V0Rm9udChmb250KTsKLQotCQlzZXRDb250cm9sKGdyb3VwKTsKLQotCQlmVGFibGUgPSBuZXcgVGFibGUoZ3JvdXAsIFNXVC5CT1JERVIgfCBTV1QuTVVMVEkgfCBTV1QuRlVMTF9TRUxFQ1RJT04pOwotCi0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCB0cnVlKTsKLQkJLy8gZGF0YS5oZWlnaHRIaW50ID0gMTAwOwotCQlmVGFibGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJZlRhYmxlLnNldEZvbnQoZm9udCk7Ci0KLQkJZlRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JCWZUYWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0KLQkJVGFibGVDb2x1bW4gY29sdW1uMSA9IG5ldyBUYWJsZUNvbHVtbihmVGFibGUsIFNXVC5OT05FKTsKLQkJY29sdW1uMS5zZXRXaWR0aCgxNTApOwotCQljb2x1bW4xLnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJY29sdW1uMS5zZXRUZXh0KE1lc3NhZ2VzLlBhcmFtZXRlcnNCbG9ja18wKTsKLQotCQlUYWJsZUNvbHVtbiBjb2x1bW4zID0gbmV3IFRhYmxlQ29sdW1uKGZUYWJsZSwgU1dULk5PTkUpOwotCQljb2x1bW4zLnNldFdpZHRoKDI1MCk7Ci0JCWNvbHVtbjMuc2V0UmVzaXphYmxlKHRydWUpOwotCQljb2x1bW4zLnNldFRleHQoTWVzc2FnZXMuUGFyYW1ldGVyc0Jsb2NrXzIpOwotCi0JCXBhcmFtZXRlcnNWaWV3ZXIgPSBuZXcgUGFyYW1ldGVyVmlld2VyKGZUYWJsZSk7Ci0JCXBhcmFtZXRlcnNWaWV3ZXIuZ2V0Vmlld2VyKCkuc2V0TGFiZWxQcm92aWRlcigKLQkJCQluZXcgUGFyYW1ldGVyc0xhYmVsUHJvdmlkZXIoKSk7Ci0JCXBhcmFtZXRlcnNWaWV3ZXIuZ2V0Vmlld2VyKCkuc2V0Q29udGVudFByb3ZpZGVyKAotCQkJCW5ldyBQYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyKCkpOwotCQlwYXJhbWV0ZXJzVmlld2VyCi0JCQkJLmFkZFBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIobmV3IElQYXJhbWV0ZXJzQ2hhbmdlZExpc3RlbmVyKCkgewotCi0JCQkJCXB1YmxpYyB2b2lkIHBhcmFtZXRlcnNDaGFuZ2VkKFBhcmFtZXRlclZpZXdlciB2aWV3ZXIpIHsKLQkJCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCQkJfQotCQkJCX0pOwotCQlwYXJhbWV0ZXJzVmlld2VyLmdldFZpZXdlcigpLmdldFRhYmxlKCkuYWRkS2V5TGlzdGVuZXIoCi0JCQkJbmV3IEtleUFkYXB0ZXIoKSB7Ci0JCQkJCUBPdmVycmlkZQotCQkJCQlwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGV2ZW50KSB7Ci0JCQkJCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5ERUwgJiYgZXZlbnQuc3RhdGVNYXNrID09IDApIHsKLQkJCQkJCQlSZW1vdmVQYXJhbWV0ZXJBY3Rpb24gcmEgPSBuZXcgUmVtb3ZlUGFyYW1ldGVyQWN0aW9uKAotCQkJCQkJCQkJcGFyYW1ldGVyc1ZpZXdlcik7Ci0JCQkJCQkJcmEucnVuKCk7Ci0JCQkJCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSk7Ci0KLQkJcGFyYW1ldGVyc1ZpZXdlci5nZXRWaWV3ZXIoKS5zZXRDb2x1bW5Qcm9wZXJ0aWVzKAotCQkJCW5ldyBTdHJpbmdbXSB7ICJuYW1lIiwgInZhbHVlIiB9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCVRleHRDZWxsRWRpdG9yIHRleHRFZGl0b3IgPSBuZXcgVGV4dENlbGxFZGl0b3IoZlRhYmxlKTsKLQkJQ2VsbEVkaXRvcltdIGVkaXRvcnMgPSBuZXcgQ2VsbEVkaXRvcltdIHsgbnVsbCwgdGV4dEVkaXRvciB9OwotCQlwYXJhbWV0ZXJzVmlld2VyLmdldFZpZXdlcigpLnNldENlbGxFZGl0b3JzKGVkaXRvcnMpOwotCQlwYXJhbWV0ZXJzVmlld2VyLmdldFZpZXdlcigpLnNldENlbGxNb2RpZmllcihuZXcgSUNlbGxNb2RpZmllcigpIHsKLQkJCXB1YmxpYyBib29sZWFuIGNhbk1vZGlmeShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JCQkJcmV0dXJuICJ2YWx1ZSIuZXF1YWxzKHByb3BlcnR5KTsgLy8kTk9OLU5MUy0xJCAKLQkJCX0KLQotCQkJcHVibGljIE9iamVjdCBnZXRWYWx1ZShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIGVsZW1lbnQ7Ci0JCQkJcmV0dXJuIGF0dC52YWx1ZSA9PSBudWxsID8gIiIgOiBhdHQudmFsdWU7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgbW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHksIE9iamVjdCB2YWx1ZSkgewotCQkJCUl0ZW0gaXRlbSA9IChJdGVtKSBlbGVtZW50OwotCQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHQgPSAoTGF1bmNoQXR0cmlidXRlKSBpdGVtLmdldERhdGEoKTsKLQkJCQlhdHQudmFsdWUgPSAoU3RyaW5nKSB2YWx1ZTsKLQkJCQlwYXJhbWV0ZXJzVmlld2VyLmdldFZpZXdlcigpLnVwZGF0ZShhdHQsIG51bGwpOwotCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCX0KLQkJfSk7Ci0KLQkJQ29tcG9zaXRlIHBhcmFtZXRlckJ1dHRvbkNvbXAgPSBuZXcgQ29tcG9zaXRlKGdyb3VwLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgcGFyYW1ldGVyQnV0dG9uQ29tcExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCXBhcmFtZXRlckJ1dHRvbkNvbXBMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJcGFyYW1ldGVyQnV0dG9uQ29tcExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCXBhcmFtZXRlckJ1dHRvbkNvbXAuc2V0TGF5b3V0KHBhcmFtZXRlckJ1dHRvbkNvbXBMYXlvdXQpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcKLQkJCQl8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMjsKLQkJcGFyYW1ldGVyQnV0dG9uQ29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcGFyYW1ldGVyQnV0dG9uQ29tcC5zZXRGb250KGZvbnQpOwotCi0JCWFkZFBhcmFtZXRlckJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbihwYXJhbWV0ZXJCdXR0b25Db21wLAotCQkJCW5ldyBBZGRQYXJhbWV0ZXJBY3Rpb24ocGFyYW1ldGVyc1ZpZXdlcikpOwotCQlyZW1vdmVQYXJhbWV0ZXJCdXR0b24gPSBjcmVhdGVCdXR0b24ocGFyYW1ldGVyQnV0dG9uQ29tcCwKLQkJCQluZXcgUmVtb3ZlUGFyYW1ldGVyQWN0aW9uKHBhcmFtZXRlcnNWaWV3ZXIpKTsKLQotCQl0cmFuc2Zvcm1zQmxvY2suZ2V0U3R5bGVzaGVldFZpZXdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLQkJCQlzZWxlY3Rpb25MaXN0ZW5lcik7Ci0KLQkJcmVzdG9yZUNvbHVtblNldHRpbmdzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVCdXR0b24oQ29tcG9zaXRlIHBhdGhCdXR0b25Db21wLAotCQkJQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24gYWN0aW9uKSB7Ci0JCUJ1dHRvbiBidXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKHBhdGhCdXR0b25Db21wLCBhY3Rpb24uZ2V0VGV4dCgpLCBudWxsKTsKLQkJYWN0aW9uLnNldEJ1dHRvbihidXR0b24pOwotCQlyZXR1cm4gYnV0dG9uOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUYWJsZSBnZXRUYWJsZSgpIHsKLQkJcmV0dXJuIGZUYWJsZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkgewotCQlyZXR1cm4gWFNMRGVidWdVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGlhbG9nU2V0dGluZ3MoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFF1YWxpZmllcigpIHsKLQkJcmV0dXJuIFhTTERlYnVnVUlDb25zdGFudHMuTUFJTl9QQVJBTUFURVJTX0JMT0NLOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIE1lc3NhZ2VzLlBhcmFtZXRlcnNCbG9ja185OwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVGcm9tKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLQkJLy8gaGFuZGxlZCBieSB0aGUgVGFiCi0JCXVwZGF0ZUVuYWJsZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JCS8vIGhhbmRsZWQgYnkgdGhlIFRhYgotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCQkvLyBoYW5kbGVkIGJ5IHRoZSBUYWIKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlpZiAodHJhbnNmb3Jtc0Jsb2NrLmdldFN0eWxlc2hlZXRWaWV3ZXIoKSAhPSBudWxsKQotCQkJdHJhbnNmb3Jtc0Jsb2NrLmdldFN0eWxlc2hlZXRWaWV3ZXIoKQotCQkJCQkucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkxpc3RlbmVyKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyc0NvbnRlbnRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMmEzMjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIgewotCXByaXZhdGUgTGF1bmNoVHJhbnNmb3JtIHN0eWxlc2hlZXRFbnRyeTsKLQlwcml2YXRlIFRhYmxlVmlld2VyIHBhcmFtZXRlclZpZXdlcjsKLQotCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7Ci0JCWlmIChzdHlsZXNoZWV0RW50cnkgPT0gbnVsbCkKLQkJCXJldHVybiBuZXcgT2JqZWN0WzBdOwotCQlyZXR1cm4gc3R5bGVzaGVldEVudHJ5LmdldFBhcmFtZXRlcnMoKS50b0FycmF5KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7Ci0JCXN0eWxlc2hlZXRFbnRyeSA9IChMYXVuY2hUcmFuc2Zvcm0pIG5ld0lucHV0OwotCQlwYXJhbWV0ZXJWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpIHZpZXdlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCX0KLQotCXB1YmxpYyBMYXVuY2hBdHRyaWJ1dGVbXSBnZXRQYXJhbWV0ZXJzKCkgewotCQlyZXR1cm4gc3R5bGVzaGVldEVudHJ5LmdldFBhcmFtZXRlcnMoKS50b0FycmF5KG5ldyBMYXVuY2hBdHRyaWJ1dGVbMF0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVBhcmFtZXRlcnMoTGF1bmNoQXR0cmlidXRlW10gZW50cmllcykgewotCQlmb3IgKExhdW5jaEF0dHJpYnV0ZSBwYXJhbWV0ZXIgOiBlbnRyaWVzKSB7Ci0JCQlzdHlsZXNoZWV0RW50cnkuZ2V0UGFyYW1ldGVycygpLnJlbW92ZShwYXJhbWV0ZXIpOwotCQl9Ci0JCVRhYmxlSXRlbVtdIGl0ZW1zID0gcGFyYW1ldGVyVmlld2VyLmdldFRhYmxlKCkuZ2V0SXRlbXMoKTsKLQkJTGlzdDxMYXVuY2hBdHRyaWJ1dGU+IGVudHJ5TGlzdCA9IEFycmF5cy5hc0xpc3QoZW50cmllcyk7Ci0JCU9iamVjdCBzZWwgPSBudWxsOwotCQlmb3IgKGludCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCVRhYmxlSXRlbSBpdGVtID0gaXRlbXNbaV07Ci0JCQlpZiAoIWVudHJ5TGlzdC5jb250YWlucyhpdGVtLmdldERhdGEoKSkpIHsKLQkJCQlzZWwgPSBpdGVtLmdldERhdGEoKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlwYXJhbWV0ZXJWaWV3ZXIucmVtb3ZlKGVudHJpZXMpOwotCi0JCWlmIChzZWwgIT0gbnVsbCkKLQkJCXBhcmFtZXRlclZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsKSwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkUGFyYW1ldGVyKExhdW5jaEF0dHJpYnV0ZSBwYXJhbWV0ZXIpIHsKLQkJc3R5bGVzaGVldEVudHJ5LmdldFBhcmFtZXRlcnMoKS5hZGQocGFyYW1ldGVyKTsKLQkJcGFyYW1ldGVyVmlld2VyLmFkZChwYXJhbWV0ZXIpOwotCQlwYXJhbWV0ZXJWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHBhcmFtZXRlciksIHRydWUpOwotCQkvLyBwYXJhbWV0ZXJWaWV3ZXIucmVmcmVzaCgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyc0xhYmVsUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyc0xhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE3ODFlNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1BhcmFtZXRlcnNMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci0KLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJzTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElUYWJsZUxhYmVsUHJvdmlkZXIgewotCXB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0JCUxhdW5jaEF0dHJpYnV0ZSBwID0gKExhdW5jaEF0dHJpYnV0ZSkgZWxlbWVudDsKLQkJc3dpdGNoIChjb2x1bW5JbmRleCkgewotCQljYXNlIDA6Ci0JCQlyZXR1cm4gcC51cmk7Ci0JCWNhc2UgMToKLQkJCXJldHVybiBwLnZhbHVlOwotCQl9Ci0JCXJldHVybiAiISI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vU3R5bGVzaGVldENvbnRlbnRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9TdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOGM0NjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9TdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFBpcGVsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLXB1YmxpYyBjbGFzcyBTdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIgewotCXByaXZhdGUgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBMYXVuY2hQaXBlbGluZSBwaXBlbGluZTsKLQotCXB1YmxpYyBTdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyKCkgewotCX0KLQotCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7Ci0JCXJldHVybiBwaXBlbGluZS5nZXRUcmFuc2Zvcm1EZWZzKCkudG9BcnJheShuZXcgTGF1bmNoVHJhbnNmb3JtWzBdKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKLQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpIHZpZXdlcjsKLQkJcGlwZWxpbmUgPSAoTGF1bmNoUGlwZWxpbmUpIG5ld0lucHV0OwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RW50cmllcyhMYXVuY2hUcmFuc2Zvcm1bXSB0cmFuc2Zvcm1zKSB7Ci0JCXBpcGVsaW5lLnNldFRyYW5zZm9ybURlZnMobmV3IEFycmF5TGlzdDxMYXVuY2hUcmFuc2Zvcm0+KEFycmF5cwotCQkJCS5hc0xpc3QodHJhbnNmb3JtcykpKTsKLQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZEVudHJpZXMoTGF1bmNoVHJhbnNmb3JtW10gcmVzLCBPYmplY3QgYmVmb3JlRWxlbWVudCkgewotCQlmb3IgKExhdW5jaFRyYW5zZm9ybSB0cmFuc2Zvcm0gOiByZXMpIHsKLQkJCXBpcGVsaW5lLmFkZFRyYW5zZm9ybURlZih0cmFuc2Zvcm0pOwotCQl9Ci0JCXRhYmxlVmlld2VyLmFkZChyZXMpOwotCQkvLyBzZWxlY3QgdGhlIGZpcnN0IG5ldyBvbmUKLQkJdGFibGVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHJlc1swXSksIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUVudHJpZXMoTGF1bmNoVHJhbnNmb3JtW10gcmVzKSB7Ci0JCWZvciAoTGF1bmNoVHJhbnNmb3JtIHRyYW5zZm9ybSA6IHJlcykgewotCQkJcGlwZWxpbmUucmVtb3ZlVHJhbnNmb3JtRGVmKHRyYW5zZm9ybSk7Ci0JCX0KLQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9TdHlsZXNoZWV0TGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9TdHlsZXNoZWV0TGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjAxNzQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vU3R5bGVzaGVldExhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotcHVibGljIGNsYXNzIFN0eWxlc2hlZXRMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciB7Ci0JcHJpdmF0ZSBJbWFnZSBpbWFnZSA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKAotCQkJImljb25zL3hzbHRfbGF1bmNoLmdpZiIpLmNyZWF0ZUltYWdlKCk7IC8vJE5PTi1OTFMtMSQKLQotCUBPdmVycmlkZQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgewotCQlyZXR1cm4gaW1hZ2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCUxhdW5jaFRyYW5zZm9ybSBsdCA9IChMYXVuY2hUcmFuc2Zvcm0pIGVsZW1lbnQ7Ci0JCWludCBpbmRleCA9IGx0LmdldFBpcGVsaW5lKCkuZ2V0VHJhbnNmb3JtRGVmcygpLmluZGV4T2YobHQpOwotCi0JCUlQYXRoIHBhdGg7Ci0JCXRyeSB7Ci0JCQlwYXRoID0gbHQuZ2V0UGF0aCgpOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdCgKLQkJCQkJTWVzc2FnZXMuU3R5bGVzaGVldEVudHJ5TGFiZWxQcm92aWRlcl9JbnZhbGlkX3BhdGgsCi0JCQkJCW5ldyBPYmplY3RbXSB7ICJudWxsIiB9KTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJaWYgKHBhdGggPT0gbnVsbCkgewotCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQlNZXNzYWdlcy5TdHlsZXNoZWV0RW50cnlMYWJlbFByb3ZpZGVyX0ludmFsaWRfcGF0aCwKLQkJCQkJbmV3IE9iamVjdFtdIHsgIm51bGwiIH0pOyAvLyROT04tTkxTLTEkCi0JCX0gZWxzZSBpZiAoIXBhdGguaXNBYnNvbHV0ZSgpIHx8ICFwYXRoLmlzVmFsaWRQYXRoKHBhdGgudG9TdHJpbmcoKSkpIHsKLQkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdCgKLQkJCQkJTWVzc2FnZXMuU3R5bGVzaGVldEVudHJ5TGFiZWxQcm92aWRlcl9JbnZhbGlkX3BhdGgsCi0JCQkJCW5ldyBPYmplY3RbXSB7IHBhdGgudG9TdHJpbmcoKSB9KTsKLQkJfQotCi0JCVN0cmluZ1tdIHNlZ21lbnRzID0gcGF0aC5zZWdtZW50cygpOwotCQlTdHJpbmdCdWZmZXIgZGlzcGxheVBhdGggPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWlmIChzZWdtZW50cy5sZW5ndGggPiAwKSB7Ci0JCQlkaXNwbGF5UGF0aC5hcHBlbmQoc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0pOwotCQkJZGlzcGxheVBhdGguYXBwZW5kKCIgLSAiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIGRldmljZSA9IHBhdGguZ2V0RGV2aWNlKCk7Ci0JCQlpZiAoZGV2aWNlICE9IG51bGwpIHsKLQkJCQlkaXNwbGF5UGF0aC5hcHBlbmQoZGV2aWNlKTsKLQkJCX0KLQkJCWRpc3BsYXlQYXRoLmFwcGVuZChGaWxlLnNlcGFyYXRvcik7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aCAtIDE7IGkrKykgewotCQkJCWRpc3BsYXlQYXRoLmFwcGVuZChzZWdtZW50c1tpXSkuYXBwZW5kKEZpbGUuc2VwYXJhdG9yKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWRpc3BsYXlQYXRoLmFwcGVuZChwYXRoLnRvU3RyaW5nKCkpOwotCQl9Ci0JCXJldHVybiAoaW5kZXggKyAxKSArICIpICIgKyBkaXNwbGF5UGF0aC50b1N0cmluZygpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9TdHlsZXNoZWV0Vmlld2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1N0eWxlc2hlZXRWaWV3ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0YjNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1N0eWxlc2hlZXRWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5MaXN0ZW5lckxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLXB1YmxpYyBjbGFzcyBTdHlsZXNoZWV0Vmlld2VyIHsKLQlwcml2YXRlIFRhYmxlVmlld2VyIHZpZXdlcjsKLQlwcml2YXRlIGZpbmFsIExpc3RlbmVyTGlzdCBsaXN0ZW5lckxpc3QgPSBuZXcgTGlzdGVuZXJMaXN0KCk7Ci0KLQlwdWJsaWMgU3R5bGVzaGVldFZpZXdlcihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcihwYXJlbnQpOwotCX0KLQotCXB1YmxpYyBUYWJsZVZpZXdlciBnZXRWaWV3ZXIoKSB7Ci0JCXJldHVybiB2aWV3ZXI7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyIGdldFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIoKSB7Ci0JCXJldHVybiAoU3R5bGVzaGVldENvbnRlbnRQcm92aWRlcikgdmlld2VyLmdldENvbnRlbnRQcm92aWRlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEVudHJpZXMoTGF1bmNoVHJhbnNmb3JtW10gdHJhbnNmb3JtcykgewotCQlnZXRTdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyKCkuc2V0RW50cmllcyh0cmFuc2Zvcm1zKTsKLQkJbm90aWZ5Q2hhbmdlZCgpOwotCX0KLQotCXB1YmxpYyBMYXVuY2hUcmFuc2Zvcm1bXSBnZXRFbnRyaWVzKCkgewotCQlyZXR1cm4gKExhdW5jaFRyYW5zZm9ybVtdKSBnZXRTdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyKCkuZ2V0RWxlbWVudHMoCi0JCQkJbnVsbCk7Ci0JfQotCi0JcHVibGljIFNoZWxsIGdldFNoZWxsKCkgewotCQlyZXR1cm4gdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdXBkYXRlU2VsZWN0aW9uKGludCBhY3Rpb25UeXBlLAotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCXN3aXRjaCAoYWN0aW9uVHlwZSkgewotCQljYXNlIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5BREQ6Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJY2FzZSBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24uUkVNT1ZFOgotCQljYXNlIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5NT1ZFOgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIHNlbGVjdGlvbi5zaXplKCkgPiAwOwotCX0KLQotCXB1YmxpYyBJU3RydWN0dXJlZFNlbGVjdGlvbiBnZXRTZWxlY3RlZEVudHJpZXMoKSB7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdmlld2VyCi0JCQkJLmdldFNlbGVjdGlvbigpOwotCQlyZXR1cm4gc2VsZWN0aW9uOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFRyYW5zZm9ybXMoTGF1bmNoVHJhbnNmb3JtW10gcmVzKSB7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdmlld2VyLmdldFNlbGVjdGlvbigpOwotCQlPYmplY3QgYmVmb3JlRWxlbWVudCA9IHNlbC5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJaWYgKGdldEVudHJpZXMoKS5sZW5ndGggPiAxICYmIGJlZm9yZUVsZW1lbnQgPT0gbnVsbCkKLQkJCWJlZm9yZUVsZW1lbnQgPSBnZXRFbnRyaWVzKClbZ2V0RW50cmllcygpLmxlbmd0aCAtIDFdOwotCQlnZXRTdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyKCkuYWRkRW50cmllcyhyZXMsIGJlZm9yZUVsZW1lbnQpOwotCQlub3RpZnlDaGFuZ2VkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlRW50cmllcyhMYXVuY2hUcmFuc2Zvcm1bXSBlbnRyaWVzKSB7Ci0JCWdldFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIoKS5yZW1vdmVFbnRyaWVzKGVudHJpZXMpOwotCQlub3RpZnlDaGFuZ2VkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkRW50cmllc0NoYW5nZWRMaXN0ZW5lcigKLQkJCUlTdHlsZXNoZWV0RW50cmllc0NoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlsaXN0ZW5lckxpc3QuYWRkKGxpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVFbnRyaWVzQ2hhbmdlZExpc3RlbmVyKAotCQkJSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBub3RpZnlDaGFuZ2VkKCkgewotCQlPYmplY3RbXSBsaXN0ZW5lcnMgPSBsaXN0ZW5lckxpc3QuZ2V0TGlzdGVuZXJzKCk7Ci0JCWZvciAoT2JqZWN0IGVsZW1lbnQgOiBsaXN0ZW5lcnMpIHsKLQkJCSgoSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyKSBlbGVtZW50KS5lbnRyaWVzQ2hhbmdlZCh0aGlzKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9UcmFuc2Zvcm1zQmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vVHJhbnNmb3Jtc0Jsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MjU3NmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9UcmFuc2Zvcm1zQmxvY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Gb250OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5BYnN0cmFjdFRhYmxlQmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFkZEV4dGVybmFsRmlsZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWRkV29ya3NwYWNlRmlsZUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuTW92ZURvd25BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLk1vdmVVcEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuUmVtb3ZlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hQaXBlbGluZTsKLQotcHVibGljIGNsYXNzIFRyYW5zZm9ybXNCbG9jayBleHRlbmRzIEFic3RyYWN0VGFibGVCbG9jayBpbXBsZW1lbnRzCi0JCUlTdHlsZXNoZWV0RW50cmllc0NoYW5nZWRMaXN0ZW5lciB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElBTE9HX1NFVFRJTkdTX1BSRUZJWCA9ICJUcmFuc2Zvcm1zQmxvY2siOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBTdHlsZXNoZWV0Vmlld2VyIHN0eWxlc2hlZXRWaWV3ZXI7Ci0JcHJpdmF0ZSBMYXVuY2hQaXBlbGluZSBwaXBlbGluZTsKLQotCXB1YmxpYyBUcmFuc2Zvcm1zQmxvY2soKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUZvbnQgZm9udCA9IHBhcmVudC5nZXRGb250KCk7Ci0KLQkJR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWdyb3VwLnNldFRleHQoZ2V0TmFtZSgpKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ3JvdXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAzOwotCQlncm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJZ3JvdXAuc2V0Rm9udChmb250KTsKLQotCQlzZXRDb250cm9sKGdyb3VwKTsKLQotCQlzdHlsZXNoZWV0Vmlld2VyID0gbmV3IFN0eWxlc2hlZXRWaWV3ZXIoZ3JvdXApOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQlzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpLmdldFRhYmxlKCkuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXN0eWxlc2hlZXRWaWV3ZXIuYWRkRW50cmllc0NoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJc3R5bGVzaGVldFZpZXdlci5nZXRWaWV3ZXIoKS5nZXRDb250cm9sKCkuc2V0Rm9udChmb250KTsKLQkJc3R5bGVzaGVldFZpZXdlci5nZXRWaWV3ZXIoKS5zZXRMYWJlbFByb3ZpZGVyKAotCQkJCW5ldyBTdHlsZXNoZWV0TGFiZWxQcm92aWRlcigpKTsKLQkJc3R5bGVzaGVldFZpZXdlci5nZXRWaWV3ZXIoKS5zZXRDb250ZW50UHJvdmlkZXIoCi0JCQkJbmV3IFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIoKSk7Ci0JCXN0eWxlc2hlZXRWaWV3ZXIuZ2V0Vmlld2VyKCkuZ2V0VGFibGUoKS5hZGRLZXlMaXN0ZW5lcigKLQkJCQluZXcgS2V5QWRhcHRlcigpIHsKLQkJCQkJQE92ZXJyaWRlCi0JCQkJCXB1YmxpYyB2b2lkIGtleVByZXNzZWQoS2V5RXZlbnQgZXZlbnQpIHsKLQkJCQkJCWlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkRFTCAmJiBldmVudC5zdGF0ZU1hc2sgPT0gMCkgewotCQkJCQkJCVJlbW92ZUFjdGlvbiByYSA9IG5ldyBSZW1vdmVBY3Rpb24oc3R5bGVzaGVldFZpZXdlcik7Ci0JCQkJCQkJcmEucnVuKCk7Ci0JCQkJCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSk7Ci0KLQkJQ29tcG9zaXRlIHVwRG93bkJ1dHRvbkNvbXAgPSBuZXcgQ29tcG9zaXRlKGdyb3VwLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgdXBEb3duQnV0dG9uTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJdXBEb3duQnV0dG9uTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXVwRG93bkJ1dHRvbkxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCXVwRG93bkJ1dHRvbkNvbXAuc2V0TGF5b3V0KHVwRG93bkJ1dHRvbkxheW91dCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgZmFsc2UsIHRydWUpOwotCQl1cERvd25CdXR0b25Db21wLnNldExheW91dERhdGEoZ2QpOwotCQl1cERvd25CdXR0b25Db21wLnNldEZvbnQoZm9udCk7Ci0KLQkJY3JlYXRlQXJyb3dCdXR0b24odXBEb3duQnV0dG9uQ29tcCwgbmV3IE1vdmVVcEFjdGlvbihzdHlsZXNoZWV0Vmlld2VyKSwKLQkJCQlTV1QuVVApOwotCQlMYWJlbCBzcGFjZXIgPSBuZXcgTGFiZWwodXBEb3duQnV0dG9uQ29tcCwgU1dULk5PTkUpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuTk9ORSwgU1dULkZJTEwsIGZhbHNlLCB0cnVlKTsKLQkJc3BhY2VyLnNldExheW91dERhdGEoZ2QpOwotCQljcmVhdGVBcnJvd0J1dHRvbih1cERvd25CdXR0b25Db21wLAotCQkJCW5ldyBNb3ZlRG93bkFjdGlvbihzdHlsZXNoZWV0Vmlld2VyKSwgU1dULkRPV04pOwotCi0JCUNvbXBvc2l0ZSBwYXRoQnV0dG9uQ29tcCA9IG5ldyBDb21wb3NpdGUoZ3JvdXAsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBwYXRoQnV0dG9uTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJcGF0aEJ1dHRvbkxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlwYXRoQnV0dG9uTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJcGF0aEJ1dHRvbkNvbXAuc2V0TGF5b3V0KHBhdGhCdXR0b25MYXlvdXQpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcKLQkJCQl8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0JCXBhdGhCdXR0b25Db21wLnNldExheW91dERhdGEoZ2QpOwotCQlwYXRoQnV0dG9uQ29tcC5zZXRGb250KGZvbnQpOwotCi0JCWNyZWF0ZUJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgbmV3IEFkZFdvcmtzcGFjZUZpbGVBY3Rpb24oCi0JCQkJc3R5bGVzaGVldFZpZXdlcikpOwotCQljcmVhdGVCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIG5ldyBBZGRFeHRlcm5hbEZpbGVBY3Rpb24oCi0JCQkJc3R5bGVzaGVldFZpZXdlciwgRElBTE9HX1NFVFRJTkdTX1BSRUZJWCkpOwotCQljcmVhdGVCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIG5ldyBSZW1vdmVBY3Rpb24oc3R5bGVzaGVldFZpZXdlcikpOwotCX0KLQotCXB1YmxpYyBWaWV3ZXIgZ2V0U3R5bGVzaGVldFZpZXdlcigpIHsKLQkJcmV0dXJuIHN0eWxlc2hlZXRWaWV3ZXIgPT0gbnVsbCA/IG51bGwgOiBzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpOwotCX0KLQotCXByb3RlY3RlZCBCdXR0b24gY3JlYXRlQXJyb3dCdXR0b24oQ29tcG9zaXRlIHBhdGhCdXR0b25Db21wLAotCQkJQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uIGFjdGlvbiwgaW50IHVwZG93bikgewotCQlCdXR0b24gYiA9IG5ldyBCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIFNXVC5BUlJPVyB8IHVwZG93bik7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0JCWIuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWFjdGlvbi5zZXRCdXR0b24oYik7Ci0JCXJldHVybiBiOwotCX0KLQotCXByb3RlY3RlZCBCdXR0b24gY3JlYXRlQnV0dG9uKENvbXBvc2l0ZSBwYXRoQnV0dG9uQ29tcCwKLQkJCUFic3RyYWN0U3R5bGVzaGVldEFjdGlvbiBhY3Rpb24pIHsKLQkJQnV0dG9uIGJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIGFjdGlvbi5nZXRUZXh0KCksIG51bGwpOwotCQlhY3Rpb24uc2V0QnV0dG9uKGJ1dHRvbik7Ci0JCXJldHVybiBidXR0b247Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gTWVzc2FnZXMuVHJhbnNmb3Jtc0Jsb2NrX05hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UGlwZWxpbmUoTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmUpIHsKLQkJdGhpcy5waXBlbGluZSA9IHBpcGVsaW5lOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVGcm9tKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLQkJc3R5bGVzaGVldFZpZXdlci5nZXRWaWV3ZXIoKS5zZXRJbnB1dChwaXBlbGluZSk7Ci0JCWlmIChwaXBlbGluZS5nZXRUcmFuc2Zvcm1EZWZzKCkuc2l6ZSgpID4gMCkgewotCQkJc3R5bGVzaGVldFZpZXdlci5nZXRWaWV3ZXIoKQotCQkJCQkuc2V0U2VsZWN0aW9uKAotCQkJCQkJCW5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHBpcGVsaW5lLmdldFRyYW5zZm9ybURlZnMoKQotCQkJCQkJCQkJLmdldCgwKSkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCX0KLQotCXB1YmxpYyB2b2lkIGVudHJpZXNDaGFuZ2VkKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKSB7Ci0JCXNldERpcnR5KHRydWUpOwotCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc2V0U29ydENvbHVtbihpbnQgY29sdW1uKSB7Ci0JCXN3aXRjaCAoY29sdW1uKSB7Ci0JCS8vIGNhc2UgMToKLQkJLy8gc29ydEJ5TmFtZSgpOwotCQkvLyBicmVhazsKLQkJLy8gY2FzZSAyOgotCQkvLyBzb3J0QnlUeXBlKCk7Ci0JCS8vIGJyZWFrOwotCQl9Ci0JCXN1cGVyLnNldFNvcnRDb2x1bW4oY29sdW1uKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgVGFibGUgZ2V0VGFibGUoKSB7Ci0JCXJldHVybiBzdHlsZXNoZWV0Vmlld2VyID09IG51bGwgPyBudWxsIDogc3R5bGVzaGVldFZpZXdlci5nZXRWaWV3ZXIoKQotCQkJCS5nZXRUYWJsZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nU2V0dGluZ3MoKSB7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UXVhbGlmaWVyKCkgewotCQlyZXR1cm4gWFNMRGVidWdVSUNvbnN0YW50cy5NQUlOX1RSQU5TRk9STVNfQkxPQ0s7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJaWYgKHN0eWxlc2hlZXRWaWV3ZXIgIT0gbnVsbCkKLQkJCXN0eWxlc2hlZXRWaWV3ZXIucmVtb3ZlRW50cmllc0NoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vWFNMTWFpblRhYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9YU0xNYWluVGFiLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZGIxNGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9YU0xNYWluVGFiLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjIzNTU3IC0gQWRkZWQgSW1hZ2VzIGNvbnRyaWJ1dGVkIGJ5IEhvbGdlciBWb29ybWFuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW47Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWwuWFNMRGVidWdQbHVnaW5JbWFnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hQaXBlbGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi1wdWJsaWMgY2xhc3MgWFNMTWFpblRhYiBleHRlbmRzIFhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIgewotCXByaXZhdGUgZmluYWwgSW5wdXRGaWxlQmxvY2sgaW5wdXRGaWxlQmxvY2s7Ci0JcHJpdmF0ZSBmaW5hbCBUcmFuc2Zvcm1zQmxvY2sgdHJhbnNmb3Jtc0Jsb2NrOwotCXByaXZhdGUgZmluYWwgUGFyYW1ldGVyc0Jsb2NrIHBhcmFtZXRlcnNCbG9jazsKLQlwdWJsaWMgTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmU7Ci0KLQkvLyBwcml2YXRlIFJlbmRlckJsb2NrIHJlbmRlckJsb2NrOwotCS8vIHByaXZhdGUgT3V0cHV0QmxvY2sgb3V0cHV0QmxvY2s7Ci0KLQlwdWJsaWMgWFNMTWFpblRhYigpIHsKLQkJSVJlc291cmNlW10gcmVzb3VyY2VDb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotCQlJRmlsZSBpbnB1dEZpbGUgPSBnZXRYTUxJbnB1dChyZXNvdXJjZUNvbnRleHQpOwotCi0JCWlucHV0RmlsZUJsb2NrID0gbmV3IElucHV0RmlsZUJsb2NrKGlucHV0RmlsZSk7Ci0JCXRyYW5zZm9ybXNCbG9jayA9IG5ldyBUcmFuc2Zvcm1zQmxvY2soKTsKLQkJcGFyYW1ldGVyc0Jsb2NrID0gbmV3IFBhcmFtZXRlcnNCbG9jayh0cmFuc2Zvcm1zQmxvY2spOwotCQkvLyByZW5kZXJCbG9jayA9IG5ldyBSZW5kZXJCbG9jaygpOwotCQkvLyBvdXRwdXRCbG9jayA9IG5ldyBPdXRwdXRCbG9jaygpOwotCi0JCXNldEJsb2NrcyhuZXcgSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB7IGlucHV0RmlsZUJsb2NrLAotCQkJCXRyYW5zZm9ybXNCbG9jaywgcGFyYW1ldGVyc0Jsb2NrIH0pOyAvLyAscmVuZGVyQmxvY2ssb3V0cHV0QmxvY2t9KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOwotCQlDb21wb3NpdGUgY29tcCA9IChDb21wb3NpdGUpIGdldENvbnRyb2woKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgxLCBmYWxzZSk7Ci0JCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJaW5wdXRGaWxlQmxvY2suY3JlYXRlQ29udHJvbChjb21wKTsKLQkJdHJhbnNmb3Jtc0Jsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0JCXBhcmFtZXRlcnNCbG9jay5jcmVhdGVDb250cm9sKGNvbXApOwotCQkvLyByZW5kZXJCbG9jay5jcmVhdGVDb250cm9sKGNvbXApOwotCQkvLyBvdXRwdXRCbG9jay5jcmVhdGVDb250cm9sKGNvbXApOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCQlMYXVuY2hQaXBlbGluZSBscCA9IG5ldyBMYXVuY2hQaXBlbGluZSgpOwotCQlJUmVzb3VyY2VbXSByZXNvdXJjZUNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0JCUlGaWxlW10gc3R5bGVzaGVldHMgPSBnZXRYU0xTdHlsZXNoZWV0cyhyZXNvdXJjZUNvbnRleHQpOwotCQlmb3IgKElGaWxlIGZpbGUgOiBzdHlsZXNoZWV0cykgewotCQkJTGF1bmNoVHJhbnNmb3JtIGx0ID0gbmV3IExhdW5jaFRyYW5zZm9ybShmaWxlLmdldEZ1bGxQYXRoKCkKLQkJCQkJLnRvUG9ydGFibGVTdHJpbmcoKSwgTGF1bmNoVHJhbnNmb3JtLlJFU09VUkNFX1RZUEUpOwotCQkJbHAuYWRkVHJhbnNmb3JtRGVmKGx0KTsKLQkJfQotCQlzYXZlUGlwZWxpbmUoY29uZmlndXJhdGlvbiwgbHApOwotCQlzdXBlci5zZXREZWZhdWx0cyhjb25maWd1cmF0aW9uKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0JCXBpcGVsaW5lID0gbnVsbDsKLQkJdHJ5IHsKLQkJCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QSVBFTElORSwKLQkJCQkJKFN0cmluZykgbnVsbCk7Ci0JCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocwotCQkJCQkJLmdldEJ5dGVzKCkpOwotCQkJCXBpcGVsaW5lID0gTGF1bmNoUGlwZWxpbmUuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCQl9IGVsc2UgewotCQkJCXBpcGVsaW5lID0gbmV3IExhdW5jaFBpcGVsaW5lKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJdHJhbnNmb3Jtc0Jsb2NrLnNldFBpcGVsaW5lKHBpcGVsaW5lKTsKLQkJc3VwZXIuaW5pdGlhbGl6ZUZyb20oY29uZmlndXJhdGlvbik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCQlzdXBlci5wZXJmb3JtQXBwbHkoY29uZmlndXJhdGlvbik7Ci0JCXNhdmVQaXBlbGluZShjb25maWd1cmF0aW9uLCBwaXBlbGluZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNhdmVQaXBlbGluZShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24sCi0JCQlMYXVuY2hQaXBlbGluZSBwaXBlbGluZSkgewotCQl0cnkgewotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QSVBFTElORSwgcGlwZWxpbmUKLQkJCQkJCQkudG9YTUwoKSk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBNZXNzYWdlcy5YU0xNYWluVGFiX1RhYk5hbWU7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVJlc291cmNlW10gZ2V0Q29udGV4dCgpIHsKLQotCQkvLyBJUHJvamVjdFtdIHByb2plY3RzID0KLQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQkvLyBwcm9qZWN0LnNldElucHV0KCBwcm9qZWN0cyk7Ci0JCS8vIFN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCS8vIElYU0xUTGF1bmNoQ29uZmlndXJhdGlvbi5QUk9KRUNULCAiIik7Ci0JCS8vIElQcm9qZWN0IHByb2plY3QgPSBudWxsOwotCQkvLyBpZiggcy5lcXVhbHMoIiIpKQotCQkvLyB7Ci0JCS8vIGlmKCBwcm9qZWN0cy5sZW5ndGg+MCkKLQkJLy8gewotCQkvLyBwcm9qZWN0ID0gcHJvamVjdHNbIDBdOwotCQkvLyB9Ci0JCS8vIH0KLQkJLy8gZWxzZQotCQkvLyBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KCBzKTsKLQotCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gWFNMRGVidWdVSVBsdWdpbi5nZXRBY3RpdmVQYWdlKCk7Ci0JCUxpc3Q8T2JqZWN0PiByZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKLQkJaWYgKHBhZ2UgIT0gbnVsbCkgewotCQkJLy8gdXNlIHNlbGVjdGlvbnMgdG8gZmluZCB0aGUgcHJvamVjdAotCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBwYWdlLmdldFNlbGVjdGlvbigpOwotCQkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpCi0JCQkJCSYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3MgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQkJCQlmb3IgKEl0ZXJhdG9yPD8+IGl0ZXIgPSBzcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCQkJT2JqZWN0IGVsZW1lbnQgPSBpdGVyLm5leHQoKTsKLQkJCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpCi0JCQkJCQlyZXNvdXJjZXMuYWRkKGVsZW1lbnQpOwotCQkJCX0KLQkJCQlyZXR1cm4gcmVzb3VyY2VzLnRvQXJyYXkobmV3IElSZXNvdXJjZVswXSk7Ci0JCQl9Ci0JCQkvLyB1c2UgY3VycmVudCBlZGl0b3IgdG8gZmluZCB0aGUgcHJvamVjdAotCQkJSUVkaXRvclBhcnQgcGFydCA9IHBhZ2UuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQlpZiAocGFydCAhPSBudWxsKSB7Ci0JCQkJSUVkaXRvcklucHV0IGlucHV0ID0gcGFydC5nZXRFZGl0b3JJbnB1dCgpOwotCQkJCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGlucHV0LmdldEFkYXB0ZXIoSUZpbGUuY2xhc3MpOwotCQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQkJCXJldHVybiBuZXcgSVJlc291cmNlW10geyBmaWxlIH07Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5ldyBJUmVzb3VyY2VbMF07Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRYTUxJbnB1dChJUmVzb3VyY2VbXSBjb250ZXh0KSB7Ci0JCWZvciAoSVJlc291cmNlIHJlc291cmNlIDogY29udGV4dCkgewotCQkJaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUKLQkJCQkJJiYgKCJ4bWwiLmVxdWFsc0lnbm9yZUNhc2UocmVzb3VyY2UuZ2V0RmlsZUV4dGVuc2lvbigpKSB8fCAieGh0bWwiLmVxdWFsc0lnbm9yZUNhc2UocmVzb3VyY2UuZ2V0RmlsZUV4dGVuc2lvbigpKSkpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCXJldHVybiAoSUZpbGUpIHJlc291cmNlOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgSUZpbGVbXSBnZXRYU0xTdHlsZXNoZWV0cyhJUmVzb3VyY2VbXSBjb250ZXh0KSB7Ci0JCUxpc3Q8SVJlc291cmNlPiBzdHlsZXNoZWV0cyA9IG5ldyBBcnJheUxpc3Q8SVJlc291cmNlPigpOwotCQlmb3IgKElSZXNvdXJjZSByZXNvdXJjZSA6IGNvbnRleHQpIHsKLQkJCWlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlCi0JCQkJCSYmIFhTTENvcmUuaXNYU0xGaWxlKChJRmlsZSkgcmVzb3VyY2UpKQotCQkJCXN0eWxlc2hlZXRzLmFkZChyZXNvdXJjZSk7Ci0JCX0KLQkJcmV0dXJuIHN0eWxlc2hlZXRzLnRvQXJyYXkobmV3IElGaWxlWzBdKTsKLQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFhTTFBsdWdpbkltYWdlSGVscGVyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoCi0JCQkJWFNMRGVidWdQbHVnaW5JbWFnZXMuSU1HX01BSU5fVEFCKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9vdXRwdXQvT3V0cHV0RmlsZUJsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9vdXRwdXQvT3V0cHV0RmlsZUJsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOTliNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvb3V0cHV0L091dHB1dEZpbGVCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlJlc291cmNlU2VsZWN0aW9uQmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMVFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBPdXRwdXRGaWxlQmxvY2sgZXh0ZW5kcyBSZXNvdXJjZVNlbGVjdGlvbkJsb2NrIHsKLQlwcml2YXRlIEJ1dHRvbiBvcGVuRmlsZUNoZWNrQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIGZvcm1hdEZpbGVDaGVja0J1dHRvbjsKLQlwcml2YXRlIFN0cmluZyBpbnB1dEZpbGVuYW1lOwotCXByaXZhdGUgVGV4dCBmaWxlTmFtZVRleHQ7Ci0JcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdE91dHB1dEZpbGVOYW1lOwotCXByaXZhdGUgU3RyaW5nIG91dHB1dEZpbGVOYW1lOwotCi0JcHVibGljIE91dHB1dEZpbGVCbG9jaygpIHsKLQkJc3VwZXIoSVJlc291cmNlLkZPTERFUiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0TWVzc2FnZShpbnQgdHlwZSkgewotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBFUlJPUl9ESVJFQ1RPUllfTk9UX1NQRUNJRklFRDoKLQkJCXJldHVybiBNZXNzYWdlcy5PdXRwdXRGT0ZpbGVCbG9ja19ESVJFQ1RPUllfTk9UX1NQRUNJRklFRDsKLQkJY2FzZSBFUlJPUl9ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1Q6Ci0JCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0Rk9GaWxlQmxvY2tfRElSRUNUT1JZX0RPRVNfTk9UX0VYSVNUOwotCQljYXNlIEdST1VQX05BTUU6Ci0JCQlyZXR1cm4gZ2V0TmFtZSgpOwotCQljYXNlIFVTRV9ERUZBVUxUX1JBRElPOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZpbGVCbG9ja18wOwotCQljYXNlIFVTRV9PVEhFUl9SQURJTzoKLQkJCXJldHVybiBNZXNzYWdlcy5PdXRwdXRGT0ZpbGVCbG9ja19PVEhFUl9SQURJTzsKLQkJY2FzZSBESVJFQ1RPUllfRElBTE9HX01FU1NBR0U6Ci0JCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0Rk9GaWxlQmxvY2tfRElBTE9HX01FU1NBR0U7Ci0JCWNhc2UgV09SS1NQQUNFX0RJQUxPR19NRVNTQUdFOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZPRmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfTUVTU0FHRTsKLQkJY2FzZSBWQVJJQUJMRVNfQlVUVE9OOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZPRmlsZUJsb2NrX1ZBUklBQkxFU19CVVRUT047Ci0JCWNhc2UgRklMRV9TWVNURU1fQlVUVE9OOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZPRmlsZUJsb2NrX0ZJTEVfU1lTVEVNX0JVVFRPTjsKLQkJY2FzZSBXT1JLU1BBQ0VfQlVUVE9OOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZPRmlsZUJsb2NrX1dPUktTUEFDRV9CVVRUT047Ci0JCWNhc2UgV09SS1NQQUNFX0RJQUxPR19USVRMRToKLQkJCXJldHVybiBNZXNzYWdlcy5PdXRwdXRGT0ZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX1RJVExFOwotCQl9Ci0JCXJldHVybiAiIiArIHR5cGU7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDaGVja2JveEFuZFRleHQoQ29tcG9zaXRlIHBhcmVudCkgewotCQlpZiAoc2hvd0RlZmF1bHQpIHsKLQkJCXVzZURlZmF1bHRDaGVja0J1dHRvbiA9IGNyZWF0ZUNoZWNrQnV0dG9uKHBhcmVudCwKLQkJCQkJZ2V0TWVzc2FnZShVU0VfREVGQVVMVF9SQURJTykpOwotCQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpOwotCQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQkJdXNlRGVmYXVsdENoZWNrQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotCQkJdXNlRGVmYXVsdENoZWNrQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQkJfQotCi0JCUNvbXBvc2l0ZSBzcGVjaWZpY0ZpbGVDb21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgyLCBmYWxzZSk7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWlmIChzaG93RGVmYXVsdCkKLQkJCWxheW91dC5tYXJnaW5MZWZ0ID0gMjA7Ci0JCWVsc2UKLQkJCWxheW91dC5tYXJnaW5MZWZ0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXNwZWNpZmljRmlsZUNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMjsKLQkJc3BlY2lmaWNGaWxlQ29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChzcGVjaWZpY0ZpbGVDb21wLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuT3V0cHV0RmlsZUJsb2NrXzEpOwotCi0JCWZpbGVOYW1lVGV4dCA9IG5ldyBUZXh0KHNwZWNpZmljRmlsZUNvbXAsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSBzaG93RGVmYXVsdCA/IDEgOiAyOwotCQlmaWxlTmFtZVRleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWZpbGVOYW1lVGV4dC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQlmaWxlTmFtZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCi0JCWlmIChzaG93RGVmYXVsdCkgewotCQkJbGFiZWwgPSBuZXcgTGFiZWwoc3BlY2lmaWNGaWxlQ29tcCwgU1dULk5PTkUpOwotCQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5PdXRwdXRGaWxlQmxvY2tfNyk7Ci0JCX0KLQotCQlyZXNvdXJjZVRleHQgPSBuZXcgVGV4dChzcGVjaWZpY0ZpbGVDb21wLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gc2hvd0RlZmF1bHQgPyAxIDogMjsKLQkJcmVzb3VyY2VUZXh0LnNldExheW91dERhdGEoZ2QpOwotCQlyZXNvdXJjZVRleHQuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJcmVzb3VyY2VUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVCdXR0b25zKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIGNoZWNrQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJY2hlY2tDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoCi0JCQkJR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdsLm1hcmdpbldpZHRoID0gMDsKLQkJY2hlY2tDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKLQotCQlvcGVuRmlsZUNoZWNrQnV0dG9uID0gY3JlYXRlQ2hlY2tCdXR0b24oY2hlY2tDb21wb3NpdGUsCi0JCQkJTWVzc2FnZXMuT3V0cHV0RmlsZUJsb2NrXzgpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMTsKLQkJb3BlbkZpbGVDaGVja0J1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKLQkJb3BlbkZpbGVDaGVja0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlpZiAob3BlbkZpbGVDaGVja0J1dHRvbi5nZXRTZWxlY3Rpb24oKSkgewotCQkJCQlmb3JtYXRGaWxlQ2hlY2tCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKLQkJCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWZvcm1hdEZpbGVDaGVja0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCQkJZm9ybWF0RmlsZUNoZWNrQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQotCQlmb3JtYXRGaWxlQ2hlY2tCdXR0b24gPSBjcmVhdGVDaGVja0J1dHRvbihjaGVja0NvbXBvc2l0ZSwKLQkJCQlNZXNzYWdlcy5PdXRwdXRGaWxlQmxvY2tfMik7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAxOwotCQlmb3JtYXRGaWxlQ2hlY2tCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWZvcm1hdEZpbGVDaGVja0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCUNvbXBvc2l0ZSBidXR0b25Db21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5UT1ApOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDMsIGZhbHNlKTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWJ1dHRvbkNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRU5ECi0JCQkJfCBHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDE7Ci0JCWJ1dHRvbkNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWJ1dHRvbkNvbXAuc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQotCQlmV29ya3NwYWNlQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25Db21wLAotCQkJCWdldE1lc3NhZ2UoV09SS1NQQUNFX0JVVFRPTiksIG51bGwpOwotCQlmV29ya3NwYWNlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQotCQlmRmlsZVN5c3RlbUJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uQ29tcCwKLQkJCQlnZXRNZXNzYWdlKEZJTEVfU1lTVEVNX0JVVFRPTiksIG51bGwpOwotCQlmRmlsZVN5c3RlbUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih3aWRnZXRMaXN0ZW5lcik7Ci0KLQkJZlZhcmlhYmxlc0J1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uQ29tcCwKLQkJCQlnZXRNZXNzYWdlKFZBUklBQkxFU19CVVRUT04pLCBudWxsKTsKLQkJZlZhcmlhYmxlc0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih3aWRnZXRMaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0RmlsZUJsb2NrXzk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQl0cnkgewotCQkJaW5wdXRGaWxlbmFtZSA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCQl1cGRhdGVEZWZhdWx0T3V0cHV0RmlsZSgpOwotCi0JCQlib29sZWFuIHVzZURlZmF1bHQgPSBjb25maWd1cmF0aW9uCi0JCQkJCS5nZXRBdHRyaWJ1dGUoCi0JCQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFLAotCQkJCQkJCXRydWUpOwotCQkJdXNlRGVmYXVsdENoZWNrQnV0dG9uLnNldFNlbGVjdGlvbih1c2VEZWZhdWx0KTsKLQotCQkJb3V0cHV0RmlsZU5hbWUgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GSUxFTkFNRSwKLQkJCQkJZGVmYXVsdE91dHB1dEZpbGVOYW1lKTsKLQkJCXJlc291cmNlID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfRk9MREVSLAotCQkJCQlkZWZhdWx0UmVzb3VyY2UpOwotCi0JCQl1cGRhdGVSZXNvdXJjZVRleHQodXNlRGVmYXVsdCk7Ci0KLQkJCWJvb2xlYW4gb3BlbkZpbGVPbkNvbXBsZXRpb24gPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09QRU5fRklMRSwgdHJ1ZSk7Ci0JCQlvcGVuRmlsZUNoZWNrQnV0dG9uLnNldFNlbGVjdGlvbihvcGVuRmlsZU9uQ29tcGxldGlvbik7Ci0KLQkJCWJvb2xlYW4gZm9ybWF0RmlsZU9uQ29tcGxldGlvbiA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfRk9STUFUX0ZJTEUsIGZhbHNlKTsKLQkJCWZvcm1hdEZpbGVDaGVja0J1dHRvbi5zZXRTZWxlY3Rpb24oZm9ybWF0RmlsZU9uQ29tcGxldGlvbik7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JCWJvb2xlYW4gdXNlRGVmYXVsdCA9IHVzZURlZmF1bHRDaGVja0J1dHRvbi5nZXRTZWxlY3Rpb24oKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFLAotCQkJCXVzZURlZmF1bHQpOwotCi0JCVN0cmluZyBvdXRwdXRGaWxlID0gcmVzb3VyY2VUZXh0LmdldFRleHQoKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GT0xERVIsIG91dHB1dEZpbGUpOwotCi0JCVN0cmluZyBvdXRwdXRGaWxlTmFtZSA9IGZpbGVOYW1lVGV4dC5nZXRUZXh0KCk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfRklMRU5BTUUsCi0JCQkJb3V0cHV0RmlsZU5hbWUpOwotCi0JCWJvb2xlYW4gb3BlbkZpbGVPbkNvbXBsZXRpb24gPSBvcGVuRmlsZUNoZWNrQnV0dG9uLmdldFNlbGVjdGlvbigpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1BFTl9GSUxFLAotCQkJCW9wZW5GaWxlT25Db21wbGV0aW9uKTsKLQotCQlib29sZWFuIGZvcm1hdEZpbGVPbkNvbXBsZXRpb24gPSBmb3JtYXRGaWxlQ2hlY2tCdXR0b24uZ2V0U2VsZWN0aW9uKCk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9GT1JNQVRfRklMRSwKLQkJCQlmb3JtYXRGaWxlT25Db21wbGV0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pIHsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFLAotCQkJCXRydWUpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX0ZPTERFUiwKLQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GSUxFTkFNRSwKLQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09QRU5fRklMRSwgdHJ1ZSk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9GT1JNQVRfRklMRSwgZmFsc2UpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVJlc291cmNlVGV4dChib29sZWFuIHVzZURlZmF1bHQpIHsKLQkJZmlsZU5hbWVUZXh0LnNldEVuYWJsZWQoIXVzZURlZmF1bHQpOwotCQlpZiAodXNlRGVmYXVsdCkKLQkJCWZpbGVOYW1lVGV4dAotCQkJCQkuc2V0VGV4dChkZWZhdWx0T3V0cHV0RmlsZU5hbWUgPT0gbnVsbCA/ICIiIDogZGVmYXVsdE91dHB1dEZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAotCQllbHNlCi0JCQlmaWxlTmFtZVRleHQuc2V0VGV4dChvdXRwdXRGaWxlTmFtZSA9PSBudWxsID8gZGVmYXVsdE91dHB1dEZpbGVOYW1lCi0JCQkJCTogb3V0cHV0RmlsZU5hbWUpOwotCQlzdXBlci51cGRhdGVSZXNvdXJjZVRleHQodXNlRGVmYXVsdCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZURlZmF1bHRPdXRwdXRGaWxlKCkgewotCQl0cnkgewotCQkJSVBhdGggcGF0aCA9IFhTTFRSdW50aW1lCi0JCQkJCS5kZWZhdWx0T3V0cHV0RmlsZUZvcklucHV0RmlsZShpbnB1dEZpbGVuYW1lKTsKLQkJCS8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgcGF0aCBleGlzdHMgaW4gdGhlIHdvcmtzcGFjZQotCQkJSUZpbGVbXSBmaWxlcyA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkKLQkJCQkJLmZpbmRGaWxlc0ZvckxvY2F0aW9uKHBhdGgpOwotCQkJaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsvLyBpbnNpZGUgd29ya3NwYWNlCi0JCQkJSVBhdGggcCA9IG5ldyBQYXRoKGZpbGVzWzBdLmdldFByb2plY3QoKS5nZXROYW1lKCkpOwotCQkJCXAuYXBwZW5kKGZpbGVzWzBdLmdldFBhcmVudCgpLmdldFByb2plY3RSZWxhdGl2ZVBhdGgoKSk7Ci0JCQkJZGVmYXVsdFJlc291cmNlID0gIiR7d29ya3NwYWNlX2xvYzovIiArIHAudG9TdHJpbmcoKSArICJ9IjsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQkJCX0gZWxzZSB7Ly8gb3V0c2lkZSB3b3Jrc3BhY2UKLQkJCQlJUGF0aCBwID0gcGF0aC5yZW1vdmVMYXN0U2VnbWVudHMoMSk7Ci0JCQkJZGVmYXVsdFJlc291cmNlID0gcC50b09TU3RyaW5nKCk7Ci0JCQl9Ci0JCQlkZWZhdWx0T3V0cHV0RmlsZU5hbWUgPSBwYXRoLmxhc3RTZWdtZW50KCk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvb3V0cHV0L091dHB1dFRhYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvb3V0cHV0L091dHB1dFRhYi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTZiODkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL291dHB1dC9PdXRwdXRUYWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLldvcmtpbmdEaXJlY3RvcnlCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWwuWFNMRGVidWdQbHVnaW5JbWFnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlhTTE1haW5UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIE91dHB1dFRhYiBleHRlbmRzIFhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIgewotCXByaXZhdGUgZmluYWwgT3V0cHV0RmlsZUJsb2NrIG91dHB1dEZpbGVCbG9jazsKLQlwcml2YXRlIGZpbmFsIFdvcmtpbmdEaXJlY3RvcnlCbG9jayB3b3JraW5nRGlyZWN0b3J5QmxvY2s7Ci0KLQlwdWJsaWMgT3V0cHV0VGFiKFhTTE1haW5UYWIgbWFpbikgewotCQlvdXRwdXRGaWxlQmxvY2sgPSBuZXcgT3V0cHV0RmlsZUJsb2NrKCk7Ci0JCXdvcmtpbmdEaXJlY3RvcnlCbG9jayA9IG5ldyBXb3JraW5nRGlyZWN0b3J5QmxvY2soCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1dPUktJTkdfRElSKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBJUHJvamVjdCBnZXRQcm9qZWN0KElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX07Ci0KLQkJc2V0QmxvY2tzKG5ldyBJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdIHsgb3V0cHV0RmlsZUJsb2NrLAotCQkJCXdvcmtpbmdEaXJlY3RvcnlCbG9jayB9KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOwotCQlDb21wb3NpdGUgY29tcCA9IChDb21wb3NpdGUpIGdldENvbnRyb2woKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgxLCBmYWxzZSk7Ci0JCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJb3V0cHV0RmlsZUJsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0KLQkJd29ya2luZ0RpcmVjdG9yeUJsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0KLQkJLy8gR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAoY29tcCwgU1dULk5VTEwpOwotCQkvLyBncm91cC5zZXRUZXh0KE1lc3NhZ2VzLk91dHB1dFRhYl8wKTsKLQkJLy8gR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCB0cnVlKTsKLQkJLy8gZ3JvdXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCS8vIGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLQkJLy8gZ3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJLy8gb3V0cHV0QmxvY2suY3JlYXRlQ29udHJvbChncm91cCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMub3V0cHV0IjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dFRhYl8xOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpIHsKLQkJcmV0dXJuIFhTTFBsdWdpbkltYWdlSGVscGVyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoCi0JCQkJWFNMRGVidWdQbHVnaW5JbWFnZXMuSU1HX09VVFBVVF9UQUIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ZTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M4MmU0OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDBiMzI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI0ZyaSBTZXAgMTggMjE6MTc6NDcgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmQ4ZmY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS5pbnRlcm5hbC5FWFNMVENvcmUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsLnJlc29sdmVyO3gtaW50ZXJuYWw6PXRydWUKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjUyYzA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzY2hlbWFzLyxcCi0gICAgICAgICAgICAgICBiaW4vLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgc2NoZW1hcy8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZTI0ZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBEYXZpZCBDYXJ2ZXIgLSBJbml0aWFsIEFQSSBhbmQgSW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1wbHVnaW5OYW1lPUVYU0xUIFVJIEV4dGVuc2lvbnMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjczZmJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLnJlc29sdmVyRXh0ZW5zaW9ucyI+Ci0gICAgICA8cmVzb2x2ZXJFeHRlbnNpb24KLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUuaW50ZXJuYWwucmVzb2x2ZXIuRVhTTFRSZXNvbHZlckV4dGVuc2lvbiIKLSAgICAgICAgICAgIHN0YWdlPSJwcmVub3JtYWxpemF0aW9uIj4KLSAgICAgIDwvcmVzb2x2ZXJFeHRlbnNpb24+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9zY2hlbWFzL2NvbW1vbi54c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9zY2hlbWFzL2NvbW1vbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYjZlYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvc2NoZW1hcy9jb21tb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4c2x0Lm9yZy9jb21tb24iIHhtbG5zPSJodHRwOi8vZXhzbHQub3JnL2NvbW1vbiIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImRvY3VtZW50IiB0eXBlPSJEb2N1bWVudFR5cGUiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LmV4c2x0Lm9yZy9leHNsL2VsZW1lbnRzL2RvY3VtZW50L2V4c2wuZG9jdW1lbnQuaHRtbCI+Ci0JCQkgICAgVGhlIGV4c2w6ZG9jdW1lbnQgZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBtdWx0aXBsZSByZXN1bHQgZG9jdW1lbnRzLiBBcyB3ZWxsIGFzIHRoZSBtYWluIHJlc3VsdCBkb2N1bWVudCwgdGhlcmUgY2FuIGJlIHN1YnNpZGlhcnkgcmVzdWx0IGRvY3VtZW50cy4gRWFjaCBzdWJzaWRpYXJ5IHJlc3VsdCBkb2N1bWVudCBpcyBjcmVhdGVkIHVzaW5nIGFuIGV4c2w6ZG9jdW1lbnQgZWxlbWVudC4gVGhlIGNvbnRlbnQgb2YgdGhlIGV4c2w6ZG9jdW1lbnQgZWxlbWVudCBpcyBhIHRlbXBsYXRlOyB0aGlzIGlzIGluc3RhbnRpYXRlZCB0byBjcmVhdGUgYSBzZXF1ZW5jZSBvZiBub2RlczsgYSByb290IG5vZGUgaXMgY3JlYXRlZCB3aXRoIHRoaXMgc2VxdWVuY2Ugb2Ygbm9kZXMgYXMgaXRzIGNoaWxkcmVuOyB0aGUgdHJlZSB3aXRoIHRoaXMgcm9vdCBub2RlIHJlcHJlc2VudHMgdGhlIHN1YnNpZGlhcnkgcmVzdWx0IGRvY3VtZW50LiBUaGUgaHJlZiBhdHRyaWJ1dGUgc3BlY2lmaWVzIHdoZXJlIHRoZSBzdWJzaWRpYXJ5IGRvY3VtZW50IHNob3VsZCBiZSBzdG9yZWQ7IGl0IG11c3QgYmUgYW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJJOyBpdCBtdXN0IG5vdCBoYXZlIGEgZnJhZ21lbnQgaWRlbnRpZmllci4KLQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRvY3VtZW50VHlwZSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDphbnlVUkkiPgotCQkgICAgPHhzZDphbm5vdGF0aW9uPgotCQkgICAgCTx4c2Q6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cuZXhzbHQub3JnL2V4c2wvZWxlbWVudHMvZG9jdW1lbnQvZXhzbC5kb2N1bWVudC5odG1sIj4KLQkJICAgIAkgICAgIFRoZSBocmVmIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hlcmUgdGhlIHN1YnNpZGlhcnkgZG9jdW1lbnQgc2hvdWxkIGJlIHN0b3JlZDsgaXQgbXVzdCBiZSBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkk7IGl0IG11c3Qgbm90IGhhdmUgYSBmcmFnbWVudCBpZGVudGlmaWVyLgotCQkgICAgCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCSAgICA8L3hzZDphbm5vdGF0aW9uPgotCQk8L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1ldGhvZCIgdXNlPSJvcHRpb25hbCIgdHlwZT0iTWV0aG9kRW51bWVyYXRlZFR5cGUiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHNkOk5NVE9LRU4iLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZW5jb2RpbmciIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ib21pdC14bWwtZGVjbGFyYXRpb24iIHVzZT0ib3B0aW9uYWwiIHR5cGU9Illlc05vRW51bWVyYXRlZFR5cGUiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1wdWJsaWMiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1zeXN0ZW0iIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iY2RhdGEtc2VjdGlvbi1lbGVtZW50cyIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHNkOnN0cmluZyIvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpbmRlbnQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9Illlc05vRW51bWVyYXRlZFR5cGUiLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWVkaWEtdHlwZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHNkOnN0cmluZyIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNZXRob2RFbnVtZXJhdGVkVHlwZSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnRva2VuIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InhtbCIvPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaHRtbCIvPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGV4dCIvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJZZXNOb0VudW1lcmF0ZWRUeXBlIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6dG9rZW4iPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieWVzIi8+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJubyIvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L2NvcmUvaW50ZXJuYWwvRVhTTFRDb3JlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC9jb3JlL2ludGVybmFsL0VYU0xUQ29yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWVkNGNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L2NvcmUvaW50ZXJuYWwvRVhTTFRDb3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgRVhTTFRDb3JlIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZSI7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhTTFRfTUFUSF9OQU1FU1BBQ0UgPSAiaHR0cDovL2V4c2x0Lm9yZy9tYXRoIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFNMVF9GVU5DX05BTUVTUEFDRSA9ICJodHRwOi8vZXhzbHQub3JnL2Z1bmN0aW9ucyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhTTFRfQ09NTU9OX05BTUVTUEFDRSA9ICJodHRwOi8vZXhzbHQub3JnL2NvbW1vbiI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhTTFRfRFlOQU1JQ19OQU1FU1BBQ0UgPSAiaHR0cDovL2V4c2x0Lm9yZy9keW5hbWljIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFNMVF9EQVRFX05BTUVTUEFDRSA9ICJodHRwOi8vd3d3LmV4c2x0Lm9yZy9kYXRlL2luZGV4Lmh0bWwiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYU0xUX1JBTkRPTV9OQU1FU1BBQ0UgPSAiaHR0cDovL2V4c2x0Lm9yZy9yYW5kb20iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYU0xUX1JFR0VYX05BTUVTUEFDRSA9ICJodHRwOi8vZXhzbHQub3JnL3JlZ3VsYXItZXhwcmVzc2lvbnMiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYU0xUX1NFVFNfTkFNRVNQQUNFID0gImh0dHA6Ly9leHNsdC5vcmcvc2V0cyI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhTTFRfU1RSSU5HX05BTUVTUEFDRSA9ICJodHRwOi8vZXhzbHQub3JnL3N0cmluZ3MiOwotCQotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEVYU0xUQ29yZSBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEVYU0xUQ29yZSgpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgRVhTTFRDb3JlIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC9jb3JlL2ludGVybmFsL3Jlc29sdmVyL0VYU0xUUmVzb2x2ZXJFeHRlbnNpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L2NvcmUvaW50ZXJuYWwvcmVzb2x2ZXIvRVhTTFRSZXNvbHZlckV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2I1MWIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L2NvcmUvaW50ZXJuYWwvcmVzb2x2ZXIvRVhTTFRSZXNvbHZlckV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS5pbnRlcm5hbC5yZXNvbHZlcjsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsLkVYU0xUQ29yZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgRVhTTFRSZXNvbHZlckV4dGVuc2lvbiBpbXBsZW1lbnRzIFVSSVJlc29sdmVyRXh0ZW5zaW9uIHsKLQlCdW5kbGUgYnVuZGxlID0gbnVsbDsKLQkKLQlwdWJsaWMgRVhTTFRSZXNvbHZlckV4dGVuc2lvbigpIHsKLQkJYnVuZGxlID0gRVhTTFRDb3JlLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHJlc29sdmUoSUZpbGUgZmlsZSwgU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpCi0JewotCQlpZiAoRVhTTFRDb3JlLkVYU0xUX0NPTU1PTl9OQU1FU1BBQ0UuZXF1YWxzKHB1YmxpY0lkKSkgewotCQkJcmV0dXJuIGdldFVSTFBhdGgoIi9zY2hlbWFzL2NvbW1vbi54c2QiKTsKLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldFVSTFBhdGgoU3RyaW5nIGdyYW1tYXJQYXRoKSB7Ci0JCVVSTCBwbHVnaW5VUkwgPSBidW5kbGUuZ2V0RW50cnkoZ3JhbW1hclBhdGgpOwotCQlyZXR1cm4gcGx1Z2luVVJMLnRvRXh0ZXJuYWxGb3JtKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNWUzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YWM2YzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYTIyNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI1R1ZSBTZXAgMjIgMjE6MzU6MTIgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyOTlkMzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLkVYU0xUVUlQbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7eC1pbnRlcm5hbDo9dHJ1ZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNiMzllNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYmluLwotc3JjLmluY2x1ZGVzID0gc3JjLyxcCi0gICAgICAgICAgICAgICBidWlsZC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmYyZWI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIERhdmlkIENhcnZlciAtIEluaXRpYWwgQVBJIGFuZCBJbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWU9RVhTTFQgQ29yZSBFeHRlbnNpb25zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWFjMGMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5jb250ZW50QXNzaXN0UHJvY2Vzc29yIj4KLSAgICAgIDxwcm9jZXNzb3IKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuRVhTTFRDb21tb25Db250ZW50QXNzaXN0UHJvY2Vzc29yIj4KLSAgICAgIDwvcHJvY2Vzc29yPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL0VYU0xUVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9FWFNMVFVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NTE0NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL0VYU0xUVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBFWFNMVFVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBFWFNMVFVJUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgRVhTTFRVSVBsdWdpbigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVYU0xUVUlQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9Db21tb25TZWxlY3RDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjcyMjQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTU5hbWVzcGFjZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsLkVYU0xUQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIENvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0IGV4dGVuZHMgU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhTTFRfQ09NTU9OX05BTUVTUEFDRSA9ICJodHRwOi8vZXhzbHQub3JnL2NvbW1vbiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVfU0VUID0gIm5vZGUtc2V0KCApIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX1RZUEUgPSAib2JqZWN0LXR5cGUoICkiOwotCQotCVN0cmluZyBwcmVmaXggPSAiIjsKLQlwdWJsaWMgQ29tbW9uU2VsZWN0Q29udGVudEFzc2lzdFJlcXVlc3QoTm9kZSBub2RlLAotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiwKLQkJCUlUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24sIGludCBiZWdpbiwgaW50IGxlbmd0aCwgU3RyaW5nIGZpbHRlciwKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIpIHsKLQkJc3VwZXIobm9kZSwgZG9jdW1lbnRSZWdpb24sIGNvbXBsZXRpb25SZWdpb24sIGJlZ2luLCBsZW5ndGgsIGZpbHRlciwKLQkJCQl0ZXh0Vmlld2VyKTsKLQkJCi0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKCkgewotCQlwcm9wb3NhbHMuY2xlYXIoKTsKLQkJCi0JCWFkanVzdFhQYXRoU3RhcnQoU0VMRUNUX0FUVFJJQlVURSk7Ci0KLQkJaW50IG9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IGdldEF0dHJpYnV0ZShTRUxFQ1RfQVRUUklCVVRFKTsKLQotCQl0aGlzLm1hdGNoU3RyaW5nID0gZXh0cmFjdFhQYXRoTWF0Y2hTdHJpbmcoYXR0ck5vZGUsIGdldFJlZ2lvbigpLAotCQkJCWdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpKTsKLQotCQlhZGRTZWxlY3RQcm9wb3NhbHMoKEVsZW1lbnQpIGdldE5vZGUoKS5nZXRQYXJlbnROb2RlKCksIG9mZnNldCk7Ci0KLQkJcmV0dXJuIGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBhZGRTZWxlY3RQcm9wb3NhbHMoRWxlbWVudCByb290RWxlbWVudCwgaW50IG9mZnNldCkgewotCQlEb2N1bWVudCBkb2MgPSByb290RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0JCU5hbWVzcGFjZVRhYmxlIG5hbWVzcGFjZVRhYmxlID0gbmV3IE5hbWVzcGFjZVRhYmxlKGRvYyk7Ci0JCW5hbWVzcGFjZVRhYmxlLmFkZEVsZW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQkJcHJlZml4ID0gbmFtZXNwYWNlVGFibGUuZ2V0UHJlZml4Rm9yVVJJKEVYU0xUQ29yZS5FWFNMVF9DT01NT05fTkFNRVNQQUNFKTsKLQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQlhZGROb2RlU2V0UHJvcG9zYWwoKTsKLQkJCWFkZE9iamVjdFR5cGVQcm9wb3NhbCgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGROb2RlU2V0UHJvcG9zYWwoKSB7Ci0JCVN0cmluZyBub2Rlc2V0ID0gIiI7Ci0JCi0JCWlmIChwcmVmaXggIT0gbnVsbCkgewotCQkJbm9kZXNldCA9IHByZWZpeCArICI6IiArIE5PREVfU0VUOwotCQl9IGVsc2UgewotCQkJbm9kZXNldCA9IE5PREVfU0VUOwotCQl9Ci0JCQotCQlDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBuZXcgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsKAotCQkJCW5vZGVzZXQsIGdldFN0YXJ0T2Zmc2V0KCkgKyAxLCAwLAotCQkJCW5vZGVzZXQubGVuZ3RoKCksIFhTTFBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgKLQkJCQkJCQkJWFNMUGx1Z2luSW1hZ2VzLklNR19YUEFUSF9GVU5DVElPTiksIG5vZGVzZXQsIG51bGwsIG51bGwsIDApOwotCQlwcm9wb3NhbHMuYWRkKChJQ29tcGxldGlvblByb3Bvc2FsKXByb3Bvc2FsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFkZE9iamVjdFR5cGVQcm9wb3NhbCgpIHsKLQkJU3RyaW5nIG5vZGVzZXQgPSAiIjsKLQkKLQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQlub2Rlc2V0ID0gcHJlZml4ICsgIjoiICsgT0JKRUNUX1RZUEU7Ci0JCX0gZWxzZSB7Ci0JCQlub2Rlc2V0ID0gT0JKRUNUX1RZUEU7Ci0JCX0KLQkJCi0JCUN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IG5ldyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwoCi0JCQkJbm9kZXNldCwgZ2V0U3RhcnRPZmZzZXQoKSArIDEsIDAsCi0JCQkJbm9kZXNldC5sZW5ndGgoKSwgWFNMUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCS5nZXRJbnN0YW5jZSgpLmdldEltYWdlKAotCQkJCQkJCQlYU0xQbHVnaW5JbWFnZXMuSU1HX1hQQVRIX0ZVTkNUSU9OKSwgbm9kZXNldCwgbnVsbCwgbnVsbCwgMCk7Ci0JCXByb3Bvc2Fscy5hZGQoKElDb21wbGV0aW9uUHJvcG9zYWwpcHJvcG9zYWwpOwotCX0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9Db21tb25UZXN0Q29udGVudEFzc2lzdFJlcXVlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblRlc3RDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTEzMDliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblRlc3RDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBDb21tb25UZXN0Q29udGVudEFzc2lzdFJlcXVlc3QgZXh0ZW5kcwotCQlDb21tb25TZWxlY3RDb250ZW50QXNzaXN0UmVxdWVzdCB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgQVRUUl9URVNUID0gInRlc3QiOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBDb21tb25UZXN0Q29udGVudEFzc2lzdFJlcXVlc3QoTm9kZSBub2RlLAotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiwKLQkJCUlUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24sIGludCBiZWdpbiwgaW50IGxlbmd0aCwgU3RyaW5nIGZpbHRlciwKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIpIHsKLQkJc3VwZXIobm9kZSwgZG9jdW1lbnRSZWdpb24sIGNvbXBsZXRpb25SZWdpb24sIGJlZ2luLCBsZW5ndGgsIGZpbHRlciwgdGV4dFZpZXdlcik7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0Q29tcGxldGlvblByb3Bvc2FscygpIHsKLQkJcHJvcG9zYWxzLmNsZWFyKCk7Ci0JCQotCQlhZGp1c3RYUGF0aFN0YXJ0KEFUVFJfVEVTVCk7Ci0KLQkJaW50IG9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IGdldEF0dHJpYnV0ZShBVFRSX1RFU1QpOwotCi0JCXRoaXMubWF0Y2hTdHJpbmcgPSBleHRyYWN0WFBhdGhNYXRjaFN0cmluZyhhdHRyTm9kZSwgZ2V0UmVnaW9uKCksCi0JCQkJZ2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uKCkpOwotCi0JCWFkZFNlbGVjdFByb3Bvc2FscygoRWxlbWVudCkgZ2V0Tm9kZSgpLmdldFBhcmVudE5vZGUoKSwgb2Zmc2V0KTsKLQotCQlyZXR1cm4gZ2V0QWxsQ29tcGxldGlvblByb3Bvc2FscygpOwotCX0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvRVhTTFRDb21tb25Db250ZW50QXNzaXN0UHJvY2Vzc29yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE5MTBiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDMwMzgyMyAtIE5QRSBpZiBuYW1lc3BhY2Ugd2FzIHVua25vd24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZXh0SW5mb3JtYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBFWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RQcm9jZXNzb3IgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgaW1wbGVtZW50cyBJQ29udGVudEFzc2lzdFByb2Nlc3NvciB7Ci0KLQlwcml2YXRlIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBleHNsdFByb3Bvc2FsczsKLQkKLQlwdWJsaWMgRVhTTFRDb21tb25Db250ZW50QXNzaXN0UHJvY2Vzc29yKCkgewotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWF4aW11bVZlcnNpb24oKSB7Ci0JCXJldHVybiAiMS4wIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1pbmltdW1WZXJzaW9uKCkgewotCQlyZXR1cm4gIjEuMCI7Ci0JfQotCi0JcHVibGljIEFycmF5TGlzdDxTdHJpbmc+IGdldE5hbWVzcGFjZXMoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCi0JcHVibGljIElDb250ZXh0SW5mb3JtYXRpb25bXSBjb21wdXRlQ29udGV4dEluZm9ybWF0aW9uKElUZXh0Vmlld2VyIHZpZXdlciwKLQkJCWludCBvZmZzZXQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0KLQlwdWJsaWMgY2hhcltdIGdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IgZ2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXSBjb21wdXRlQ29tcGxldGlvblByb3Bvc2FscygKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIsIGludCBkb2N1bWVudFBvc2l0aW9uKSB7Ci0JCWluaXRpYWxpemVQcm9wb3NhbFZhcmlhYmxlcyh0ZXh0Vmlld2VyLCBkb2N1bWVudFBvc2l0aW9uKTsKLQkJCi0JCQkJCi0JCS8vIE9ubHkgcHJvdmlkZSBwcm9wb3NhbHMgZm9yIGVsZW1lbnRzIGluIGVpdGhlciB0aGUgWFNMVCBOYW1lc3BhY2Ugb3IgRVhTTFQgbmFtZXNwYWNlLgotCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0geG1sTm9kZS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsIHx8Ci0JCQkhbmFtZXNwYWNlVVJJLmNvbnRhaW5zKCJodHRwOi8vZXhzbHQub3JnLyIpICYmCi0JCQkhbmFtZXNwYWNlVVJJLmVxdWFscyhYU0xDb3JlLlhTTF9OQU1FU1BBQ0VfVVJJKSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlFWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeSByZXF1ZXN0RmFjdG9yeSA9IG5ldyBFWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeSgKLQkJCQl0ZXh0Vmlld2VyLCBjdXJzb3JQb3NpdGlvbiwgeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJY29tcGxldGlvblJlZ2lvbiwgbWF0Y2hTdHJpbmcpOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QgY29udGVudEFzc2lzdFJlcXVlc3QgPSByZXF1ZXN0RmFjdG9yeQotCQkJLmdldENvbnRlbnRBc3Npc3RSZXF1ZXN0KCk7Ci0JCQotCQlleHNsdFByb3Bvc2FscyA9IGNvbnRlbnRBc3Npc3RSZXF1ZXN0LmdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW2V4c2x0UHJvcG9zYWxzLnNpemUoKV07Ci0JCWV4c2x0UHJvcG9zYWxzLnRvQXJyYXkocHJvcG9zYWxzKTsKLQkJCi0JCXJldHVybiBwcm9wb3NhbHM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvRVhTTFRDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTViZTUxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Lk51bGxDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogQSBGYWN0b3J5IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBDb250ZW50IEFzc2lzdCBSZXF1ZXN0IGNsYXNzIGlzIG5lZWRlZCBhbmQKLSAqIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNsYXNzLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgRVhTTFRDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1NFTEVDVCA9ICJzZWxlY3QiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVEVTVCA9ICJ0ZXN0IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01BVENIID0gIm1hdGNoIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcjsKLQlwcml2YXRlIGludCBkb2N1bWVudFBvc2l0aW9uOwotCXByaXZhdGUgSURPTU5vZGUgeG1sTm9kZTsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2RSZWdpb247Ci0JcHJpdmF0ZSBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uOwotCXByaXZhdGUgU3RyaW5nIG1hdGNoU3RyaW5nOwotCQotCi0JLyoqCi0JICogQHBhcmFtIHRleHRWaWV3ZXIKLQkgKiBAcGFyYW0gZG9jdW1lbnRQb3NpdGlvbgotCSAqIEBwYXJhbSB4bWxOb2RlCi0JICogQHBhcmFtIHNkUmVnaW9uCi0JICogQHBhcmFtIGNvbXBsZXRpb25SZWdpb24KLQkgKiBAcGFyYW0gbWF0Y2hTdHJpbmcKLQkgKi8KLQlwdWJsaWMgRVhTTFRDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkoSVRleHRWaWV3ZXIgdGV4dFZpZXdlciwgaW50IGRvY3VtZW50UG9zaXRpb24sIElET01Ob2RlIHhtbE5vZGUsCi0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNkUmVnaW9uLCBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLAotCQkJU3RyaW5nIG1hdGNoU3RyaW5nKSB7Ci0JCXRoaXMudGV4dFZpZXdlciA9IHRleHRWaWV3ZXI7Ci0JCXRoaXMuZG9jdW1lbnRQb3NpdGlvbiA9IGRvY3VtZW50UG9zaXRpb247Ci0JCXRoaXMueG1sTm9kZSA9IHhtbE5vZGU7Ci0JCXRoaXMuc2RSZWdpb24gPSBzZFJlZ2lvbjsKLQkJdGhpcy5jb21wbGV0aW9uUmVnaW9uID0gY29tcGxldGlvblJlZ2lvbjsKLQkJdGhpcy5tYXRjaFN0cmluZyA9IG1hdGNoU3RyaW5nOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGNvbnRlbnQgYXNzaXN0IHJlcXVlc3QgY2xhc3MgZm9yIHRoZSBYU0wgcmVxdWVzdC4KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIElDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0IGdldENvbnRlbnRBc3Npc3RSZXF1ZXN0KCkgewotCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCA9IHhtbE5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlJRE9NRWxlbWVudCBlbGVtZW50ID0gKElET01FbGVtZW50KSB4bWxOb2RlOwotCQlJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBwcm9wb3NhbCA9IGNvbW1vbkF0dHJpYnV0ZVByb3Bvc2Fscyhub2RlTWFwKTsKLQkJCi0JCWlmIChwcm9wb3NhbCBpbnN0YW5jZW9mIE51bGxDb250ZW50QXNzaXN0UmVxdWVzdCkgewotCQkJaWYgKGlzRWxlbWVudFByb3Bvc2FsKGVsZW1lbnQpKSB7Ci0JCQkJcHJvcG9zYWwgPSBnZXROdWxsUHJvcG9zYWwoKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBwcm9wb3NhbDsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudFByb3Bvc2FsKElET01FbGVtZW50IGVsZW1lbnQpIHsKLQkJU3RyaW5nIGxvY2FsTmFtZSA9IGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBjb21tb25BdHRyaWJ1dGVQcm9wb3NhbHMoCi0JCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCkgewotCQlpZiAoaGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uKEFUVFJfU0VMRUNULCBub2RlTWFwLAotCQkJCWNvbXBsZXRpb25SZWdpb24pKSB7Ci0JCQlyZXR1cm4gbmV3IENvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0KHhtbE5vZGUsIHNkUmVnaW9uLAotCQkJCQljb21wbGV0aW9uUmVnaW9uLCBkb2N1bWVudFBvc2l0aW9uLCAwLCBtYXRjaFN0cmluZywKLQkJCQkJdGV4dFZpZXdlcik7Ci0JCX0KLQkKLQkJaWYgKGhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbihBVFRSX1RFU1QsIG5vZGVNYXAsIGNvbXBsZXRpb25SZWdpb24pKSB7Ci0JCQlyZXR1cm4gbmV3IENvbW1vblRlc3RDb250ZW50QXNzaXN0UmVxdWVzdCh4bWxOb2RlLCBzZFJlZ2lvbiwKLQkJCQkJY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsCi0JCQkJCXRleHRWaWV3ZXIpOwotCQl9Ci0JCQotCQlyZXR1cm4gZ2V0TnVsbFByb3Bvc2FsKCk7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbihTdHJpbmcgYXR0ck5hbWUsCi0JCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCwgSVRleHRSZWdpb24gYVJlZ2lvbikgewotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IChJRE9NQXR0cikgbm9kZU1hcC5nZXROYW1lZEl0ZW0oYXR0ck5hbWUpOwotCQlyZXR1cm4gYXR0ck5vZGUgIT0gbnVsbCAmJiBhdHRyTm9kZS5nZXRWYWx1ZVJlZ2lvbigpICE9IG51bGwKLQkJCQkmJiBhdHRyTm9kZS5nZXRWYWx1ZVJlZ2lvbigpLmdldFN0YXJ0KCkgPT0gYVJlZ2lvbi5nZXRTdGFydCgpOwotCX0JCi0JCi0JcHJpdmF0ZSBJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBnZXROdWxsUHJvcG9zYWwoKSB7Ci0JCXJldHVybiBuZXcgTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0KHhtbE5vZGUsIHNkUmVnaW9uLAotCQkJCWNvbXBsZXRpb25SZWdpb24sIGRvY3VtZW50UG9zaXRpb24sIDAsIG1hdGNoU3RyaW5nLCB0ZXh0Vmlld2VyKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhjOTFhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTZmNzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNmYyMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotI1RodSBKdW4gMTEgMDE6MzY6NTcgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmJhYTRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLkpBWFBEZWJ1Z1VJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAldmVuZG9yTmFtZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjQwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aTtidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3czt4LWludGVybmFsOj10cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMDAwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+QXVndXN0LCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDdmY2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9pY29ucy94c2x0X3Byb2Nlc3Nvci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9pY29ucy94c2x0X3Byb2Nlc3Nvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNzEyODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvaWNvbnMveHNsdF9wcm9jZXNzb3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZmYmFkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpCi12ZW5kb3JOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWUgPSBYU0wgSkFYUCBEZWJ1ZyBVSQotcGFnZU5hbWVKYXZhUHJvY2Vzc29ycyA9IEphdmEgUHJvY2Vzc29ycwotdmlld05hbWVSZXN1bHQgPSBSZXN1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk3MmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9uVGFicyI+Ci0JCTx0YWIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IuWFNMUHJvY2Vzc29yVGFiMiIKLQkJCWdyb3VwPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cC54c2x0IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuamF4cC50YWJzLnByb2Nlc3NvciIgbmFtZT0iUHJvY2Vzc29yIj4KLQkJCTxhc3NvY2lhdGVkRGVsZWdhdGUKLQkJCQlkZWxlZ2F0ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuaW50ZXJuYWwuamF4cC5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIj4KLQkJCTwvYXNzb2NpYXRlZERlbGVnYXRlPgotCQkJPHBsYWNlbWVudCBhZnRlcj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dCI+Ci0JCQk8L3BsYWNlbWVudD4KLQkJPC90YWI+Ci0JCTx0YWIgY2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9ucy5KYXZhSlJFVGFiIgotCQkJZ3JvdXA9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwLnhzbHQiCi0JCQlpZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmphdmFKUkVUYWIiIG5hbWU9IkpSRSI+Ci0JCQk8YXNzb2NpYXRlZERlbGVnYXRlCi0JCQkJZGVsZWdhdGU9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmludGVybmFsLmpheHAuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZSI+Ci0JCQk8L2Fzc29jaWF0ZWREZWxlZ2F0ZT4KLQkJCTxwbGFjZW1lbnQgYWZ0ZXI9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuamF4cC50YWJzLnByb2Nlc3NvciI+Ci0JCQk8L3BsYWNlbWVudD4KLQkJPC90YWI+Ci0JCTx0YWIgY2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9ucy5KYXZhQ2xhc3NwYXRoVGFiIgotCQkJZ3JvdXA9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwLnhzbHQiCi0JCQlpZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmphdmFDbGFzc3BhdGhUYWIiIG5hbWU9IkNsYXNzcGF0aCI+Ci0JCQk8YXNzb2NpYXRlZERlbGVnYXRlCi0JCQkJZGVsZWdhdGU9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmludGVybmFsLmpheHAuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZSI+Ci0JCQk8L2Fzc29jaWF0ZWREZWxlZ2F0ZT4KLQkJCTxwbGFjZW1lbnQgYWZ0ZXI9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5qYXZhSlJFVGFiIj4KLQkJCTwvcGxhY2VtZW50PgotCQk8L3RhYj4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCQk8cGFnZSBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcmVmZXJlbmNlcy5CYXNlUHJlZmVyZW5jZVBhZ2UiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByZWZlcmVuY2VzLmphdmEiIG5hbWU9IiVwYWdlTmFtZUphdmFQcm9jZXNzb3JzIj4KLQkJPC9wYWdlPgotCTwvZXh0ZW5zaW9uPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotICAgIDx2aWV3Ci0gICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3cy5SZXN1bHRWaWV3IgotICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkucmVzdWx0dmlldyIKLSAgICAgICAgICBuYW1lPSIldmlld05hbWVSZXN1bHQiCi0gICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC54bWwiPgotICAgIDwvdmlldz4KLSA8L2V4dGVuc2lvbj4KLSAgPGV4dGVuc2lvbgotICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVFeHRlbnNpb25zIj4KLSAgICAgPHBlcnNwZWN0aXZlRXh0ZW5zaW9uCi0gICAgICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIj4KLSAgICAgICAgPHZpZXcKLSAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS52aWV3MSIKLSAgICAgICAgICAgICAgbWluaW1pemVkPSJmYWxzZSIKLSAgICAgICAgICAgICAgcmVsYXRpb25zaGlwPSJzdGFjayIKLSAgICAgICAgICAgICAgcmVsYXRpdmU9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciCi0gICAgICAgICAgICAgIHZpc2libGU9ImZhbHNlIj4KLSAgICAgICAgPC92aWV3PgotICAgICA8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgotICA8L2V4dGVuc2lvbj4KLSAKLSAJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29udGV4dFZpZXdCaW5kaW5ncyI+Ci0JCTxjb250ZXh0Vmlld0JpbmRpbmcKLQkJCWNvbnRleHRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5jb250ZXh0IgotCQkJdmlld0lkPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkucmVzdWx0dmlldyI+Ci0JCTwvY29udGV4dFZpZXdCaW5kaW5nPgotCTwvZXh0ZW5zaW9uPgotIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL0pBWFBEZWJ1Z1VJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL0pBWFBEZWJ1Z1VJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZTdhYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9KQVhQRGVidWdVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEpBWFBEZWJ1Z1VJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgSkFYUERlYnVnVUlQbHVnaW4gcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBKQVhQRGVidWdVSVBsdWdpbigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpBWFBEZWJ1Z1VJUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0FkZFByb2Nlc3NvckRpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9BZGRQcm9jZXNzb3JEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliOTJiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0FkZFByb2Nlc3NvckRpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuU3RhdHVzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29tYm9WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkluc3RhbGxTdGFuZGluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSURlYnVnZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLQotcHVibGljIGNsYXNzIEFkZFByb2Nlc3NvckRpYWxvZyBleHRlbmRzIFN0YXR1c0RpYWxvZwotewotCXByaXZhdGUgZmluYWwgSW5zdGFsbFN0YW5kaW4gc3RhbmRpblByb2Nlc3NvcjsKLQlwcml2YXRlIGZpbmFsIElQcm9jZXNzb3JUeXBlW10gcHJvY2Vzc29yVHlwZXM7Ci0JcHJpdmF0ZSBJUHJvY2Vzc29yVHlwZSBzZWxlY3RlZFByb2Nlc3NvclR5cGU7Ci0JcHJpdmF0ZSBDb21ib1ZpZXdlciBwcm9jZXNzb3JUeXBlRmllbGQ7Ci0JcHJpdmF0ZSBQcm9jZXNzb3JMaWJyYXJ5QmxvY2sgZkxpYnJhcnlCbG9jazsKLQlwcml2YXRlIFRleHQgcHJvY2Vzc29yTmFtZUZpZWxkOwotCXByaXZhdGUgZmluYWwgSVN0YXR1c1tdIGZTdGF0aTsKLQlwcml2YXRlIGludCBmUHJldkluZGV4ID0gLTE7Ci0JcHJpdmF0ZSBmaW5hbCBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2sgYmxvY2s7Ci0JcHJpdmF0ZSBib29sZWFuIGFkZGluZzsKLQotCXB1YmxpYyBBZGRQcm9jZXNzb3JEaWFsb2coSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrIGJsb2NrLCBTaGVsbCBwYXJlbnQsIElQcm9jZXNzb3JUeXBlW10gdHlwZXMsIElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlzdXBlcihwYXJlbnQpOwotCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCQl0aGlzLmJsb2NrID0gYmxvY2s7Ci0JCWZTdGF0aSA9IG5ldyBJU3RhdHVzWzVdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGZTdGF0aS5sZW5ndGg7IGkrKykKLQkJewotCQkJZlN0YXRpW2ldID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJfQotCQlwcm9jZXNzb3JUeXBlcyA9IHR5cGVzOwotCQlzZWxlY3RlZFByb2Nlc3NvclR5cGUgPSBpbnN0YWxsICE9IG51bGwgPyBpbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKSA6IHR5cGVzWzBdOwotCQlJbnN0YWxsU3RhbmRpbiBzdGFuZGluID0gbnVsbDsKLQkJaWYgKGluc3RhbGwgPT0gbnVsbCkKLQkJewotCQkJYWRkaW5nID0gdHJ1ZTsKLQkJCXN0YW5kaW4gPSBuZXcgSW5zdGFsbFN0YW5kaW4oSkFYUFJ1bnRpbWUuY3JlYXRlVW5pcXVlUHJvY2Vzc29ySWQoc2VsZWN0ZWRQcm9jZXNzb3JUeXBlKSwgIiIsIHNlbGVjdGVkUHJvY2Vzc29yVHlwZS5nZXRJZCgpLCBudWxsLCBuZXcgSVByb2Nlc3NvckphclswXSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlCi0JCXsKLQkJCXN0YW5kaW4gPSBuZXcgSW5zdGFsbFN0YW5kaW4oaW5zdGFsbCk7Ci0JCX0KLQkJc3RhbmRpblByb2Nlc3NvciA9IHN0YW5kaW47Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpCi0JewotCQlzdXBlci5jb25maWd1cmVTaGVsbChuZXdTaGVsbCk7Ci0JCS8vIFRPRE8gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscC4uLgotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZURpYWxvZ0ZpZWxkcyhDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJR3JpZERhdGEgZ2Q7Ci0JCUxhYmVsIGxhYmVsOwotCi0JCWxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLkFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JOYW1lKTsKLQkJcHJvY2Vzc29yTmFtZUZpZWxkID0gbmV3IFRleHQocGFyZW50LCBTV1QuQk9SREVSKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULk5PTkUsIFNXVC5OT05FLCBmYWxzZSwgZmFsc2UpOwotCQlnZC53aWR0aEhpbnQgPSBjb252ZXJ0V2lkdGhJbkNoYXJzVG9QaXhlbHMoNTApOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXByb2Nlc3Nvck5hbWVGaWVsZC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfcHJvY2Vzc29yVHlwZSk7Ci0JCXByb2Nlc3NvclR5cGVGaWVsZCA9IG5ldyBDb21ib1ZpZXdlcihwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotCQlnZCA9IG5ldyBHcmlkRGF0YSgpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXByb2Nlc3NvclR5cGVGaWVsZC5nZXRDb21ibygpLnNldExheW91dERhdGEoZ2QpOwotCQlwcm9jZXNzb3JUeXBlRmllbGQuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcigpCi0JCXsKLQotCQkJcHJpdmF0ZSBPYmplY3QgaW5wdXQ7Ci0KLQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCQkJewotCQkJCXJldHVybiAoSVByb2Nlc3NvclR5cGVbXSkgaW5wdXQ7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQkJaW5wdXQgPSBuZXdJbnB1dDsKLQkJCX0KLQkJfSk7Ci0JCXByb2Nlc3NvclR5cGVGaWVsZC5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMYWJlbFByb3ZpZGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuICgoSVByb2Nlc3NvclR5cGUpIGVsZW1lbnQpLmdldExhYmVsKCk7Ci0JCQl9Ci0JCX0pOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlRmllbGRMaXN0ZW5lcnMoKQotCXsKLQkJcHJvY2Vzc29yVHlwZUZpZWxkLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCXVwZGF0ZVByb2Nlc3NvclR5cGUoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJcHJvY2Vzc29yTmFtZUZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkKLQkJCXsKLQkJCQlzZXRQcm9jZXNzb3JOYW1lU3RhdHVzKHZhbGlkYXRlUHJvY2Vzc29yTmFtZSgpKTsKLQkJCQl1cGRhdGVTdGF0dXNMaW5lKCk7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvY2Vzc29yTmFtZSgpCi0JewotCQlyZXR1cm4gcHJvY2Vzc29yTmFtZUZpZWxkLmdldFRleHQoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBhbmNlc3RvcikKLQl7Ci0JCUNvbXBvc2l0ZSBwYXJlbnQgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKGFuY2VzdG9yKTsKLQkJKChHcmlkTGF5b3V0KSBwYXJlbnQuZ2V0TGF5b3V0KCkpLm51bUNvbHVtbnMgPSAzOwotLy8JCSgoR3JpZERhdGEpIHBhcmVudC5nZXRMYXlvdXREYXRhKCkpLmhlaWdodEhpbnQgPSA0MDA7Ci0vLwkJKChHcmlkRGF0YSkgcGFyZW50LmdldExheW91dERhdGEoKSkud2lkdGhIaW50ID0gNDAwOwotCi0JCWNyZWF0ZURpYWxvZ0ZpZWxkcyhwYXJlbnQpOwotCi0JCUxhYmVsIGwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWwuc2V0VGV4dChNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfamFycyk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMzsKLQkJbC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlmTGlicmFyeUJsb2NrID0gbmV3IFByb2Nlc3NvckxpYnJhcnlCbG9jayh0aGlzKTsKLQkJQ29udHJvbCBibG9jayA9IGZMaWJyYXJ5QmxvY2suY3JlYXRlQ29udHJvbChwYXJlbnQpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDM7Ci0JCWJsb2NrLnNldExheW91dERhdGEoZ2QpOwotCi0JCWluaXRpYWxpemVGaWVsZHMoKTsKLQkJY3JlYXRlRmllbGRMaXN0ZW5lcnMoKTsKLQkJYXBwbHlEaWFsb2dGb250KHBhcmVudCk7Ci0JCQotCQlyZXR1cm4gcGFyZW50OwotCX0KLQotCXByaXZhdGUgdm9pZCB1cGRhdGVQcm9jZXNzb3JUeXBlKCkKLQl7Ci0JCWludCBzZWxJbmRleCA9IHByb2Nlc3NvclR5cGVGaWVsZC5nZXRDb21ibygpLmdldFNlbGVjdGlvbkluZGV4KCk7Ci0JCWlmIChzZWxJbmRleCA9PSBmUHJldkluZGV4KQotCQl7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZlByZXZJbmRleCA9IHNlbEluZGV4OwotCQlpZiAoc2VsSW5kZXggPj0gMCAmJiBzZWxJbmRleCA8IHByb2Nlc3NvclR5cGVzLmxlbmd0aCkKLQkJewotCQkJc2VsZWN0ZWRQcm9jZXNzb3JUeXBlID0gcHJvY2Vzc29yVHlwZXNbc2VsSW5kZXhdOwotCQl9Ci0JCWZMaWJyYXJ5QmxvY2suaW5pdGlhbGl6ZUZyb20oc3RhbmRpblByb2Nlc3Nvciwgc2VsZWN0ZWRQcm9jZXNzb3JUeXBlKTsKLQkJdXBkYXRlU3RhdHVzTGluZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNyZWF0ZSgpCi0JewotCQlzdXBlci5jcmVhdGUoKTsKLQkJcHJvY2Vzc29yTmFtZUZpZWxkLnNldEZvY3VzKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVGaWVsZHMoKQotCXsKLQkJcHJvY2Vzc29yVHlwZUZpZWxkLnNldElucHV0KHByb2Nlc3NvclR5cGVzKTsKLQkJaWYgKGFkZGluZykKLQkJewotCQkJcHJvY2Vzc29yTmFtZUZpZWxkLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9jZXNzb3JUeXBlRmllbGQuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHByb2Nlc3NvclR5cGVzWzBdKSk7Ci0JCQlmTGlicmFyeUJsb2NrLmluaXRpYWxpemVGcm9tKHN0YW5kaW5Qcm9jZXNzb3IsIHNlbGVjdGVkUHJvY2Vzc29yVHlwZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwcm9jZXNzb3JUeXBlRmllbGQuZ2V0Q29tYm8oKS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCXByb2Nlc3NvclR5cGVGaWVsZC5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc3RhbmRpblByb2Nlc3Nvci5nZXRQcm9jZXNzb3JUeXBlKCkpKTsKLQkJCXByb2Nlc3Nvck5hbWVGaWVsZC5zZXRUZXh0KHN0YW5kaW5Qcm9jZXNzb3IuZ2V0TmFtZSgpKTsKLQotCQkJZkxpYnJhcnlCbG9jay5pbml0aWFsaXplRnJvbShzdGFuZGluUHJvY2Vzc29yLCBzZWxlY3RlZFByb2Nlc3NvclR5cGUpOwotCQl9Ci0JCXNldFByb2Nlc3Nvck5hbWVTdGF0dXModmFsaWRhdGVQcm9jZXNzb3JOYW1lKCkpOwotCQl1cGRhdGVTdGF0dXNMaW5lKCk7Ci0JfQotCi0JcHJpdmF0ZSBJU3RhdHVzIHZhbGlkYXRlUHJvY2Vzc29yTmFtZSgpCi0JewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCVN0cmluZyBuYW1lID0gcHJvY2Vzc29yTmFtZUZpZWxkLmdldFRleHQoKTsKLQkJaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLnRyaW0oKS5sZW5ndGgoKSA9PSAwKQotCQl7Ci0JCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuT0ssIE1lc3NhZ2VzLkFkZFByb2Nlc3NvckRpYWxvZ19lbnRlck5hbWUsIG51bGwpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKGJsb2NrLmlzRHVwbGljYXRlTmFtZShuYW1lKSAmJiAoc3RhbmRpblByb2Nlc3NvciA9PSBudWxsIHx8ICFuYW1lLmVxdWFscyhzdGFuZGluUHJvY2Vzc29yLmdldE5hbWUoKSkpKQotCQkJewotCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuT0ssIE1lc3NhZ2VzLkFkZFByb2Nlc3NvckRpYWxvZ19kdXBsaWNhdGVOYW1lLCBudWxsKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvLyBJU3RhdHVzIHMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkudmFsaWRhdGVOYW1lKG5hbWUsCi0JCQkJLy8gSVJlc291cmNlLkZJTEUpOwotCQkJCS8vIGlmICghcy5pc09LKCkpCi0JCQkJLy8gewotCQkJCS8vIHN0YXR1cy5zZXRFcnJvcihNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfUHJvY2Vzc29yX25hbWVfbXVzdF9iZV9hX3ZhbGlkX2ZpbGVfbmFtZSwKLQkJCQkvLyBuZXcgU3RyaW5nW10KLQkJCQkvLyB7IHMuZ2V0TWVzc2FnZSgpIH0pKTsKLQkJCQkvLyB9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0YXR1cyB2YWxpZGF0ZVZlcnNpb25TdGF0dXMoKQotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVN0YXR1c0xpbmUoKQotCXsKLQkJSVN0YXR1cyBtYXggPSBudWxsOwotCQlmb3IgKElTdGF0dXMgY3VyciA6IGZTdGF0aSkKLQkJewotCQkJaWYgKGN1cnIubWF0Y2hlcyhJU3RhdHVzLkVSUk9SKSkKLQkJCXsKLQkJCQl1cGRhdGVTdGF0dXMoY3Vycik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKG1heCA9PSBudWxsIHx8IGN1cnIuZ2V0U2V2ZXJpdHkoKSA+IG1heC5nZXRTZXZlcml0eSgpKQotCQkJewotCQkJCW1heCA9IGN1cnI7Ci0JCQl9Ci0JCX0KLQkJdXBkYXRlU3RhdHVzKG1heCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkKLQl7Ci0JCWRvT2tQcmVzc2VkKCk7Ci0JCXN1cGVyLm9rUHJlc3NlZCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb09rUHJlc3NlZCgpCi0JewotCQlpZiAoYWRkaW5nKQotCQl7Ci0JCQlzZXRGaWVsZFZhbHVlc1RvUHJvY2Vzc29yKHN0YW5kaW5Qcm9jZXNzb3IpOwotCQkJYmxvY2sucHJvY2Vzc29yQWRkZWQoc3RhbmRpblByb2Nlc3Nvcik7Ci0JCX0KLS8vCQllbHNlCi0vLwkJCXNldEZpZWxkVmFsdWVzVG9Qcm9jZXNzb3IoKFByb2Nlc3Nvckluc3RhbGwpZWRpdGVkUHJvY2Vzc29yKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRGaWVsZFZhbHVlc1RvUHJvY2Vzc29yKEluc3RhbGxTdGFuZGluIHByb2Nlc3NvcikKLQl7Ci0JCXByb2Nlc3Nvci5zZXROYW1lKHByb2Nlc3Nvck5hbWVGaWVsZC5nZXRUZXh0KCkpOwotCQlwcm9jZXNzb3Iuc2V0UHJvY2Vzc29yVHlwZUlkKHNlbGVjdGVkUHJvY2Vzc29yVHlwZS5nZXRJZCgpKTsKLQotCQlJRGVidWdnZXJbXSBkZWJ1Z2dlcnMgPSBKQVhQUnVudGltZS5nZXREZWJ1Z2dlcnMoKTsKLQkJZm9yIChJRGVidWdnZXIgZWxlbWVudCA6IGRlYnVnZ2VycykKLQkJewotCQkJaWYgKGVsZW1lbnQuZ2V0UHJvY2Vzc29yVHlwZSgpLmVxdWFscyhzZWxlY3RlZFByb2Nlc3NvclR5cGUpKQotCQkJCXByb2Nlc3Nvci5zZXREZWJ1Z2dlcklkKGVsZW1lbnQuZ2V0SWQoKSk7Ci0JCX0KLQotCQlmTGlicmFyeUJsb2NrLnBlcmZvcm1BcHBseShwcm9jZXNzb3IpOwotCX0KLQotCXByb3RlY3RlZCBGaWxlIGdldEFic29sdXRlRmlsZU9yRW1wdHkoU3RyaW5nIHBhdGgpCi0JewotCQlpZiAocGF0aCA9PSBudWxsIHx8IHBhdGgubGVuZ3RoKCkgPT0gMCkKLQkJewotCQkJcmV0dXJuIG5ldyBGaWxlKCIiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiBuZXcgRmlsZShwYXRoKS5nZXRBYnNvbHV0ZUZpbGUoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0UHJvY2Vzc29yTmFtZVN0YXR1cyhJU3RhdHVzIHN0YXR1cykKLQl7Ci0JCWZTdGF0aVswXSA9IHN0YXR1czsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0YXR1cyBnZXRTeXN0ZW1MaWJyYXJ5U3RhdHVzKCkKLQl7Ci0JCXJldHVybiBmU3RhdGlbM107Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0U3lzdGVtTGlicmFyeVN0YXR1cyhJU3RhdHVzIHN0YXR1cykKLQl7Ci0JCWZTdGF0aVszXSA9IHN0YXR1czsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRWZXJzaW9uU3RhdHVzKElTdGF0dXMgc3RhdHVzKQotCXsKLQkJZlN0YXRpWzJdID0gc3RhdHVzOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZUJ1dHRvbnNFbmFibGVTdGF0ZShJU3RhdHVzIHN0YXR1cykKLQl7Ci0JCUJ1dHRvbiBvayA9IGdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKTsKLQkJaWYgKG9rICE9IG51bGwgJiYgIW9rLmlzRGlzcG9zZWQoKSkKLQkJCW9rLnNldEVuYWJsZWQoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5PSyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc2V0QnV0dG9uTGF5b3V0RGF0YShCdXR0b24gYnV0dG9uKQotCXsKLQkJc3VwZXIuc2V0QnV0dG9uTGF5b3V0RGF0YShidXR0b24pOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGlhbG9nU2V0dGluZ3NTZWN0aW9uTmFtZSgpCi0JewotCQlyZXR1cm4gIkFERF9QUk9DRVNTT1JfRElBTE9HX1NFQ1RJT04iOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElEaWFsb2dTZXR0aW5ncyBnZXREaWFsb2dCb3VuZHNTZXR0aW5ncygpCi0JewotLy8JCUlEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncyA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0vLwkJSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24gPSBzZXR0aW5ncy5nZXRTZWN0aW9uKGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKSk7Ci0vLwkJaWYgKHNlY3Rpb24gPT0gbnVsbCkKLS8vCQl7Ci0vLwkJCXNlY3Rpb24gPSBzZXR0aW5ncy5hZGROZXdTZWN0aW9uKGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKSk7Ci0vLwkJfQotLy8JCXJldHVybiBzZWN0aW9uOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0Jhc2VQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9CYXNlUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNkYjZiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0Jhc2VQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLQotcHVibGljIGNsYXNzIEJhc2VQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpCi0JewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0luc3RhbGxlZFByb2Nlc3NvcnNCbG9jay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzM1Zjk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTGlzdGVuZXJMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmxheW91dC5HcmlkRGF0YUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DaGVja1N0YXRlQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2hlY2tib3hUYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ2hlY2tTdGF0ZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSURvdWJsZUNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVGFibGVMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJTb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Gb250OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5BYnN0cmFjdFRhYmxlQmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IuSW5zdGFsbFN0YW5kaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2sgZXh0ZW5kcyBBYnN0cmFjdFRhYmxlQmxvY2sgaW1wbGVtZW50cyBJU2VsZWN0aW9uUHJvdmlkZXIKLXsKLQlwcml2YXRlIENvbXBvc2l0ZSBmQ29udHJvbDsKLQlwcml2YXRlIGZpbmFsIExpc3Q8SVByb2Nlc3Nvckluc3RhbGw+IHByb2Nlc3NvcnMgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPigpOwotCXByaXZhdGUgQ2hlY2tib3hUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsKLQlwcml2YXRlIEJ1dHRvbiBmQWRkQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIGZSZW1vdmVCdXR0b247Ci0JcHJpdmF0ZSBCdXR0b24gZkVkaXRCdXR0b247Ci0JcHJpdmF0ZSBmaW5hbCBMaXN0ZW5lckxpc3QgZlNlbGVjdGlvbkxpc3RlbmVycyA9IG5ldyBMaXN0ZW5lckxpc3QoKTsKLQlwcml2YXRlIElTZWxlY3Rpb24gZlByZXZTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotCi0JcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCQlmU2VsZWN0aW9uTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpCi0JewotCQlmU2VsZWN0aW9uTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkKLQl7Ci0JCXJldHVybiBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0YWJsZVZpZXdlci5nZXRDaGVja2VkRWxlbWVudHMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKQotCQl7Ci0JCQlpZiAoIXNlbGVjdGlvbi5lcXVhbHMoZlByZXZTZWxlY3Rpb24pKQotCQkJewotCQkJCWZQcmV2U2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCQkJCU9iamVjdCBqcmUgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCWlmIChqcmUgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCXRhYmxlVmlld2VyLnNldENoZWNrZWRFbGVtZW50cyhuZXcgT2JqZWN0WzBdKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJdGFibGVWaWV3ZXIuc2V0Q2hlY2tlZEVsZW1lbnRzKG5ldyBPYmplY3RbXQotCQkJCQl7IGpyZSB9KTsKLQkJCQkJdGFibGVWaWV3ZXIucmV2ZWFsKGpyZSk7Ci0JCQkJfQotCQkJCWZpcmVTZWxlY3Rpb25DaGFuZ2VkKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBhbmNlc3RvcikKLQl7Ci0KLQkJQ29tcG9zaXRlIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoYW5jZXN0b3IsIFNXVC5OVUxMKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlwYXJlbnQuc2V0TGF5b3V0KGxheW91dCk7Ci0JCUZvbnQgZm9udCA9IGFuY2VzdG9yLmdldEZvbnQoKTsKLQkJcGFyZW50LnNldEZvbnQoZm9udCk7Ci0JCWZDb250cm9sID0gcGFyZW50OwotCi0JCUdyaWREYXRhIGRhdGE7Ci0KLQkJTGFiZWwgdGFibGVMYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKLQkJdGFibGVMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLkluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja18wKTsKLQkJZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxTcGFuID0gMjsKLQkJdGFibGVMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQl0YWJsZUxhYmVsLnNldEZvbnQoZm9udCk7Ci0KLQkJVGFibGUgZlRhYmxlID0gbmV3IFRhYmxlKHBhcmVudCwgU1dULkNIRUNLIHwgU1dULkJPUkRFUiB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5WX1NDUk9MTCk7Ci0KLQkJZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCQlkYXRhLndpZHRoSGludCA9IDQ1MDsKLQkJZlRhYmxlLnNldExheW91dERhdGEoZGF0YSk7Ci0JCWZUYWJsZS5zZXRGb250KGZvbnQpOwotCi0JCWZUYWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotCQlmVGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOwotCi0JCVRhYmxlQ29sdW1uIGNvbHVtbjEgPSBuZXcgVGFibGVDb2x1bW4oZlRhYmxlLCBTV1QuTk9ORSk7Ci0JCWNvbHVtbjEuc2V0V2lkdGgoMTgwKTsKLQkJY29sdW1uMS5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCWNvbHVtbjEuc2V0VGV4dChNZXNzYWdlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMSk7Ci0JCWNvbHVtbjEuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJc29ydEJ5TmFtZSgpOwotCQkJfQotCQl9KTsKLQotCQlUYWJsZUNvbHVtbiBjb2x1bW4yID0gbmV3IFRhYmxlQ29sdW1uKGZUYWJsZSwgU1dULk5PTkUpOwotCQljb2x1bW4yLnNldFdpZHRoKDkwKTsKLQkJY29sdW1uMi5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCWNvbHVtbjIuc2V0VGV4dChNZXNzYWdlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMik7Ci0JCWNvbHVtbjIuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJc29ydEJ5VHlwZSgpOwotCQkJfQotCQl9KTsKLQotCQlUYWJsZUNvbHVtbiBjb2x1bW40ID0gbmV3IFRhYmxlQ29sdW1uKGZUYWJsZSwgU1dULk5PTkUpOwotCQljb2x1bW40LnNldFdpZHRoKDE4MCk7Ci0JCWNvbHVtbjQuc2V0UmVzaXphYmxlKHRydWUpOwotCQljb2x1bW40LnNldFRleHQoTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzQpOwotCQljb2x1bW40LmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXNvcnRCeVZlcnNpb24oKTsKLQkJCX0KLQkJfSk7Ci0KLQkJdGFibGVWaWV3ZXIgPSBuZXcgQ2hlY2tib3hUYWJsZVZpZXdlcihmVGFibGUpOwotCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBWTUxhYmVsUHJvdmlkZXIoKSk7Ci0JCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUHJvY2Vzc29yc0NvbnRlbnRQcm92aWRlcigpKTsKLQotCQl0YWJsZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldnQpCi0JCQl7Ci0JCQkJZW5hYmxlQnV0dG9ucygpOwotCQkJfQotCQl9KTsKLQotCQl0YWJsZVZpZXdlci5hZGRDaGVja1N0YXRlTGlzdGVuZXIobmV3IElDaGVja1N0YXRlTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBjaGVja1N0YXRlQ2hhbmdlZChDaGVja1N0YXRlQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCWlmIChldmVudC5nZXRDaGVja2VkKCkpCi0JCQkJewotCQkJCQlzZXRDaGVja2VkSW5zdGFsbCgoSVByb2Nlc3Nvckluc3RhbGwpIGV2ZW50LmdldEVsZW1lbnQoKSk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXNldENoZWNrZWRJbnN0YWxsKG51bGwpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0KLQkJdGFibGVWaWV3ZXIuYWRkRG91YmxlQ2xpY2tMaXN0ZW5lcihuZXcgSURvdWJsZUNsaWNrTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhEb3VibGVDbGlja0V2ZW50IGUpCi0JCQl7Ci0JCQkJaWYgKCF0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkpCi0JCQkJewotCQkJCQllZGl0UHJvY2Vzc29yKCk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJZlRhYmxlLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlBZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGV2ZW50KQotCQkJewotCQkJCWlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkRFTCAmJiBldmVudC5zdGF0ZU1hc2sgPT0gMCkKLQkJCQl7Ci0JCQkJCXJlbW92ZVByb2Nlc3NvcnMoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCUNvbXBvc2l0ZSBidXR0b25zID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OVUxMKTsKLQkJYnV0dG9ucy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQkJbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWJ1dHRvbnMuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWJ1dHRvbnMuc2V0Rm9udChmb250KTsKLQotCQlmQWRkQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25zLCBNZXNzYWdlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNSk7Ci0JCWZBZGRCdXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZ0KQotCQkJewotCQkJCWFkZFByb2Nlc3NvcigpOwotCQkJfQotCQl9KTsKLQotCQlmRWRpdEJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9ucywgTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzYpOwotCQlmRWRpdEJ1dHRvbi5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldnQpCi0JCQl7Ci0JCQkJZWRpdFByb2Nlc3NvcigpOwotCQkJfQotCQl9KTsKLQotCQlmUmVtb3ZlQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25zLCBNZXNzYWdlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNyk7Ci0JCWZSZW1vdmVCdXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZ0KQotCQkJewotCQkJCXJlbW92ZVByb2Nlc3NvcnMoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJLy8gY29waWVkIGZyb20gTGlzdERpYWxvZ0ZpZWxkLkNyZWF0ZVNlcGFyYXRvcigpCi0JCUxhYmVsIHNlcGFyYXRvciA9IG5ldyBMYWJlbChidXR0b25zLCBTV1QuTk9ORSk7Ci0JCXNlcGFyYXRvci5zZXRWaXNpYmxlKGZhbHNlKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJZ2QuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0JCWdkLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuQkVHSU5OSU5HOwotCQlnZC5oZWlnaHRIaW50ID0gNDsKLQkJc2VwYXJhdG9yLnNldExheW91dERhdGEoZ2QpOwotCi0JCWZpbGxXaXRoV29ya3NwYWNlUHJvY2Vzc29ycygpOwotCQllbmFibGVCdXR0b25zKCk7Ci0KLQkJcmVzdG9yZUNvbHVtblNldHRpbmdzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZmlsbFdpdGhXb3Jrc3BhY2VQcm9jZXNzb3JzKCkKLQl7Ci0JCUxpc3Q8SW5zdGFsbFN0YW5kaW4+IHN0YW5kaW5zID0gbmV3IEFycmF5TGlzdDxJbnN0YWxsU3RhbmRpbj4oKTsKLQkJSVByb2Nlc3NvclR5cGVbXSB0eXBlcyA9IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvclR5cGVzKCk7Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IHR5cGVzKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29ycyh0eXBlLmdldElkKCkpOwotCQkJZm9yIChJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsIDogaW5zdGFsbHMpCi0JCQl7Ci0JCQkJc3RhbmRpbnMuYWRkKG5ldyBJbnN0YWxsU3RhbmRpbihpbnN0YWxsKSk7Ci0JCQl9Ci0JCX0KLQkJc2V0UHJvY2Vzc29ycyhzdGFuZGlucy50b0FycmF5KG5ldyBJUHJvY2Vzc29ySW5zdGFsbFtzdGFuZGlucy5zaXplKCldKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZpcmVTZWxlY3Rpb25DaGFuZ2VkKCkKLQl7Ci0JCVNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgZ2V0U2VsZWN0aW9uKCkpOwotCQlPYmplY3RbXSBsaXN0ZW5lcnMgPSBmU2VsZWN0aW9uTGlzdGVuZXJzLmdldExpc3RlbmVycygpOwotCQlmb3IgKE9iamVjdCBlbGVtZW50IDogbGlzdGVuZXJzKQotCQl7Ci0JCQlJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyID0gKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpIGVsZW1lbnQ7Ci0JCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNvcnRzIGJ5IHR5cGUsIGFuZCBuYW1lIHdpdGhpbiB0eXBlLgotCSAqLwotCXByaXZhdGUgdm9pZCBzb3J0QnlUeXBlKCkKLQl7Ci0JCXRhYmxlVmlld2VyLnNldFNvcnRlcihuZXcgVmlld2VyU29ydGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpCi0JCQl7Ci0JCQkJSVByb2Nlc3Nvckluc3RhbGwgbGVmdCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgZTE7Ci0JCQkJSVByb2Nlc3Nvckluc3RhbGwgcmlnaHQgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGUyOwotCQkJCXJldHVybiBsZWZ0LmdldFByb2Nlc3NvclR5cGUoKS5nZXRMYWJlbCgpLmNvbXBhcmVUb0lnbm9yZUNhc2UocmlnaHQuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldExhYmVsKCkpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBib29sZWFuIGlzU29ydGVyUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNvcnRCeVZlcnNpb24oKQotCXsKLQkJdGFibGVWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikKLQkJCXsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBsZWZ0ID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlMTsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCByaWdodCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgZTI7Ci0JCQkJcmV0dXJuIGxlZnQuZ2V0U3VwcG9ydHMoKS5jb21wYXJlVG9JZ25vcmVDYXNlKHJpZ2h0LmdldFN1cHBvcnRzKCkpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBib29sZWFuIGlzU29ydGVyUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfSk7Ci0JfQotCi0JLyoqCi0JICogU29ydHMgYnkgbmFtZS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc29ydEJ5TmFtZSgpCi0JewotCQl0YWJsZVZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBjb21wYXJlKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBlMSwgT2JqZWN0IGUyKQotCQkJewotCQkJCWlmICgoZTEgaW5zdGFuY2VvZiBJUHJvY2Vzc29ySW5zdGFsbCkgJiYgKGUyIGluc3RhbmNlb2YgSVByb2Nlc3Nvckluc3RhbGwpKQotCQkJCXsKLQkJCQkJSVByb2Nlc3Nvckluc3RhbGwgbGVmdCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgZTE7Ci0JCQkJCUlQcm9jZXNzb3JJbnN0YWxsIHJpZ2h0ID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlMjsKLQkJCQkJcmV0dXJuIGxlZnQuZ2V0TmFtZSgpLmNvbXBhcmVUb0lnbm9yZUNhc2UocmlnaHQuZ2V0TmFtZSgpKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIHN1cGVyLmNvbXBhcmUodmlld2VyLCBlMSwgZTIpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBib29sZWFuIGlzU29ydGVyUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGVuYWJsZUJ1dHRvbnMoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJaW50IHNlbGVjdGlvbkNvdW50ID0gc2VsZWN0aW9uLnNpemUoKTsKLQkJZkVkaXRCdXR0b24uc2V0RW5hYmxlZChzZWxlY3Rpb25Db3VudCA9PSAxICYmICEoKElQcm9jZXNzb3JJbnN0YWxsKXNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKSkuaXNDb250cmlidXRlZCgpKTsKLQkJaWYgKHNlbGVjdGlvbkNvdW50ID4gMCAmJiBzZWxlY3Rpb25Db3VudCA8IHRhYmxlVmlld2VyLmdldFRhYmxlKCkuZ2V0SXRlbUNvdW50KCkpCi0JCXsKLQkJCUl0ZXJhdG9yPD8+IGl0ZXJhdG9yID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKQotCQkJewotCQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQlpZiAoaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpCi0JCQkJewotCQkJCQlmUmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfQotCQkJZlJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJZlJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBCdXR0b24gY3JlYXRlUHVzaEJ1dHRvbihDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwpCi0JewotCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5QVVNIKTsKLQkJYnV0dG9uLnNldFRleHQobGFiZWwpOwotCQlidXR0b24uc2V0TGF5b3V0RGF0YShHcmlkRGF0YUZhY3RvcnkuZmlsbERlZmF1bHRzKCkuY3JlYXRlKCkpOwotCQlyZXR1cm4gYnV0dG9uOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBDb250cm9sIGdldENvbnRyb2woKQotCXsKLQkJcmV0dXJuIGZDb250cm9sOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFByb2Nlc3NvcnMoSVByb2Nlc3Nvckluc3RhbGxbXSB2bXMpCi0JewotCQlwcm9jZXNzb3JzLmNsZWFyKCk7Ci0JCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgZWxlbWVudCA6IHZtcykKLQkJewotCQkJcHJvY2Vzc29ycy5hZGQoZWxlbWVudCk7Ci0JCX0KLQkJdGFibGVWaWV3ZXIuc2V0SW5wdXQocHJvY2Vzc29ycyk7Ci0JCS8vIHRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3Nvckluc3RhbGxbXSBnZXRQcm9jZXNzb3JzKCkKLQl7Ci0JCXJldHVybiBwcm9jZXNzb3JzLnRvQXJyYXkobmV3IElQcm9jZXNzb3JJbnN0YWxsW3Byb2Nlc3NvcnMuc2l6ZSgpXSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFByb2Nlc3NvcigpCi0JewotCQlBZGRQcm9jZXNzb3JEaWFsb2cgZGlhbG9nID0gbmV3IEFkZFByb2Nlc3NvckRpYWxvZyh0aGlzLCBnZXRTaGVsbCgpLCBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlc0V4Y2xKUkVEZWZhdWx0KCksIG51bGwpOwotCQlkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX0FkZF9UaXRsZSk7Ci0JCWlmIChkaWFsb2cub3BlbigpICE9IFdpbmRvdy5PSykKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcHJvY2Vzc29yQWRkZWQoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCXByb2Nlc3NvcnMuYWRkKGluc3RhbGwpOwotCQl0YWJsZVZpZXdlci5hZGQoaW5zdGFsbCk7Ci0JCXRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihpbnN0YWxsKSwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNEdXBsaWNhdGVOYW1lKFN0cmluZyBuYW1lKQotCXsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZXNzb3JzLnNpemUoKTsgaSsrKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gcHJvY2Vzc29ycy5nZXQoaSk7Ci0JCQlpZiAoaW5zdGFsbC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZWRpdFByb2Nlc3NvcigpCi0JewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpOwotCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCWlmIChpbnN0YWxsID09IG51bGwpCi0JCXsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIWluc3RhbGwuaXNDb250cmlidXRlZCgpKQotCQl7Ci0vLwkJCVByb2Nlc3NvckRldGFpbHNEaWFsb2cgZGlhbG9nID0gbmV3IFByb2Nlc3NvckRldGFpbHNEaWFsb2coZ2V0U2hlbGwoKSwgaW5zdGFsbCk7Ci0vLwkJCWRpYWxvZy5vcGVuKCk7Ci0vLwkJfQotLy8JCWVsc2UKLS8vCQl7Ci0JCQlBZGRQcm9jZXNzb3JEaWFsb2cgZGlhbG9nID0gbmV3IEFkZFByb2Nlc3NvckRpYWxvZyh0aGlzLCBnZXRTaGVsbCgpLCBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlc0V4Y2xKUkVEZWZhdWx0KCksIGluc3RhbGwpOwotCQkJZGlhbG9nLnNldFRpdGxlKE1lc3NhZ2VzLkFkZFByb2Nlc3NvckRpYWxvZ19FZGl0X1RpdGxlKTsKLQkJCWlmIChkaWFsb2cub3BlbigpICE9IFdpbmRvdy5PSykKLQkJCXsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQkvLyBmaWxsV2l0aFdvcmtzcGFjZVByb2Nlc3NvcnMoKTsKLQkJCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZW1vdmVQcm9jZXNzb3JzKCkKLQl7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsW10gdm1zID0gbmV3IElQcm9jZXNzb3JJbnN0YWxsW3NlbGVjdGlvbi5zaXplKCldOwotCQlJdGVyYXRvcjw/PiBpdGVyID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7Ci0JCWludCBpID0gMDsKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotCQl7Ci0JCQl2bXNbaV0gPSAoSVByb2Nlc3Nvckluc3RhbGwpIGl0ZXIubmV4dCgpOwotCQkJaSsrOwotCQl9Ci0JCXJlbW92ZVByb2Nlc3NvcnModm1zKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVQcm9jZXNzb3JzKElQcm9jZXNzb3JJbnN0YWxsW10gdGhlSW5zdGFsbHMpCi0JewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBwcmV2ID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRTZWxlY3Rpb24oKTsKLQkJZm9yIChJUHJvY2Vzc29ySW5zdGFsbCBlbGVtZW50IDogdGhlSW5zdGFsbHMpCi0JCXsKLQkJCXByb2Nlc3NvcnMucmVtb3ZlKGVsZW1lbnQpOwotCQl9Ci0JCXRhYmxlVmlld2VyLnJlZnJlc2goKTsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gY3VyciA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0U2VsZWN0aW9uKCk7Ci0JCWlmICghY3Vyci5lcXVhbHMocHJldikpCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsW10gaW5zdGFsbHMgPSBnZXRQcm9jZXNzb3JzKCk7Ci0JCQlpZiAoY3Vyci5zaXplKCkgPT0gMCAmJiBpbnN0YWxscy5sZW5ndGggPT0gMSkKLQkJCXsKLQkJCQkvLyBwaWNrIGEgZGVmYXVsdCBpbnN0YWxsIGF1dG9tYXRpY2FsbHkKLQkJCQlzZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oaW5zdGFsbHNbMF0pKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlmaXJlU2VsZWN0aW9uQ2hhbmdlZCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2hlY2tlZEluc3RhbGwoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCWlmIChpbnN0YWxsID09IG51bGwpCi0JCXsKLQkJCXNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihpbnN0YWxsKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3Nvckluc3RhbGwgZ2V0Q2hlY2tlZEluc3RhbGwoKQotCXsKLQkJT2JqZWN0W10gb2JqZWN0cyA9IHRhYmxlVmlld2VyLmdldENoZWNrZWRFbGVtZW50cygpOwotCQlpZiAob2JqZWN0cy5sZW5ndGggPT0gMCkKLQkJewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIChJUHJvY2Vzc29ySW5zdGFsbCkgb2JqZWN0c1swXTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRTb3J0Q29sdW1uKGludCBjb2x1bW4pCi0JewotCQlzd2l0Y2ggKGNvbHVtbikKLQkJewotCQkJY2FzZSAxOgotCQkJCXNvcnRCeU5hbWUoKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMjoKLQkJCQlzb3J0QnlUeXBlKCk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJc3VwZXIuc2V0U29ydENvbHVtbihjb2x1bW4pOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUYWJsZSBnZXRUYWJsZSgpCi0JewotCQlyZXR1cm4gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkKLQl7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UXVhbGlmaWVyKCkKLQl7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJQ29uc3RhbnRzLlBST0NFU1NPUl9ERVRBSUxTX0RJQUxPRzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFByb2Nlc3NvcnNDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotCXsKLQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dCkKLQkJewotCQkJcmV0dXJuIHByb2Nlc3NvcnMudG9BcnJheSgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQl7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJewotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVk1MYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElUYWJsZUxhYmVsUHJvdmlkZXIKLQl7Ci0JCXB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uVGV4dChPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KQotCQl7Ci0JCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElQcm9jZXNzb3JJbnN0YWxsKQotCQkJewotCQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGVsZW1lbnQ7Ci0JCQkJc3dpdGNoIChjb2x1bW5JbmRleCkKLQkJCQl7Ci0JCQkJCWNhc2UgMDoKLQkJCQkJCXJldHVybiBpbnN0YWxsLmdldE5hbWUoKTsKLQkJCQkJY2FzZSAxOgotCQkJCQkJcmV0dXJuIGluc3RhbGwuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldExhYmVsKCk7Ci0JCQkJCWNhc2UgMjoKLQkJCQkJCWlmIChpbnN0YWxsLmdldERlYnVnZ2VyKCkgIT0gbnVsbCkKLQkJCQkJCXsKLQkJCQkJCQlyZXR1cm4gaW5zdGFsbC5nZXREZWJ1Z2dlcigpLmdldE5hbWUoKTsKLQkJCQkJCX0KLQkJCQkJCXJldHVybiBNZXNzYWdlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfODsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gZWxlbWVudC50b1N0cmluZygpOwotCQl9Ci0KLQkJcHVibGljIEltYWdlIGdldENvbHVtbkltYWdlKE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDA0ZTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCXN0YXRpYwotCXsKLQkJLy8gaW5pdGlhbGl6ZSByZXNvdXJjZSBidW5kbGUKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOwotCX0KLQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ18xOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ183OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19FZGl0X1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19BZGRfVGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUHJvY2Vzc29yRGlhbG9nX2phcnM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUHJvY2Vzc29yRGlhbG9nX2F0dHJpYnV0ZXM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUHJvY2Vzc29yRGlhbG9nX3Byb2Nlc3Nvck5hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUHJvY2Vzc29yRGlhbG9nX3Byb2Nlc3NvclR5cGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUHJvY2Vzc29yRGlhbG9nX2VudGVyTmFtZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfZHVwbGljYXRlTmFtZTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckxpYnJhcnlCbG9ja182OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckxpYnJhcnlCbG9ja19BZGRCdXR0b247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yTGlicmFyeUJsb2NrX1JlbW92ZUJ1dHRvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfQWRkV29ya3NwYWNlQnV0dG9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckxpYnJhcnlCbG9ja19GaWxlRGlhbG9nX1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckxpYnJhcnlCbG9ja19Xb3Jrc3BhY2VGaWxlRGlhbG9nX1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckxpYnJhcnlCbG9ja19Xb3Jrc3BhY2VGaWxlRGlhbG9nX01lc3NhZ2U7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfODsKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMjsKLQotCXByaXZhdGUgTWVzc2FnZXMoKQotCXsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1Byb2Nlc3NvckxpYnJhcnlCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Qcm9jZXNzb3JMaWJyYXJ5QmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM1MmRjOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1Byb2Nlc3NvckxpYnJhcnlCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJGaWx0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5uYXZpZ2F0b3IuUmVzb3VyY2VDb21wYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IuSW5zdGFsbFN0YW5kaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkphckNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IuSmFyTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2sgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgotewotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBU1RfUEFUSF9TRVRUSU5HID0gIkxBU1RfUEFUSF9TRVRUSU5HIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBU1RfV09SS1NQQUNFX1BBVEhfU0VUVElORyA9ICJMQVNUX1dPUktTUEFDRV9QQVRIX1NFVFRJTkciOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElBTE9HX1NFVFRJTkdTX1BSRUZJWCA9ICJQcm9jZXNzb3JMaWJyYXJ5QmxvY2siOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIEluc3RhbGxTdGFuZGluIGluc3RhbGw7Ci0JcHJvdGVjdGVkIElQcm9jZXNzb3JUeXBlIGluc3RhbGxUeXBlOwotCXByb3RlY3RlZCBBZGRQcm9jZXNzb3JEaWFsb2cgYWRkRGlhbG9nID0gbnVsbDsKLQlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBCdXR0b24gcmVtb3ZlQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIGFkZEJ1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiBhZGRXb3Jrc3BhY2VCdXR0b247Ci0KLQlwcml2YXRlIGZpbmFsIElTZWxlY3Rpb25TdGF0dXNWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IElTZWxlY3Rpb25TdGF0dXNWYWxpZGF0b3IoKQotCXsKLQkJcHVibGljIElTdGF0dXMgdmFsaWRhdGUoT2JqZWN0W10gc2VsZWN0aW9uKQotCQl7Ci0JCQlpZiAoc2VsZWN0aW9uLmxlbmd0aCA9PSAwKQotCQkJewotCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLCAiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWZvciAoT2JqZWN0IGVsZW1lbnQgOiBzZWxlY3Rpb24pCi0JCQl7Ci0JCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRm9sZGVyKQotCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwgIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlKQotCQkJCXsKLQkJCQkJLy8gSUZpbGUgZmlsZSA9IChJRmlsZSkgc2VsZWN0aW9uW2ldOwotCQkJCQkvLyBUT0RPIGNoZWNrIHRoYXQgdGhlIGZpbGUgaXMgbm90IGFscmVhZHkgb24gdGhlIGNsYXNzcGF0aAotCQkJCX0KLQkJCX0KLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLCAiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX07Ci0KLQlwdWJsaWMgUHJvY2Vzc29yTGlicmFyeUJsb2NrKEFkZFByb2Nlc3NvckRpYWxvZyBkaWFsb2cpCi0JewotCQlhZGREaWFsb2cgPSBkaWFsb2c7Ci0JfQotCi0JcHVibGljIENvbnRyb2wgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJRm9udCBmb250ID0gcGFyZW50LmdldEZvbnQoKTsKLQotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgdG9wTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJdG9wTGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQl0b3BMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJdG9wTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJY29tcC5zZXRMYXlvdXQodG9wTGF5b3V0KTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJY29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQl0YWJsZVZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcihjb21wKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJZ2QuaGVpZ2h0SGludCA9IDY7Ci0JCXRhYmxlVmlld2VyLmdldENvbnRyb2woKS5zZXRMYXlvdXREYXRhKGdkKTsKLQkJSmFyQ29udGVudFByb3ZpZGVyIGZMaWJyYXJ5Q29udGVudFByb3ZpZGVyID0gbmV3IEphckNvbnRlbnRQcm92aWRlcigpOwotCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIoZkxpYnJhcnlDb250ZW50UHJvdmlkZXIpOwotCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBKYXJMYWJlbFByb3ZpZGVyKCkpOwotCQl0YWJsZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0KLQkJQ29tcG9zaXRlIHBhdGhCdXR0b25Db21wID0gbmV3IENvbXBvc2l0ZShjb21wLCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgcGF0aEJ1dHRvbkxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCXBhdGhCdXR0b25MYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJcGF0aEJ1dHRvbkxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCXBhdGhCdXR0b25Db21wLnNldExheW91dChwYXRoQnV0dG9uTGF5b3V0KTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HIHwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkJcGF0aEJ1dHRvbkNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXBhdGhCdXR0b25Db21wLnNldEZvbnQoZm9udCk7Ci0KLQkJYWRkV29ya3NwYWNlQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZFdvcmtzcGFjZUJ1dHRvbik7Ci0JCWFkZFdvcmtzcGFjZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQotCQlhZGRCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKHBhdGhCdXR0b25Db21wLCBNZXNzYWdlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfQWRkQnV0dG9uKTsKLQkJYWRkQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCi0JCXJlbW92ZUJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIE1lc3NhZ2VzLlByb2Nlc3NvckxpYnJhcnlCbG9ja19SZW1vdmVCdXR0b24pOwotCQlyZW1vdmVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0KLQkJcmV0dXJuIGNvbXA7Ci0JfQotCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVQdXNoQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbCkKLQl7Ci0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlBVU0gpOwotCQlidXR0b24uc2V0Rm9udChwYXJlbnQuZ2V0Rm9udCgpKTsKLQkJYnV0dG9uLnNldFRleHQobGFiZWwpOwotCQlhZGREaWFsb2cuc2V0QnV0dG9uTGF5b3V0RGF0YShidXR0b24pOwotCQlyZXR1cm4gYnV0dG9uOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVZlcnRpY2FsU3BhY2VyKENvbXBvc2l0ZSBjb21wLCBpbnQgY29sU3BhbikKLQl7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXAsIFNXVC5OT05FKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSBjb2xTcGFuOwotCQlsYWJlbC5zZXRMYXlvdXREYXRhKGdkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJbnN0YWxsU3RhbmRpbiBzdGFuZGluLCBJUHJvY2Vzc29yVHlwZSB0eXBlKQotCXsKLQkJaW5zdGFsbCA9IHN0YW5kaW47Ci0JCWluc3RhbGxUeXBlID0gdHlwZTsKLQkJaWYgKGluc3RhbGwgIT0gbnVsbCkKLQkJCXRhYmxlVmlld2VyLnNldElucHV0KGluc3RhbGwpOwotCQl1cGRhdGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBVcGRhdGVzIGJ1dHRvbnMgYW5kIHN0YXR1cyBiYXNlZCBvbiBjdXJyZW50IGxpYnJhcmllcwotCSAqLwotCXB1YmxpYyB2b2lkIHVwZGF0ZSgpCi0JewotCQl1cGRhdGVCdXR0b25zKCk7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJaWYgKGluc3RhbGwgIT0gbnVsbCAmJiBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKS5sZW5ndGggPT0gMCkKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLCBNZXNzYWdlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfNiwgbnVsbCk7Ci0JCX0KLQkJYWRkRGlhbG9nLnNldFN5c3RlbUxpYnJhcnlTdGF0dXMoc3RhdHVzKTsKLQkJYWRkRGlhbG9nLnVwZGF0ZVN0YXR1c0xpbmUoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSW5zdGFsbFN0YW5kaW4gc3RhbmRpbikKLQl7Ci0JCXN0YW5kaW4uc2V0UHJvY2Vzc29ySmFycyhpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIElQcm9jZXNzb3JJbnN0YWxsIGdldFZNSW5zdGFsbCgpCi0JewotCQlyZXR1cm4gaW5zdGFsbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVByb2Nlc3NvclR5cGUgZ2V0Vk1JbnN0YWxsVHlwZSgpCi0JewotCQlyZXR1cm4gaW5zdGFsbFR5cGU7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7Ci0JCU9iamVjdCBzb3VyY2UgPSBlLmdldFNvdXJjZSgpOwotCQlpZiAoc291cmNlID09IHJlbW92ZUJ1dHRvbikKLQkJewotCQkJcmVtb3ZlKChJU3RydWN0dXJlZFNlbGVjdGlvbikgdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOwotCQl9Ci0JCWVsc2UgaWYgKHNvdXJjZSA9PSBhZGRCdXR0b24pCi0JCXsKLQkJCWFkZEV4dGVybmFsKChJU3RydWN0dXJlZFNlbGVjdGlvbikgdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOwotCQl9Ci0JCWVsc2UgaWYgKHNvdXJjZSA9PSBhZGRXb3Jrc3BhY2VCdXR0b24pCi0JCXsKLQkJCWFkZFdvcmtzcGFjZSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJfQotCQl1cGRhdGUoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQl7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZEV4dGVybmFsKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCUlEaWFsb2dTZXR0aW5ncyBkaWFsb2dTZXR0aW5ncyA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JCVN0cmluZyBsYXN0VXNlZFBhdGggPSBkaWFsb2dTZXR0aW5ncy5nZXQoTEFTVF9QQVRIX1NFVFRJTkcpOwotCQlpZiAobGFzdFVzZWRQYXRoID09IG51bGwpCi0JCXsKLQkJCWxhc3RVc2VkUGF0aCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJRmlsZURpYWxvZyBkaWFsb2cgPSBuZXcgRmlsZURpYWxvZyh0YWJsZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSwgU1dULk1VTFRJKTsKLQkJZGlhbG9nLnNldFRleHQoTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrX0ZpbGVEaWFsb2dfVGl0bGUpOwotCQlkaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhuZXcgU3RyaW5nW10KLQkJeyAiKi5qYXI7Ki56aXAiIH0pOyAvLyROT04tTkxTLTEkCi0JCWRpYWxvZy5zZXRGaWx0ZXJQYXRoKGxhc3RVc2VkUGF0aCk7Ci0JCVN0cmluZyByZXMgPSBkaWFsb2cub3BlbigpOwotCQlpZiAocmVzID09IG51bGwpCi0JCXsKLQkJCXJldHVybjsKLQkJfQotCQlTdHJpbmdbXSBmaWxlTmFtZXMgPSBkaWFsb2cuZ2V0RmlsZU5hbWVzKCk7Ci0JCWludCBuQ2hvc2VuID0gZmlsZU5hbWVzLmxlbmd0aDsKLQotCQlJUGF0aCBmaWx0ZXJQYXRoID0gbmV3IFBhdGgoZGlhbG9nLmdldEZpbHRlclBhdGgoKSk7Ci0JCUlQcm9jZXNzb3JKYXJbXSBsaWJzID0gbmV3IElQcm9jZXNzb3JKYXJbbkNob3Nlbl07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkNob3NlbjsgaSsrKQotCQl7Ci0JCQlsaWJzW2ldID0gSkFYUFJ1bnRpbWUuY3JlYXRlUHJvY2Vzc29ySmFyKGZpbHRlclBhdGguYXBwZW5kKGZpbGVOYW1lc1tpXSkubWFrZUFic29sdXRlKCkpOwotCQl9Ci0JCWRpYWxvZ1NldHRpbmdzLnB1dChMQVNUX1BBVEhfU0VUVElORywgZmlsdGVyUGF0aC50b09TU3RyaW5nKCkpOwotCi0JCUlQcm9jZXNzb3JKYXJbXSBjdXJyZW50SmFycyA9IGluc3RhbGwuZ2V0UHJvY2Vzc29ySmFycygpOwotCQlJUHJvY2Vzc29ySmFyW10gbmV3SmFycyA9IG5ldyBJUHJvY2Vzc29ySmFyW2N1cnJlbnRKYXJzLmxlbmd0aCArIGxpYnMubGVuZ3RoXTsKLQkJU3lzdGVtLmFycmF5Y29weShjdXJyZW50SmFycywgMCwgbmV3SmFycywgMCwgY3VycmVudEphcnMubGVuZ3RoKTsKLQkJU3lzdGVtLmFycmF5Y29weShsaWJzLCAwLCBuZXdKYXJzLCBjdXJyZW50SmFycy5sZW5ndGgsIGxpYnMubGVuZ3RoKTsKLQkJaW5zdGFsbC5zZXRQcm9jZXNzb3JKYXJzKG5ld0phcnMpOwotCi0JCXRhYmxlVmlld2VyLmFkZChsaWJzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkV29ya3NwYWNlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCUlEaWFsb2dTZXR0aW5ncyBkaWFsb2dTZXR0aW5ncyA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JCVN0cmluZyBsYXN0VXNlZFBhdGggPSBkaWFsb2dTZXR0aW5ncy5nZXQoTEFTVF9XT1JLU1BBQ0VfUEFUSF9TRVRUSU5HKTsKLQkJSVBhdGggbGFzdFBhdGggPSBudWxsOwotCQlpZiAobGFzdFVzZWRQYXRoICE9IG51bGwpCi0JCXsKLQkJCWxhc3RQYXRoID0gUGF0aC5mcm9tUG9ydGFibGVTdHJpbmcobGFzdFVzZWRQYXRoKTsKLQkJfQotCi0JCS8vIElSZXNvdXJjZSBjdXJyZW50UmVzb3VyY2UgPSBnZXRSZXNvdXJjZSgpOwotCQlFbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2codGFibGVWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCksIG5ldyBXb3JrYmVuY2hMYWJlbFByb3ZpZGVyKCksIG5ldyBXb3JrYmVuY2hDb250ZW50UHJvdmlkZXIoKSk7Ci0JCWRpYWxvZy5zZXRUaXRsZShNZXNzYWdlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19UaXRsZSk7Ci0JCWRpYWxvZy5zZXRNZXNzYWdlKE1lc3NhZ2VzLlByb2Nlc3NvckxpYnJhcnlCbG9ja19Xb3Jrc3BhY2VGaWxlRGlhbG9nX01lc3NhZ2UpOwotCQlkaWFsb2cuc2V0VmFsaWRhdG9yKHZhbGlkYXRvcik7Ci0JCWRpYWxvZy5hZGRGaWx0ZXIobmV3IFZpZXdlckZpbHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRFbGVtZW50LCBPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElDb250YWluZXIpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkKLQkJCQl7Ci0JCQkJCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGVsZW1lbnQ7Ci0JCQkJCVN0cmluZyBleHRlbnNpb24gPSBmaWxlLmdldEZpbGVFeHRlbnNpb24oKTsKLQkJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsKQotCQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCQlyZXR1cm4gZXh0ZW5zaW9uLmVxdWFscygiamFyIik7IC8vJE5PTi1OTFMtMSQKLQkJCQl9Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQl9KTsKLQkJZGlhbG9nLnNldElucHV0KFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkpOwotCQlpZiAobGFzdFBhdGggIT0gbnVsbCkKLQkJCWRpYWxvZy5zZXRJbml0aWFsU2VsZWN0aW9uKGxhc3RQYXRoKTsKLQkJZGlhbG9nLnNldENvbXBhcmF0b3IobmV3IFJlc291cmNlQ29tcGFyYXRvcihSZXNvdXJjZUNvbXBhcmF0b3IuTkFNRSkpOwotCQlkaWFsb2cuc2V0QWxsb3dNdWx0aXBsZSh0cnVlKTsKLQotCQlpZiAoZGlhbG9nLm9wZW4oKSA9PSBXaW5kb3cuT0spCi0JCXsKLQkJCU9iamVjdFtdIGVsZW1lbnRzID0gZGlhbG9nLmdldFJlc3VsdCgpOwotCQkJaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApCi0JCQl7Ci0JCQkJSVByb2Nlc3NvckphcltdIGxpYnMgPSBuZXcgSVByb2Nlc3NvckphcltlbGVtZW50cy5sZW5ndGhdOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCQkJewotCQkJCQlJRmlsZSBqYXIgPSAoSUZpbGUpIGVsZW1lbnRzW2ldOwotCQkJCQlsaWJzW2ldID0gSkFYUFJ1bnRpbWUuY3JlYXRlUHJvY2Vzc29ySmFyKGphci5nZXRGdWxsUGF0aCgpKTsKLQkJCQl9Ci0JCQkJSVByb2Nlc3NvckphcltdIGN1cnJlbnRKYXJzID0gaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCk7Ci0JCQkJSVByb2Nlc3NvckphcltdIG5ld0phcnMgPSBuZXcgSVByb2Nlc3NvckphcltjdXJyZW50SmFycy5sZW5ndGggKyBsaWJzLmxlbmd0aF07Ci0JCQkJU3lzdGVtLmFycmF5Y29weShjdXJyZW50SmFycywgMCwgbmV3SmFycywgMCwgY3VycmVudEphcnMubGVuZ3RoKTsKLQkJCQlTeXN0ZW0uYXJyYXljb3B5KGxpYnMsIDAsIG5ld0phcnMsIGN1cnJlbnRKYXJzLmxlbmd0aCwgbGlicy5sZW5ndGgpOwotCQkJCWluc3RhbGwuc2V0UHJvY2Vzc29ySmFycyhuZXdKYXJzKTsKLQotCQkJCXRhYmxlVmlld2VyLmFkZChsaWJzKTsKLQotCQkJCWxhc3RQYXRoID0gbGlic1swXS5nZXRQYXRoKCk7Ci0JCQkJbGFzdFBhdGggPSBsYXN0UGF0aC51cHRvU2VnbWVudChsYXN0UGF0aC5zZWdtZW50Q291bnQoKSk7Ci0JCQkJZGlhbG9nU2V0dGluZ3MucHV0KExBU1RfV09SS1NQQUNFX1BBVEhfU0VUVElORywgbGFzdFBhdGgudG9Qb3J0YWJsZVN0cmluZygpKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZW1vdmUoSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJTGlzdDxJUHJvY2Vzc29ySmFyPiBjdXJyZW50SmFycyA9IG5ldyBBcnJheUxpc3Q8SVByb2Nlc3Nvckphcj4oQXJyYXlzLmFzTGlzdChpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKSkpOwotCQlmb3IgKEl0ZXJhdG9yPD8+IGl0ZXIgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQljdXJyZW50SmFycy5yZW1vdmUoaXRlci5uZXh0KCkpOwotCQl9Ci0JCWluc3RhbGwuc2V0UHJvY2Vzc29ySmFycyhjdXJyZW50SmFycy50b0FycmF5KG5ldyBJUHJvY2Vzc29ySmFyWzBdKSk7Ci0JCXRhYmxlVmlld2VyLnJlbW92ZShzZWxlY3Rpb24udG9BcnJheSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQl7Ci0JCXVwZGF0ZUJ1dHRvbnMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlQnV0dG9ucygpCi0JewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpOwotCQlyZW1vdmVCdXR0b24uc2V0RW5hYmxlZCghc2VsZWN0aW9uLmlzRW1wdHkoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZTRlZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cyBJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UKLXsKLQlwcml2YXRlIEluc3RhbGxlZFByb2Nlc3NvcnNCbG9jayBwcm9jZXNzb3JzQmxvY2s7Ci0KLQlwdWJsaWMgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlKCkKLQl7Ci0JCXN1cGVyKCk7Ci0JCS8vIG9ubHkgdXNlZCB3aGVuIHBhZ2UgaXMgc2hvd24gcHJvZ3JhbWF0aWNhbGx5Ci0JCXNldFRpdGxlKE1lc3NhZ2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZV8wKTsKLQkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzEpOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpCi0JewotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBhbmNlc3RvcikKLQl7Ci0JCWluaXRpYWxpemVEaWFsb2dVbml0cyhhbmNlc3Rvcik7Ci0KLQkJbm9EZWZhdWx0QW5kQXBwbHlCdXR0b24oKTsKLQotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWFuY2VzdG9yLnNldExheW91dChsYXlvdXQpOwotCi0JCXByb2Nlc3NvcnNCbG9jayA9IG5ldyBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2soKTsKLQkJcHJvY2Vzc29yc0Jsb2NrLmNyZWF0ZUNvbnRyb2woYW5jZXN0b3IpOwotCQlDb250cm9sIGNvbnRyb2wgPSBwcm9jZXNzb3JzQmxvY2suZ2V0Q29udHJvbCgpOwotCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWRhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOwotCQljb250cm9sLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJLy8gVE9ETyBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwLi4uCi0KLQkJaW5pdERlZmF1bHRJbnN0YWxsKCk7Ci0JCXByb2Nlc3NvcnNCbG9jay5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gZ2V0Q3VycmVudERlZmF1bHRQcm9jZXNzb3IoKTsKLQkJCQlpZiAoaW5zdGFsbCA9PSBudWxsKQotCQkJCXsKLQkJCQkJc2V0VmFsaWQoZmFsc2UpOwotCQkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzIpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlzZXRWYWxpZCh0cnVlKTsKLQkJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCWFwcGx5RGlhbG9nRm9udChhbmNlc3Rvcik7Ci0JCXJldHVybiBhbmNlc3RvcjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotCXsKLQkJcHJvY2Vzc29yc0Jsb2NrLnNhdmVDb2x1bW5TZXR0aW5ncygpOwotCQlmaW5hbCBib29sZWFuW10gb2sgPSBuZXcgYm9vbGVhblsxXTsKLQkJdHJ5Ci0JCXsKLQkJCWZpbmFsIElQcm9jZXNzb3JJbnN0YWxsW10gaW5zdGFsbHMgPSBwcm9jZXNzb3JzQmxvY2suZ2V0UHJvY2Vzc29ycygpOwotCQkJZmluYWwgSVByb2Nlc3Nvckluc3RhbGwgZGVmYXVsdFByb2Nlc3NvciA9IGdldEN1cnJlbnREZWZhdWx0UHJvY2Vzc29yKCk7Ci0JCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgcnVubmFibGUgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkKLQkJCXsKLQkJCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24KLQkJCQl7Ci0JCQkJCXRyeQotCQkJCQl7Ci0JCQkJCQlKQVhQUnVudGltZS5zYXZlUHJvY2Vzc29yUHJlZmVyZW5jZXMoaW5zdGFsbHMsZGVmYXVsdFByb2Nlc3Nvcixtb25pdG9yKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJCQl7Ci0JCQkJCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJCQkJfQotCQkJCQlva1swXSA9ICFtb25pdG9yLmlzQ2FuY2VsZWQoKTsKLQkJCQl9Ci0JCQl9OwotCQkJWFNMRGVidWdVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0UHJvZ3Jlc3NTZXJ2aWNlKCkuYnVzeUN1cnNvcldoaWxlKHJ1bm5hYmxlKTsKLQkJfQotCQljYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJcmV0dXJuIG9rWzBdOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0RGVmYXVsdEluc3RhbGwoKQotCXsKLQkJSVByb2Nlc3Nvckluc3RhbGwgcmVhbERlZmF1bHQgPSBKQVhQUnVudGltZS5nZXREZWZhdWx0UHJvY2Vzc29yKCk7Ci0JCWlmIChyZWFsRGVmYXVsdCAhPSBudWxsKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gcHJvY2Vzc29yc0Jsb2NrLmdldFByb2Nlc3NvcnMoKTsKLQkJCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgZmFrZUluc3RhbGwgOiBpbnN0YWxscykKLQkJCXsKLQkJCQlpZiAoZmFrZUluc3RhbGwuZ2V0SWQoKS5lcXVhbHMocmVhbERlZmF1bHQuZ2V0SWQoKSkpCi0JCQkJewotCQkJCQl2ZXJpZnlEZWZhdWx0Vk0oZmFrZUluc3RhbGwpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdmVyaWZ5RGVmYXVsdFZNKElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlpZiAoaW5zdGFsbCAhPSBudWxsKQotCQl7Ci0JCQlwcm9jZXNzb3JzQmxvY2suc2V0Q2hlY2tlZEluc3RhbGwoaW5zdGFsbCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwcm9jZXNzb3JzQmxvY2suc2V0Q2hlY2tlZEluc3RhbGwobnVsbCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElQcm9jZXNzb3JJbnN0YWxsIGdldEN1cnJlbnREZWZhdWx0UHJvY2Vzc29yKCkKLQl7Ci0JCXJldHVybiBwcm9jZXNzb3JzQmxvY2suZ2V0Q2hlY2tlZEluc3RhbGwoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkNGU3Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1BZGRQcm9jZXNzb3JEaWFsb2dfMT1TdXBwb3J0ZWQgdmVyc2lvbnM6Ci1BZGRQcm9jZXNzb3JEaWFsb2dfNz1Qcm9jZXNzb3IgbXVzdCBzdXBwb3J0IGF0IGxlYXN0IG9uZSBYU0xUIHZlcnNpb24KLUFkZFByb2Nlc3NvckRpYWxvZ19FZGl0X1RpdGxlPUVkaXQgUHJvY2Vzc29yCi1BZGRQcm9jZXNzb3JEaWFsb2dfQWRkX1RpdGxlPUFkZCBQcm9jZXNzb3IKLUFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JOYW1lPVByb2Nlc3NvciBOYW1lOgotQWRkUHJvY2Vzc29yRGlhbG9nX3Byb2Nlc3NvclR5cGU9UHJvY2Vzc29yIFR5cGU6Ci1BZGRQcm9jZXNzb3JEaWFsb2dfamFycz1MaWJyYXJpZXM6Ci1BZGRQcm9jZXNzb3JEaWFsb2dfYXR0cmlidXRlcz1BdHRyaWJ1dGVzOgotQWRkUHJvY2Vzc29yRGlhbG9nX2VudGVyTmFtZT1BIG5hbWUgbXVzdCBiZSBlbnRlcmVkIGZvciB0aGlzIHByb2Nlc3NvcgotQWRkUHJvY2Vzc29yRGlhbG9nX2R1cGxpY2F0ZU5hbWU9VGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiB1c2VkCi1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMD1JbnN0YWxsZWQgSmF2YSBYU0xUIFByb2Nlc3NvcnM6Ci1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMT1OYW1lCi1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMj1UeXBlCi1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMz1YU0xUIFZlcnNpb25zCi1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfND1EZWJ1Z2dlcgotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzU9QWRkCi1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNj1FZGl0Ci1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfNz1SZW1vdmUKLUluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja184PU5vbmUKLQotUHJvY2Vzc29yTGlicmFyeUJsb2NrXzY9T25lIG9yIG1vcmUgamFyIGZpbGVzIG11c3QgYmUgc3BlY2lmaWVkCi1Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfQWRkQnV0dG9uPUFkZCBFeHRlcm5hbCBKQVJzCi1Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfQWRkV29ya3NwYWNlQnV0dG9uPUFkZCBXb3Jrc3BhY2UgSkFScwotUHJvY2Vzc29yTGlicmFyeUJsb2NrX1JlbW92ZUJ1dHRvbj1SZW1vdmUKLVByb2Nlc3NvckxpYnJhcnlCbG9ja19GaWxlRGlhbG9nX1RpdGxlPUV4dGVybmFsIEpBUnMKLVByb2Nlc3NvckxpYnJhcnlCbG9ja19Xb3Jrc3BhY2VGaWxlRGlhbG9nX1RpdGxlPVdvcmtzcGFjZSBKQVJzCi1Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19NZXNzYWdlPVNlbGVjdCB0aGUgSkFScyB0aGF0IG1ha2UgdXAgdGhlIFhTTFQgcHJvY2Vzc29yCi0KLVByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZV8wPUphdmEgWFNMVCBQcm9jZXNzb3JzCi1Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMT1BZGQsIHJlbW92ZSBvciBlZGl0IFhTTFQgcHJvY2Vzc29yIGRlZmluaXRpb25zLlxuQnkgZGVmYXVsdCwgdGhlIGNoZWNrZWQgUHJvY2Vzc29yIGlzIHVzZWQgZm9yIGFsbCB0cmFuc2Zvcm1hdGlvbnMuCi1Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMj1TZWxlY3QgYSBkZWZhdWx0IFhTTFQgUHJvY2Vzc29yCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0F0dHJpYnV0ZURpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZhMGNkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0F0dHJpYnV0ZURpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuU3RhdHVzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRG91YmxlQ2xpY2tFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyU29ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuTGF1bmNoQXR0cmlidXRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoQXR0cmlidXRlOwotCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlRGlhbG9nIGV4dGVuZHMgU3RhdHVzRGlhbG9nCi17Ci0JcHJpdmF0ZSBUYWJsZSB0YWJsZTsKLQlwcml2YXRlIFRhYmxlVmlld2VyIHRWaWV3ZXI7Ci0JcHJpdmF0ZSBUZXh0IHRleHQ7Ci0JcHJpdmF0ZSBMaXN0PElBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMgPSBuZXcgQXJyYXlMaXN0PElBdHRyaWJ1dGU+KCk7Ci0JcHJpdmF0ZSBMaXN0PElBdHRyaWJ1dGU+IHNlbGVjdGVkQXR0cmlidXRlcyA9IG5ldyBBcnJheUxpc3Q8SUF0dHJpYnV0ZT4oKTsKLQotCXB1YmxpYyBBdHRyaWJ1dGVEaWFsb2coU2hlbGwgcGFyZW50LCBMYXVuY2hBdHRyaWJ1dGVzIGxhdW5jaEF0dHJpYnV0ZXMpCi0JewotCQlzdXBlcihwYXJlbnQpOwotCQlzZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZURpYWxvZ18wIikpOyAvLyROT04tTkxTLTEkCi0JCQotCQlTZXQ8U3RyaW5nPiBhdHRyaWJ1dGVTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JCWZvciAoTGF1bmNoQXR0cmlidXRlIGF0dCA6IGxhdW5jaEF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlcygpKQotCQl7Ci0JCQlhdHRyaWJ1dGVTZXQuYWRkKGF0dC51cmkpOwotCQl9Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvclR5cGVzKCkpCi0JCXsKLQkJCWZvciAoSUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiB0eXBlLmdldEF0dHJpYnV0ZXMoKSkKLQkJCXsKLQkJCQlpZiAoIWF0dHJpYnV0ZVNldC5jb250YWlucyhhdHRyaWJ1dGUuZ2V0VVJJKCkpKQotCQkJCXsKLQkJCQkJYXR0cmlidXRlU2V0LmFkZChhdHRyaWJ1dGUuZ2V0VVJJKCkpOwotCQkJCQlhdHRyaWJ1dGVzLmFkZChhdHRyaWJ1dGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFyZW50LFNXVC5OT05FKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKTsKLQkJZ2Qud2lkdGhIaW50ID0gNDAwOwotCQljb21wLnNldExheW91dERhdGEoZ2QpOwotCQljb21wLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQkJCi0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXAsU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlRGlhbG9nXzEiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCQotCQl0YWJsZSA9IG5ldyBUYWJsZShjb21wLFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwgfCBTV1QuTVVMVEkpOwotCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKGZhbHNlKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKTsKLQkJZ2QudmVydGljYWxJbmRlbnQgPSAxMDsKLQkJZ2QuaGVpZ2h0SGludCA9IDIwMDsKLQkJdGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCQotCQl0Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyKCkKLQkJewotCQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIGF0dHJpYnV0ZXMudG9BcnJheShuZXcgSUF0dHJpYnV0ZVswXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCUlBdHRyaWJ1dGUgYXR0cmlidXRlID0gKElBdHRyaWJ1dGUpZWxlbWVudDsKLQkJCQlyZXR1cm4gYXR0cmlidXRlLmdldFVSSSgpOwotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBjb21wYXJlKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBlMSwgT2JqZWN0IGUyKQotCQkJewotCQkJCUlBdHRyaWJ1dGUgYTEgPSAoSUF0dHJpYnV0ZSkgZTE7Ci0JCQkJSUF0dHJpYnV0ZSBhMiA9IChJQXR0cmlidXRlKSBlMjsKLQkJCQlyZXR1cm4gYTEuZ2V0VVJJKCkuY29tcGFyZVRvKGEyLmdldFVSSSgpKTsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJc2VsZWN0ZWRBdHRyaWJ1dGVzID0gc2VsLnRvTGlzdCgpOwotCQkJCWlmIChzZWwuaXNFbXB0eSgpKQotCQkJCQl0ZXh0LnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGVEaWFsb2dfMiIpKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCUlBdHRyaWJ1dGUgYXR0cmlidXRlID0gKElBdHRyaWJ1dGUpc2VsLmdldEZpcnN0RWxlbWVudCgpOyAKLQkJCQkJdGV4dC5zZXRUZXh0KGF0dHJpYnV0ZS5nZXREZXNjcmlwdGlvbigpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhEb3VibGVDbGlja0V2ZW50IGV2ZW50KQotCQkJewotCQkJCWJ1dHRvblByZXNzZWQoSURpYWxvZ0NvbnN0YW50cy5PS19JRCk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldElucHV0KGF0dHJpYnV0ZXMpOwotCQkKLQkJdGV4dCA9IG5ldyBUZXh0KGNvbXAsU1dULkJPUkRFUiB8IFNXVC5XUkFQIHwgU1dULlJFQURfT05MWSB8IFNXVC5WX1NDUk9MTCk7Ci0JCXRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuRklMTCx0cnVlLGZhbHNlKTsKLQkJZ2QuaGVpZ2h0SGludCA9IDgwOwotCQl0ZXh0LnNldExheW91dERhdGEoZ2QpOwotCQkKLQkJaWYgKGF0dHJpYnV0ZXMuc2l6ZSgpID4gMCkKLQkJewotCQkJdFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odFZpZXdlci5nZXRFbGVtZW50QXQoMCkpLCB0cnVlKTsKLQkJfQotCQkKLQkJcmV0dXJuIGNvbXA7Ci0JfQotCQotCXB1YmxpYyBMaXN0PElBdHRyaWJ1dGU+IGdldEF0dHJpYnV0ZXMoKQotCXsKLQkJcmV0dXJuIHNlbGVjdGVkQXR0cmlidXRlczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0F0dHJpYnV0ZXNCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVzQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTllNTFhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0F0dHJpYnV0ZXNCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRWRpdGluZ1N1cHBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJDZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyU29ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLkFic3RyYWN0VGFibGVCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLkpBWFBEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkxhdW5jaEF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLQotcHVibGljIGNsYXNzIEF0dHJpYnV0ZXNCbG9jayBleHRlbmRzIEFic3RyYWN0VGFibGVCbG9jawotewotCXByaXZhdGUgVGFibGUgdGFibGU7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciB0Vmlld2VyOwotCXByaXZhdGUgTGF1bmNoQXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotCXByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbjsKLQlwcml2YXRlIE1hcDxTdHJpbmcsSUF0dHJpYnV0ZT4gYXR0cmlidXRlVXJpcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJQXR0cmlidXRlPigpOwotCQotCXB1YmxpYyBBdHRyaWJ1dGVzQmxvY2soKQotCXsKLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZXMoKSkKLQkJewotCQkJZm9yIChJQXR0cmlidXRlIGF0dHJpYnV0ZSA6IHR5cGUuZ2V0QXR0cmlidXRlcygpKQotCQkJewotCQkJCWF0dHJpYnV0ZVVyaXMucHV0KGF0dHJpYnV0ZS5nZXRVUkkoKSwgYXR0cmlidXRlKTsKLQkJCX0KLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nU2V0dGluZ3MoKQotCXsKLQkJcmV0dXJuIFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRRdWFsaWZpZXIoKQotCXsKLQkJcmV0dXJuIEpBWFBEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCsiLiIrZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgVGFibGUgZ2V0VGFibGUoKQotCXsKLQkJcmV0dXJuIHRhYmxlOwotCX0KLQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCVRhYkl0ZW0gaXRlbSA9IG5ldyBUYWJJdGVtKChUYWJGb2xkZXIpcGFyZW50LFNXVC5OT05FKTsKLQkJaXRlbS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlc0Jsb2NrLjAiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMixmYWxzZSk7Ci0JCWxheW91dC5tYXJnaW5Cb3R0b20gPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWl0ZW0uc2V0Q29udHJvbChjb21wb3NpdGUpOwotCQkKLQkJdGFibGUgPSBuZXcgVGFibGUoY29tcG9zaXRlLFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwgfCBTV1QuTVVMVEkpOwotCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotCQl0YWJsZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuRklMTCx0cnVlLHRydWUpKTsKLQkJdGFibGUuYWRkS2V5TGlzdGVuZXIobmV3IEtleUFkYXB0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIGtleVByZXNzZWQoS2V5RXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5ERUwgJiYgZXZlbnQuc3RhdGVNYXNrID09IDApIHsKLQkJCQkJcGVyZm9ybVJlbW92ZSgpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCQotCQlUYWJsZUNvbHVtbiB0YzEgPSBuZXcgVGFibGVDb2x1bW4odGFibGUsU1dULk5PTkUpOwotCQl0YzEuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZXNCbG9jay4yIikpOyAvLyROT04tTkxTLTEkCi0JCXRjMS5zZXRXaWR0aCgzNTApOwotCQl0YzEuc2V0UmVzaXphYmxlKHRydWUpOwotCQkKLQkJVGFibGVDb2x1bW4gdGMyID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLFNXVC5OT05FKTsKLQkJdGMyLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGVzQmxvY2suNyIpKTsgLy8kTk9OLU5MUy0xJAotCQl0YzIuc2V0V2lkdGgoNTApOwotCQl0YzIuc2V0UmVzaXphYmxlKHRydWUpOwotCQkKLQkJQ29tcG9zaXRlIGJ1dHRvbkNvbXAgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSxTV1QuRklMTCk7Ci0JCWJ1dHRvbkNvbXAuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULlRPUCxmYWxzZSxmYWxzZSkpOwotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2wubWFyZ2luV2lkdGggPSAwOwotCQlidXR0b25Db21wLnNldExheW91dChnbCk7Ci0JCQotCQlCdXR0b24gYWRkQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25Db21wLFNXVC5QVVNIKTsKLQkJYWRkQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGVzQmxvY2suOCIpKTsgLy8kTk9OLU5MUy0xJAotCQlhZGRCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULlRPUCxmYWxzZSxmYWxzZSkpOwotCQlhZGRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJQXR0cmlidXRlRGlhbG9nIGRpYWxvZyA9IG5ldyBBdHRyaWJ1dGVEaWFsb2coZ2V0U2hlbGwoKSxhdHRyaWJ1dGVzKTsKLQkJCQlpZiAoZGlhbG9nLm9wZW4oKSA9PSBXaW5kb3cuT0spCi0JCQkJewotCQkJCQlMaXN0PElBdHRyaWJ1dGU+IG5ld0F0dHJpYnV0ZXMgPSBkaWFsb2cuZ2V0QXR0cmlidXRlcygpOwotCQkJCQlMYXVuY2hBdHRyaWJ1dGUgZmlyc3QgPSBudWxsOwotCQkJCQlmb3IgKElBdHRyaWJ1dGUgYXR0cmlidXRlIDogbmV3QXR0cmlidXRlcykKLQkJCQkJewotCQkJCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IG5ldyBMYXVuY2hBdHRyaWJ1dGUoYXR0cmlidXRlLmdldFVSSSgpLCJzdHJpbmciLG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQkJCQlpZiAoZmlyc3QgPT0gbnVsbCkKLQkJCQkJCQlmaXJzdCA9IGF0dDsKLQkJCQkJCWF0dHJpYnV0ZXMuYWRkQXR0cmlidXRlKGF0dCk7Ci0JCQkJCX0KLQkJCQkJaWYgKG5ld0F0dHJpYnV0ZXMuc2l6ZSgpID4gMCkKLQkJCQkJewotCQkJCQkJdFZpZXdlci5yZWZyZXNoKCk7Ci0JCQkJCQl0Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihmaXJzdCksIHRydWUpOwotCQkJCQkJdFZpZXdlci5lZGl0RWxlbWVudChmaXJzdCwgMSk7Ci0JCQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQkKLQkJcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25Db21wLFNXVC5QVVNIKTsKLQkJcmVtb3ZlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGVzQmxvY2suMTQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJcmVtb3ZlQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXBlcmZvcm1SZW1vdmUoKTsKLQkJCX0KLQkJfSk7Ci0JCQotCQlzZXRDb250cm9sKHRhYmxlKTsKLQkJCi0JCXRWaWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIodGFibGUpOwotCQl0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIoKQotCQl7Ci0JCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVzKCkudG9BcnJheShuZXcgTGF1bmNoQXR0cmlidXRlWzBdKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JCQl7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQkJCXsKLQkJCQlhdHRyaWJ1dGVzID0gKExhdW5jaEF0dHJpYnV0ZXMpIG5ld0lucHV0OwotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBjb21wYXJlKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBlMSwgT2JqZWN0IGUyKQotCQkJewotCQkJCUxhdW5jaEF0dHJpYnV0ZSBhMSA9IChMYXVuY2hBdHRyaWJ1dGUpIGUxOwotCQkJCUxhdW5jaEF0dHJpYnV0ZSBhMiA9IChMYXVuY2hBdHRyaWJ1dGUpIGUyOwotCQkJCXJldHVybiBhMS51cmkuY29tcGFyZVRvKGEyLnVyaSk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJdXBkYXRlUmVtb3ZlQnV0dG9uKCk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJVGFibGVWaWV3ZXJDb2x1bW4gdHZjMSA9IG5ldyBUYWJsZVZpZXdlckNvbHVtbih0Vmlld2VyLHRjMSk7Ci0JCXR2YzEuc2V0TGFiZWxQcm92aWRlcihuZXcgQ2VsbExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgdXBkYXRlKFZpZXdlckNlbGwgY2VsbCkKLQkJCXsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgdHYgPSAoTGF1bmNoQXR0cmlidXRlKSBjZWxsLmdldEVsZW1lbnQoKTsKLQkJCQljZWxsLnNldFRleHQodHYudXJpKTsKLQkJCX0KLQkJCQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgaW50IGdldFRvb2xUaXBUaW1lRGlzcGxheWVkKE9iamVjdCBvYmplY3QpCi0JCQl7Ci0JCQkJcmV0dXJuIDUwMDA7Ci0JCQl9Ci0JCQkKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgdHYgPSAoTGF1bmNoQXR0cmlidXRlKSBlbGVtZW50OwotCQkJCXJldHVybiBhdHRyaWJ1dGVVcmlzLmdldCh0di51cmkpLmdldERlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJfSk7Ci0JCQotLy8JCUNvbHVtblZpZXdlclRvb2xUaXBTdXBwb3J0LmVuYWJsZUZvcih0Vmlld2VyKTsKLQkJCi0JCVRhYmxlVmlld2VyQ29sdW1uIHR2YzIgPSBuZXcgVGFibGVWaWV3ZXJDb2x1bW4odFZpZXdlcix0YzIpOwotCQl0dmMyLnNldExhYmVsUHJvdmlkZXIobmV3IENlbGxMYWJlbFByb3ZpZGVyKCl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHVwZGF0ZShWaWV3ZXJDZWxsIGNlbGwpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSkgY2VsbC5nZXRFbGVtZW50KCk7Ci0JCQkJY2VsbC5zZXRUZXh0KHR2LnZhbHVlKTsKLQkJCX0KLQkJfSk7Ci0JCQotCQl0dmMyLnNldEVkaXRpbmdTdXBwb3J0KG5ldyBFZGl0aW5nU3VwcG9ydCh0Vmlld2VyKXsKLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgYm9vbGVhbiBjYW5FZGl0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBDZWxsRWRpdG9yIGdldENlbGxFZGl0b3IoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIG5ldyBUZXh0Q2VsbEVkaXRvcih0YWJsZSk7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIE9iamVjdCBnZXRWYWx1ZShPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgdHYgPSAoTGF1bmNoQXR0cmlidXRlKWVsZW1lbnQ7Ci0JCQkJcmV0dXJuIHR2LnZhbHVlID09IG51bGwgPyAiIiA6IHR2LnZhbHVlOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIHZvaWQgc2V0VmFsdWUoT2JqZWN0IGVsZW1lbnQsIE9iamVjdCB2YWx1ZSkKLQkJCXsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgdHYgPSAoTGF1bmNoQXR0cmlidXRlKWVsZW1lbnQ7Ci0JCQkJdHYuc2V0VmFsdWUoKFN0cmluZyl2YWx1ZSk7Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJCXRWaWV3ZXIudXBkYXRlKHR2LCBudWxsKTsKLQkJCX0KLQkJCQotCQl9KTsKLQkJCi0JCXJlc3RvcmVDb2x1bW5TZXR0aW5ncygpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVJlbW92ZUJ1dHRvbigpCi0JewotCQlyZW1vdmVCdXR0b24uc2V0RW5hYmxlZCghdFZpZXdlci5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGVzQmxvY2suMTYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVBdHRyaWJ1dGVzRnJvbVN0b3JhZ2UoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9BVFRSSUJVVEVTLCAoU3RyaW5nKSBudWxsKTsKLQkJaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLQkJewotCQkJYXR0cmlidXRlcyA9IExhdW5jaEF0dHJpYnV0ZXMuZnJvbVhNTChuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocy5nZXRCeXRlcygpKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlhdHRyaWJ1dGVzID0gbmV3IExhdW5jaEF0dHJpYnV0ZXMoKTsKLQkJfQotCQl0Vmlld2VyLnNldElucHV0KGF0dHJpYnV0ZXMpOwotCQl1cGRhdGVSZW1vdmVCdXR0b24oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCWluaXRpYWxpemVBdHRyaWJ1dGVzRnJvbVN0b3JhZ2UoY29uZmlndXJhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCVN0cmluZyB4bWwgPSBhdHRyaWJ1dGVzLnRvWE1MKCk7Ci0JCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0FUVFJJQlVURVMsIHhtbCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwZXJmb3JtUmVtb3ZlKCkKLQl7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbil0Vmlld2VyLmdldFNlbGVjdGlvbigpOwotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlcmF0b3IgPSBzZWwuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLQkJewotCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IGl0ZXJhdG9yLm5leHQoKTsKLQkJCWF0dHJpYnV0ZXMucmVtb3ZlQXRyaWJ1dGUoYXR0LnVyaSk7Ci0JCX0KLQkJdFZpZXdlci5yZWZyZXNoKCk7Ci0JCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0luc3RhbGxTdGFuZGluLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0luc3RhbGxTdGFuZGluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YjM5MjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9JbnN0YWxsU3RhbmRpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5Qcm9jZXNzb3JJbnN0YWxsOwotCi1wdWJsaWMgY2xhc3MgSW5zdGFsbFN0YW5kaW4gZXh0ZW5kcyBQcm9jZXNzb3JJbnN0YWxsCi17Ci0JcHVibGljIEluc3RhbGxTdGFuZGluKElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlzdXBlcihpbnN0YWxsLmdldElkKCksIGluc3RhbGwuZ2V0TmFtZSgpLCBpbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKS5nZXRJZCgpLCBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKSwgaW5zdGFsbC5nZXREZWJ1Z2dlcigpICE9IG51bGwgPyBpbnN0YWxsLmdldERlYnVnZ2VyKCkuZ2V0SWQoKSA6IG51bGwsIGluc3RhbGwKLQkJCQkuZ2V0U3VwcG9ydHMoKSwgaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpOwotCX0KLQotCXB1YmxpYyBJbnN0YWxsU3RhbmRpbihTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZUlkLCBTdHJpbmcgZGVidWdnZXJJZCwgSVByb2Nlc3NvckphcltdIGphcnMpCi0JewotCQlzdXBlcihpZCwgbmFtZSwgdHlwZUlkLCBqYXJzLCBkZWJ1Z2dlcklkLCAiIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJDb250ZW50UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyQ29udGVudFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzN2EwZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJDb250ZW50UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLQotcHVibGljIGNsYXNzIEphckNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi17Ci0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsOwotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JewotCQlyZXR1cm4gaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQl7Ci0JCWluc3RhbGwgPSAoSVByb2Nlc3Nvckluc3RhbGwpIG5ld0lucHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyTGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJMYWJlbFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZWQzMTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLQotcHVibGljIGNsYXNzIEphckxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi17Ci0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCXsKLQkJSVByb2Nlc3NvckphciBqYXIgPSAoSVByb2Nlc3NvckphcikgZWxlbWVudDsKLQkJSVBhdGggcGF0aCA9IGphci5nZXRQYXRoKCk7Ci0JCXJldHVybiBwYXRoLmxhc3RTZWdtZW50KCkgKyAiIC0gIiArIHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLnRvT1NTdHJpbmcoKSArICIiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTZjZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQotCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuICchJyArIGtleSArICchJzsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvT3V0cHV0UHJvcGVydGllc0Jsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL091dHB1dFByb3BlcnRpZXNCbG9jay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjljZTY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvT3V0cHV0UHJvcGVydGllc0Jsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5FZGl0aW5nU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXJDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UZXh0Q2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckNlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJTb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYkZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuQWJzdHJhY3RUYWJsZUJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwuSkFYUERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JT3V0cHV0UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5MYXVuY2hQcm9wZXJ0aWVzOwotCi1wdWJsaWMgY2xhc3MgT3V0cHV0UHJvcGVydGllc0Jsb2NrIGV4dGVuZHMgQWJzdHJhY3RUYWJsZUJsb2NrCi17Ci0JcHJpdmF0ZSBUYWJsZSB0YWJsZTsKLQlwcml2YXRlIFRhYmxlVmlld2VyIHRWaWV3ZXI7Ci0JcHJpdmF0ZSBMYXVuY2hQcm9wZXJ0aWVzIHByb3BlcnRpZXM7Ci0JcHJpdmF0ZSBCdXR0b24gcmVtb3ZlQnV0dG9uOwotCXByaXZhdGUgTWFwPFN0cmluZyxJT3V0cHV0UHJvcGVydHk+IHByb3BlcnR5VXJpcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJT3V0cHV0UHJvcGVydHk+KCk7Ci0JCi0JcHVibGljIE91dHB1dFByb3BlcnRpZXNCbG9jaygpCi0JewotCQlmb3IgKElQcm9jZXNzb3JUeXBlIHR5cGUgOiBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlcygpKQotCQl7Ci0JCQlmb3IgKElPdXRwdXRQcm9wZXJ0eSBwcm9wZXJ0eSA6IHR5cGUuZ2V0T3V0cHV0UHJvcGVydGllcygpKQotCQkJewotCQkJCXByb3BlcnR5VXJpcy5wdXQocHJvcGVydHkuZ2V0VVJJKCksIHByb3BlcnR5KTsKLQkJCX0KLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nU2V0dGluZ3MoKQotCXsKLQkJcmV0dXJuIFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRRdWFsaWZpZXIoKQotCXsKLQkJcmV0dXJuIEpBWFBEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCsiLiIrZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgVGFibGUgZ2V0VGFibGUoKQotCXsKLQkJcmV0dXJuIHRhYmxlOwotCX0KLQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCVRhYkl0ZW0gaXRlbSA9IG5ldyBUYWJJdGVtKChUYWJGb2xkZXIpcGFyZW50LFNXVC5OT05FKTsKLQkJaXRlbS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiT3V0cHV0UHJvcGVydGllc0Jsb2NrXzAiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMixmYWxzZSk7Ci0JCWxheW91dC5tYXJnaW5Cb3R0b20gPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWl0ZW0uc2V0Q29udHJvbChjb21wb3NpdGUpOwotCQkKLQkJdGFibGUgPSBuZXcgVGFibGUoY29tcG9zaXRlLFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwgfCBTV1QuTVVMVEkpOwotCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotCQl0YWJsZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuRklMTCx0cnVlLHRydWUpKTsKLQkJdGFibGUuYWRkS2V5TGlzdGVuZXIobmV3IEtleUFkYXB0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIGtleVByZXNzZWQoS2V5RXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5ERUwgJiYgZXZlbnQuc3RhdGVNYXNrID09IDApIHsKLQkJCQkJcGVyZm9ybVJlbW92ZSgpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0KLQkJCi0JCVRhYmxlQ29sdW1uIHRjMSA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSxTV1QuTk9ORSk7Ci0JCXRjMS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiT3V0cHV0UHJvcGVydGllc0Jsb2NrXzEiKSk7IC8vJE5PTi1OTFMtMSQKLQkJdGMxLnNldFdpZHRoKDM1MCk7Ci0JCXRjMS5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCQotCQlUYWJsZUNvbHVtbiB0YzIgPSBuZXcgVGFibGVDb2x1bW4odGFibGUsU1dULk5PTkUpOwotCQl0YzIuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk91dHB1dFByb3BlcnRpZXNCbG9ja18yIikpOyAvLyROT04tTkxTLTEkCi0JCXRjMi5zZXRXaWR0aCg1MCk7Ci0JCXRjMi5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCQotCQlDb21wb3NpdGUgYnV0dG9uQ29tcCA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLFNXVC5GSUxMKTsKLQkJYnV0dG9uQ29tcC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuVE9QLGZhbHNlLGZhbHNlKSk7Ci0JCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOwotCQlnbC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWJ1dHRvbkNvbXAuc2V0TGF5b3V0KGdsKTsKLQkJCi0JCUJ1dHRvbiBhZGRCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXAsU1dULlBVU0gpOwotCQlhZGRCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk91dHB1dFByb3BlcnRpZXNCbG9ja18zIikpOyAvLyROT04tTkxTLTEkCi0JCWFkZEJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuVE9QLGZhbHNlLGZhbHNlKSk7Ci0JCWFkZEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJfQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlPdXRwdXRQcm9wZXJ0eURpYWxvZyBkaWFsb2cgPSBuZXcgT3V0cHV0UHJvcGVydHlEaWFsb2coZ2V0U2hlbGwoKSxwcm9wZXJ0aWVzKTsKLQkJCQlpZiAoZGlhbG9nLm9wZW4oKSA9PSBXaW5kb3cuT0spCi0JCQkJewotCQkJCQlMaXN0PElPdXRwdXRQcm9wZXJ0eT4gbmV3UHJvcGVydGllcyA9IGRpYWxvZy5nZXRPdXRwdVByb3BlcnRpZXMoKTsKLQkJCQkJU3RyaW5nIGZpcnN0ID0gbnVsbDsKLQkJCQkJZm9yIChJT3V0cHV0UHJvcGVydHkgcHJvcGVydHkgOiBuZXdQcm9wZXJ0aWVzKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcgYXR0ID0gcHJvcGVydHkuZ2V0VVJJKCk7Ci0JCQkJCQlpZiAoZmlyc3QgPT0gbnVsbCkKLQkJCQkJCQlmaXJzdCA9IGF0dDsKLQkJCQkJCXByb3BlcnRpZXMuc2V0UHJvcGVydHkocHJvcGVydHkuZ2V0VVJJKCksIG51bGwpOwotCQkJCQl9Ci0JCQkJCWlmIChuZXdQcm9wZXJ0aWVzLnNpemUoKSA+IDApCi0JCQkJCXsKLQkJCQkJCXRWaWV3ZXIucmVmcmVzaCgpOwotCQkJCQkJdFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZmlyc3QpLCB0cnVlKTsKLQkJCQkJCXRWaWV3ZXIuZWRpdEVsZW1lbnQoZmlyc3QsIDEpOwotCQkJCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJCi0JCXJlbW92ZUJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcCxTV1QuUFVTSCk7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiT3V0cHV0UHJvcGVydGllc0Jsb2NrXzQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJcmVtb3ZlQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXBlcmZvcm1SZW1vdmUoKTsKLQkJCX0KLQkJfSk7Ci0JCQotCQlzZXRDb250cm9sKHRhYmxlKTsKLQkJCi0JCXRWaWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIodGFibGUpOwotCQl0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIoKQotCQl7Ci0JCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gcHJvcGVydGllcy5nZXRQcm9wZXJ0aWVzKCkua2V5U2V0KCkudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JCQl7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQkJCXsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKSk7Ci0JCXRWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQl1cGRhdGVSZW1vdmVCdXR0b24oKTsKLQkJCX0KLQkJfSk7Ci0JCQotCQlUYWJsZVZpZXdlckNvbHVtbiB0dmMxID0gbmV3IFRhYmxlVmlld2VyQ29sdW1uKHRWaWV3ZXIsdGMxKTsKLQkJdHZjMS5zZXRMYWJlbFByb3ZpZGVyKG5ldyBDZWxsTGFiZWxQcm92aWRlcigpewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB1cGRhdGUoVmlld2VyQ2VsbCBjZWxsKQotCQkJewotCQkJCVN0cmluZyB0diA9IChTdHJpbmcpIGNlbGwuZ2V0RWxlbWVudCgpOwotCQkJCWNlbGwuc2V0VGV4dCh0dik7Ci0JCQl9Ci0JCQkKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBnZXRUb29sVGlwVGltZURpc3BsYXllZChPYmplY3Qgb2JqZWN0KQotCQkJewotCQkJCXJldHVybiA1MDAwOwotCQkJfQotCQkJCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJU3RyaW5nIHR2ID0gKFN0cmluZykgZWxlbWVudDsKLQkJCQlyZXR1cm4gcHJvcGVydHlVcmlzLmdldCh0dikuZ2V0RGVzY3JpcHRpb24oKTsKLQkJCX0KLQkJCQotCQl9KTsKLQkJCi0vLwkJQ29sdW1uVmlld2VyVG9vbFRpcFN1cHBvcnQuZW5hYmxlRm9yKHRWaWV3ZXIpOwotCQkKLQkJVGFibGVWaWV3ZXJDb2x1bW4gdHZjMiA9IG5ldyBUYWJsZVZpZXdlckNvbHVtbih0Vmlld2VyLHRjMik7Ci0JCXR2YzIuc2V0TGFiZWxQcm92aWRlcihuZXcgQ2VsbExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgdXBkYXRlKFZpZXdlckNlbGwgY2VsbCkKLQkJCXsKLQkJCQlTdHJpbmcgdHYgPSAoU3RyaW5nKSBjZWxsLmdldEVsZW1lbnQoKTsKLQkJCQlTdHJpbmcgdmFsID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0dik7Ci0JCQkJY2VsbC5zZXRUZXh0KHZhbCA9PSBudWxsID8gIiIgOiB2YWwpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0pOwotCQkKLQkJdHZjMi5zZXRFZGl0aW5nU3VwcG9ydChuZXcgRWRpdGluZ1N1cHBvcnQodFZpZXdlcil7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGJvb2xlYW4gY2FuRWRpdChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgQ2VsbEVkaXRvciBnZXRDZWxsRWRpdG9yKE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCXJldHVybiBuZXcgVGV4dENlbGxFZGl0b3IodGFibGUpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBPYmplY3QgZ2V0VmFsdWUoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJU3RyaW5nIHR2ID0gKFN0cmluZyllbGVtZW50OwotCQkJCVN0cmluZyB2YWwgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KHR2KTsKLQkJCQlyZXR1cm4gdmFsID09IG51bGwgPyAiIiA6IHZhbDsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlKE9iamVjdCBlbGVtZW50LCBPYmplY3QgdmFsdWUpCi0JCQl7Ci0JCQkJU3RyaW5nIHR2ID0gKFN0cmluZyllbGVtZW50OwotCQkJCXByb3BlcnRpZXMuc2V0UHJvcGVydHkodHYsIChTdHJpbmcpdmFsdWUpOwotCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCQl0Vmlld2VyLnVwZGF0ZSh0diwgbnVsbCk7Ci0JCQl9Ci0JCQkKLQkJfSk7Ci0JCQotCQlyZXN0b3JlQ29sdW1uU2V0dGluZ3MoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVSZW1vdmVCdXR0b24oKQotCXsKLQkJcmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoIXRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlc0Jsb2NrLjE2Iik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotLy8JCUxhdW5jaFByb3BlcnRpZXMgcCA9IG5ldyBMYXVuY2hQcm9wZXJ0aWVzKCk7Ci0vLwkJcC5zZXRQcm9wZXJ0eSgiaW5kZW50IiwgInllcyIpOwotLy8JCXRyeQotLy8JCXsKLS8vCQkJU3RyaW5nIHhtbCA9IHAudG9YTUwoKTsKLS8vCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfUFJPUEVSVElFUywgeG1sKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkKLS8vCQl7Ci0vLwkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotLy8JCX0KLS8vCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLS8vCQl7Ci0vLwkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotLy8JCX0KLS8vCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkKLS8vCQl7Ci0vLwkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotLy8JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVByb3BlcnRpZXNGcm9tU3RvcmFnZShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9QUk9QRVJUSUVTLCAoU3RyaW5nKSBudWxsKTsKLQkJaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLQkJewotCQkJcHJvcGVydGllcyA9IExhdW5jaFByb3BlcnRpZXMuZnJvbVhNTChuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocy5nZXRCeXRlcygpKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlwcm9wZXJ0aWVzID0gbmV3IExhdW5jaFByb3BlcnRpZXMoKTsKLQkJfQotCQl0Vmlld2VyLnNldElucHV0KHByb3BlcnRpZXMpOwotCQl1cGRhdGVSZW1vdmVCdXR0b24oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCWluaXRpYWxpemVQcm9wZXJ0aWVzRnJvbVN0b3JhZ2UoY29uZmlndXJhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCVN0cmluZyB4bWwgPSBwcm9wZXJ0aWVzLnRvWE1MKCk7Ci0JCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9QUk9QRVJUSUVTLCB4bWwpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGVyZm9ybVJlbW92ZSgpCi0JewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pdFZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJZm9yIChJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yID0gc2VsLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0JCXsKLQkJCVN0cmluZyBhdHQgPSBpdGVyYXRvci5uZXh0KCk7Ci0JCQlwcm9wZXJ0aWVzLnJlbW92ZVByb3BlcnR5KGF0dCk7Ci0JCX0KLQkJdFZpZXdlci5yZWZyZXNoKCk7Ci0JCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL091dHB1dFByb3BlcnR5RGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL091dHB1dFByb3BlcnR5RGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1Y2UxMjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9PdXRwdXRQcm9wZXJ0eURpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuU3RhdHVzRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRG91YmxlQ2xpY2tFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyU29ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklPdXRwdXRQcm9wZXJ0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5MYXVuY2hQcm9wZXJ0aWVzOwotCi1wdWJsaWMgY2xhc3MgT3V0cHV0UHJvcGVydHlEaWFsb2cgZXh0ZW5kcyBTdGF0dXNEaWFsb2cKLXsKLQlwcml2YXRlIFRhYmxlIHRhYmxlOwotCXByaXZhdGUgVGFibGVWaWV3ZXIgdFZpZXdlcjsKLQlwcml2YXRlIFRleHQgdGV4dDsKLQlwcml2YXRlIExpc3Q8SU91dHB1dFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gbmV3IEFycmF5TGlzdDxJT3V0cHV0UHJvcGVydHk+KCk7Ci0JcHJpdmF0ZSBMaXN0PElPdXRwdXRQcm9wZXJ0eT4gc2VsZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEFycmF5TGlzdDxJT3V0cHV0UHJvcGVydHk+KCk7Ci0KLQlwdWJsaWMgT3V0cHV0UHJvcGVydHlEaWFsb2coU2hlbGwgcGFyZW50LCBMYXVuY2hQcm9wZXJ0aWVzIGxhdW5jaFByb3BlcnRpZXMpCi0JewotCQlzdXBlcihwYXJlbnQpOwotCQlzZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIk91dHB1dFByb3BlcnR5RGlhbG9nXzAiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCVNldDxTdHJpbmc+IHByb3BlcnR5U2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCQlmb3IgKFN0cmluZyBhdHQgOiBsYXVuY2hQcm9wZXJ0aWVzLmdldFByb3BlcnRpZXMoKS5rZXlTZXQoKSkKLQkJewotCQkJcHJvcGVydHlTZXQuYWRkKGF0dCk7Ci0JCX0KLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZXMoKSkKLQkJewotCQkJZm9yIChJT3V0cHV0UHJvcGVydHkgcHJvcGVydHkgOiB0eXBlLmdldE91dHB1dFByb3BlcnRpZXMoKSkKLQkJCXsKLQkJCQlpZiAoIXByb3BlcnR5U2V0LmNvbnRhaW5zKHByb3BlcnR5LmdldFVSSSgpKSkKLQkJCQl7Ci0JCQkJCXByb3BlcnR5U2V0LmFkZChwcm9wZXJ0eS5nZXRVUkkoKSk7Ci0JCQkJCXByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSk7Ci0JCWdkLndpZHRoSGludCA9IDQwMDsKLQkJY29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJY29tcC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk91dHB1dFByb3BlcnR5RGlhbG9nXzEiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCi0JCQotCQl0YWJsZSA9IG5ldyBUYWJsZShjb21wLFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwgfCBTV1QuTVVMVEkpOwotCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKGZhbHNlKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKTsKLQkJZ2QudmVydGljYWxJbmRlbnQgPSAxMDsKLQkJZ2QuaGVpZ2h0SGludCA9IDIwMDsKLQkJdGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCQotCQl0Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyKCkKLQkJewotCQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIHByb3BlcnRpZXMudG9BcnJheShuZXcgSU91dHB1dFByb3BlcnR5WzBdKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JCQl7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQkJCXsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgTGFiZWxQcm92aWRlcigpewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJSU91dHB1dFByb3BlcnR5IHByb3BlcnR5ID0gKElPdXRwdXRQcm9wZXJ0eSllbGVtZW50OwotCQkJCXJldHVybiBwcm9wZXJ0eS5nZXRVUkkoKTsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikKLQkJCXsKLQkJCQlJT3V0cHV0UHJvcGVydHkgYTEgPSAoSU91dHB1dFByb3BlcnR5KSBlMTsKLQkJCQlJT3V0cHV0UHJvcGVydHkgYTIgPSAoSU91dHB1dFByb3BlcnR5KSBlMjsKLQkJCQlyZXR1cm4gYTEuZ2V0VVJJKCkuY29tcGFyZVRvKGEyLmdldFVSSSgpKTsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJc2VsZWN0ZWRQcm9wZXJ0aWVzID0gc2VsLnRvTGlzdCgpOwotCQkJCWlmIChzZWwuaXNFbXB0eSgpKQotCQkJCQl0ZXh0LnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCi0JCQkJZWxzZQotCQkJCXsKLQkJCQkJSU91dHB1dFByb3BlcnR5IHByb3BlcnR5ID0gKElPdXRwdXRQcm9wZXJ0eSlzZWwuZ2V0Rmlyc3RFbGVtZW50KCk7IAotCQkJCQl0ZXh0LnNldFRleHQocHJvcGVydHkuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBJRG91YmxlQ2xpY2tMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBldmVudCkKLQkJCXsKLQkJCQlidXR0b25QcmVzc2VkKElEaWFsb2dDb25zdGFudHMuT0tfSUQpOwotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5zZXRJbnB1dChwcm9wZXJ0aWVzKTsKLQkJCi0JCXRleHQgPSBuZXcgVGV4dChjb21wLFNXVC5CT1JERVIgfCBTV1QuV1JBUCB8IFNXVC5SRUFEX09OTFkgfCBTV1QuVl9TQ1JPTEwpOwotCQl0ZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSxmYWxzZSk7Ci0JCWdkLmhlaWdodEhpbnQgPSA4MDsKLQkJdGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJCi0JCWlmIChwcm9wZXJ0aWVzLnNpemUoKSA+IDApCi0JCXsKLQkJCXRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRWaWV3ZXIuZ2V0RWxlbWVudEF0KDApKSwgdHJ1ZSk7Ci0JCX0KLQkJCi0JCXJldHVybiBjb21wOwotCX0KLQkKLQlwdWJsaWMgTGlzdDxJT3V0cHV0UHJvcGVydHk+IGdldE91dHB1UHJvcGVydGllcygpCi0JewotCQlyZXR1cm4gc2VsZWN0ZWRQcm9wZXJ0aWVzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yQmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU0OTA3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckJsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29tYm9WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvckJsb2NrIGV4dGVuZHMgQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiCi17Ci0JcHJpdmF0ZSBCdXR0b24gdXNlUHJlZmVyZW5jZXNSYWRpbzsKLQlwcml2YXRlIEJ1dHRvbiBhbHRlclByZWZlcmVuY2VzQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIG92ZXJyaWRlUHJlZmVyZW5jZXNSYWRpbzsKLQlwcml2YXRlIENvbWJvIHJ1bkNvbWJvOwotCXByaXZhdGUgQnV0dG9uIGluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b247Ci0JcHJpdmF0ZSBDb21ib1ZpZXdlciBydW5Db21ib1ZpZXdlcjsKLQlwcml2YXRlIENvbWJvVmlld2VyIGZhY3RvcnlDb21ib1ZpZXdlcjsKLQlwcml2YXRlIElUcmFuc2Zvcm1lckZhY3RvcnkgY3VycmVudEZhY3Rvcnk7Ci0KLQlwdWJsaWMgUHJvY2Vzc29yQmxvY2soKQotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlGb250IGZvbnQgPSBwYXJlbnQuZ2V0Rm9udCgpOwotCi0JCUNvbXBvc2l0ZSBncm91cCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7Ci0JCXNldENvbnRyb2woZ3JvdXApOwotCQlncm91cC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpKTsKLQkJZ3JvdXAuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0JCWdyb3VwLnNldEZvbnQoZm9udCk7Ci0vLwkJZ3JvdXAuc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JCbG9ja18wKTsKLQotCQl1c2VQcmVmZXJlbmNlc1JhZGlvID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlJBRElPKTsKLQkJdXNlUHJlZmVyZW5jZXNSYWRpby5zZXRUZXh0KFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckJsb2NrXzEpOwotCQl1c2VQcmVmZXJlbmNlc1JhZGlvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXByZWZlcmVuY2VzU2VsZWN0ZWQoKTsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24uc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JCbG9ja18yKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9FTkQpOwotCQlnZC53aWR0aEhpbnQgPSAxNTA7Ci0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJSVByZWZlcmVuY2VQYWdlIHBhZ2UgPSBuZXcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlKCk7Ci0JCQkJc2hvd1ByZWZQYWdlKCJvcmcuZWNsaXBzZS53c3QueHNsdC5sYXVuY2hpbmcudWkucHJlZmVyZW5jZXMuUHJvY2Vzc29yUHJlZmVyZW5jZVBhZ2UiLCBwYWdlKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9KTsKLQotCQlvdmVycmlkZVByZWZlcmVuY2VzUmFkaW8gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUkFESU8pOwotCQlvdmVycmlkZVByZWZlcmVuY2VzUmFkaW8uc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JCbG9ja180KTsKLQkJb3ZlcnJpZGVQcmVmZXJlbmNlc1JhZGlvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCW92ZXJyaWRlU2VsZWN0ZWQoKTsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24uc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JzQ29tYm9CbG9ja18xKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9FTkQpOwotCQlnZC53aWR0aEhpbnQgPSAxNTA7Ci0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJSVByZWZlcmVuY2VQYWdlIHBhZ2UgPSBuZXcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlKCk7Ci0JCQkJc2hvd1ByZWZQYWdlKCJvcmcuZWNsaXBzZS53c3QueHNsdC5sYXVuY2hpbmcudWkucHJlZmVyZW5jZXMuUHJvY2Vzc29yUHJlZmVyZW5jZVBhZ2UiLCBwYWdlKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9KTsKLQotCQlDb21wb3NpdGUgc2V0dGluZ3NDb21wID0gbmV3IENvbXBvc2l0ZShncm91cCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpOwotCQlnbC5tYXJnaW5IZWlnaHQgPSAyOwotCQlzZXR0aW5nc0NvbXAuc2V0TGF5b3V0KGdsKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbEluZGVudCA9IDE1OwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXNldHRpbmdzQ29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJc2V0dGluZ3NDb21wLnNldEZvbnQoZm9udCk7Ci0KLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoc2V0dGluZ3NDb21wLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yQmxvY2tfNik7Ci0JCXJ1bkNvbWJvID0gbmV3IENvbWJvKHNldHRpbmdzQ29tcCwgU1dULlJFQURfT05MWSB8IFNXVC5TSU5HTEUpOwotCQlydW5Db21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJcnVuQ29tYm9WaWV3ZXIgPSBuZXcgQ29tYm9WaWV3ZXIocnVuQ29tYm8pOwotCQlydW5Db21ib1ZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IENvbWJvQ29udGVudFByb3ZpZGVyKCkpOwotCQlydW5Db21ib1ZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBDb21ib0xhYmVsUHJvdmlkZXIoKSk7Ci0JCXJ1bkNvbWJvVmlld2VyLnNldElucHV0KEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcnMoKSk7Ci0JCXJ1bkNvbWJvVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0JCXsKLQotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlpZiAoIXNlbC5pc0VtcHR5KCkpCi0JCQkJewotCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBwcm9jZXNzb3IgPSAoSVByb2Nlc3Nvckluc3RhbGwpIHNlbC5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQkJCi0JCQkJCWlmIChwcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldFRyYW5zZm9ybWVyRmFjdG9yaWVzKCkubGVuZ3RoID4gMSkKLQkJCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5nZXRDb21ibygpLnNldFZpc2libGUodHJ1ZSk7Ci0JCQkJCWVsc2UKLQkJCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5nZXRDb21ibygpLnNldFZpc2libGUoZmFsc2UpOwotCi0JCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5zZXRJbnB1dChwcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpKTsKLQkJCQkJCi0JCQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJCQkJZm9yIChJVHJhbnNmb3JtZXJGYWN0b3J5IHRmIDogcHJvY2Vzc29yLmdldFByb2Nlc3NvclR5cGUoKS5nZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpKQotCQkJCQl7Ci0JCQkJCQlpZiAodGYuZXF1YWxzKGN1cnJlbnRGYWN0b3J5KSkKLQkJCQkJCXsKLQkJCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJaWYgKCFmb3VuZCkKLQkJCQkJewotCQkJCQkJY3VycmVudEZhY3RvcnkgPSBwcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCQkJCWlmIChjdXJyZW50RmFjdG9yeSE9bnVsbCkKLQkJCQkJCQlmYWN0b3J5Q29tYm9WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGN1cnJlbnRGYWN0b3J5KSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJfQotCQl9KTsKLQotCQlDb21ibyBmYWN0b3J5Q29tYm8gPSBuZXcgQ29tYm8oc2V0dGluZ3NDb21wLCBTV1QuUkVBRF9PTkxZIHwgU1dULlNJTkdMRSk7Ci0JCWZhY3RvcnlDb21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSg4MCxTV1QuREVGQVVMVCkpOwotCQlmYWN0b3J5Q29tYm9WaWV3ZXIgPSBuZXcgQ29tYm9WaWV3ZXIoZmFjdG9yeUNvbWJvKTsKLQkJZmFjdG9yeUNvbWJvVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIoKXsKLQotCQkJcHJpdmF0ZSBJUHJvY2Vzc29yVHlwZSB0eXBlOwotCQkJCi0JCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gdHlwZS5nZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJCXsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQkJewotCQkJCXRoaXMudHlwZSA9IChJUHJvY2Vzc29yVHlwZSluZXdJbnB1dDsKLQkJCX0KLQkJCQotCQl9KTsKLQkJZmFjdG9yeUNvbWJvVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCUlUcmFuc2Zvcm1lckZhY3RvcnkgZiA9IChJVHJhbnNmb3JtZXJGYWN0b3J5KWVsZW1lbnQ7Ci0JCQkJcmV0dXJuIGYuZ2V0TmFtZSgpOyAvLyArICIgLSAiICsgZi5nZXRGYWN0b3J5Q2xhc3MoKTsKLQkJCX0KLQkJfSk7Ci0JCWZhY3RvcnlDb21ib1ZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotCQl7Ci0KLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCWN1cnJlbnRGYWN0b3J5ID0gKElUcmFuc2Zvcm1lckZhY3RvcnkpKChJU3RydWN0dXJlZFNlbGVjdGlvbilldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJfQotCQl9KTsKLQotLy8JCW92ZXJyaWRlUHJlZmVyZW5jZXNCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLFNXVC5DSEVDSyk7Ci0vLwkJb3ZlcnJpZGVQcmVmZXJlbmNlc0J1dHRvbi5zZXRUZXh0KCJPdmVycmlkZSBwcmVmZXJlbmNlcyIpOwotLy8JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5OT05FLFNXVC5OT05FLGZhbHNlLGZhbHNlKTsKLS8vCQlvdmVycmlkZVByZWZlcmVuY2VzQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotLy8JCW92ZXJyaWRlUHJlZmVyZW5jZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0vLwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotLy8JCQl7fQotLy8JCQkKLS8vCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLS8vCQkJewotLy8JCQkJZmlyZVByZWZlcmVuY2VQcm9jZXNzb3JDaGFuZ2VkKG92ZXJyaWRlUHJlZmVyZW5jZXNCdXR0b24uZ2V0U2VsZWN0aW9uKCkpOwotLy8JCQl9Ci0vLwkJfSk7Ci0JfQotCQotCi0JcHJpdmF0ZSB2b2lkIHByZWZlcmVuY2VzU2VsZWN0ZWQoKQotCXsKLQkJYWx0ZXJQcmVmZXJlbmNlc0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQlydW5Db21iby5zZXRFbmFibGVkKGZhbHNlKTsKLQkJZmFjdG9yeUNvbWJvVmlld2VyLmdldENvbWJvKCkuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCXJ1bkNvbWJvVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRSdW5Qcm9jZXNzb3JQcmVmZXJlbmNlKCkpLCB0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3ZlcnJpZGVTZWxlY3RlZCgpCi0JewotCQlhbHRlclByZWZlcmVuY2VzQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCWZhY3RvcnlDb21ib1ZpZXdlci5nZXRDb21ibygpLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCXJ1bkNvbWJvLnNldEVuYWJsZWQodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNob3dQcmVmUGFnZShTdHJpbmcgaWQsIElQcmVmZXJlbmNlUGFnZSBwYWdlKQotCXsKLQkJWFNMRGVidWdVSVBsdWdpbi5zaG93UHJlZmVyZW5jZVBhZ2UoaWQsIHBhZ2UpOwotCQkvLyBub3cgcmVmcmVzaCBldmVyeXRoaW5nCi0JCXJ1bkNvbWJvVmlld2VyLnNldElucHV0KEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcnMoKSk7Ci0JCXJ1bkNvbWJvVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRSdW5Qcm9jZXNzb3JQcmVmZXJlbmNlKCkpLCB0cnVlKTsKLQkJLy8gcHJlZmVyZW5jZXNTZWxlY3RlZCgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yQmxvY2tfNzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCWJvb2xlYW4gdXNlRGVmYXVsdFByb2Nlc3NvciA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SLCB0cnVlKTsKLQkJCWlmICh1c2VEZWZhdWx0UHJvY2Vzc29yKQotCQkJewotCQkJCXVzZVByZWZlcmVuY2VzUmFkaW8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQkJCW92ZXJyaWRlUHJlZmVyZW5jZXNSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCXByZWZlcmVuY2VzU2VsZWN0ZWQoKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQl1c2VQcmVmZXJlbmNlc1JhZGlvLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQkJb3ZlcnJpZGVQcmVmZXJlbmNlc1JhZGlvLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJCQlvdmVycmlkZVNlbGVjdGVkKCk7Ci0KLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBydW5JbnN0YWxsID0gbnVsbDsKLQkJCQlTdHJpbmcgcnVuSWQgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BST0NFU1NPUiwgKFN0cmluZykgbnVsbCk7Ci0JCQkJaWYgKHJ1bklkICE9IG51bGwpCi0JCQkJCXJ1bkluc3RhbGwgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3IocnVuSWQpOwotCQkJCWlmIChydW5JbnN0YWxsID09IG51bGwpCi0JCQkJCXJ1bkluc3RhbGwgPSBnZXRSdW5Qcm9jZXNzb3JQcmVmZXJlbmNlKCk7Ci0JCQkJcnVuQ29tYm9WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHJ1bkluc3RhbGwpKTsKLQkJCQkKLQotCQkJCVN0cmluZyBmYWN0b3J5SWQgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1RSQU5TRk9STUVSX0ZBQ1RPUlksIChTdHJpbmcpIG51bGwpOwotCQkJCWlmIChmYWN0b3J5SWQgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWN1cnJlbnRGYWN0b3J5ID0gcnVuSW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0RGVmYXVsdFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlmb3IgKElUcmFuc2Zvcm1lckZhY3RvcnkgdGYgOiBydW5JbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKS5nZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpKQotCQkJCQl7Ci0JCQkJCQlpZiAodGYuZ2V0RmFjdG9yeUNsYXNzKCkuZXF1YWxzKGZhY3RvcnlJZCkpCi0JCQkJCQl7Ci0JCQkJCQkJY3VycmVudEZhY3RvcnkgPSB0ZjsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQlpZiAoY3VycmVudEZhY3RvcnkgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWN1cnJlbnRGYWN0b3J5ID0gcnVuSW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0RGVmYXVsdFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQkJCX0KLQkJCQlpZiAoY3VycmVudEZhY3RvcnkgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oY3VycmVudEZhY3RvcnkpLCB0cnVlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElQcm9jZXNzb3JJbnN0YWxsIGdldFJ1blByb2Nlc3NvclByZWZlcmVuY2UoKQotCXsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldERlZmF1bHRQcm9jZXNzb3IoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQkJYm9vbGVhbiB1c2VQcmVmZXJlbmNlcyA9IHVzZVByZWZlcmVuY2VzUmFkaW8uZ2V0U2VsZWN0aW9uKCk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SLCB1c2VQcmVmZXJlbmNlcyk7Ci0JCWlmICghdXNlUHJlZmVyZW5jZXMpCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIHJ1bnByb2Nlc3NvciA9IChJUHJvY2Vzc29ySW5zdGFsbCkgKChJU3RydWN0dXJlZFNlbGVjdGlvbikgcnVuQ29tYm9WaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QUk9DRVNTT1IsIHJ1bnByb2Nlc3Nvci5nZXRJZCgpKTsKLQkJCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVFJBTlNGT1JNRVJfRkFDVE9SWSwgY3VycmVudEZhY3RvcnkgPT0gbnVsbCA/IG51bGwgOiBjdXJyZW50RmFjdG9yeS5nZXRGYWN0b3J5Q2xhc3MoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiwgdHJ1ZSk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfUFJPQ0VTU09SLCAoU3RyaW5nKSBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBDb21ib0NvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0JewotCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQkJewotCQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcnMoKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQl7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCXsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIENvbWJvTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIKLQl7Ci0JCUBPdmVycmlkZQotCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGVsZW1lbnQ7Ci0JCQlyZXR1cm4gaW5zdGFsbC5nZXROYW1lKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2JmOTJmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJvY2Vzc29yRGVzY3JpcHRvcgotewotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRldGFpbHNEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yRGV0YWlsc0RpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDYyMWY1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yRGV0YWlsc0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nIGV4dGVuZHMgRGlhbG9nCi17Ci0JcHJpdmF0ZSBmaW5hbCBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsOwotCi0JcHVibGljIFByb2Nlc3NvckRldGFpbHNEaWFsb2coU2hlbGwgc2hlbGwsIElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlzdXBlcihzaGVsbCk7Ci0JCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0JCXRoaXMuaW5zdGFsbCA9IGluc3RhbGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgbmV3U2hlbGwpCi0JewotCQlzdXBlci5jb25maWd1cmVTaGVsbChuZXdTaGVsbCk7Ci0JCW5ld1NoZWxsLnNldFRleHQoUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19UaXRsZSk7Ci0JCS8vIFRPRE8gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscC4uLgotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIGFuY2VzdG9yKQotCXsKLQkJQ29tcG9zaXRlIHBhcmVudCA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEoYW5jZXN0b3IpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLQkJcGFyZW50LnNldExheW91dChsYXlvdXQpOwotCi0JCS8vIHR5cGUKLQkJY3JlYXRlTGFiZWwocGFyZW50LCBQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxUeXBlKTsKLQkJY3JlYXRlTGFiZWwocGFyZW50LCBpbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKS5nZXRMYWJlbCgpKTsKLQotCQkvLyBuYW1lCi0JCWNyZWF0ZUxhYmVsKHBhcmVudCwgUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsTmFtZSk7Ci0JCWNyZWF0ZUxhYmVsKHBhcmVudCwgaW5zdGFsbC5nZXROYW1lKCkpOwotCi0JCS8vIGphcnMKLQkJTGFiZWwgbGFiZWwgPSBjcmVhdGVMYWJlbChwYXJlbnQsIFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckRldGFpbHNEaWFsb2dfaW5zdGFsbENsYXNzcGF0aCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKTsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCVRhYmxlVmlld2VyIGxpYnJhcnlWaWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIocGFyZW50KTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJZ2QuaGVpZ2h0SGludCA9IDY7Ci0JCWxpYnJhcnlWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldExheW91dERhdGEoZ2QpOwotCQlsaWJyYXJ5Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgSmFyQ29udGVudFByb3ZpZGVyKCkpOwotCQlsaWJyYXJ5Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEphckxhYmVsUHJvdmlkZXIoKSk7Ci0JCWxpYnJhcnlWaWV3ZXIuc2V0SW5wdXQoaW5zdGFsbCk7Ci0KLQkJYXBwbHlEaWFsb2dGb250KHBhcmVudCk7Ci0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCi0JcHJpdmF0ZSBMYWJlbCBjcmVhdGVMYWJlbChDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgdGV4dCkKLQl7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KHRleHQpOwotCQlyZXR1cm4gbGFiZWw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiB0aGF0IHRoaXMgZGlhbG9nIHN0b3JlcyBpdHMgc2V0dGluZ3MgaW4KLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGlhbG9nU2V0dGluZ3NTZWN0aW9uTmFtZSgpCi0JewotCQlyZXR1cm4gIlhTTF9ERVRBSUxTX0RJQUxPR19TRUNUSU9OIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nQm91bmRzU2V0dGluZ3MoKQotCXsKLQkJSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzID0gWFNMRGVidWdVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGlhbG9nU2V0dGluZ3MoKTsKLQkJSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24gPSBzZXR0aW5ncy5nZXRTZWN0aW9uKGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKSk7Ci0JCWlmIChzZWN0aW9uID09IG51bGwpCi0JCXsKLQkJCXNlY3Rpb24gPSBzZXR0aW5ncy5hZGROZXdTZWN0aW9uKGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIHNlY3Rpb247Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJLy8gY3JlYXRlIE9LIGFuZCBDYW5jZWwgYnV0dG9ucyBieSBkZWZhdWx0Ci0JCWNyZWF0ZUJ1dHRvbihwYXJlbnQsIElEaWFsb2dDb25zdGFudHMuT0tfSUQsIElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsIHRydWUpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JNZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JNZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTRlMTU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLWNsYXNzIFByb2Nlc3Nvck1lc3NhZ2VzIGV4dGVuZHMgTkxTCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvci5Qcm9jZXNzb3JNZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckJsb2NrXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yQmxvY2tfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JCbG9ja18yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckJsb2NrXzQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yQmxvY2tfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JCbG9ja183OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvcnNDb21ib0Jsb2NrXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxOYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckRldGFpbHNEaWFsb2dfaW5zdGFsbFR5cGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsQ2xhc3NwYXRoOwotCi0Jc3RhdGljCi0JewotCQkvLyBsb2FkIG1lc3NhZ2UgdmFsdWVzIGZyb20gYnVuZGxlIGZpbGUKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgUHJvY2Vzc29yTWVzc2FnZXMuY2xhc3MpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JNZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JNZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWE3Mjc1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVByb2Nlc3NvckJsb2NrXzA9WFNMVCBQcm9jZXNzb3IKLVByb2Nlc3NvckJsb2NrXzE9VXNlIHByb2Nlc3NvciBmcm9tIHByZWZlcmVuY2VzCi1Qcm9jZXNzb3JCbG9ja18yPUNoYW5nZSBwcmVmZXJlbmNlcy4uLgotUHJvY2Vzc29yQmxvY2tfND1Vc2Ugc3BlY2lmaWMgcHJvY2Vzc29yCi1Qcm9jZXNzb3JCbG9ja182PVByb2Nlc3NvcjoKLVByb2Nlc3NvckJsb2NrXzc9UHJvY2Vzc29yCi1Qcm9jZXNzb3JzQ29tYm9CbG9ja18xPSZJbnN0YWxsZWQgcHJvY2Vzc29ycy4uLgotCi1Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nX1RpdGxlPUJ1aWx0LWluIFhTTFQgUHJvY2Vzc29yCi1Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxOYW1lPU5hbWU6Ci1Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxUeXBlPVR5cGU6Ci1Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxDbGFzc3BhdGg9TGlicmFyaWVzOgotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvWFNMUHJvY2Vzc29yVGFiMi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9YU0xQcm9jZXNzb3JUYWIyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOWFkMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9YU0xQcm9jZXNzb3JUYWIyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjIzNTU3IC0gQWRkZWQgaW1hZ2VzIGNvbnRyaWJ1dGVkIGJ5IEhvbGdlciBWb29ybWFubgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JTGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwuSkFYUERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBYU0xQcm9jZXNzb3JUYWIyIGV4dGVuZHMgWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYgotewotCXByaXZhdGUgZmluYWwgUHJvY2Vzc29yQmxvY2sgcHJvY2Vzc29yQmxvY2s7Ci0JcHJpdmF0ZSBmaW5hbCBBdHRyaWJ1dGVzQmxvY2sgYXR0cmlidXRlc0Jsb2NrOwotCXByaXZhdGUgZmluYWwgT3V0cHV0UHJvcGVydGllc0Jsb2NrIG91dHB1dFByb3BlcnRpZXNCbG9jazsKLQlwcml2YXRlIEltYWdlIGltYWdlOwotCi0JcHVibGljIFhTTFByb2Nlc3NvclRhYjIoKQotCXsKLQkJYXR0cmlidXRlc0Jsb2NrID0gbmV3IEF0dHJpYnV0ZXNCbG9jaygpOwotCQlvdXRwdXRQcm9wZXJ0aWVzQmxvY2sgPSBuZXcgT3V0cHV0UHJvcGVydGllc0Jsb2NrKCk7Ci0JCXByb2Nlc3NvckJsb2NrID0gbmV3IFByb2Nlc3NvckJsb2NrKCk7Ci0JCQotCQlzZXRCbG9ja3MobmV3IElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10KLQkJeyBwcm9jZXNzb3JCbG9jayAsIGF0dHJpYnV0ZXNCbG9jaywgb3V0cHV0UHJvcGVydGllc0Jsb2NrIH0pOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLQkJQ29tcG9zaXRlIGNvbXAgPSAoQ29tcG9zaXRlKSBnZXRDb250cm9sKCk7Ci0KLQkJcHJvY2Vzc29yQmxvY2suY3JlYXRlQ29udHJvbChjb21wKTsKLQkJCi0JCVRhYkZvbGRlciB0YWJGb2xkZXIgPSBuZXcgVGFiRm9sZGVyKGNvbXAsU1dULk5PTkUpOwotCQl0YWJGb2xkZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKSk7Ci0KLQkJb3V0cHV0UHJvcGVydGllc0Jsb2NrLmNyZWF0ZUNvbnRyb2wodGFiRm9sZGVyKTsJCQotCQlhdHRyaWJ1dGVzQmxvY2suY3JlYXRlQ29udHJvbCh0YWJGb2xkZXIpOwkJCi0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JCXN1cGVyLnBlcmZvcm1BcHBseShjb25maWd1cmF0aW9uKTsKLQkJSVByb2Nlc3Nvckludm9rZXIgaW52b2tlciA9IEpBWFBSdW50aW1lLmdldFByb2Nlc3Nvckludm9rZXJzKClbMF07Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLklOVk9LRVJfREVTQ1JJUFRPUiwgaW52b2tlci5nZXRJZCgpKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiWFNMUHJvY2Vzc29yVGFiLjAiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldElkKCkKLQl7Ci0JCXJldHVybiAib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5qYXhwLnRhYnMucHJvY2Vzc29yIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSgpCi0JewotCQlpZiAoaW1hZ2UgPT0gbnVsbCkKLQkJewotCQkJSW1hZ2VEZXNjcmlwdG9yIGlkID0gQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKEpBWFBEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgImljb25zL3hzbHRfcHJvY2Vzc29yLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCQlpbWFnZSA9IGlkLmNyZWF0ZUltYWdlKCk7Ci0JCX0KLQkJcmV0dXJuIGltYWdlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQkJaWYgKGltYWdlICE9IG51bGwpCi0JCQlpbWFnZS5kaXNwb3NlKCk7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZTE1MDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotQXR0cmlidXRlRGlhbG9nXzA9U2VsZWN0IFByb2Nlc3NvciBBdHRyaWJ1dGVzCi1BdHRyaWJ1dGVEaWFsb2dfMT1TZWxlY3Qgb25lIG9yIG1vcmUgYXR0cmlidXRlcyB0byBzZXQgb24gdGhlIFhTTFQgcHJvY2Vzc29yLgotQXR0cmlidXRlRGlhbG9nXzI9Ci1BdHRyaWJ1dGVzQmxvY2suMD1BdHRyaWJ1dGVzCi1BdHRyaWJ1dGVzQmxvY2suMT1DaGFuZ2UgUHJlZmVyZW5jZXMuLi4KLUF0dHJpYnV0ZXNCbG9jay4xMD10eXBlCi1BdHRyaWJ1dGVzQmxvY2suMTE9dmFsdWUKLUF0dHJpYnV0ZXNCbG9jay4xMj12YWx1ZQotQXR0cmlidXRlc0Jsb2NrLjE0PVJlbW92ZQotQXR0cmlidXRlc0Jsb2NrLjE2PVByb2Nlc3NvciBBdHRyaWJ1dGVzCi1BdHRyaWJ1dGVzQmxvY2suMj1OYW1lCi1BdHRyaWJ1dGVzQmxvY2suMz1Vc2Ugc3BlY2lmaWMgYXR0cmlidXRlcwotQXR0cmlidXRlc0Jsb2NrLjQ9QXR0cmlidXRlCi1BdHRyaWJ1dGVzQmxvY2suNT1UeXBlCi1BdHRyaWJ1dGVzQmxvY2suNj1WYWx1ZQotQXR0cmlidXRlc0Jsb2NrLjc9VmFsdWUKLUF0dHJpYnV0ZXNCbG9jay44PUFkZAotQXR0cmlidXRlc0Jsb2NrLjk9bmFtZQotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzA9T3V0cHV0IFByb3BlcnRpZXMKLU91dHB1dFByb3BlcnRpZXNCbG9ja18xPU5hbWUKLU91dHB1dFByb3BlcnRpZXNCbG9ja18yPVZhbHVlCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMz1BZGQKLU91dHB1dFByb3BlcnRpZXNCbG9ja180PVJlbW92ZQotT3V0cHV0UHJvcGVydHlEaWFsb2dfMD1TZWxlY3QgT3V0cHV0IFByb3BlcnRpZXMKLU91dHB1dFByb3BlcnR5RGlhbG9nXzE9U2VsZWN0IG9uZSBvciBtb3JlIG91dHB1dCBwcm9wZXJ0aWVzIGZvciB0aGUgdHJhbnNmb3JtYXRpb24uCi1YU0xQcm9jZXNzb3JUYWIuMD1Qcm9jZXNzb3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkYjA0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3cy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBSZXN1bHRWaWV3XzA7Ci0Jc3RhdGljIHsKLQkJLy8gaW5pdGlhbGl6ZSByZXNvdXJjZSBidW5kbGUKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRSdW5uYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRSdW5uYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTM0ODk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvUmVzdWx0UnVubmFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgS2V2aW4gU2F3aWNraSBidWcgMjU5MDUzIC0gTlBFIGZvciBkb2N1bWVudCByZXN1bHRzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5Kb2JTYWZlU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIFJlc3VsdFJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiA9ICI8P3htbCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVFlQRV9IVE1MID0gIjwhRE9DVFlQRSBodG1sIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVE1MX0NPTlRFTlRfVFlQRV9JRCA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9DT05URU5UX1RZUEVfSUQgPSAib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIFNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIHJlc3VsdHM7Ci0JcHJpdmF0ZSBJV29ya2JlbmNoUGFydFNpdGUgdmlld1NpdGUgPSBudWxsOwotCQotCXB1YmxpYyBSZXN1bHRSdW5uYWJsZShTb3VyY2VWaWV3ZXIgdmlld2VyLCBTdHJpbmcgcmVzdWx0cywgSVdvcmtiZW5jaFBhcnRTaXRlIHNpdGUpIHsKLQkJc291cmNlVmlld2VyID0gdmlld2VyOwotCQl0aGlzLnJlc3VsdHMgPSByZXN1bHRzOwotCQl2aWV3U2l0ZSA9IHNpdGU7Ci0JfSAKLQotCXB1YmxpYyB2b2lkIHJ1bigpCi0JewotCQkvLyBpZiB0aGlzIGlzIHRoZSBmaXJzdCBsb3Qgb2YgZGF0YSwgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNvbnRlbnQgdHlwZSBhbmQgc2V0IHRoZSBhcHByb3ByaWF0ZSBkb2N1bWVudAotCQlpZiAoc291cmNlVmlld2VyLmdldERvY3VtZW50KCkgID09IG51bGwpCi0JCXsKLQkJCUlEb2N1bWVudCBkb2N1bWVudCA9IGNyZWF0ZURvY3VtZW50KCk7Ci0JCQlzb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCQl9Ci0JCXRyeQotCQl7Ci0JCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBzb3VyY2VWaWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJCWRvY3VtZW50LnJlcGxhY2UoZG9jdW1lbnQuZ2V0TGVuZ3RoKCksIDAsIHJlc3VsdHMpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQlzb3VyY2VWaWV3ZXIucmV2ZWFsUmFuZ2Uoc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGVuZ3RoKCksMCk7Ci0JCXZpZXdTaXRlLmdldFBhZ2UoKS5hY3RpdmF0ZSh2aWV3U2l0ZS5nZXRQYXJ0KCkpOwotCX0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoKSB7Ci0JCUlEb2N1bWVudCBkb2N1bWVudDsKLQkJaWYgKHJlc3VsdHMuc3RhcnRzV2l0aChET0NUWVBFX0hUTUwpKQotCQl7Ci0JCQlkb2N1bWVudCA9IGNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudChIVE1MX0NPTlRFTlRfVFlQRV9JRCk7Ci0JCX0KLQkJZWxzZSBpZiAocmVzdWx0cy5zdGFydHNXaXRoKFhNTF9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKSkKLQkJewotCQkJZG9jdW1lbnQgPSBjcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnQoWE1MX0NPTlRFTlRfVFlQRV9JRCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlkb2N1bWVudCA9IG5ldyBKb2JTYWZlU3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCX0KLQkJcmV0dXJuIGRvY3VtZW50OwotCX0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnQgY3JlYXRlU3RydWN0dXJlZERvY3VtZW50KFN0cmluZyBjb250ZW50VHlwZSkgewotCQlJRG9jdW1lbnQgZG9jdW1lbnQ7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc2NyYXRjaE1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoY29udGVudFR5cGUpOwotCQlkb2N1bWVudCA9IHNjcmF0Y2hNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJcmV0dXJuIGRvY3VtZW50OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL1Jlc3VsdFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1Njk2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL1Jlc3VsdFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudmlld3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklEZWJ1Z0V2ZW50U2V0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLklXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLm1vZGVsLkpBWFBEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTDsKLQotLyoqCi0gKiBUT0RPIGhhbmRsZSBtdWx0aXBsZSBjb25jdXJyZW50IGRlYnVnZ2luZyBwcm9jZXNzZXMgKGFuZCBicmluZyB0aGUgY3VycmVudCByZXN1bHRzIHRvIHRoZSB0b3AgZGVwZW5kaW5nIG9uIHdoaWNoIHNlbGVjdGVkIGluIERlYnVnIHZpZXcpCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFJlc3VsdFZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzIElEZWJ1Z0V2ZW50U2V0TGlzdGVuZXIKLXsKLQlwcml2YXRlIFNvdXJjZVZpZXdlciBzdjsKLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQkJRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpLnJlbW92ZURlYnVnRXZlbnRMaXN0ZW5lcih0aGlzKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQl0aGlzLnN2ID0gY3JlYXRlVmlld2VyKHBhcmVudCk7Ci0JCQotCQkvLyBoYW5kbGUgYW55IGxhdW5jaGVzIGFscmVhZHkgYWRkZWQKLQkJSURlYnVnVGFyZ2V0W10gdGFyZ2V0cyA9IERlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMYXVuY2hNYW5hZ2VyKCkuZ2V0RGVidWdUYXJnZXRzKCk7Ci0JCWZvciAoSURlYnVnVGFyZ2V0IGRlYnVnVGFyZ2V0IDogdGFyZ2V0cykKLQkJewotCQkJaWYgKGRlYnVnVGFyZ2V0IGluc3RhbmNlb2YgSkFYUERlYnVnVGFyZ2V0KQotCQkJewotCQkJCWhhbmRsZURlYnVnVGFyZ2V0KChKQVhQRGVidWdUYXJnZXQpZGVidWdUYXJnZXQpOwotCQkJfQkJCQotCQl9Ci0JCS8vIGxpc3RlbiB0byBmdXJ0aGVyIGxhdW5jaGVzCi0JCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5hZGREZWJ1Z0V2ZW50TGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIHNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQkJU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGJhc2VDb25maWd1cmF0aW9uID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTCgpOwotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmdbXSBnZXRDb25maWd1cmVkQ29udGVudFR5cGVzKElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKSB7Ci0JCQkJcmV0dXJuIGJhc2VDb25maWd1cmF0aW9uLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoc291cmNlVmlld2VyKTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgTGluZVN0eWxlUHJvdmlkZXJbXSBnZXRMaW5lU3R5bGVQcm92aWRlcnMoSVNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIsIFN0cmluZyBwYXJ0aXRpb25UeXBlKSB7Ci0JCQkJcmV0dXJuIGJhc2VDb25maWd1cmF0aW9uLmdldExpbmVTdHlsZVByb3ZpZGVycyhzb3VyY2VWaWV3ZXIsIHBhcnRpdGlvblR5cGUpOwotCQkJfQotCQl9OwotCQlTb3VyY2VWaWV3ZXIgdmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotCQkoKFN0cnVjdHVyZWRUZXh0Vmlld2VyKSB2aWV3ZXIpLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJdmlld2VyLmNvbmZpZ3VyZShzb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKTsKLQkJdmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJcmV0dXJuIHZpZXdlcjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpCi0Je30KLQotCXB1YmxpYyB2b2lkIGhhbmRsZURlYnVnRXZlbnRzKERlYnVnRXZlbnRbXSBldmVudHMpCi0JewotCQlmb3IgKERlYnVnRXZlbnQgZGVidWdFdmVudCA6IGV2ZW50cykKLQkJewotCQkJaWYgKGRlYnVnRXZlbnQuZ2V0S2luZCgpID09IERlYnVnRXZlbnQuQ1JFQVRFICYmIGRlYnVnRXZlbnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBKQVhQRGVidWdUYXJnZXQpCi0JCQl7Ci0JCQkJaGFuZGxlRGVidWdUYXJnZXQoKEpBWFBEZWJ1Z1RhcmdldClkZWJ1Z0V2ZW50LmdldFNvdXJjZSgpKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgaGFuZGxlRGVidWdUYXJnZXQoSkFYUERlYnVnVGFyZ2V0IHhkdCkKLQl7Ci0JCS8vIGZpcnN0LCBjbGVhciB0aGUgdmlld2VyCi0JCXN2LnNldERvY3VtZW50KG51bGwpOwotCQlJV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZSBzZXJ2aWNlID0gKElXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlKWdldFNpdGUoKS5nZXRTZXJ2aWNlKElXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlLmNsYXNzKTsKLQkJc2VydmljZS5zY2hlZHVsZShuZXcgUmVzdWx0Vmlld0pvYihNZXNzYWdlcy5SZXN1bHRWaWV3XzAsIGdldFNpdGUoKSwgeGR0LCBzdikpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3Sm9iLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL1Jlc3VsdFZpZXdKb2IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIwZjNjNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL1Jlc3VsdFZpZXdKb2IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gcmVmYWN0b3JlZCBmcm9tIFJlc3VsdFZpZXcuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLm1vZGVsLkpBWFBEZWJ1Z1RhcmdldDsKLQotcHVibGljIGNsYXNzIFJlc3VsdFZpZXdKb2IgZXh0ZW5kcyBKb2IgewotCi0JcHJpdmF0ZSBJV29ya2JlbmNoUGFydFNpdGUgdmlld1NpdGUgPSBudWxsOwotCWZpbmFsIFJlYWRlciByZWFkZXI7Ci0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQotCXB1YmxpYyBSZXN1bHRWaWV3Sm9iKFN0cmluZyBuYW1lLCBJV29ya2JlbmNoUGFydFNpdGUgc2l0ZSwKLQkJCUpBWFBEZWJ1Z1RhcmdldCB4ZHQsIFNvdXJjZVZpZXdlciB2aWV3ZXIpIHsKLQkJc3VwZXIobmFtZSk7Ci0JCXZpZXdTaXRlID0gc2l0ZTsKLQkJcmVhZGVyID0geGR0LmdldEdlbmVyYXRlUmVhZGVyKCk7Ci0JCXNvdXJjZVZpZXdlciA9IHZpZXdlcjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJdHJ5IHsKLQkJCS8vIHRoaXMgaXMgdGhlIGRlZmF1bHQgQnVmZmVyZWRXcml0ZXIKLQkJCS8vIHNpemUsIHNvIHdlIHdpbGwgdXN1YWxseSBnZXQgY2h1bmtzCi0JCQkvLyBvZiB0aGlzIHNpemUKLQkJCQotCQkJY2hhcltdIGMgPSBuZXcgY2hhcls4MTkyXTsKLQkJCWludCBzaXplOwotCQkJd2hpbGUgKChzaXplID0gcmVhZGVyLnJlYWQoYykpICE9IC0xKSB7Ci0JCQkJd3JpdGVTdHJpbmcobmV3IFN0cmluZyhjLCAwLCBzaXplKSk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGlnbm9yZQotCQl9IGZpbmFsbHkgewotCQkJbW9uaXRvci5kb25lKCk7Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgd3JpdGVTdHJpbmcoZmluYWwgU3RyaW5nIHMpIHsKLQkJU2hlbGwgc2hlbGwgPSB2aWV3U2l0ZS5nZXRTaGVsbCgpOwotCQlEaXNwbGF5IGRpc3BsYXkgPSBzaGVsbC5nZXREaXNwbGF5KCk7Ci0JCWRpc3BsYXkuc3luY0V4ZWMobmV3IFJlc3VsdFJ1bm5hYmxlKHNvdXJjZVZpZXdlciwgcywgdmlld1NpdGUpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZjIxMTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotUmVzdWx0Vmlld18wPVJlc3VsdCB2aWV3IGpvYgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNGMxZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjM1OGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjNiNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotI1NhdCBKYW4gMDIgMTg6NTU6NTkgR01ULTA1OjAwIDIwMTAKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU3luY2hyb25pemVkT25Jbmhlcml0ZWRNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkV4ZW1wdEV4Y2VwdGlvbkFuZFRocm93YWJsZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YzliMWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICV2ZW5kb3JOYW1lCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZztidW5kbGUtdmVyc2lvbj0iMS4wLjQiO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAotIG9yZy5hcGFjaGUueG1sLnJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCI7cmVzb2x1dGlvbjo9b3B0aW9uYWwKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMDAwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+QXVndXN0LCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTQ0Njc0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzcxZDM4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcKLXZlbmRvck5hbWUgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotcGx1Z2luTmFtZSA9IFhTTCBKQVhQIERlYnVnZ2VyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvbG9nNGoucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9sb2c0ai5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWJiNTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9sb2c0ai5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIyBTZXQgcm9vdCBsb2dnZXIgbGV2ZWwgdG8gREVCVUcgYW5kIGl0cyBhcHBlbmRlcnMgYXJlIEExIGFuZCBBMgotbG9nNGoucm9vdExvZ2dlcj1ERUJVRywgQTIKLQotIyBBMiBpcyBzZXQgdG8gYmUgYSBDb25zb2xlQXBwZW5kZXIKLWxvZzRqLmFwcGVuZGVyLkEyPW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyCi0KLSMgQTIgdXNlcyBQYXR0ZXJuTGF5b3V0LgotbG9nNGouYXBwZW5kZXIuQTIubGF5b3V0PW9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dAotbG9nNGouYXBwZW5kZXIuQTIubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVke0hIOm1tOnNzLFNTU30gJS01cCBbJXRdICVjezF9ICV4IC0gJW0lbgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0Fic3RyYWN0RGVidWdnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvQWJzdHJhY3REZWJ1Z2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGUxZTA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvQWJzdHJhY3REZWJ1Z2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBjbGVhbnVwIGZpbmRidWcgZXJyb3JzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5JWFNMRGVidWdnZXI8L2NvZGU+LgotICogCi0gKiBUaGlzIGNsYXNzIGNhbiBiZSBzdWJjbGFzc2VkIGluIG9yZGVyIHRvIHByb3ZpZGUgZGVidWdnaW5nIGZvciBhIHBhcnRpY3VsYXIKLSAqIFhTTFQgcHJvY2Vzc29yLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERlYnVnZ2VyIGltcGxlbWVudHMgSVhTTERlYnVnZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coQWJzdHJhY3REZWJ1Z2dlci5jbGFzcyk7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX0RPX05PVEhJTkcgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fU1RPUCA9IDE7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9RVUlUID0gMjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX1NVU1BFTkQgPSAzOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fUkVTVU1FID0gNDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX1NURVBfSU5UTyA9IDU7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9TVEVQX09WRVIgPSA2OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fU1RFUF9SRVRVUk4gPSA3OwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVWRU5UX1NUQVJURUQgPSAic3RhcnRlZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVZFTlRfU1RPUFBFRCA9ICJzdG9wcGVkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFVkVOVF9TVVNQRU5ERUQgPSAic3VzcGVuZGVkIGNsaWVudCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVZFTlRfU1VTUEVOREVEX1NURVAgPSAic3VzcGVuZGVkIHN0ZXAiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVWRU5UX1JFU1VNRUQgPSAicmVzdW1lZCBjbGllbnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVWRU5UX1JFU1VNRURfU1RFUCA9ICJyZXN1bWVkIHN0ZXAiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIElQcm9jZXNzb3JJbnZva2VyIGludm9rZXI7Ci0JcHJpdmF0ZSBpbnQgYWN0aW9uOwotCXByaXZhdGUgV3JpdGVyIGV2ZW50V3JpdGVyOwotCXByaXZhdGUgV3JpdGVyIGdlbmVyYXRlZFdyaXRlcjsKLQlwcml2YXRlIGZpbmFsIFNldDxCcmVha1BvaW50PiBicmVha3BvaW50cyA9IENvbGxlY3Rpb25zCi0JCQkuc3luY2hyb25pemVkU2V0KG5ldyBIYXNoU2V0PEJyZWFrUG9pbnQ+KCkpOwotCXByaXZhdGUgZmluYWwgU3RhY2s8U3R5bGVGcmFtZT4gc3RhY2sgPSBuZXcgU3RhY2s8U3R5bGVGcmFtZT4oKTsKLQlwcml2YXRlIFN0eWxlRnJhbWUgc3RlcE92ZXJGcmFtZTsKLQlwcml2YXRlIEJyZWFrUG9pbnQgYnJlYWtwb2ludDsKLQlwcml2YXRlIFVSTCBzb3VyY2VVUkw7Ci0JcHJpdmF0ZSBSZXN1bHQgcmVzdWx0OwotCi0JcHJpdmF0ZSBpbnQgc3RlcE92ZXJTdGFja1NpemU7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0SW52b2tlcihJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyKSB7Ci0JCXRoaXMuaW52b2tlciA9IGludm9rZXI7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEV2ZW50V3JpdGVyKFdyaXRlciB3cml0ZXIpIHsKLQkJZXZlbnRXcml0ZXIgPSB3cml0ZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0R2VuZXJhdGVkV3JpdGVyKFdyaXRlciB3cml0ZXIpIHsKLQkJdGhpcy5nZW5lcmF0ZWRXcml0ZXIgPSB3cml0ZXI7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldFNvdXJjZShVUkwgc291cmNlVVJMKSB7Ci0JCXRoaXMuc291cmNlVVJMID0gc291cmNlVVJMOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRUYXJnZXQoZmluYWwgV3JpdGVyIHdyaXRlcikgewotCQlyZXN1bHQgPSBuZXcgU3RyZWFtUmVzdWx0KG5ldyBXcml0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCB3cml0ZShjaGFyW10gY2J1ZiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJCQl3cml0ZXIud3JpdGUoY2J1Ziwgb2ZmLCBsZW4pOwotCQkJCWdlbmVyYXRlZFdyaXRlci53cml0ZShjYnVmLCBvZmYsIGxlbik7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJCQl3cml0ZXIuY2xvc2UoKTsKLQkJCQlnZW5lcmF0ZWRXcml0ZXIuY2xvc2UoKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZmx1c2goKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkJCXdyaXRlci5mbHVzaCgpOwotCQkJCWdlbmVyYXRlZFdyaXRlci5mbHVzaCgpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcnVuKCkgewotCQlpZiAoYWN0aW9uICE9IEFDVElPTl9RVUlUKSB7Ci0JCQlkZWJ1Z2dlclN0YXJ0ZWQoKTsKLQkJCXRyeSB7Ci0JCQkJaW52b2tlci50cmFuc2Zvcm0oc291cmNlVVJMLCByZXN1bHQpOwotCQkJfSBjYXRjaCAoVHJhbnNmb3JtYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWxvZy5lcnJvcigiVHJhbnNmb3JtIGZhaWxlZCIsIGUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlkZWJ1Z2dlclN0b3BwZWQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdXNwZW5kKCkgewotCQlhY3Rpb24gPSBBQ1RJT05fU1VTUEVORDsKLQkJbm90aWZ5KCk7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc3VtZSgpIHsKLQkJYWN0aW9uID0gQUNUSU9OX1JFU1VNRTsKLQkJbm90aWZ5KCk7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0ZXBJbnRvKCkgewotCQlhY3Rpb24gPSBBQ1RJT05fU1RFUF9JTlRPOwotCQlub3RpZnkoKTsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc3RlcE92ZXIoKSB7Ci0JCWFjdGlvbiA9IEFDVElPTl9TVEVQX09WRVI7Ci0JCXN0ZXBPdmVyRnJhbWUgPSBwZWVrU3R5bGVGcmFtZSgpOwotCQlzdGVwT3ZlclN0YWNrU2l6ZSA9IHN0YWNrLnNpemUoKTsKLQkJbm90aWZ5KCk7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0ZXBSZXR1cm4oKSB7Ci0JCWFjdGlvbiA9IEFDVElPTl9TVEVQX1JFVFVSTjsKLQkJc3RlcE92ZXJTdGFja1NpemUgPSBzdGFjay5zaXplKCk7Ci0JCW5vdGlmeSgpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBxdWl0KCkgewotCQlhY3Rpb24gPSBBQ1RJT05fUVVJVDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHN0YWNrKCkgewotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN5bmNocm9uaXplZCAoc3RhY2spIHsKLQkJCWZvciAoSXRlcmF0b3I8U3R5bGVGcmFtZT4gaXRlciA9IHN0YWNrLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCVN0eWxlRnJhbWUgZnJhbWUgPSAoU3R5bGVGcmFtZSkgaXRlci5uZXh0KCk7Ci0JCQkJc2IuYXBwZW5kKGZyYW1lLnRvU3RyaW5nKCkpOwotCQkJCWZvciAoSXRlcmF0b3I8Pz4gaXRlcjIgPSBmcmFtZS5nZXRWYXJpYWJsZVN0YWNrKCkuaXRlcmF0b3IoKTsgaXRlcjIKLQkJCQkJCS5oYXNOZXh0KCk7KSB7Ci0JCQkJCXNiLmFwcGVuZCgifCIpOyAvLyROT04tTkxTLTEkCi0JCQkJCVZhcmlhYmxlIHYgPSAoVmFyaWFibGUpIGl0ZXIyLm5leHQoKTsKLQkJCQkJc2IuYXBwZW5kKHYuZ2V0SWQoKSk7Ci0JCQkJfQotCQkJCWlmIChpdGVyLmhhc05leHQoKSkKLQkJCQkJc2IuYXBwZW5kKCIkJCQiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIGRlYnVnZ2VyIGhhcyBiZWVuIHN0b3BwZWQgYW5kIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlCi0JICogYWN0aW9uIGlmIHNvLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjaGVja1N0b3BwZWQoKSB7Ci0JCWlmIChhY3Rpb24gPT0gQUNUSU9OX1FVSVQpCi0JCQlkZWJ1Z2dlclF1aXQoKTsKLQkJZWxzZSBpZiAoYWN0aW9uID09IEFDVElPTl9TVE9QKQotCQkJZGVidWdnZXJTdG9wcGVkKCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgd2hldGhlciB0aGUgZGVidWdnZXIgaXMgY3VycmVudGx5IHN1c3BlbmRlZCBvciBzdGVwcGluZyBhdCB0aGUKLQkgKiBnaXZlbiBicmVha3BvaW50IGFuZCBzdHlsZSBmcmFtZSwgYW5kIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZgotCSAqIHNvLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZUZyYW1lCi0JICogICAgICAgICAgICB0aGUgc3R5bGVmcmFtZSB0byBjaGVjawotCSAqIEBwYXJhbSBicmVha3BvaW50Ci0JICogICAgICAgICAgICB0aGUgY3VycmVudCBsb2NhdGlvbgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjaGVja1N1c3BlbmRlZChTdHlsZUZyYW1lIHN0eWxlRnJhbWUsCi0JCQlCcmVha1BvaW50IGJyZWFrcG9pbnQpIHsKLQkJLy8gZG8gbm90IHN1c3BlbmQgdW5sZXNzIHRoZSBsaW5lIGFjdHVhbGx5IGNoYW5nZWQKLQkJaWYgKGJyZWFrcG9pbnQuZXF1YWxzKHRoaXMuYnJlYWtwb2ludCkpCi0JCQlyZXR1cm47Ci0JCWludCBzdGFja1NpemU7Ci0JCXN5bmNocm9uaXplZCAoc3RhY2spIHsKLQkJCXN0YWNrU2l6ZSA9IHN0YWNrLnNpemUoKTsKLQkJfQotCQkvLyBkbyBub3Qgc3VzcGVuZCBpZiB0aGVyZSBpcyBub3RoaW5nIGluIHRoZSBzdGFjawotCQlpZiAoc3RhY2tTaXplID09IDApCi0JCQlyZXR1cm47Ci0JCXN3aXRjaCAoYWN0aW9uKSB7Ci0JCWNhc2UgQUNUSU9OX1NVU1BFTkQ6Ci0JCQlkZWJ1Z2dlclN1c3BlbmRlZENsaWVudChicmVha3BvaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIEFDVElPTl9TVEVQX09WRVI6Ci0JCQkvLyBzdXNwZW5kIGlmIHdlIGFyZSBpbiB0aGUgc2FtZSB0ZW1wbGF0ZSBvciB3ZSBhcmUgbW92aW5nIHVwIHRoZQotCQkJLy8gc3RhY2sKLQkJCWlmIChzdHlsZUZyYW1lLmVxdWFscyhzdGVwT3ZlckZyYW1lKQotCQkJCQl8fCBzdGFja1NpemUgPCBzdGVwT3ZlclN0YWNrU2l6ZSkKLQkJCQlkZWJ1Z2dlclN1c3BlbmRlZFN0ZXAoYnJlYWtwb2ludCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBQ1RJT05fU1RFUF9JTlRPOgotCQkJZGVidWdnZXJTdXNwZW5kZWRTdGVwKGJyZWFrcG9pbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNUSU9OX1NURVBfUkVUVVJOOgotCQkJLy8gc3VzcGVuZCBpZiB3ZSBtb3ZlZCB1cCB0aGUgc3RhY2sKLQkJCWlmIChzdGFja1NpemUgPCBzdGVwT3ZlclN0YWNrU2l6ZSkKLQkJCQlkZWJ1Z2dlclN1c3BlbmRlZFN0ZXAoYnJlYWtwb2ludCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNoZWNrQnJlYWtwb2ludChicmVha3BvaW50KTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgY2hlY2tCcmVha3BvaW50KEJyZWFrUG9pbnQgYnJlYWtwb2ludCkgewotCQlpZiAoaXNCcmVha3BvaW50KGJyZWFrcG9pbnQpKQotCQkJZGVidWdnZXJTdXNwZW5kZWRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotCX0KLQotCS8qKgotCSAqIENhbGxlZCB3aGVuIHRoZSBuZXh0IHRyYW5zZm9ybSBpbiB0aGUgcGlwZWxpbmUgaGFzIGJlZ3VuLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkZWJ1Z2dlclRyYW5zZm9ybVN0YXJ0ZWQoKSB7Ci0JCXN0YWNrLmNsZWFyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHN5bmNocm9uaXplZCB2b2lkIGRlYnVnZ2VyU3RhcnRlZCgpIHsKLQkJYWN0aW9uID0gQUNUSU9OX0RPX05PVEhJTkc7Ci0JCXNlbmRFdmVudChFVkVOVF9TVEFSVEVEKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJTdG9wcGVkKCkgewotCQlhY3Rpb24gPSBBQ1RJT05fRE9fTk9USElORzsKLQkJc2VuZEV2ZW50KEVWRU5UX1NUT1BQRUQpOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJRdWl0KCkgewotCQkvLyBqdXN0IHdhaXQgaGVyZSBpbmRlZmluaXRlbHkgdW50aWwgdGhlIEpWTSBleGlzdHMsIGp1c3QgdG8gbWFrZSBzdXJlCi0JCS8vIHdlIGRvbid0IHNlbmQgYW55IGZ1cnRoZXIgZXZlbnRzCi0JCXRyeSB7Ci0JCQl3YWl0KCk7Ci0JCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJfQotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJTdXNwZW5kZWRCcmVha3BvaW50KEJyZWFrUG9pbnQgYnJlYWtwb2ludCkgewotCQlzZW5kRXZlbnQoInN1c3BlbmRlZCBicmVha3BvaW50ICIgKyBicmVha3BvaW50KTsgLy8kTk9OLU5MUy0xJAotCQlkZWJ1Z2dlclN1c3BlbmRlZChicmVha3BvaW50KTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIGRlYnVnZ2VyU3VzcGVuZGVkU3RlcChCcmVha1BvaW50IGJyZWFrcG9pbnQpIHsKLQkJc2VuZEV2ZW50KEVWRU5UX1NVU1BFTkRFRF9TVEVQKTsKLQkJZGVidWdnZXJTdXNwZW5kZWQoYnJlYWtwb2ludCk7Ci0JfQotCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBkZWJ1Z2dlclN1c3BlbmRlZENsaWVudChCcmVha1BvaW50IGJyZWFrcG9pbnQpIHsKLQkJc2VuZEV2ZW50KEVWRU5UX1NVU1BFTkRFRCk7Ci0JCWRlYnVnZ2VyU3VzcGVuZGVkKGJyZWFrcG9pbnQpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkZWJ1Z2dlclN1c3BlbmRlZChCcmVha1BvaW50IGJyZWFrcG9pbnQpIHsKLQkJdGhpcy5icmVha3BvaW50ID0gYnJlYWtwb2ludDsKLQkJZG8gewotCQkJdHJ5IHsKLQkJCQl3YWl0KCk7Ci0JCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0gd2hpbGUgKGFjdGlvbiAhPSBBQ1RJT05fUkVTVU1FICYmIGFjdGlvbiAhPSBBQ1RJT05fU1RFUF9JTlRPCi0JCQkJJiYgYWN0aW9uICE9IEFDVElPTl9TVEVQX09WRVIgJiYgYWN0aW9uICE9IEFDVElPTl9TVEVQX1JFVFVSTgotCQkJCSYmIGFjdGlvbiAhPSBBQ1RJT05fU1RPUCk7Ci0JCWRlYnVnZ2VyUmVzdW1lZCgpOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJSZXN1bWVkKCkgewotCQlpZiAoYWN0aW9uID09IEFDVElPTl9TVEVQX0lOVE8gfHwgYWN0aW9uID09IEFDVElPTl9TVEVQX09WRVIKLQkJCQl8fCBhY3Rpb24gPT0gQUNUSU9OX1NURVBfUkVUVVJOKQotCQkJc2VuZEV2ZW50KEVWRU5UX1JFU1VNRURfU1RFUCk7Ci0JCWVsc2UKLQkJCXNlbmRFdmVudChFVkVOVF9SRVNVTUVEKTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHNlbmRFdmVudChTdHJpbmcgZXZlbnQpIHsKLQkJdHJ5IHsKLQkJCWxvZy5pbmZvKCJTZW5kaW5nIGV2ZW50OiAiICsgZXZlbnQgKyAiIGV2ZW50V3JpdGVyPSIgKyBldmVudFdyaXRlcik7IC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0JCQlldmVudFdyaXRlci53cml0ZShldmVudCArICJcbiIpOyAvLyROT04tTkxTLTEkCi0JCQlldmVudFdyaXRlci5mbHVzaCgpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlsb2cuZXJyb3IoIkVycm9yIHNlbmRpbmcgZXZlbnQiLCBlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkQnJlYWtwb2ludChCcmVha1BvaW50IGJyZWFrcG9pbnQpIHsKLQkJbG9nLmluZm8oIkFkZGluZyBicmVha3BvaW50OiAiICsgYnJlYWtwb2ludCk7IC8vJE5PTi1OTFMtMSQKLQkJYnJlYWtwb2ludHMuYWRkKGJyZWFrcG9pbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoQnJlYWtQb2ludCBicmVha3BvaW50KSB7Ci0JCWxvZy5pbmZvKCJSZW1vdmluZyBicmVha3BvaW50OiAiICsgYnJlYWtwb2ludCk7IC8vJE5PTi1OTFMtMSQKLQkJYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0JyZWFrcG9pbnQoQnJlYWtQb2ludCBicmVha3BvaW50KSB7Ci0JCS8vIGRvIG5vdCBjaGVjayBmb3IgYnJlYWtwb2ludCB1bmxlc3MgdGhlIGxpbmUgb3IgZmlsZW5hbWUgYWN0dWFsbHkKLQkJLy8gY2hhbmdlZAotCQlpZiAoYnJlYWtwb2ludC5lcXVhbHModGhpcy5icmVha3BvaW50KSkKLQkJCXJldHVybiBmYWxzZTsKLQkJdGhpcy5icmVha3BvaW50ID0gbnVsbDsKLQkJcmV0dXJuIGJyZWFrcG9pbnRzLmNvbnRhaW5zKGJyZWFrcG9pbnQpOwotCX0KLQotCS8qKgotCSAqIFBvcCBhIHN0eWxlIGZyYW1lIGZyb20gdGhlIHN0YWNrLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHBvcHBlZCBzdHlsZSBmcmFtZQotCSAqLwotCXB1YmxpYyBTdHlsZUZyYW1lIHBvcFN0eWxlRnJhbWUoKSB7Ci0JCXN5bmNocm9uaXplZCAoc3RhY2spIHsKLQkJCVN0eWxlRnJhbWUgc3R5bGVGcmFtZSA9IChTdHlsZUZyYW1lKSBzdGFjay5wb3AoKTsKLQkJCWlmIChzdHlsZUZyYW1lLmdldFBhcmVudCgpICE9IG51bGwpCi0JCQkJc3R5bGVGcmFtZS5nZXRQYXJlbnQoKS5yZW1vdmVDaGlsZChzdHlsZUZyYW1lKTsKLQkJCWxvZwotCQkJCQkudHJhY2UoIlBvcHBlZCBmcmFtZTogIiArIHN0eWxlRnJhbWUgKyAiIChzaXplIGFmdGVyIHBvcD0iICsgc3RhY2suc2l6ZSgpICsgIikiKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTMkCi0JCQlyZXR1cm4gc3R5bGVGcmFtZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFB1c2ggYSBzdHlsZSBmcmFtZSBvbnRvIHRoZSBzdGFjay4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVGcmFtZQotCSAqLwotCXB1YmxpYyB2b2lkIHB1c2hTdHlsZUZyYW1lKFN0eWxlRnJhbWUgc3R5bGVGcmFtZSkgewotCQlzeW5jaHJvbml6ZWQgKHN0YWNrKSB7Ci0JCQlzdGFjay5wdXNoKHN0eWxlRnJhbWUpOwotCQkJbG9nCi0JCQkJCS50cmFjZSgiUHVzaGVkIGZyYW1lOiAiICsgc3R5bGVGcmFtZSArICIgKHNpemUgYWZ0ZXIgcHVzaD0iICsgc3RhY2suc2l6ZSgpICsgIikiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLQkJfQotCX0KLQotCS8qKgotCSAqIFBlZWsgYSBzdHlsZSBmcmFtZSBmcm9tIHRoZSBzdGFjay4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBwZWVrZWQgc3R5bGUgZnJhbWUKLQkgKi8KLQlwdWJsaWMgU3R5bGVGcmFtZSBwZWVrU3R5bGVGcmFtZSgpIHsKLQkJc3luY2hyb25pemVkIChzdGFjaykgewotCQkJaWYgKHN0YWNrLnNpemUoKSA+IDApCi0JCQkJcmV0dXJuIChTdHlsZUZyYW1lKSBzdGFjay5wZWVrKCk7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvQnJlYWtQb2ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9CcmVha1BvaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNjAwMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9CcmVha1BvaW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXI7Ci0KLS8qKgotICogQSBsaW5lIG51bWJlciBpbiBhIGZpbGUuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIEJyZWFrUG9pbnQKLXsKLQlwcml2YXRlIFN0cmluZyBmaWxlOwotCXByaXZhdGUgZmluYWwgaW50IGxpbmU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3QgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmb3IgdGhlIGdpdmVuIGZpbGUgYW5kIGxpbmUgbnVtYmVyLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlIHRoZSBmaWxlIHBhdGgKLQkgKiBAcGFyYW0gbGluZSB0aGUgbGluZSBudW1iZXIKLQkgKi8KLQlwdWJsaWMgQnJlYWtQb2ludChTdHJpbmcgZmlsZSwgaW50IGxpbmUpCi0JewotCQl0aGlzLmZpbGUgPSBmaWxlOwotCQl0aGlzLmxpbmUgPSBsaW5lOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgZmlsZSBsb2NhdGlvbi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBmaWxlCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRGaWxlKCkKLQl7Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbGluZSBudW1iZXIKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaW5lIG51bWJlcgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TGluZSgpCi0JewotCQlyZXR1cm4gbGluZTsKLQl9Ci0KLQlwdWJsaWMgaW50IGhhc2hDb2RlKCkKLQl7Ci0JCWludCBoYXNoID0gMyAqIGZpbGUuaGFzaENvZGUoKSArIDUgKiBsaW5lOwotCQlyZXR1cm4gaGFzaDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLQl7Ci0JCWlmIChvYmogPT0gdGhpcykKLQkJCXJldHVybiB0cnVlOwotCQlpZiAob2JqIGluc3RhbmNlb2YgQnJlYWtQb2ludCkKLQkJewotCQkJQnJlYWtQb2ludCBiID0gKEJyZWFrUG9pbnQpIG9iajsKLQkJCXJldHVybiBiLmZpbGUuZXF1YWxzKGZpbGUpICYmIGIubGluZSA9PSBsaW5lOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCXJldHVybiBmaWxlICsgIiAiICsgbGluZTsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvRGVidWdDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvRGVidWdDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM4M2EyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0RlYnVnQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXI7Ci0KLS8qKgotICogQ29uc3RhbnRzIHVzZWQgYnkgdGhlIGRlYnVnZ2VyLgotICogCi0gKiA8cD4KLSAqIE5vdGUgdGhhdCBjbGFzcyBpcyBsb2FkZWQgYm90aCBvbiB0aGUgRWNsaXBzZSBjbGFzc3BhdGggYW5kIHRoZSAKLSAqIGxhdW5jaGVkIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MsIHN1Y2ggdGhhdCB0aGV5IGNhbiB1c2UgZXhhY3RseSB0aGUgc2FtZSBjb25zdGFudHMKLSAqIGZvciBjb21tdW5pY2F0aW9uLgotICogPC9wPgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWJ1Z0NvbnN0YW50cwotewotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIG5vdGlmeSB0aGUgZGVidWdnZXIgdG8gc3RhcnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9TVEFSVCA9ICJzdGFydCI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IGFkZGl0aW9uIG9mIGEgYnJlYWtwb2ludC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUX0FERF9CUkVBS1BPSU5UID0gImFkZCI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IHJlbW92YWwgb2YgYSBicmVha3BvaW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQgPSAicmVtb3ZlIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3RlcCBpbnRvLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfU1RFUF9JTlRPID0gInN0ZXAgaW50byI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IHN0ZXAgb3Zlci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUX1NURVBfT1ZFUiA9ICJzdGVwIG92ZXIiOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogVGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSBzdXNwZW5zaW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfU1VTUEVORCA9ICJzdXNwZW5kIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgcmVzdW1lLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfUkVTVU1FID0gInJlc3VtZSI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgdXNlZCB0byByZXF1ZXN0IHRoZSBzdGFjay4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUX1NUQUNLID0gInN0YWNrIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHJlcXVlc3QgYSB2YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUX1ZBUklBQkxFID0gInZhciI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgdXNlZCB0byByZXF1ZXN0IGEgdmFyaWFibGUgdmFsdWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9WQUxVRSA9ICJ2YWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IHN0ZXAgcmV0dXJuLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfU1RFUF9SRVRVUk4gPSAic3RlcCByZXR1cm4iOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0RlYnVnUnVubmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0RlYnVnUnVubmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZThhMjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9EZWJ1Z1J1bm5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpb24pIC0gRmluZEJ1Z3MgY2xlYW51cAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5VUklSZXNvbHZlcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnNheC5TQVhTb3VyY2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5QaXBlbGluZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuVHJhbnNmb3JtYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbC5KQVhQU0FYUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIGVudHJ5IHBvaW50IHRvIHRoZSBkZWJ1ZyBwcm9jZXNzIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBhCi0gKiBkZWJ1Z2dlciBhbmQgdGhlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEVjbGlwc2UgcHJvY2VzcyB2aWEgc29ja2V0cyB1c2luZyBhCi0gKiBjb21tb24gc2V0IG9mIGNvbW1hbmRzLgotICogCi0gKiA8dWw+Ci0gKiA8bGk+aW5zdGFudGlhdGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPklYU0xEZWJ1Z2dlcjwvY29kZT4KLSAqIDxsaT5jb25maWd1cmVzIHRoZSBkZWJ1Z2dlciB3aXRoIHRoZSB0cmFuc2Zvcm1hdGlvbiBwaXBlbGluZQotICogPGxpPnN0YXJ0cyB0aGUgZGVidWdnZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQKLSAqIDxsaT50aGUgbWFpbiB0aHJlYWQgaXMgdGhlbiB1c2VkIHRvIGxpc3RlbiB0byBpbmNvbWluZyByZXF1ZXN0cyBhbmQgY2FsbCB0aGUKLSAqIGFwcHJvcHJpYXRlIGRlYnVnZ2VyIG1ldGhvZHMKLSAqIDwvdWw+Ci0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIERlYnVnUnVubmVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coRGVidWdSdW5uZXIuY2xhc3MpOwotCi0JcHJpdmF0ZSBmaW5hbCBCdWZmZXJlZFJlYWRlciByZXF1ZXN0SW47Ci0JcHJpdmF0ZSBmaW5hbCBXcml0ZXIgcmVxdWVzdE91dDsKLQlwcml2YXRlIGZpbmFsIFdyaXRlciBldmVudE91dDsKLQlwcml2YXRlIGZpbmFsIFdyaXRlciBnZW5lcmF0ZWRTdHJlYW07Ci0JcHJpdmF0ZSBTb2NrZXQgZXZlbnRTb2NrZXQ7Ci0JcHJpdmF0ZSBTb2NrZXQgcmVxdWVzdFNvY2tldDsKLQlwcml2YXRlIFNvY2tldCBnZW5lcmF0ZVNvY2tldDsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHVzaW5nIHRoZSBzdXBwbGllZCByZWFkZXJzIGFuZCB3cml0ZXJzLgotCSAqIAotCSAqIEBwYXJhbSByZXF1ZXN0SW4KLQkgKiAgICAgICAgICAgIHRoZSByZWFkZXIgZm9yIHJlYWRpbmcgaW5jb21pbmcgcmVxdWVzdHMKLQkgKiBAcGFyYW0gcmVxdWVzdE91dAotCSAqICAgICAgICAgICAgdGhlIHdyaXRlciBmb3IgYWNrbm93bGVkZ2luZyByZXF1ZXN0cwotCSAqIEBwYXJhbSBldmVudE91dAotCSAqICAgICAgICAgICAgdGhlIHdyaXRlciBmb3IgcHVibGlzaGluZyBkZWJ1ZyBldmVudHMKLQkgKi8KLQlwdWJsaWMgRGVidWdSdW5uZXIoQnVmZmVyZWRSZWFkZXIgcmVxdWVzdEluLCBQcmludFdyaXRlciByZXF1ZXN0T3V0LAotCQkJUHJpbnRXcml0ZXIgZXZlbnRPdXQsIFByaW50V3JpdGVyIGdlbmVyYXRlZFN0cmVhbSkgewotCQl0aGlzLnJlcXVlc3RPdXQgPSByZXF1ZXN0T3V0OwotCQl0aGlzLnJlcXVlc3RJbiA9IHJlcXVlc3RJbjsKLQkJdGhpcy5ldmVudE91dCA9IGV2ZW50T3V0OwotCQl0aGlzLmdlbmVyYXRlZFN0cmVhbSA9IGdlbmVyYXRlZFN0cmVhbTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBnaXZlbiBhIHJlcXVlc3QgcG9ydCBhbmQgYW4gZXZlbnQgcG9ydC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVxdWVzdFBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBwb3J0IHRvIGxpc3RlbiB0byByZXF1ZXN0cyBhbmQgc2VuZCBhY2tub3dsZWRnZW1lbnRzCi0JICogQHBhcmFtIGV2ZW50UG9ydAotCSAqICAgICAgICAgICAgdGhlIHBvcnQgZm9yIHB1Ymxpc2hpbmcgZGVidWcgZXZlbnRzCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gb3BlbmluZyBhIHNvY2tldAotCSAqLwotCXB1YmxpYyBEZWJ1Z1J1bm5lcihpbnQgcmVxdWVzdFBvcnQsIGludCBldmVudFBvcnQsIGludCBnZW5lcmF0ZVBvcnQpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXF1ZXN0U29ja2V0ID0gZ2V0U29ja2V0KHJlcXVlc3RQb3J0KTsKLQkJZXZlbnRTb2NrZXQgPSBnZXRTb2NrZXQoZXZlbnRQb3J0KTsKLQkJZ2VuZXJhdGVTb2NrZXQgPSBnZXRTb2NrZXQoZ2VuZXJhdGVQb3J0KTsKLQkJcmVxdWVzdEluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihyZXF1ZXN0U29ja2V0Ci0JCQkJLmdldElucHV0U3RyZWFtKCkpKTsKLQkJcmVxdWVzdE91dCA9IG5ldyBQcmludFdyaXRlcihyZXF1ZXN0U29ja2V0LmdldE91dHB1dFN0cmVhbSgpLCB0cnVlKTsKLQkJZXZlbnRPdXQgPSBuZXcgUHJpbnRXcml0ZXIoZXZlbnRTb2NrZXQuZ2V0T3V0cHV0U3RyZWFtKCksIHRydWUpOwotCQlnZW5lcmF0ZWRTdHJlYW0gPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IFByaW50V3JpdGVyKGdlbmVyYXRlU29ja2V0Ci0JCQkJLmdldE91dHB1dFN0cmVhbSgpLCB0cnVlKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2Qgc3RhcnRzIHRoZSBnaXZlbiBkZWJ1Z2dlciBpbiBpdHMgb3duIHRocmVhZCwgYW5kIGJsb2NrcyB3aGlsZQotCSAqIHdhaXRpbmcgZm9yIGluY29taW5nIHJlcXVlc3RzIGZyb20gdGhlIHJlcXVlc3QgcG9ydCwgdW50aWwgdGhlcmUgYXJlIG5vCi0JICogbW9yZSByZXF1ZXN0cy4KLQkgKiAKLQkgKiBAcGFyYW0gZGVidWdnZXIKLQkgKiAgICAgICAgICAgIHRoZSBkZWJ1Z2dlciB0byBzdGFydCBpbiBhIHRocmVhZAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtYXRpb25FeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBpZiBhIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdHJhbnNmb3JtaW5nCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGxvb3AoSVhTTERlYnVnZ2VyIGRlYnVnZ2VyKSB0aHJvd3MgVHJhbnNmb3JtYXRpb25FeGNlcHRpb24sCi0JCQlJT0V4Y2VwdGlvbiB7Ci0JCWRlYnVnZ2VyLnNldEV2ZW50V3JpdGVyKGV2ZW50T3V0KTsKLQkJZGVidWdnZXIuc2V0R2VuZXJhdGVkV3JpdGVyKGdlbmVyYXRlZFN0cmVhbSk7Ci0JCVN0cmluZyBpbnB1dExpbmUsIHJlc3BvbnNlOwotCQkvLyBzaWduYWwgd2UgYXJlIHJlYWR5IHRvIHJlY2VpdmUgcmVxdWVzdHMKLQkJZXZlbnRPdXQud3JpdGUoInJlYWR5XG4iKTsgLy8kTk9OLU5MUy0xJAotCQlldmVudE91dC5mbHVzaCgpOwotCQlsb2cuZGVidWcoImVudGVyaW5nIGxvb3AiKTsgLy8kTk9OLU5MUy0xJAotCQl0cnkgewotCQkJd2hpbGUgKChpbnB1dExpbmUgPSByZXF1ZXN0SW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJCXJlc3BvbnNlID0gaW5wdXRMaW5lOwotCQkJCWxvZy5kZWJ1ZygiUkVRVUVTVDoiICsgaW5wdXRMaW5lKTsgLy8kTk9OLU5MUy0xJAotCQkJCVRocmVhZCBkZWJ1Z2dlclRocmVhZCA9IG51bGw7Ci0JCQkJaWYgKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RBUlQuZXF1YWxzKGlucHV0TGluZSkpIHsKLQkJCQkJZGVidWdnZXJUaHJlYWQgPSBuZXcgVGhyZWFkKGRlYnVnZ2VyLCAiZGVidWdnZXIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlkZWJ1Z2dlclRocmVhZC5zdGFydCgpOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIGVsc2UgaWYgKFJFUVVFU1RfUVVJVC5lcXVhbHMoaW5wdXRMaW5lKSkgeyB9Ci0JCQkJICovCi0JCQkJZWxzZSBpZiAoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEVQX0lOVE8uZXF1YWxzKGlucHV0TGluZSkpIHsKLQkJCQkJZGVidWdnZXIuc3RlcEludG8oKTsKLQkJCQl9IGVsc2UgaWYgKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RFUF9PVkVSLmVxdWFscyhpbnB1dExpbmUpKSB7Ci0JCQkJCWRlYnVnZ2VyLnN0ZXBPdmVyKCk7Ci0JCQkJfSBlbHNlIGlmIChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NURVBfUkVUVVJOLmVxdWFscyhpbnB1dExpbmUpKSB7Ci0JCQkJCWRlYnVnZ2VyLnN0ZXBSZXR1cm4oKTsKLQkJCQl9IGVsc2UgaWYgKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1VTUEVORC5lcXVhbHMoaW5wdXRMaW5lKSkgewotCQkJCQlkZWJ1Z2dlci5zdXNwZW5kKCk7Ci0JCQkJfSBlbHNlIGlmIChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1JFU1VNRS5lcXVhbHMoaW5wdXRMaW5lKSkgewotCQkJCQlkZWJ1Z2dlci5yZXN1bWUoKTsKLQkJCQl9IGVsc2UgaWYgKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RBQ0suZXF1YWxzKGlucHV0TGluZSkpIHsKLQkJCQkJcmVzcG9uc2UgPSBkZWJ1Z2dlci5zdGFjaygpOwotCQkJCX0gZWxzZSBpZiAoaW5wdXRMaW5lCi0JCQkJCQkuc3RhcnRzV2l0aChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1ZBUklBQkxFKSkgewotCQkJCQlTdHJpbmcgZGF0YSA9IGlucHV0TGluZQotCQkJCQkJCS5zdWJzdHJpbmcoRGVidWdDb25zdGFudHMuUkVRVUVTVF9WQVJJQUJMRS5sZW5ndGgoKSArIDEpOwotCQkJCQlpbnQgaWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRhdGEpOwotCQkJCQlWYXJpYWJsZSB2YXIgPSBkZWJ1Z2dlci5nZXRWYXJpYWJsZShpZCk7Ci0JCQkJCWxvZy5kZWJ1ZygidmFyICIgKyBpZCArICIgPSAiICsgdmFyKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJCXJlc3BvbnNlID0gdmFyLmdldFNjb3BlKCkgKyAiJiIgKyB2YXIuZ2V0TmFtZSgpOyAvLyROT04tTkxTLTEkCi0JCQkJfSBlbHNlIGlmIChpbnB1dExpbmUuc3RhcnRzV2l0aChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1ZBTFVFKSkgewotCQkJCQlTdHJpbmcgZGF0YSA9IGlucHV0TGluZQotCQkJCQkJCS5zdWJzdHJpbmcoRGVidWdDb25zdGFudHMuUkVRVUVTVF9WQUxVRS5sZW5ndGgoKSArIDEpOwotCQkJCQlpbnQgaWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRhdGEpOwotCQkJCQlWYXJpYWJsZSB2YXIgPSBkZWJ1Z2dlci5nZXRWYXJpYWJsZShpZCk7Ci0JCQkJCXJlc3BvbnNlID0gdmFyLmdldFR5cGUoKSArICImIiArIHZhci5nZXRWYWx1ZUZpcnN0TGluZSgpOyAvLyROT04tTkxTLTEkCi0JCQkJfSBlbHNlIGlmIChpbnB1dExpbmUKLQkJCQkJCS5zdGFydHNXaXRoKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfQUREX0JSRUFLUE9JTlQpKSB7Ci0JCQkJCWludCBpbmRleCA9IGlucHV0TGluZS5sYXN0SW5kZXhPZignICcpOwotCQkJCQlTdHJpbmcgZmlsZSA9IGlucHV0TGluZS5zdWJzdHJpbmcoCi0JCQkJCQkJRGVidWdDb25zdGFudHMuUkVRVUVTVF9BRERfQlJFQUtQT0lOVC5sZW5ndGgoKSArIDEsCi0JCQkJCQkJaW5kZXgpOwotCQkJCQlTdHJpbmcgbGluZSA9IGlucHV0TGluZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkJCQkJQnJlYWtQb2ludCBicmVha3BvaW50ID0gbmV3IEJyZWFrUG9pbnQoZmlsZSwgSW50ZWdlcgotCQkJCQkJCS5wYXJzZUludChsaW5lKSk7Ci0JCQkJCWRlYnVnZ2VyLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0JCQkJfSBlbHNlIGlmIChpbnB1dExpbmUKLQkJCQkJCS5zdGFydHNXaXRoKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQpKSB7Ci0JCQkJCWludCBpbmRleCA9IGlucHV0TGluZS5sYXN0SW5kZXhPZignICcpOwotCQkJCQlTdHJpbmcgZmlsZSA9IGlucHV0TGluZQotCQkJCQkJCS5zdWJzdHJpbmcoRGVidWdDb25zdGFudHMuUkVRVUVTVF9SRU1PVkVfQlJFQUtQT0lOVAotCQkJCQkJCQkJLmxlbmd0aCgpICsgMSwgaW5kZXgpOwotCQkJCQlTdHJpbmcgbGluZSA9IGlucHV0TGluZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQkJCQkJQnJlYWtQb2ludCBicmVha3BvaW50ID0gbmV3IEJyZWFrUG9pbnQoZmlsZSwgSW50ZWdlcgotCQkJCQkJCS5wYXJzZUludChsaW5lKSk7Ci0JCQkJCWRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmVzcG9uc2UgPSAiV2hhdD8iOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJCS8vIGNvbmZpcm0gcmVxdWVzdAotCQkJCWxvZy5kZWJ1ZygiUkVTUE9OU0U6IiArIHJlc3BvbnNlKTsgLy8kTk9OLU5MUy0xJAotCQkJCXJlcXVlc3RPdXQud3JpdGUocmVzcG9uc2UgKyAiXG4iKTsgLy8kTk9OLU5MUy0xJAotCQkJCXJlcXVlc3RPdXQuZmx1c2goKTsKLQotCQkJCS8qCi0JCQkJICogaWYgKFJFUVVFU1RfUVVJVC5lcXVhbHMoaW5wdXRMaW5lKSkgewotCQkJCSAqIHdhaXRGb3JGaW5pc2goZGVidWdnZXJUaHJlYWQpOyBicmVhazsgfQotCQkJCSAqLwotCQkJfQotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgVHJhbnNmb3JtYXRpb25FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotCQl9Ci0JCWxvZy5kZWJ1ZygiZXhpdGVkIGxvb3AiKTsgLy8kTk9OLU5MUy0xJAotCQlldmVudE91dC53cml0ZSgidGVybWluYXRlZFxuIik7IC8vJE5PTi1OTFMtMSQKLQkJZXZlbnRPdXQuZmx1c2goKTsKLQl9Ci0KLQkvKioKLQkgKiBEaXNwb3NlIG9mIHRoaXMgLSBjbG9zZSBhbGwgb3BlbiBzb2NrZXRzLgotCSAqIAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHJlcXVlc3RJbiAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCXJlcXVlc3RJbi5jbG9zZSgpOwotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWxvZy5lcnJvcigiQ291bGQgbm90IGNsb3NlIHJlcXVlc3QgaW5wdXQgc3RyZWFtIiwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCQlpZiAocmVxdWVzdE91dCAhPSBudWxsKSB7Ci0JCQlyZXF1ZXN0T3V0LmNsb3NlKCk7Ci0JCX0KLQkJaWYgKGV2ZW50T3V0ICE9IG51bGwpIHsKLQkJCWV2ZW50T3V0LmNsb3NlKCk7Ci0JCX0KLQkJaWYgKHJlcXVlc3RTb2NrZXQgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlyZXF1ZXN0U29ja2V0LmNsb3NlKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJbG9nLmVycm9yKCJDb3VsZCBub3QgY2xvc2UgcmVxdWVzdCBzb2NrZXQiLCBlKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JCWlmIChldmVudFNvY2tldCAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWV2ZW50U29ja2V0LmNsb3NlKCk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJbG9nLmVycm9yKCJDb3VsZCBub3QgY2xvc2UgZXZlbnQgc29ja2V0IiwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIFNvY2tldCBnZXRTb2NrZXQoaW50IHBvcnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUluZXRBZGRyZXNzIGxvY2FsaG9zdCA9IEluZXRBZGRyZXNzLmdldEJ5TmFtZSgibG9jYWxob3N0Iik7IC8vJE5PTi1OTFMtMSQKLQkJU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQocG9ydCwgNSwgbG9jYWxob3N0KTsKLQkJU29ja2V0IGNsaWVudFNvY2tldCA9IHNlcnZlclNvY2tldC5hY2NlcHQoKTsKLQkJc2VydmVyU29ja2V0LmNsb3NlKCk7Ci0JCXJldHVybiBjbGllbnRTb2NrZXQ7Ci0JfQotCi0JLyoqCi0JICogRXhwZWN0ZWQgYXJndW1lbnRzOgotCSAqIAotCSAqIDxvbD4KLQkgKiA8bGk+dGhlIGNsYXNzIG5hbWUgb2YgdGhlIGludm9rZXIKLQkgKiA8bGk+dGhlIGZpbGUgbmFtZSBvZiB0aGUgWE1MIGxhdW5jaCBjb25maWd1cmF0aW9uIGZpbGUKLQkgKiA8bGk+dGhlIFVSTCBvZiB0aGUgc291cmNlIGRvY3VtZW50Ci0JICogPGxpPnRoZSBmaWxlIG9mIHRoZSBvdXRwdXQgZG9jdW1lbnQKLQkgKiA8bGk+bm90IHVzZWQgKGFueXRoaW5nKQotCSAqIDxsaT50aGUgY2xhc3MgbmFtZSBvZiB0aGUgPGNvZGU+SVhTTERlYnVnZ2VyPC9jb2RlPiBpbnN0YW5jZQotCSAqIDxsaT50aGUgcG9ydCB1c2VkIGZvciByZXF1ZXN0cwotCSAqIDxsaT50aGUgcG9ydCB1c2VkIGZvciBkZWJ1ZyBldmVudHMKLQkgKiA8bGk+dGhlIHBvcnQgdXNlZCBmb3IgZ2VuZXJhdGUgZXZlbnRzCi0JICogPC9vbD4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAKLQkgKiBAdGhyb3dzIFNBWEV4Y2VwdGlvbiAKLQkgKiBAdGhyb3dzIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gCi0JICogQHRocm93cyBJbnN0YW50aWF0aW9uRXhjZXB0aW9uIAotCSAqIEB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgU0FYRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIHsKLQkJbG9nLmluZm8oImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5PSIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5IikpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQlsb2cuaW5mbygiamF2YS5lbmRvcnNlZC5kaXJzPSIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuZW5kb3JzZWQuZGlycyIpKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQotCQlTdHJpbmcgaW52b2tlckNsYXNzTmFtZSA9IGFyZ3NbMF07Ci0JCUZpbGUgbGF1bmNoRmlsZSA9IG5ldyBGaWxlKGFyZ3NbMV0pOwotCQlTdHJpbmcgc3JjID0gYXJnc1syXTsKLQkJU3RyaW5nIHRhcmdldCA9IGFyZ3NbM107Ci0JCVN0cmluZyBkZWJ1Z2dlckNsYXNzTmFtZSA9IGFyZ3NbNV07Ci0KLQkJbG9nLmluZm8oInNyYzogIiArIHNyYyk7IC8vJE5PTi1OTFMtMSQKLQkJbG9nLmluZm8oInRhcmdldDogIiArIHRhcmdldCk7IC8vJE5PTi1OTFMtMSQKLQkJbG9nLmluZm8oImxhdW5jaEZpbGU6ICIgKyBsYXVuY2hGaWxlKTsgLy8kTk9OLU5MUy0xJAotCQlsb2cuaW5mbygiZGVidWdnZXI6ICIgKyBkZWJ1Z2dlckNsYXNzTmFtZSk7IC8vJE5PTi1OTFMtMSQKLQotCQlEZWJ1Z1J1bm5lciBkZWJ1Z1J1bm5lciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlmaW5hbCBJWFNMRGVidWdnZXIgZGVidWdnZXIgPSBjcmVhdGVEZWJ1Z2dlcihkZWJ1Z2dlckNsYXNzTmFtZSk7Ci0JCQkvLyBjcmVhdGUgdGhlIGludm9rZXIKLQkJCUlQcm9jZXNzb3JJbnZva2VyIGludm9rZXIgPSBuZXcgSkFYUFNBWFByb2Nlc3Nvckludm9rZXIoKSB7Ci0KLQkJCQlAT3ZlcnJpZGUKLQkJCQlwcm90ZWN0ZWQgVHJhbnNmb3JtZXJGYWN0b3J5IGNyZWF0ZVRyYW5zZm9ybWVyRmFjdG9yeSgpIHsKLQkJCQkJVHJhbnNmb3JtZXJGYWN0b3J5IHRGYWN0b3J5ID0gc3VwZXIKLQkJCQkJCQkuY3JlYXRlVHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci0JCQkJCWRlYnVnZ2VyLnNldFRyYW5zZm9ybWVyRmFjdG9yeSh0RmFjdG9yeSk7Ci0JCQkJCXJldHVybiB0RmFjdG9yeTsKLQkJCQl9Ci0KLQkJCQlAT3ZlcnJpZGUKLQkJCQlwdWJsaWMgdm9pZCBhZGRTdHlsZXNoZWV0KFVSTCBzdHlsZXNoZWV0LCBNYXAgcGFyYW1ldGVycywKLQkJCQkJCVByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcywgVVJJUmVzb2x2ZXIgcmVzb2x2ZXIpCi0JCQkJCQl0aHJvd3MgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkJCQkJSW5wdXRTb3VyY2UgaW5wdXRzb3VyY2UgPSBuZXcgSW5wdXRTb3VyY2Uoc3R5bGVzaGVldAotCQkJCQkJCS50b1N0cmluZygpKTsKLQkJCQkJLy8gaWYgcmVxdWlyZWQgaW4gZnV0dXJlLCBwYXJzZSB0aGUgZG9jdW1lbnQgd2l0aCBsaW5lCi0JCQkJCS8vIG51bWJlcnMgKHRvIGdldCB0aGUgZW5kIGxpbmUgbnVtYmVycykKLQkJCQkJLy8gWE1MUmVhZGVyV3JhcHBlciByZWFkZXIgPSBuZXcKLQkJCQkJLy8gWE1MUmVhZGVyV3JhcHBlcihjcmVhdGVSZWFkZXIoKSk7Ci0JCQkJCS8vIFNBWFNvdXJjZSBzb3VyY2UgPSBuZXcgU0FYU291cmNlKHJlYWRlcixpbnB1dHNvdXJjZSk7Ci0JCQkJCWFkZFN0eWxlc2hlZXQobmV3IFNBWFNvdXJjZShpbnB1dHNvdXJjZSksIHJlc29sdmVyLAotCQkJCQkJCXBhcmFtZXRlcnMsIG91dHB1dFByb3BlcnRpZXMpOwotCQkJCX0KLQotCQkJCUBPdmVycmlkZQotCQkJCXByb3RlY3RlZCBUcmFuc2Zvcm1lciBhZGRTdHlsZXNoZWV0KFNvdXJjZSBzb3VyY2UsCi0JCQkJCQlVUklSZXNvbHZlciByZXNvbHZlciwgTWFwIHBhcmFtZXRlcnMsCi0JCQkJCQlQcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMpCi0JCQkJCQl0aHJvd3MgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkJCQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBzdXBlci5hZGRTdHlsZXNoZWV0KHNvdXJjZSwKLQkJCQkJCQlyZXNvbHZlciwgcGFyYW1ldGVycywgb3V0cHV0UHJvcGVydGllcyk7Ci0JCQkJCWRlYnVnZ2VyLmFkZFRyYW5zZm9ybWVyKHRyYW5zZm9ybWVyKTsKLQkJCQkJcmV0dXJuIHRyYW5zZm9ybWVyOwotCQkJCX0KLQkJCX07Ci0KLQkJCWlmIChhcmdzLmxlbmd0aCA9PSA5KSB7Ci0JCQkJaW50IHJlcXVlc3RQb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzZdKTsKLQkJCQlpbnQgZXZlbnRQb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzddKTsKLQkJCQlpbnQgZ2VuZXJhdGVQb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzhdKTsKLQotCQkJCWxvZy5kZWJ1ZygicmVxdWVzdFBvcnQ6ICIgKyByZXF1ZXN0UG9ydCk7IC8vJE5PTi1OTFMtMSQKLQkJCQlsb2cuZGVidWcoImV2ZW50UG9ydDogIiArIGV2ZW50UG9ydCk7IC8vJE5PTi1OTFMtMSQKLQkJCQlsb2cuZGVidWcoImdlbmVyYXRlUG9ydDogIiArIGdlbmVyYXRlUG9ydCk7IC8vJE5PTi1OTFMtMSQKLQotCQkJCXRyeSB7Ci0JCQkJCWRlYnVnUnVubmVyID0gbmV3IERlYnVnUnVubmVyKHJlcXVlc3RQb3J0LCBldmVudFBvcnQsCi0JCQkJCQkJZ2VuZXJhdGVQb3J0KTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQloYW5kbGVGYXRhbEVycm9yKAotCQkJCQkJCSJDb3VsZCBub3QgaW5zdGFudGlhdGUgaW52b2tlcjogIiArIGludm9rZXJDbGFzc05hbWUsIGUpOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCi0JCQkJCQlTeXN0ZW0uaW4pKTsKLQkJCQlkZWJ1Z1J1bm5lciA9IG5ldyBEZWJ1Z1J1bm5lcihiciwgbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpLAotCQkJCQkJbmV3IFByaW50V3JpdGVyKFN5c3RlbS5lcnIpLCBudWxsKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInhzbD4iKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlQaXBlbGluZURlZmluaXRpb24gcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmVEZWZpbml0aW9uKGxhdW5jaEZpbGUpOwotCQkJcGlwZWxpbmUuY29uZmlndXJlKGludm9rZXIpOwotCi0JCQlkZWJ1Z2dlci5zZXRJbnZva2VyKGludm9rZXIpOwotCQkJZGVidWdnZXIuc2V0U291cmNlKG5ldyBVUkwoc3JjKSk7Ci0JCQlkZWJ1Z2dlci5zZXRUYXJnZXQobmV3IEZpbGVXcml0ZXIobmV3IEZpbGUodGFyZ2V0KSkpOwotCi0JCQlkZWJ1Z1J1bm5lci5sb29wKGRlYnVnZ2VyKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJaGFuZGxlRmF0YWxFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0gY2F0Y2ggKFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWhhbmRsZUZhdGFsRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOwotCQl9IGNhdGNoIChDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWhhbmRsZUZhdGFsRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOwotCQl9Ci0JCQotCQlmaW5hbGx5IHsKLQkJCWlmIChkZWJ1Z1J1bm5lciAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJZGVidWdSdW5uZXIuZGlzcG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJaGFuZGxlRmF0YWxFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVhTTERlYnVnZ2VyIGNyZWF0ZURlYnVnZ2VyKFN0cmluZyBjbGFzc25hbWUpCi0JCQl0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiwKLQkJCUlsbGVnYWxBY2Nlc3NFeGNlcHRpb24gewotCQlDbGFzcyBjbGF6eiA9IENsYXNzLmZvck5hbWUoY2xhc3NuYW1lKTsKLQkJcmV0dXJuIChJWFNMRGVidWdnZXIpIGNsYXp6Lm5ld0luc3RhbmNlKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBoYW5kbGVGYXRhbEVycm9yKFN0cmluZyBtc2csIFRocm93YWJsZSB0KSB7Ci0JCWxvZy5mYXRhbChtc2csIHQpOwotCQlTeXN0ZW0uZXhpdCgxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0lYU0xEZWJ1Z2dlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9JWFNMRGVidWdnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmMGIwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0lYU0xEZWJ1Z2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlcjsKLQotLyoqCi0gKiBBbiBpbnRlcmZhY2UgdG8gWFNMIGRlYnVnZ2VyIGluc3RhbmNlcy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElYU0xEZWJ1Z2dlciBleHRlbmRzIFJ1bm5hYmxlCi17Ci0JLyoqCi0JICogU2V0IHRoZSBpbnZva2VyIHRvIHVzZS4KLQkgKiAKLQkgKiBAcGFyYW0gaW52b2tlciB0aGUgaW52b2tlciB0byBzZXQKLQkgKi8KLQl2b2lkIHNldEludm9rZXIoSVByb2Nlc3Nvckludm9rZXIgaW52b2tlcik7Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHRyYW5zZm9ybWVyIGZhY3RvcnkgdG8gdXNlLgotCSAqIAotCSAqIEBwYXJhbSBmYWN0b3J5IHRoZSBmYWN0b3J5IHRvIHVzZQotCSAqLwotCXZvaWQgc2V0VHJhbnNmb3JtZXJGYWN0b3J5KFRyYW5zZm9ybWVyRmFjdG9yeSBmYWN0b3J5KTsKLQotCS8qKgotCSAqIEFkZCBhIHRyYW5zZm9ybWVyIHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHRyYW5zZm9ybWVyCi0JICovCi0Jdm9pZCBhZGRUcmFuc2Zvcm1lcihUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcik7Ci0KLQkvKioKLQkgKiBTZXQgdGhlIFdyaXRlciBmb3IgdGhpcyB0byB3cml0ZSBldmVudHMgdG8uCi0JICogCi0JICogQHBhcmFtIHdyaXRlciB0aGUgd3JpdGVyIHRvIHdyaXRlIGV2ZW50cyB0bwotCSAqLwotCXZvaWQgc2V0RXZlbnRXcml0ZXIoV3JpdGVyIHdyaXRlcik7Ci0KLQkvKioKLQkgKiBTZXQgdGhlIE9iamVjdE91dHB1dFN0cmVhbSBmb3IgdGhpcyB0byB3cml0ZSBnZW5lcmF0ZWQgZXZlbnRzIHRvLgotCSAqIAotCSAqIEBwYXJhbSB3cml0ZXIgdGhlIHN0cmVhbSB0byB3cml0ZSBnZW5lcmF0ZSBldmVudHMgdG8KLQkgKi8KLQl2b2lkIHNldEdlbmVyYXRlZFdyaXRlcihXcml0ZXIgd3JpdGVyKTsKLQotCS8qKgotCSAqIFNldCB0aGUgVVJMIG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBzb3VyY2UgZmlsZS4KLQkgKiAKLQkgKiBAcGFyYW0gc291cmNlVVJMIHRoZSBzb3VyY2UgVVJMCi0JICovCi0Jdm9pZCBzZXRTb3VyY2UoVVJMIHNvdXJjZVVSTCk7Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHRyYW5zZm9ybWF0aW9uIFJlc3VsdC4KLQkgKiAKLQkgKiBAcGFyYW0gd3JpdGVyIHRoZSByZXN1bHQKLQkgKi8KLQl2b2lkIHNldFRhcmdldChXcml0ZXIgd3JpdGVyKTsKLQotCS8qKgotCSAqIEFkZCBhIGJyZWFrcG9pbnQgdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gYnJlYWtwb2ludAotCSAqLwotCXZvaWQgYWRkQnJlYWtwb2ludChCcmVha1BvaW50IGJyZWFrcG9pbnQpOwotCi0JLyoqCi0JICogUmVtb3ZlIGEgYnJlYWtwb2ludCBmcm9tIHRoaXMuCi0JICogCi0JICogQHBhcmFtIGJyZWFrcG9pbnQKLQkgKi8KLQl2b2lkIHJlbW92ZUJyZWFrcG9pbnQoQnJlYWtQb2ludCBicmVha3BvaW50KTsKLQotCS8qKgotCSAqIFBlcmZvcm0gYSAnc3RlcCBpbnRvJyBvcGVyYXRpb24uCi0JICovCi0Jdm9pZCBzdGVwSW50bygpOwotCi0JLyoqCi0JICogUGVyZm9ybSBhICdzdGVwIG92ZXInIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lkIHN0ZXBPdmVyKCk7Ci0KLQkvKioKLQkgKiBQZXJmb3JtIGEgJ3N0ZXAgcmV0dXJuJyBvcGVyYXRpb24uCi0JICovCi0Jdm9pZCBzdGVwUmV0dXJuKCk7Ci0KLQkvKioKLQkgKiBQZXJmb3JtIGEgJ3N1c3BlbmQnIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lkIHN1c3BlbmQoKTsKLQotCS8qKgotCSAqIFBlcmZvcm0gYSAncmVzdW1lJyBvcGVyYXRpb24uCi0JICovCi0Jdm9pZCByZXN1bWUoKTsKLQotCS8qKgotCSAqIFF1aXQgZGVidWdnaW5nLgotCSAqLwotCXZvaWQgcXVpdCgpOwotCi0JLyoqCi0JICogR2VuZXJhdGUgYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgb2YgZnJhbWVzIGFuZCB0aGVpciB2YXJpYWJsZXMuCi0JICogPHA+Ci0JICogRnJhbWVzIGFyZSBnZW5lcmF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDogPGk+ZmlsZTwvaT58PGk+ZnJhbWVJZDwvaT58PGk+bGluZU51bWJlcjwvaT58PGk+bmFtZTwvaT4KLQkgKiBUaGlzIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIHdpdGggdGhlIGlkJ3Mgb2YgdGhlIGZyYW1lJ3MgdmFyaWFibGVzIChlYWNoIHZhcmlhYmxlIGlkIGJlaW5nIHVuaXF1ZSBmb3IgdGhlIHdob2xlIHByb2Nlc3MpLgotCSAqIDwvcD4KLQkgKiA8cD4KLQkgKiBUaGUgc2VwYXJhdG9yIGZvciBmcmFtZXMgaXMgJCQkLiBXaXRoaW4gYSBmcmFtZSwgdGhlIHNlcGFyYXRvciBmb3IgdmFyaWFibGUgaWQncyBpcyB8LgotCSAqIDwvcD4KLQkgKiA8cD4KLQkgKiBlLmcuIGZpbGU6L3RyYW4xLnhzbHwxfDEyfHhzbDp0ZW1wbGF0ZSBuYW1lPSJ0ZW1wMSJ8MXwyfDMkJCRmaWxlOi90cmFuMi54c2x8MnwzNHx4c2w6dGVtcGxhdGUgbmFtZT0idGVtcDIifDR8NXw2Ci0JICogCi0JICogVGhpcyBkZWZpbmVzIDIgZnJhbWVzIHdpdGggaWQncyAxIGFuZCAyLCB3aGljaCBhcmUgb2NjdXIgaW4gZmlsZXMgdHJhbjEueHNsIGFuZCB0cmFuMi54c2wgcmVzcGVjdGl2ZWx5LgotCSAqIEZyYW1lIDEgaXMgY3VycmVudGx5IGF0IGxpbmUgMTIsIGluIGEgdGVtcGxhdGUgd2l0aCBuYW1lIHRlbXAxLCBhbmQgaXQgZGVmaW5lcyAzIHZhcmlhYmxlcyB3aXRoIGlkJ3MgMSwgMiBhbmQgMy4gCi0JICogPC9wPgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGdlbmVyYXRlZCBzdHJpbmcKLQkgKi8KLQlTdHJpbmcgc3RhY2soKTsKLQotCS8qKgotCSAqIEdldCB0aGUgdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4gaWQuCi0JICogCi0JICogQHBhcmFtIGlkIHRoZSBpZCBvZiB0aGUgdmFyaWFibGUKLQkgKiBAcmV0dXJuIHRoZSB2YXJpYWJsZQotCSAqLwotCVZhcmlhYmxlIGdldFZhcmlhYmxlKGludCBpZCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL1N0eWxlRnJhbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvU3R5bGVGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWFmNThiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvU3R5bGVGcmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBjbGVhbnVwIGZpbmRidWcgZXJyb3JzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQW4gPGNvZGU+eHNsOnRlbXBsYXRlPC9jb2RlPiB0aGF0IGZvcm1zIHBhcnQgb2YgdGhlIGNhbGwgc3RhY2suCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFN0eWxlRnJhbWUKLXsKLQlwcml2YXRlIHN0YXRpYyBpbnQgbmV4dElkOwotCXByaXZhdGUgZmluYWwgU3R5bGVGcmFtZSBwYXJlbnQ7Ci0JcHJpdmF0ZSBmaW5hbCBMaXN0PFN0eWxlRnJhbWU+IGNoaWxkcmVuID0gbmV3IEFycmF5TGlzdDxTdHlsZUZyYW1lPigpOwotCXByaXZhdGUgZmluYWwgaW50IGlkOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgdXNpbmcgdGhlIGdpdmVuIGZyYW1lIGFzIGl0cyBwYXJlbnQgKG1heSBiZSBudWxsIGlmIHRoaXMgaXMgdGhlIHJvb3QgZnJhbWUpLgotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBmcmFtZQotCSAqLwotCXB1YmxpYyBTdHlsZUZyYW1lKFN0eWxlRnJhbWUgcGFyZW50KQotCXsKLQkJdGhpcy5pZCA9IG5leHRJZCsrOwotCQl0aGlzLnBhcmVudCA9IHBhcmVudDsKLQkJaWYgKHBhcmVudCAhPSBudWxsKQotCQkJcGFyZW50LmFkZENoaWxkKHRoaXMpOwotCX0KLQkKLQkvKioKLQkgKiBBIHVuaXF1ZSBpZCBmb3IgdGhpcyBmcmFtZQotCSAqIAotCSAqIEByZXR1cm4gYSB1bmlxdWUgaWQgZm9yIHRoaXMgZnJhbWUKLQkgKi8KLQlwdWJsaWMgaW50IGdldElkKCkKLQl7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5hbWUgb2YgdGhpcyBmcmFtZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgZmlsZSBpbiB3aGljaCB0aGlzIGZyYW1lIGlzIGZvdW5kLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGZpbGVuYW1lIGZvciB0aGlzCi0JICovCi0JcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRGaWxlbmFtZSgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBsaW5lIG51bWJlciBhdCB3aGljaCB0aGUgZnJhbWUgaXMgY3VycmVudGx5IGxvY2F0ZWQuCi0JICogCi0JICogQHJldHVybiB0aGUgbGluZSBudW1iZXIgYXQgd2hpY2ggdGhpcyBpcyBoZWxkCi0JICovCi0JcHVibGljIGFic3RyYWN0IGludCBnZXRDdXJyZW50TGluZSgpOwotCi0JLyoqCi0JICogR2V0IGEgbGlzdCBvZiA8Y29kZT5WYXJpYWJsZXM8L2NvZGU+J3MKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHZhcmlhYmxlcyBmb3IgdGhpcyBmcmFtZQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBMaXN0PD8+IGdldFZhcmlhYmxlU3RhY2soKTsKLQotCS8qKgotCSAqIEdldCB0aGUgcGFyZW50IG9mIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgcGFyZW50IGZyYW1lCi0JICovCi0JcHVibGljIFN0eWxlRnJhbWUgZ2V0UGFyZW50KCkKLQl7Ci0JCXJldHVybiBwYXJlbnQ7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgY2hpbGQgZnJhbWUgdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gY2hpbGQgdGhlIGZyYW1lIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZENoaWxkKFN0eWxlRnJhbWUgY2hpbGQpCi0JewotCQljaGlsZHJlbi5hZGQoY2hpbGQpOwotCX0KLQotCS8qKgotCSAqIFJlbW92ZSBhIGNoaWxkIGZyYW1lIGZyb20gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gY2hpbGQgdGhlIGZyYW1lIHRvIHJlbW92ZQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZUNoaWxkKFN0eWxlRnJhbWUgY2hpbGQpCi0JewotCQljaGlsZHJlbi5yZW1vdmUoY2hpbGQpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgY2hpbGRyZW4gb2YgdGhpcwotCSAqIAotCSAqIEByZXR1cm4gYSBsaXN0IG9mIDxjb2RlPlN0eWxlRnJhbWU8L2NvZGU+J3MKLQkgKi8KLQlwdWJsaWMgTGlzdDxTdHlsZUZyYW1lPiBnZXRDaGlsZHJlbigpCi0JewotCQlyZXR1cm4gY2hpbGRyZW47Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIHN0cmluZyBpbiB0aGUgZm9ybWF0IDxpPmZpbGU8L2k+fDxpPmZyYW1lSWQ8L2k+fDxpPmxpbmVOdW1iZXI8L2k+fDxpPm5hbWU8L2k+LgotCSAqIFNpbmNlIHBpcGUgaXMgdXNlZCBhcyBhIHNlcGFyYXRvciwgdGhlIG5hbWUgaGFzIGFueSBwaXBlICh8KSBjaGFyYWN0ZXJzIHJlcGxhY2VkIHdpdGggdGhlIGxpdGVyYWwgJyVAX1BJUEVfQCUnCi0JICovCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0JewotCQlTdHJpbmcgc2FmZW5hbWUgPSBnZXROYW1lKCkucmVwbGFjZUFsbCgiXFx8IiwgIiVAX1BJUEVfQCUiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0JCXJldHVybiBnZXRGaWxlbmFtZSgpICsgInwiICsgZ2V0SWQoKSArICJ8IiArIGdldEN1cnJlbnRMaW5lKCkgKyAifCIgKyBzYWZlbmFtZTsgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJC8vJE5PTi1OTFMtMyQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL1ZhcmlhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL1ZhcmlhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YmE0NmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9WYXJpYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAxMCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyMTQyMzUgLSBDaGFuZ2VkIG1heCB2YWx1ZSBzaXplIHRvIDJtZWcuCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyOwotCi0vKioKLSAqIEFuIGFic3RyYWN0IGNsYXNzIHRoYXQgWFNMIHByb2Nlc3NvciBpbXBsZW1lbnRhdGlvbnMgY2FuIHN1YmNsYXNzIGZvciB0aGVpciB2YXJpYWJsZXMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBWYXJpYWJsZQotewotCXByaXZhdGUgc3RhdGljIGludCBpZFNlcXVlbmNlID0gMDsKLQotCS8qKgotCSAqIFRoZSBjb25zdGFudCBkZW5vdGluZyBhIGxvY2FsIHNjb3BlIHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX1NDT1BFID0gIkwiOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogVGhlIGNvbnN0YW50IGRlbm90aW5nIGEgdHVubmVsIHNjb3BlIHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRVTk5FTF9TQ09QRSA9ICJUIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCBkZW5vdGluZyBhIGdsb2JhbCBzY29wZSB2YXJpYWJsZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHTE9CQUxfU0NPUEUgPSAiRyI7IC8vJE5PTi1OTFMtMSQKLQotCXByb3RlY3RlZCBmaW5hbCBzdGF0aWMgaW50IE1BWElNVU1fVkFMVUVfU0laRSA9IDIwOTcxNTI7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBVTlJFU09MVkVEID0gInVucmVzb2x2ZWQiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9PTEVBTiA9ICJib29sZWFuIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5VTUJFUiA9ICJudW1iZXIiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HID0gInN0cmluZyI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFU0VUID0gIm5vZGVzZXQiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUID0gIm9iamVjdCI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBVTktOT1dOID0gInVua25vd24iOyAvLyROT04tTkxTLTEkCi0KLQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIG5hbWU7Ci0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBzY29wZTsKLQlwcm90ZWN0ZWQgZmluYWwgaW50IHNsb3ROdW1iZXI7Ci0KLQlwcml2YXRlIGludCBpZDsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHdpdGggdGhlIGdpdmVuIG5hbWUsIHNjb3BlIGFuZCBzbG90IG51bWJlci4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGlzCi0JICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBvZiB0aGlzCi0JICogQHBhcmFtIHNsb3ROdW1iZXIgdGhlIHNsb3QgbnVtYmVyIG9mIHRoaXMKLQkgKi8KLQlwdWJsaWMgVmFyaWFibGUoU3RyaW5nIG5hbWUsIFN0cmluZyBzY29wZSwgaW50IHNsb3ROdW1iZXIpCi0JewotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLnNjb3BlID0gc2NvcGU7Ci0JCXRoaXMuc2xvdE51bWJlciA9IHNsb3ROdW1iZXI7Ci0JCXRoaXMuaWQgPSBpZFNlcXVlbmNlKys7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBpZCB1c2VkIGZvciB0aGlzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHZhcmlhYmxlIGlkCi0JICovCi0JcHVibGljIGludCBnZXRJZCgpCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgdmFyaWFibGUgbmFtZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB2YXJpYWJsZSBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgdHlwZSBvZiB0aGlzIHZhcmlhYmxlIGUuZy4gc3RyaW5nLCBvciBub2RlCi0JICogCi0JICogQHJldHVybiB0aGUgdmFyaWFibGUgdHlwZQotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VHlwZSgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBzY29wZSBvZiB0aGlzIHZhcmlhYmxlIC0gb25lIG9mIDxjb2RlPkxPQ0FMX1NDT1BFPC9jb2RlPiwgPGNvZGU+VFVOTkVMX1NDT1BFPC9jb2RlPiBvciA8Y29kZT5HTE9CQUxfU0NPUEU8L2NvZGU+LgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHZhcmlhYmxlIHNjb3BlCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTY29wZSgpCi0JewotCQlyZXR1cm4gc2NvcGU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYXMgYSBTdHJpbmcuCi0JICogCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhpcwotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VmFsdWUoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFsdWUgdHJ1bmNhdGluZyB0byA8Y29kZT5NQVhJTVVNX1ZBTFVFX1NJWkU8L2NvZGU+IHdoZXJlIG5lY2Vzc2FyeS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YWx1ZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVGaXJzdExpbmUoKQotCXsKLQkJU3RyaW5nIHZhbHVlID0gZ2V0VmFsdWUoKTsKLQkJaWYgKHZhbHVlICE9IG51bGwpCi0JCXsKLQkJCS8vIG1ha2Ugc3VyZSBpdCBpcyBub3QgdG9vIGxvbmcKLQkJCXZhbHVlID0gdmFsdWUucmVwbGFjZSgnXG4nLCAnLicpOwotCQkJaWYgKHZhbHVlLmxlbmd0aCgpID4gTUFYSU1VTV9WQUxVRV9TSVpFKQotCQkJCXZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIE1BWElNVU1fVkFMVUVfU0laRSk7Ci0JCX0KLQkJZWxzZQotCQkJdmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBzbG90IG51bWJlciBmb3IgdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzbG90IG51bWJlcgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0U2xvdE51bWJlcigpCi0JewotCQlyZXR1cm4gc2xvdE51bWJlcjsKLQl9Ci0KLQlwdWJsaWMgaW50IGhhc2hDb2RlKCkKLQl7Ci0JCXJldHVybiAzICogc2NvcGUuaGFzaENvZGUoKSArIDUgKiBzbG90TnVtYmVyOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLQl7Ci0JCWlmIChvYmogPT0gdGhpcykKLQkJCXJldHVybiB0cnVlOwotCQlpZiAob2JqIGluc3RhbmNlb2YgVmFyaWFibGUpCi0JCXsKLQkJCVZhcmlhYmxlIHYgPSAoVmFyaWFibGUpIG9iajsKLQkJCXJldHVybiB2LnNjb3BlLmVxdWFscyhzY29wZSkgJiYgc2xvdE51bWJlciA9PSB2LnNsb3ROdW1iZXI7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL0lQcm9jZXNzb3JJbnZva2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvSVByb2Nlc3Nvckludm9rZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiNjU3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvSVByb2Nlc3Nvckludm9rZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlVSSVJlc29sdmVyOwotCi0KLS8qKgotICogSW50ZXJmYWNlIHVzZWQgYnkgdGhlIGxhdW5jaGVkIHByb2Nlc3MgdG8gZGVmaW5lIHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gcGlwZWxpbmUuCi0gKiBUaGUgPGNvZGU+c2V0QXR0cmlidXRlczwvY29kZT4gYW5kIDxjb2RlPmFkZFN0eWxlc2hlZXQ8L2NvZGU+IG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxlZAotICogYmVmb3JlIGNhbGxpbmcgPGNvZGU+dHJhbnNmb3JtPC9jb2RlPiB0byBkbyB0aGUgYWN0dWFsIHRyYW5zZm9ybWF0aW9uLgotICogCi0gKiA8cD4KLSAqIElmIDxjb2RlPmFkZFN0eWxlc2hlZXQ8L2NvZGU+IGlzIG5vdCBjYWxsZWQgYmVmb3JlIDxjb2RlPnRyYW5zZm9ybTwvY29kZT4sIHRoZW4KLSAqIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgc291cmNlIGRvY3VtZW50IGNvbnRhaW5zIGFuZCBlbWJlZGRlZCBzdHlsZXNoZWV0IGluc3RydWN0aW9uLgotICogPC9wPgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVByb2Nlc3Nvckludm9rZXIKLXsKLQkvKioKLQkgKiBTZXQgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBhdHRyaWJ1dGVzIHRvIHVzZS4KLQkgKiAKLQkgKiBAcGFyYW0gYXR0cmlidXRlcyBhIG1hcCBvZiBTdHJpbmcgdi4gU3RyaW5nIGF0dHJpYnV0ZXMKLQkgKi8KLQl2b2lkIHNldEF0dHJpYnV0ZXMoTWFwIGF0dHJpYnV0ZXMpOwotCi0JLyoqCi0JICogQWRkIGEgc3R5bGVzaGVldCB0byB0aGUgcGlwZWxpbmUgKG9yZGVyIGlzIGltcG9ydGFudCkuCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQgdGhlIFVSTCBvZiB0aGUgc3R5bGVzaGVldCB0byBhZGQKLQkgKiBAcGFyYW0gcGFyYW1ldGVycyB0aGUgbWFwIG9mIHBhcmFtZXRlcnMgZm9yIHRoZSBzdHlsZXNoZWV0Ci0JICogQHBhcmFtIG91dHB1dFByb3BlcnRpZXMgdGhlIG91dHB1dCBwcm9wZXJ0aWVzCi0JICogQHBhcmFtIHJlc29sdmVyIHRoZSA8Y29kZT5VUklSZXNvbHZlcjwvY29kZT4gdG8gdXNlCi0JICogQHRocm93cyBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgc3R5bGVzaGVldCBjb3VsZCBub3QgYmUgYWRkZWQKLQkgKi8KLQl2b2lkIGFkZFN0eWxlc2hlZXQoVVJMIHN0eWxlc2hlZXQsIE1hcCBwYXJhbWV0ZXJzLCBQcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMsIFVSSVJlc29sdmVyIHJlc29sdmVyKSB0aHJvd3MgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi0JLyoqCi0JICogUGVyZm9ybSB0aGUgYWN0dWFsIHRyYW5zZm9ybWF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBzb3VyY2UgdGhlIFVSTCBvZiB0aGUgWE1MIHNvdXJjZSBkb2N1bWVudAotCSAqIEBwYXJhbSByZXMgdGhlIHRyYW5zZm9ybWF0aW9uIHJlc3VsdAotCSAqIEB0aHJvd3MgVHJhbnNmb3JtYXRpb25FeGNlcHRpb24gaWYgdGhlIHRyYW5zZm9ybWF0aW9uIGZhaWxlZAotCSAqLwotCXZvaWQgdHJhbnNmb3JtKFVSTCBzb3VyY2UsIFJlc3VsdCByZXMpIHRocm93cyBUcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNjk0MmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlcjsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi0vKioKLSAqIE1lc3NhZ2VzIGZvciB0aGUgY29uZmlndXJhdGlvbi4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1jbGFzcyBNZXNzYWdlcwotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkKLQl7Ci0JfQotCi0JLyoqCi0JICogR2V0IGEgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGtleS4KLQkgKiAKLQkgKiBAcGFyYW0ga2V5IHRoZSBtZXNzYWdlIGtleQotCSAqIEByZXR1cm4gdGhlIG1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLQkJewotCQkJcmV0dXJuICchJyArIGtleSArICchJzsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9QaXBlbGluZURlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9QaXBlbGluZURlZmluaXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2N2Q1Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvUGlwZWxpbmVEZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChJbnRhbGlvKSAtIGJ1ZyAyMTM3NzYgLSBVUkkgUmVzb2x2ZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlcjsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5VUklSZXNvbHZlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLkNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuQ3JlYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIGRlZmluaXRpb24gb2YgdGhlIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5lLgotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGlzIGxvYWRlZCBvbiBib3RoIHRoZSBFY2xpcHNlIGNsYXNzcGF0aCBhbmQgdGhlIHRyYW5zZm9ybWF0aW9uCi0gKiBwcm9jZXNzJ3MgY2xhc3NwYXRoLiBUaGUgd2hvbGUgZGVmaW5pdGlvbiBpcyBzZXJpYWxpemVkIHRvIGFuIFhNTCBkb2N1bWVudCBieQotICogdGhlIEVjbGlwc2UgbGF1bmNoZXIsIGFuZCBpcyB0aGVuIHJlYWQgYnkgdGhlIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3Mgd2hlbgotICogbGF1bmNoZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFBpcGVsaW5lRGVmaW5pdGlvbiB7Ci0JcHJpdmF0ZSBTdHJpbmcgc291cmNlVVJMOwotCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGU7Ci0KLQlwcml2YXRlIGZpbmFsIExpc3Q8VHJhbnNmb3JtRGVmaW5pdGlvbj4gdHJhbnNmb3JtRGVmcyA9IG5ldyBBcnJheUxpc3Q8VHJhbnNmb3JtRGVmaW5pdGlvbj4oKTsKLQlwcml2YXRlIGZpbmFsIFNldDxUeXBlZFZhbHVlPiBhdHRyaWJ1dGVzID0gbmV3IEhhc2hTZXQ8VHlwZWRWYWx1ZT4oKTsKLQlwcml2YXRlIGJvb2xlYW4gdXNlRW1iZWRkZWQ7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKi8KLQlwdWJsaWMgUGlwZWxpbmVEZWZpbml0aW9uKCkgewotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGJ5IHJlYWRpbmcgdGhlIHNwZWNpZmllZCBYTUwgZmlsZS4KLQkgKiAKLQkgKiBAcGFyYW0gbGF1bmNoRmlsZQotCSAqICAgICAgICAgICAgdGhlIFhTTCBmaWxlIHRvIGxvYWQKLQkgKiBAdGhyb3dzIFNBWEV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwYXJzaW5nCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIGlmIHByb2JsZW1zIG9jY3VyIGR1cmluZyBwYXJzaW5nCi0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHBhcnNpbmcKLQkgKi8KLQlwdWJsaWMgUGlwZWxpbmVEZWZpbml0aW9uKEZpbGUgbGF1bmNoRmlsZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiwKLQkJCUlPRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkJdGhpcyhEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCkucGFyc2UoCi0JCQkJbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0obmV3IEZpbGVJbnB1dFN0cmVhbShsYXVuY2hGaWxlKSkpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQKLQkgKiAKLQkgKiBAcGFyYW0gZG9jCi0JICogICAgICAgICAgICB0aGUgRG9jdW1lbnQgdG8gY3JlYXRlIHRoaXMgZnJvbQotCSAqLwotCXB1YmxpYyBQaXBlbGluZURlZmluaXRpb24oRG9jdW1lbnQgZG9jKSB7Ci0JCUVsZW1lbnQgcm9vdEVsID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotCi0JCUVsZW1lbnQgYXR0cmlidXRlc0VsID0gKEVsZW1lbnQpIHJvb3RFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgKLQkJCQkiQXR0cmlidXRlcyIpLml0ZW0oMCk7IC8vJE5PTi1OTFMtMSQKLQkJTm9kZUxpc3QgYXR0cmlidXRlRWxzID0gYXR0cmlidXRlc0VsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUVscy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlFbGVtZW50IGF0dHJpYnV0ZUVsID0gKEVsZW1lbnQpIGF0dHJpYnV0ZUVscy5pdGVtKGkpOwotCQkJU3RyaW5nIG5hbWUgPSBhdHRyaWJ1dGVFbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHR5cGUgPSBhdHRyaWJ1dGVFbC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHZhbHVlID0gYXR0cmlidXRlRWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCi0JCQlhZGRBdHRyaWJ1dGUobmV3IFR5cGVkVmFsdWUobmFtZSwgdHlwZSwgdmFsdWUpKTsKLQkJfQotCi0JCUVsZW1lbnQgdHJhbnNmb3Jtc0VsID0gKEVsZW1lbnQpIHJvb3RFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgKLQkJCQkiVHJhbnNmb3JtcyIpLml0ZW0oMCk7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIHVzZUVtYmVkZGVkID0gdHJhbnNmb3Jtc0VsLmdldEF0dHJpYnV0ZSgidXNlRW1iZWRkZWQiKTsgLy8kTk9OLU5MUy0xJAotCQlib29sZWFuIGVtYmVkZGVkID0gQm9vbGVhbi5nZXRCb29sZWFuKHVzZUVtYmVkZGVkKTsKLQkJc2V0VXNlRW1iZWRkZWQoZW1iZWRkZWQpOwotCQlpZiAoIWVtYmVkZGVkKSB7Ci0JCQlOb2RlTGlzdCB0cmFuc2Zvcm1FbHMgPSB0cmFuc2Zvcm1zRWwKLQkJCQkJLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUcmFuc2Zvcm0iKTsgLy8kTk9OLU5MUy0xJAotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1FbHMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCUVsZW1lbnQgdHJhbnNmb3JtRWwgPSAoRWxlbWVudCkgdHJhbnNmb3JtRWxzLml0ZW0oaSk7Ci0JCQkJVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmID0gVHJhbnNmb3JtRGVmaW5pdGlvbgotCQkJCQkJLmZyb21YTUwodHJhbnNmb3JtRWwpOwotCQkJCWFkZFRyYW5zZm9ybURlZih0ZGVmKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIENvbmZpZ3VyZSB0aGUgaW52b2tlciBmcm9tIHRoaXMuCi0JICogCi0JICogQHBhcmFtIGludm9rZXIKLQkgKiAgICAgICAgICAgIHRoZSBpbnZva2VyIHRvIGNvbmZpZ3VyZQotCSAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgZHVyaW5nIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25maWd1cmUoSVByb2Nlc3Nvckludm9rZXIgaW52b2tlcikKLQkJCXRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkJTWFwPFN0cmluZywgT2JqZWN0PiBhdHRWYWxzID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpOwotCQlmb3IgKEl0ZXJhdG9yPFR5cGVkVmFsdWU+IGl0ZXIgPSBhdHRyaWJ1dGVzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJVHlwZWRWYWx1ZSBhdHQgPSBpdGVyLm5leHQoKTsKLQkJCU9iamVjdCB2YWx1ZTsKLQkJCXRyeSB7Ci0JCQkJdmFsdWUgPSBhdHQuY3JlYXRlVmFsdWUoKTsKLQkJCX0gY2F0Y2ggKENyZWF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQl0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCQl9Ci0JCQlhdHRWYWxzLnB1dChhdHQubmFtZSwgdmFsdWUpOwotCQl9Ci0JCWludm9rZXIuc2V0QXR0cmlidXRlcyhhdHRWYWxzKTsKLQotCQlmb3IgKEl0ZXJhdG9yPFRyYW5zZm9ybURlZmluaXRpb24+IGl0ZXIgPSB0cmFuc2Zvcm1EZWZzLml0ZXJhdG9yKCk7IGl0ZXIKLQkJCQkuaGFzTmV4dCgpOykgewotCQkJVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmID0gaXRlci5uZXh0KCk7Ci0JCQlNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcyA9IHNldFBhcmFtcyh0ZGVmKTsKLQkJCVVSTCB1cmwgPSBnZXRTdHlsZVNoZWV0VVJMKHRkZWYpOwotCQkJUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gdGRlZi5nZXRPdXRwdXRQcm9wZXJ0aWVzKCk7Ci0JCQlVUklSZXNvbHZlciByZXNvbHZlciA9IGdldFJlc29sdmVyKHRkZWYpOwotCQkJYWRkU3R5bGVTaGVldChpbnZva2VyLCB0ZGVmLCBwYXJhbXMsIHVybCwgcHJvcGVydGllcywgcmVzb2x2ZXIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFN0eWxlU2hlZXQoSVByb2Nlc3Nvckludm9rZXIgaW52b2tlciwKLQkJCVRyYW5zZm9ybURlZmluaXRpb24gdGRlZiwgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMsIFVSTCB1cmwsCi0JCQlQcm9wZXJ0aWVzIHByb3BlcnRpZXMsIFVSSVJlc29sdmVyIHJlc29sdmVyKQotCQkJdGhyb3dzIENvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotCQl0cnkgewotCQkJaW52b2tlci5hZGRTdHlsZXNoZWV0KHVybCwgcGFyYW1zLCBwcm9wZXJ0aWVzLCByZXNvbHZlcik7Ci0JCX0gY2F0Y2ggKFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKLQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJQaXBlbGluZURlZmluaXRpb24uMTAiKSArIHRkZWYuZ2V0U3R5bGVzaGVldFVSTCgpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHJpdmF0ZSBVUklSZXNvbHZlciBnZXRSZXNvbHZlcihUcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYpCi0JCQl0aHJvd3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7Ci0JCVVSSVJlc29sdmVyIHJlc29sdmVyID0gbnVsbDsKLQotCQlpZiAodGRlZi5nZXRSZXNvbHZlckNsYXNzKCkgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlDbGFzcyByZXNvbHZlckNsYXNzID0gQ2xhc3MuZm9yTmFtZSh0ZGVmLmdldFJlc29sdmVyQ2xhc3MoKSk7Ci0JCQkJcmVzb2x2ZXIgPSAoVVJJUmVzb2x2ZXIpIHJlc29sdmVyQ2xhc3MubmV3SW5zdGFuY2UoKTsKLQkJCX0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotCQkJCQotCQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQkJdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCi0JCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlBpcGVsaW5lRGVmaW5pdGlvbi4xMCIpICsgdGRlZi5nZXRSZXNvbHZlckNsYXNzKCksIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQkKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzb2x2ZXI7Ci0JfQotCi0JcHJpdmF0ZSBVUkwgZ2V0U3R5bGVTaGVldFVSTChUcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYpCi0JCQl0aHJvd3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkgewotCQkJdXJsID0gbmV3IFVSTCh0ZGVmLmdldFN0eWxlc2hlZXRVUkwoKSk7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbigKLQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJQaXBlbGluZURlZmluaXRpb24uOSIpICsgdGRlZi5nZXRTdHlsZXNoZWV0VVJMKCksIGUpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQlwcml2YXRlIE1hcDxTdHJpbmcsIE9iamVjdD4gc2V0UGFyYW1zKFRyYW5zZm9ybURlZmluaXRpb24gdGRlZikKLQkJCXRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkJTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbXMgPSBudWxsOwotCQl0cnkgewotCQkJcGFyYW1zID0gdGRlZi5nZXRQYXJhbWV0ZXJzQXNNYXAoKTsKLQkJfSBjYXRjaCAoQ3JlYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oTWVzc2FnZXMKLQkJCQkJLmdldFN0cmluZygiUGlwZWxpbmVEZWZpbml0aW9uLjgiKSwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gcGFyYW1zOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgZGVmaW5lZC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZXQgb2YgYXR0cmlidXRlcwotCSAqLwotCXB1YmxpYyBTZXQ8VHlwZWRWYWx1ZT4gZ2V0QXR0cmlidXRlcygpIHsKLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgYXR0cmlidXRlIHRvIHRoaXMgY29uZmlndXJhdGlvbgotCSAqIAotCSAqIEBwYXJhbSBhdHRyaWJ1dGUKLQkgKiAgICAgICAgICAgIHRoZSBhdHRyaWJ1dGUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkQXR0cmlidXRlKFR5cGVkVmFsdWUgYXR0cmlidXRlKSB7Ci0JCWF0dHJpYnV0ZXMuYWRkKGF0dHJpYnV0ZSk7Ci0JfQotCi0JLyoqCi0JICogUmVtb3ZlIGEgYXR0cmlidXRlIGZyb20gdGhlIHNldCBvZiBhdHRyaWJ1dGVzCi0JICogCi0JICogQHBhcmFtIGF0dHJpYnV0ZQotCSAqICAgICAgICAgICAgdGhlIGF0dHJpYnV0ZSB0byByZW1vdmUKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVBdHRyaWJ1dGUoVHlwZWRWYWx1ZSBhdHRyaWJ1dGUpIHsKLQkJYXR0cmlidXRlcy5yZW1vdmUoYXR0cmlidXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgPGNvZGU+VHJhbnNmb3JtRGVmaW5pdGlvbjwvY29kZT4ncy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHRyYW5zZm9ybSBkZWZpbml0aW9ucwotCSAqLwotCXB1YmxpYyBMaXN0PFRyYW5zZm9ybURlZmluaXRpb24+IGdldFRyYW5zZm9ybURlZnMoKSB7Ci0JCXJldHVybiB0cmFuc2Zvcm1EZWZzOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIHRyYW5zZm9ybSBkZWZpbml0aW9uIHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHRkZWYKLQkgKiAgICAgICAgICAgIHRoZSB0cmFuc2Zvcm0gZGVmaW5pdGlvbiB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUcmFuc2Zvcm1EZWYoVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmKSB7Ci0JCXRyYW5zZm9ybURlZnMuYWRkKHRkZWYpOwotCX0KLQotCS8qKgotCSAqIFJlbW92ZSBhIHRyYW5zZm9ybSBkZWZpbml0aW9uIGZyb20gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdGRlZgotCSAqICAgICAgICAgICAgdGhlIHRyYW5zZm9ybSBkZWZpbml0aW9uIHRvIHJlbW92ZQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRyYW5zZm9ybURlZihUcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYpIHsKLQkJdHJhbnNmb3JtRGVmcy5yZW1vdmUodGRlZik7Ci0JfQotCi0JLyoqCi0JICogU2V0IHdoZXRoZXIgdG8gdXNlIGFuIFhTTCBkZWNsYXJhdGlvbiBlbWJlZGRlZCBpbiB0aGUgWE1MIGZpbGUKLQkgKiAKLQkgKiBAcGFyYW0gZW1iZWRkZWQKLQkgKiAgICAgICAgICAgIHRydWUgdG8gdXNlIGVtYmVkZGVkCi0JICovCi0JcHVibGljIHZvaWQgc2V0VXNlRW1iZWRkZWQoYm9vbGVhbiBlbWJlZGRlZCkgewotCQl1c2VFbWJlZGRlZCA9IGVtYmVkZGVkOwotCX0KLQotCS8qKgotCSAqIEdldCB3aGV0aGVyIHRvIHVzZSBhbiBYU0wgZGVjbGFyYXRpb24gZW1iZWRkZWQgaW4gdGhlIFhNTCBmaWxlCi0JICogCi0JICogQHJldHVybiB0cnVlIGlmIGVtYmVkZGVkCi0JICovCi0JcHVibGljIGJvb2xlYW4gdXNlRW1iZWRkZWQoKSB7Ci0JCXJldHVybiB1c2VFbWJlZGRlZDsKLQl9Ci0KLQkvKioKLQkgKiBTZXJpYWxpemUgdGhpcyB0byBhIERPTSBEb2N1bWVudC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZXJpYWxpemVkIGRvY3VtZW50Ci0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgaWYgYSBwcm9ibGVtIG9jY3VycyBkdXJpbmcgc2VyaWFsaXphdGlvbgotCSAqLwotCXB1YmxpYyBEb2N1bWVudCB0b1hNTCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKLQkJRG9jdW1lbnQgZG9jID0gbmV3RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290RWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUGlwZWxpbmUiKTsgLy8kTk9OLU5MUy0xJAotCQlyb290RWwuc2V0QXR0cmlidXRlKCJzb3VyY2UiLCBzb3VyY2VVUkwpOyAvLyROT04tTkxTLTEkCi0JCXJvb3RFbC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIHRhcmdldEZpbGUpOyAvLyROT04tTkxTLTEkCi0JCWRvYy5hcHBlbmRDaGlsZChyb290RWwpOwotCi0JCUVsZW1lbnQgYXR0cmlidXRlc0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIkF0dHJpYnV0ZXMiKTsgLy8kTk9OLU5MUy0xJAotCQlyb290RWwuYXBwZW5kQ2hpbGQoYXR0cmlidXRlc0VsKTsKLQkJZm9yIChJdGVyYXRvcjxUeXBlZFZhbHVlPiBpdGVyID0gYXR0cmlidXRlcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCVR5cGVkVmFsdWUgYXR0cmlidXRlID0gKFR5cGVkVmFsdWUpIGl0ZXIubmV4dCgpOwotCQkJRWxlbWVudCBhdHRyaWJ1dGVFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJBdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJYXR0cmlidXRlRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgYXR0cmlidXRlLm5hbWUpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVFbC5zZXRBdHRyaWJ1dGUoInR5cGUiLCBhdHRyaWJ1dGUudHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWF0dHJpYnV0ZUVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBhdHRyaWJ1dGUudmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVzRWwuYXBwZW5kQ2hpbGQoYXR0cmlidXRlRWwpOwotCQl9Ci0KLQkJcm9vdEVsLnNldEF0dHJpYnV0ZSgidXNlRW1iZWRkZWQiLCBTdHJpbmcudmFsdWVPZih1c2VFbWJlZGRlZCkpOyAvLyROT04tTkxTLTEkCi0JCWlmICghdXNlRW1iZWRkZWQpIHsKLQkJCUVsZW1lbnQgdHJhbnNmb3Jtc0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlRyYW5zZm9ybXMiKTsgLy8kTk9OLU5MUy0xJAotCQkJcm9vdEVsLmFwcGVuZENoaWxkKHRyYW5zZm9ybXNFbCk7Ci0JCQlmb3IgKEl0ZXJhdG9yPFRyYW5zZm9ybURlZmluaXRpb24+IGl0ZXIgPSB0cmFuc2Zvcm1EZWZzLml0ZXJhdG9yKCk7IGl0ZXIKLQkJCQkJLmhhc05leHQoKTspIHsKLQkJCQlUcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYgPSAoVHJhbnNmb3JtRGVmaW5pdGlvbikgaXRlci5uZXh0KCk7Ci0JCQkJRWxlbWVudCB0ZGVmRWwgPSB0ZGVmLmFzWE1MKGRvYyk7Ci0JCQkJdHJhbnNmb3Jtc0VsLmFwcGVuZENoaWxkKHRkZWZFbCk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZG9jOwotCX0KLQotCXByaXZhdGUgc3RhdGljIERvY3VtZW50IG5ld0RvY3VtZW50KCkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gewotCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IGRmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQlEb2N1bWVudCBkb2MgPSBkb2NCdWlsZGVyLm5ld0RvY3VtZW50KCk7Ci0JCXJldHVybiBkb2M7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL1RyYW5zZm9ybURlZmluaXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UcmFuc2Zvcm1EZWZpbml0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NDlhZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL1RyYW5zZm9ybURlZmluaXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMjEzNzc2IC0gVVJJIFJlc29sdmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuQ3JlYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBBIGRlZmluaXRpb24gb2YgYSBwYXJ0aWN1bGFyIHN0ZXAgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5lLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc2Zvcm1EZWZpbml0aW9uIHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NBVEFMT0dfUkVTT0xWRVIgPSAib3JnLmFwYWNoZS54bWwucmVzb2x2ZXIudG9vbHMuQ2F0YWxvZ1Jlc29sdmVyIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgU3RyaW5nIHN0eWxlc2hlZXRVUkw7Ci0JcHJpdmF0ZSBTdHJpbmcgcmVzb2x2ZXJDbGFzczsKLQlwcml2YXRlIFByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JcHJpdmF0ZSBmaW5hbCBTZXQ8VHlwZWRWYWx1ZT4gcGFyYW1ldGVycyA9IG5ldyBIYXNoU2V0PFR5cGVkVmFsdWU+KCk7Ci0JCi0JcHVibGljIFRyYW5zZm9ybURlZmluaXRpb24oKSB7Ci0JCXRoaXMucmVzb2x2ZXJDbGFzcyA9IERFRkFVTFRfQ0FUQUxPR19SRVNPTFZFUjsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHBhcmFtZXRlcnMgYXMgYSBtYXAgb2YgbmFtZSAoPGNvZGU+U3RyaW5nPC9jb2RlPikgdi4gdmFsdWUKLQkgKiA8Y29kZT5UeXBlZFZhbHVlPC9jb2RlPi4KLQkgKiAKLQkgKiBAcmV0dXJuIGEgbWFwIG9mIG5hbWVzIGFuZCB2YWx1ZXMKLQkgKiBAdGhyb3dzIENyZWF0aW9uRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgaWYgYW4gZXhjZXB0aW9uIG9jY3VycmVkIGR1cmluZyBvYmplY3QgY3JlYXRpb24KLQkgKi8KLQlwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQYXJhbWV0ZXJzQXNNYXAoKSB0aHJvd3MgQ3JlYXRpb25FeGNlcHRpb24gewotCQlNYXA8U3RyaW5nLCBPYmplY3Q+IG0gPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCk7Ci0JCWZvciAoSXRlcmF0b3I8VHlwZWRWYWx1ZT4gaXRlciA9IHBhcmFtZXRlcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQlUeXBlZFZhbHVlIHR2ID0gaXRlci5uZXh0KCk7Ci0JCQlTdHJpbmcga2V5ID0gdHYubmFtZTsKLQkJCU9iamVjdCB2YWx1ZSA9IHR2LmNyZWF0ZVZhbHVlKCk7Ci0JCQltLnB1dChrZXksIHZhbHVlKTsKLQkJfQotCQlyZXR1cm4gbTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgc2V0IG9mIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcmV0dXJuIGEgc2V0IG9mIDxjb2RlPlR5cGVkVmFsdWU8L2NvZGU+J3MKLQkgKi8KLQlwdWJsaWMgU2V0PFR5cGVkVmFsdWU+IGdldFBhcmFtZXRlcnMoKSB7Ci0JCXJldHVybiBwYXJhbWV0ZXJzOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIHBhcmFtZXRlciB0byB0aGUgc2V0IG9mIHBhcmFtZXRlcnMKLQkgKiAKLQkgKiBAcGFyYW0gcGFyYW1ldGVyCi0JICogICAgICAgICAgICB0aGUgcGFyYW1ldGVyIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcihUeXBlZFZhbHVlIHBhcmFtZXRlcikgewotCQlwYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwotCX0KLQotCS8qKgotCSAqIFJlbW92ZSBhIHBhcmFtZXRlci4KLQkgKiAKLQkgKiBAcGFyYW0gcGFyYW1ldGVyCi0JICogICAgICAgICAgICB0aGUgcGFyYW1ldGVyIHRvIHJlbW92ZQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVBhcmFtZXRlcihUeXBlZFZhbHVlIHBhcmFtZXRlcikgewotCQlwYXJhbWV0ZXJzLnJlbW92ZShwYXJhbWV0ZXIpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgb3V0cHV0IHByb3BlcnRpZXMgZm9yIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgb3V0cHV0IHByb3BlcnRpZXMKLQkgKi8KLQlwdWJsaWMgUHJvcGVydGllcyBnZXRPdXRwdXRQcm9wZXJ0aWVzKCkgewotCQlyZXR1cm4gb3V0cHV0UHJvcGVydGllczsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIG91dHB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBvdXRwdXRQcm9wZXJ0aWVzCi0JICogICAgICAgICAgICB0aGUgb3V0cHV0IHByb3BlcnRpZXMgdG8gc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0UHJvcGVydGllcyhQcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMpIHsKLQkJdGhpcy5vdXRwdXRQcm9wZXJ0aWVzID0gb3V0cHV0UHJvcGVydGllczsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWMgb3V0cHV0IHByb3BlcnR5LiAgSWYgdGhlIHByb3BlcnR5Ci0JICogZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICB0aGUgb3V0cHV0IHByb3BlcnR5Ci0JICogQHBhcmFtIHZhbHVlCi0JICogICAgICAgICAgICB0aGUgdmFsdWUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRPdXRwdXRQcm9wZXJ0eShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCW91dHB1dFByb3BlcnRpZXMucHV0KG5hbWUsIHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBSZW1vdmUgYW4gb3V0cHV0IHByb3BlcnR5LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICB0aGUgb3V0cHV0IHByb3BlcnR5IHRvIHJlbW92ZQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZU91dHB1dFByb3BlcnR5KFN0cmluZyBuYW1lKSB7Ci0JCW91dHB1dFByb3BlcnRpZXMucmVtb3ZlKG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbmFtZSBvZiB0aGUgPGNvZGU+VVJJUmVzb2x2ZXI8L2NvZGU+IGNsYXNzIHRvIHVzZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSByZXNvbHZlcidzIGNsYXNzIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFJlc29sdmVyQ2xhc3MoKSB7Ci0JCXJldHVybiByZXNvbHZlckNsYXNzOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgbmFtZSBvZiB0aGUgPGNvZGU+VVJJUmVzb2x2ZXI8L2NvZGU+IGNsYXNzIHRvIHVzZS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb2x2ZXIKLQkgKiAgICAgICAgICAgIHRoZSByZXNvbHZlcidzIGNsYXNzIG5hbWUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNvbHZlckNsYXNzKFN0cmluZyByZXNvbHZlcikgewotCQlyZXNvbHZlckNsYXNzID0gcmVzb2x2ZXI7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBVUkwgb2YgdGhlIHN0eWxlc2hlZXQuCi0JICogCi0JICogQHJldHVybiB0aGUgc3R5bGVzaGVldCBVUkwKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFN0eWxlc2hlZXRVUkwoKSB7Ci0JCXJldHVybiBzdHlsZXNoZWV0VVJMOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgVVJMIG9mIHRoZSBzdHlsZXNoZWV0LgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0Ci0JICogICAgICAgICAgICB0aGUgc3R5bGVzaGVldCBVUkwKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTdHlsZXNoZWV0VVJMKFN0cmluZyBzdHlsZXNoZWV0KSB7Ci0JCXN0eWxlc2hlZXRVUkwgPSBzdHlsZXNoZWV0OwotCX0KLQotCS8qKgotCSAqIFNlcmlhbGl6ZSB0aGlzIHRvIGEgRG9jdW1lbnQgZnJhZ21lbnQuCi0JICogCi0JICogQHBhcmFtIGRvYwotCSAqICAgICAgICAgICAgdGhlIGRvY3VtZW50IHRvIGF0dGFjaCB0bwotCSAqIEByZXR1cm4gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgZnJhZ21lbnQKLQkgKi8KLQlwdWJsaWMgRWxlbWVudCBhc1hNTChEb2N1bWVudCBkb2MpIHsKLQkJRWxlbWVudCB0ZGVmRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiVHJhbnNmb3JtIik7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZkVsLnNldEF0dHJpYnV0ZSgKLQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlRyYW5zZm9ybURlZmluaXRpb24uMSIpLCBzdHlsZXNoZWV0VVJMKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAocmVzb2x2ZXJDbGFzcyAhPSBudWxsKQotCQkJdGRlZkVsLnNldEF0dHJpYnV0ZSgidXJpUmVzb2x2ZXIiLCByZXNvbHZlckNsYXNzKTsgLy8kTk9OLU5MUy0xJAotCQlFbGVtZW50IG9wRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiT3V0cHV0UHJvcGVydGllcyIpOyAvLyROT04tTkxTLTEkCi0JCXRkZWZFbC5hcHBlbmRDaGlsZChvcEVsKTsKLQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyID0gb3V0cHV0UHJvcGVydGllcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7IGl0ZXIKLQkJCQkuaGFzTmV4dCgpOykgewotCQkJTWFwLkVudHJ5PD8sID8+IGVudHJ5ID0gKE1hcC5FbnRyeTw/LCA/PikgaXRlci5uZXh0KCk7Ci0JCQlFbGVtZW50IHByb3BFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJQcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgKFN0cmluZykgZW50cnkuZ2V0S2V5KCkpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIChTdHJpbmcpIGVudHJ5LmdldFZhbHVlKCkpOyAvLyROT04tTkxTLTEkCi0JCQlvcEVsLmFwcGVuZENoaWxkKHByb3BFbCk7Ci0JCX0KLQkJRWxlbWVudCBwYXJhbXNFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJQYXJhbWV0ZXJzIik7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZkVsLmFwcGVuZENoaWxkKHBhcmFtc0VsKTsKLQkJZm9yIChJdGVyYXRvcjxUeXBlZFZhbHVlPiBpdGVyID0gcGFyYW1ldGVycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCUVsZW1lbnQgcHJvcEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBhcmFtZXRlciIpOyAvLyROT04tTkxTLTEkCi0JCQlUeXBlZFZhbHVlIHBhcmFtID0gaXRlci5uZXh0KCk7Ci0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgcGFyYW0ubmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCXByb3BFbC5zZXRBdHRyaWJ1dGUoInR5cGUiLCBwYXJhbS50eXBlKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcEVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBwYXJhbS52YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCXBhcmFtc0VsLmFwcGVuZENoaWxkKHByb3BFbCk7Ci0JCX0KLQkJcmV0dXJuIHRkZWZFbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmcm9tIGl0cyBzZXJpYWxpemVkIGZvcm0uCi0JICogCi0JICogQHBhcmFtIHRyYW5zZm9ybUVsCi0JICogICAgICAgICAgICB0aGUgZWxlbWVudCB0byBjcmVhdGUgdGhpcyBmcm9tCi0JICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzCi0JICovCi0JcHVibGljIHN0YXRpYyBUcmFuc2Zvcm1EZWZpbml0aW9uIGZyb21YTUwoRWxlbWVudCB0cmFuc2Zvcm1FbCkgewotCQlUcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYgPSBuZXcgVHJhbnNmb3JtRGVmaW5pdGlvbigpOwotCQlTdHJpbmcgdXJsID0gdHJhbnNmb3JtRWwuZ2V0QXR0cmlidXRlKCJ1cmwiKTsgLy8kTk9OLU5MUy0xJAotCQl0ZGVmLnNldFN0eWxlc2hlZXRVUkwodXJsKTsKLQkJU3RyaW5nIHVyaVJlc29sdmVyID0gdHJhbnNmb3JtRWwuZ2V0QXR0cmlidXRlKCJ1cmlSZXNvbHZlciIpOyAvLyROT04tTkxTLTEkCi0JCXRkZWYuc2V0UmVzb2x2ZXJDbGFzcyh1cmlSZXNvbHZlcik7Ci0KLQkJRWxlbWVudCBvcEVsID0gKEVsZW1lbnQpIHRyYW5zZm9ybUVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKAotCQkJCSJPdXRwdXRQcm9wZXJ0aWVzIikuaXRlbSgwKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAob3BFbCAhPSBudWxsKSB7Ci0JCQlOb2RlTGlzdCBwcm9wRWxzID0gb3BFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUHJvcGVydHkiKTsgLy8kTk9OLU5MUy0xJAotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wRWxzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlFbGVtZW50IHByb3BFbCA9IChFbGVtZW50KSBwcm9wRWxzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBwcm9wRWwuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlTdHJpbmcgdmFsdWUgPSBwcm9wRWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCi0JCQkJdGRlZi5zZXRPdXRwdXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0JCQl9Ci0JCX0KLQotCQlFbGVtZW50IHBhcmFtc0VsID0gKEVsZW1lbnQpIHRyYW5zZm9ybUVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKAotCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVHJhbnNmb3JtRGVmaW5pdGlvbi4xOCIpKS5pdGVtKDApOyAvLyROT04tTkxTLTEkCi0JCWlmIChwYXJhbXNFbCAhPSBudWxsKSB7Ci0JCQlOb2RlTGlzdCBwYXJhbUVscyA9IHBhcmFtc0VsLmdldEVsZW1lbnRzQnlUYWdOYW1lKE1lc3NhZ2VzCi0JCQkJCS5nZXRTdHJpbmcoIlRyYW5zZm9ybURlZmluaXRpb24uMTkiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1FbHMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCUVsZW1lbnQgcGFyYW1FbCA9IChFbGVtZW50KSBwYXJhbUVscy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gcGFyYW1FbC5nZXRBdHRyaWJ1dGUoTWVzc2FnZXMKLQkJCQkJCS5nZXRTdHJpbmcoIlRyYW5zZm9ybURlZmluaXRpb24uMjAiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlTdHJpbmcgdHlwZSA9IHBhcmFtRWwuZ2V0QXR0cmlidXRlKE1lc3NhZ2VzCi0JCQkJCQkuZ2V0U3RyaW5nKCJUcmFuc2Zvcm1EZWZpbml0aW9uLjIxIikpOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nIHZhbHVlID0gcGFyYW1FbC5nZXRBdHRyaWJ1dGUoTWVzc2FnZXMKLQkJCQkJCS5nZXRTdHJpbmcoIlRyYW5zZm9ybURlZmluaXRpb24uMjIiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQl0ZGVmLmFkZFBhcmFtZXRlcihuZXcgVHlwZWRWYWx1ZShuYW1lLCB0eXBlLCB2YWx1ZSkpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHRkZWY7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL1RyYW5zZm9ybWF0aW9uRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvVHJhbnNmb3JtYXRpb25FeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEwYWNhZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvVHJhbnNmb3JtYXRpb25FeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyOwotCi0vKioKLSAqIENoZWNrZWQgRXhjZXB0aW9uIGZvciB0cmFuc2Zvcm1hdGlvbiBlcnJvcnMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlCi0JICovCi0JcHVibGljIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKQotCXsKLQkJc3VwZXIobWVzc2FnZSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBhbmQgY2F1c2UuCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UKLQkgKiBAcGFyYW0gY2F1c2UgdGhlIGNhdXNlCi0JICovCi0JcHVibGljIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgY2F1c2UpCi0JewotCQlzdXBlcihtZXNzYWdlLCBjYXVzZSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UeXBlZFZhbHVlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvVHlwZWRWYWx1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDI3MjIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UeXBlZFZhbHVlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbC5DcmVhdGlvbkV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBIHZhbHVlIHRoYXQgaXMgdG8gYmUgaW5zdGFudGlhdGVkIGZyb20gYSBwYXJ0aWN1bGFyIHR5cGUgZS5nLiBEb3VibGUsCi0gKiBPYmplY3QuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFR5cGVkVmFsdWUgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfU1RSSU5HID0gInN0cmluZyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0JPT0xFQU4gPSAiYm9vbGVhbiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0lOVCA9ICJpbnQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9ET1VCTEUgPSAiZG91YmxlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRkxPQVQgPSAiZmxvYXQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9DTEFTUyA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX09CSkVDVCA9ICJvYmplY3QiOyAvLyROT04tTkxTLTEkCi0KLQlmaW5hbCBTdHJpbmcgbmFtZTsKLQlmaW5hbCBTdHJpbmcgdHlwZTsKLQlmaW5hbCBTdHJpbmcgdmFsdWU7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmcm9tIHRoZSBnaXZlbiBpbmZvcm1hdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgdGhlIHBhcmFtZXRlciBuYW1lCi0JICogQHBhcmFtIHR5cGUKLQkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIHZhbHVlCi0JICogQHBhcmFtIHZhbHVlCi0JICogICAgICAgICAgICB0aGUgdmFsdWUKLQkgKi8KLQlwdWJsaWMgVHlwZWRWYWx1ZShTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGUsIFN0cmluZyB2YWx1ZSkgewotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLnR5cGUgPSB0eXBlOwotCQl0aGlzLnZhbHVlID0gdmFsdWU7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIHRoZSB0eXBlIG9mIG9iamVjdCBkZWZpbmVkIGJ5IHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgdmFsdWUKLQkgKiBAdGhyb3dzIENyZWF0aW9uRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgaWYgYSBwcm9ibGVtIG9jY3VycmVkCi0JICovCi0JcHVibGljIE9iamVjdCBjcmVhdGVWYWx1ZSgpIHRocm93cyBDcmVhdGlvbkV4Y2VwdGlvbiB7Ci0JCU9iamVjdCBvID0gbnVsbDsKLQkJaWYgKFRZUEVfU1RSSU5HLmVxdWFscyh0eXBlKSkgewotCQkJbyA9IHZhbHVlOwotCQl9IGVsc2UgaWYgKFRZUEVfQk9PTEVBTi5lcXVhbHModHlwZSkpIHsKLQkJCWJvb2xlYW4gYiA9ICJ5ZXMiLmVxdWFsc0lnbm9yZUNhc2UodmFsdWUpIHx8ICJ0cnVlIi5lcXVhbHNJZ25vcmVDYXNlKHZhbHVlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlvID0gQm9vbGVhbi52YWx1ZU9mKGIpOwotCQl9IGVsc2UgaWYgKFRZUEVfSU5ULmVxdWFscyh0eXBlKSkgewotCQkJdHJ5IHsKLQkJCQlvID0gbmV3IEludGVnZXIodmFsdWUpOwotCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oCi0JCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuOSIpICsgdmFsdWUgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTAiKSwgZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCQl9IGVsc2UgaWYgKFRZUEVfRE9VQkxFLmVxdWFscyh0eXBlKSkgewotCQkJdHJ5IHsKLQkJCQlvID0gbmV3IERvdWJsZSh2YWx1ZSk7Ci0JCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJCXRocm93IG5ldyBDcmVhdGlvbkV4Y2VwdGlvbigKLQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4xMSIpICsgdmFsdWUgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTIiKSwgZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCQl9IGVsc2UgaWYgKFRZUEVfRkxPQVQuZXF1YWxzKHR5cGUpKSB7Ci0JCQl0cnkgewotCQkJCW8gPSBuZXcgRmxvYXQodmFsdWUpOwotCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oCi0JCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTMiKSArIHZhbHVlICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjE0IiksIGUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCX0KLQkJfSBlbHNlIGlmIChUWVBFX0NMQVNTLmVxdWFscyh0eXBlKSkgewotCQkJdHJ5IHsKLQkJCQlvID0gQ2xhc3MuZm9yTmFtZSh2YWx1ZSk7Ci0JCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oCi0JCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTUiKSArIHZhbHVlICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjE2IiksIGUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCX0KLQkJfSBlbHNlIGlmIChUWVBFX09CSkVDVC5lcXVhbHModHlwZSkpIHsKLQkJCXRyeSB7Ci0JCQkJQ2xhc3M8Pz4gYyA9IENsYXNzLmZvck5hbWUodmFsdWUpOwotCQkJCW8gPSBjLm5ld0luc3RhbmNlKCk7Ci0JCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oCi0JCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTciKSArIHZhbHVlICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjE4IiksIGUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCX0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgewotCQkJCXRocm93IG5ldyBDcmVhdGlvbkV4Y2VwdGlvbigKLQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4xOSIpICsgdmFsdWUgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMjAiKSwgZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQkJdGhyb3cgbmV3IENyZWF0aW9uRXhjZXB0aW9uKAotCQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjIxIikgKyB2YWx1ZSArIE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4yMiIpLCBlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oCi0JCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4yMyIpICsgdHlwZSArIE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4yNCIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQkJcmV0dXJuIG87Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9Db25maWd1cmF0aW9uRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTI2YzczLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9Db25maWd1cmF0aW9uRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbDsKLQotLyoqCi0gKiBBbiBleGNlcHRpb24gdGhyb3duIHdoZW4gY29uZmlndXJhdGlvbiBvZiBhbiBYU0wgdHJhbnNmb3JtIHBpcGVsaW5lIGZhaWxzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLQkvKioKLQkgKiBDcmVhdGUgdGhlIGV4Y2VwdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbXNnIHRoZSBleGNlcHRpb24gbWVzc2FnZQotCSAqIEBwYXJhbSB0IHRoZSB1bmRlcmx5aW5nIGNhdXNlCi0JICovCi0JcHVibGljIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIHQpCi0JewotCQlzdXBlcihtc2csIHQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9DcmVhdGlvbkV4Y2VwdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL0NyZWF0aW9uRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYTA3YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL0NyZWF0aW9uRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbDsKLQotLyoqCi0gKiBDaGVja2VkIEV4Y2VwdGlvbiBmb3Igb2JqZWN0IGNyZWF0aW9uIGVycm9ycy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgQ3JlYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgQ3JlYXRpb25FeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpCi0JewotCQlzdXBlcihtZXNzYWdlKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlIGFuZCBjYXVzZS4KLQkgKiAKLQkgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZQotCSAqIEBwYXJhbSBjYXVzZSB0aGUgY2F1c2UKLQkgKi8KLQlwdWJsaWMgQ3JlYXRpb25FeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBjYXVzZSkKLQl7Ci0JCXN1cGVyKG1lc3NhZ2UsIGNhdXNlKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL0pBWFBTQVhQcm9jZXNzb3JJbnZva2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlYzRjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5FcnJvckxpc3RlbmVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlVSSVJlc29sdmVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc2F4LlNBWFJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnNheC5TQVhTb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zYXguU0FYVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc2F4LlRyYW5zZm9ybWVySGFuZGxlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+SVByb2Nlc3Nvckludm9rZXI8L2NvZGU+IHRoYXQgdXNlcyBKQVhQIGFzIHRoZSB1bmRlcmx5aW5nCi0gKiB0cmFuc2Zvcm1hdGlvbiBtZWNoYW5pc20uCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIEpBWFBTQVhQcm9jZXNzb3JJbnZva2VyIGltcGxlbWVudHMgSVByb2Nlc3Nvckludm9rZXIKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuY2xhc3MpOwotCi0JcHJpdmF0ZSBYTUxSZWFkZXIgcmVhZGVyOwotCXByaXZhdGUgU0FYVHJhbnNmb3JtZXJGYWN0b3J5IHRGYWN0b3J5OwotCXByaXZhdGUgVHJhbnNmb3JtZXJIYW5kbGVyIHRoOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHRocm93cyBTQVhFeGNlcHRpb24gaWYgZXJyb3JzIG9jY3VyIHdoaWxlIGNyZWF0aW5nIGFuIDxjb2RlPlhNTFJlYWRlcjwvY29kZT4KLQkgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgZXJyb3JzIG9jY3VyIHdoaWxlIGNyZWF0aW5nIGFuIDxjb2RlPlhNTFJlYWRlcjwvY29kZT4KLQkgKi8KLQlwdWJsaWMgSkFYUFNBWFByb2Nlc3Nvckludm9rZXIoKSB0aHJvd3MgU0FYRXhjZXB0aW9uLCBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JewotCQlyZWFkZXIgPSBjcmVhdGVSZWFkZXIoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgWE1MUmVhZGVyIGNyZWF0ZVJlYWRlcigpIHRocm93cyBTQVhFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQl7Ci0JCVNBWFBhcnNlckZhY3Rvcnkgc3BmID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlzcGYuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0JCXJldHVybiBzcGYubmV3U0FYUGFyc2VyKCkuZ2V0WE1MUmVhZGVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QXR0cmlidXRlcyhNYXAgYXR0cmlidXRlcykgdGhyb3dzIFRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcgotCXsKLQkJY3JlYXRlVHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci0JCWZvciAoSXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuZW50cnlTZXQoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCU1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpIGl0ZXIubmV4dCgpOwotCQkJU3RyaW5nIHVyaSA9IChTdHJpbmcpIGVudHJ5LmdldEtleSgpOwotCQkJT2JqZWN0IHZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsKLQkJCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuMCIpICsgdXJpICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJKQVhQU0FYUHJvY2Vzc29ySW52b2tlci4xIikgKyB2YWx1ZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJdEZhY3Rvcnkuc2V0QXR0cmlidXRlKHVyaSwgdmFsdWUpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFRyYW5zZm9ybWVyRmFjdG9yeSBjcmVhdGVUcmFuc2Zvcm1lckZhY3RvcnkoKQotCXsKLQkJdEZhY3RvcnkgPSAoU0FYVHJhbnNmb3JtZXJGYWN0b3J5KSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJdEZhY3Rvcnkuc2V0RXJyb3JMaXN0ZW5lcihuZXcgRXJyb3JMaXN0ZW5lcigpCi0JCXsKLQotCQkJcHVibGljIHZvaWQgZXJyb3IoVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkJCXsKLQkJCQlsb2cuZXJyb3IoZXhjZXB0aW9uLmdldE1lc3NhZ2VBbmRMb2NhdGlvbigpKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZmF0YWxFcnJvcihUcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCQkJewotCQkJCWxvZy5lcnJvcihleGNlcHRpb24uZ2V0TWVzc2FnZUFuZExvY2F0aW9uKCksIGV4Y2VwdGlvbik7Ci0JCQkJdGhyb3cgZXhjZXB0aW9uOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCB3YXJuaW5nKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JCQl7Ci0JCQkJbG9nLndhcm4oZXhjZXB0aW9uLmdldE1lc3NhZ2VBbmRMb2NhdGlvbigpKTsKLQkJCX0KLQotCQl9KTsKLQkJcmV0dXJuIHRGYWN0b3J5OwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFN0eWxlc2hlZXQoVVJMIHN0eWxlc2hlZXQsIE1hcCBwYXJhbWV0ZXJzLCBQcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMsIFVSSVJlc29sdmVyIHJlc29sdmVyKSB0aHJvd3MgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JewotCQlJbnB1dFNvdXJjZSBpbnB1dHNvdXJjZSA9IG5ldyBJbnB1dFNvdXJjZShzdHlsZXNoZWV0LnRvU3RyaW5nKCkpOwotCi0JCS8vIFRPRE8gcGFyc2UgZG9jdW1lbnQgd2l0aCBsaW5lbnVtYmVycwotCi0JCS8vIFhNTFJlYWRlciByZWFkZXIgPSBjcmVhdGVSZWFkZXIoKTsKLQkJLy8gTGluZVJlYWRpbmdDb250ZW50SGFuZGxlciBjaCA9IG5ldyBMaW5lUmVhZGluZ0NvbnRlbnRIYW5kbGVyKCk7Ci0JCS8vIHJlYWRlci5zZXRDb250ZW50SGFuZGxlcihjaCk7Ci0JCVNBWFNvdXJjZSBzb3VyY2UgPSBuZXcgU0FYU291cmNlKGlucHV0c291cmNlKTsKLQotCQlhZGRTdHlsZXNoZWV0KHNvdXJjZSwgcmVzb2x2ZXIsIHBhcmFtZXRlcnMsIG91dHB1dFByb3BlcnRpZXMpOwotCi0JfQotCi0JcHJvdGVjdGVkIFRyYW5zZm9ybWVyIGFkZFN0eWxlc2hlZXQoU291cmNlIHNvdXJjZSwgVVJJUmVzb2x2ZXIgcmVzb2x2ZXIsIE1hcCBwYXJhbWV0ZXJzLCBQcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMpIHRocm93cyBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQl7Ci0JCWlmICh0RmFjdG9yeSA9PSBudWxsKQotCQkJY3JlYXRlVHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci0KLQkJVHJhbnNmb3JtZXJIYW5kbGVyIG5ld1RoID0gdEZhY3RvcnkubmV3VHJhbnNmb3JtZXJIYW5kbGVyKHNvdXJjZSk7Ci0JCVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gbmV3VGguZ2V0VHJhbnNmb3JtZXIoKTsKLQotCQlpZiAocmVzb2x2ZXIgIT0gbnVsbCkKLQkJCXRyYW5zZm9ybWVyLnNldFVSSVJlc29sdmVyKHJlc29sdmVyKTsKLQotCQlpZiAocGFyYW1ldGVycyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBwYXJhbWV0ZXJzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQkJewotCQkJCU1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpIGl0ZXIubmV4dCgpOwotCQkJCVN0cmluZyBuYW1lID0gKFN0cmluZykgZW50cnkuZ2V0S2V5KCk7Ci0JCQkJT2JqZWN0IHZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsKLQkJCQlsb2cuaW5mbyhNZXNzYWdlcy5nZXRTdHJpbmcoIkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjIiKSArIG5hbWUgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjMiKSArIHZhbHVlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJdHJhbnNmb3JtZXIuc2V0UGFyYW1ldGVyKG5hbWUsIHZhbHVlKTsKLQkJCX0KLQkJfQotCQlpZiAob3V0cHV0UHJvcGVydGllcyAhPSBudWxsKQotCQl7Ci0JCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBvdXRwdXRQcm9wZXJ0aWVzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQkJewotCQkJCU1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpIGl0ZXIubmV4dCgpOwotCQkJCXNiLmFwcGVuZChlbnRyeS5nZXRLZXkoKSkuYXBwZW5kKCI9IikuYXBwZW5kKGVudHJ5LmdldFZhbHVlKCkpLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCX0KLQkJCWlmIChvdXRwdXRQcm9wZXJ0aWVzLnNpemUoKSA+IDApCi0JCQl7Ci0JCQkJbG9nLmluZm8oTWVzc2FnZXMuZ2V0U3RyaW5nKCJKQVhQU0FYUHJvY2Vzc29ySW52b2tlci42IikgKyBzYi50b1N0cmluZygpKTsgLy8kTk9OLU5MUy0xJAotCQkJCXRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnRpZXMob3V0cHV0UHJvcGVydGllcyk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAodGggIT0gbnVsbCkKLQkJCXRoLnNldFJlc3VsdChuZXcgU0FYUmVzdWx0KG5ld1RoKSk7Ci0JCWVsc2UgewotCQkJcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG5ld1RoKTsKLQkJCXRyeSB7Ci0JCQkJcmVhZGVyLnNldFByb3BlcnR5KCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9sZXhpY2FsLWhhbmRsZXIiLCBuZXdUaCk7IC8vJE5PTi1OTFMtMSQKLQkJCX0gY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZXgpIHsKLQkJCQlsb2cud2FybihNZXNzYWdlcy5nZXRTdHJpbmcoIkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyXzQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0gY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJbG9nLndhcm4oTWVzc2FnZXMuZ2V0U3RyaW5nKCJKQVhQU0FYUHJvY2Vzc29ySW52b2tlcl81IikpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJdGggPSBuZXdUaDsKLQkJcmV0dXJuIHRoLmdldFRyYW5zZm9ybWVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdHJhbnNmb3JtKFVSTCBzb3VyY2VVUkwsIFJlc3VsdCByZXMpIHRocm93cyBUcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbgotCXsKLQkJdHJhbnNmb3JtKG5ldyBJbnB1dFNvdXJjZShzb3VyY2VVUkwudG9FeHRlcm5hbEZvcm0oKSksIHJlcyk7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHVzaW5nIGFuIElucHV0U291cmNlIHJhdGhlciB0aGFuIGEgVVJMCi0JICogCi0JICogQHBhcmFtIGlucHV0c291cmNlIHRoZSBJbnB1dFNvdXJjZSB0byB1c2UKLQkgKiBAcGFyYW0gcmVzIHRoZSBSZXN1bHQKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc2Zvcm1hdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRyYW5zZm9ybShJbnB1dFNvdXJjZSBpbnB1dHNvdXJjZSwgUmVzdWx0IHJlcykgdGhyb3dzIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uCi0JewotCQl0cnkKLQkJewotCQkJaWYgKHRoID09IG51bGwpCi0JCQl7Ly8gbm8gc3R5bGVzaGVldHMgaGF2ZSBiZWVuIGFkZGVkLCBzbyB0cnkgdG8gdXNlIGVtYmVkZGVkLi4uCi0JCQkJU0FYU291cmNlIHNheFNvdXJjZSA9IG5ldyBTQVhTb3VyY2UoaW5wdXRzb3VyY2UpOwotCQkJCVNvdXJjZSBzcmMgPSBzYXhTb3VyY2U7Ci0JCQkJU3RyaW5nIG1lZGlhID0gbnVsbCwgdGl0bGUgPSBudWxsLCBjaGFyc2V0ID0gbnVsbDsKLQkJCQl3aGlsZSAodHJ1ZSkKLQkJCQl7Ci0JCQkJCXNyYyA9IHRGYWN0b3J5LmdldEFzc29jaWF0ZWRTdHlsZXNoZWV0KHNyYywgbWVkaWEsIHRpdGxlLCBjaGFyc2V0KTsKLQkJCQkJaWYgKHNyYyAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlhZGRTdHlsZXNoZWV0KHNheFNvdXJjZSwgbnVsbCwgQ29sbGVjdGlvbnMuRU1QVFlfTUFQLCBuZXcgUHJvcGVydGllcygpKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCXRocm93IG5ldyBUcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjciKSArIGlucHV0c291cmNlLmdldFN5c3RlbUlkKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl0aC5zZXRSZXN1bHQocmVzKTsKLQkJCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuOCIpKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVhZGVyLnBhcnNlKGlucHV0c291cmNlKTsKLQkJCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuOSIpKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NYWluLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvTWFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2NkY2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NYWluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuSVByb2Nlc3Nvckludm9rZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuUGlwZWxpbmVEZWZpbml0aW9uOwotCi0vKioKLSAqIFRoZSBjbGFzcyB3aG9zZSA8Y29kZT5tYWluPC9jb2RlPiBtZXRob2QgaXMgY2FsbGVkIHdoZW4gbGF1bmNoaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzIGZyb20KLSAqIEVjbGlwc2UuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIE1haW4KLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coTWFpbi5jbGFzcyk7Ci0KLQkvKioKLQkgKiBUaGUgPGNvZGU+bWFpbjwvY29kZT4gbWV0aG9kIGNhbGxlZCB3aGVuIGxhdW5jaGluZyB0aGUgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcy4KLQkgKiBUaGVyZSBhcmUgNCByZXF1aXJlZCBhcmd1bWVudHM6Ci0JICogPG9sPgotCSAqIDxsaT5UaGUgY2xhc3MgbmFtZSBvZiB0aGUgPGNvZGU+SVByb2Nlc3Nvckludm9rZXI8L2NvZGU+IHRvIHVzZQotCSAqIDxsaT5UaGUgbGF1bmNoIGZpbGUgKHNlcmlhbGl6ZWQgPGNvZGU+UGlwZWxpbmVEZWZpbml0aW9uPC9jb2RlPikKLQkgKiA8bGk+VGhlIFVSTCBvZiB0aGUgc291cmNlIFhNTCBkb2N1bWVudAotCSAqIDxsaT5UaGUgZmlsZSB3aGVyZSBvdXRwdXQgd2lsbCBiZSB3cml0dGVuCi0JICogPC9vbD4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncyB0aGUgNCByZXF1aXJlZCBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotCXsKLQkJbG9nLmluZm8oImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5PSIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJbG9nLmluZm8oImphdmEuZW5kb3JzZWQuZGlycz0iICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmVuZG9yc2VkLmRpcnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkKLQkJU3RyaW5nIGludm9rZXJDbGFzc05hbWUgPSBhcmdzWzBdOwotCQlGaWxlIGxhdW5jaEZpbGUgPSBuZXcgRmlsZShhcmdzWzFdKTsKLQkJU3RyaW5nIHNyYyA9IGFyZ3NbMl07Ci0JCVN0cmluZyB0YXJnZXQgPSBhcmdzWzNdOwotCi0JCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiTWFpbi40IikgKyBsYXVuY2hGaWxlKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNyZWF0ZSB0aGUgaW52b2tlcgotCQlJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCUNsYXNzIGNsYXp6ID0gQ2xhc3MuZm9yTmFtZShpbnZva2VyQ2xhc3NOYW1lKTsKLQkJCWludm9rZXIgPSAoSVByb2Nlc3Nvckludm9rZXIpIGNsYXp6Lm5ld0luc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQloYW5kbGVGYXRhbEVycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiTWFpbi41IikgKyBpbnZva2VyQ2xhc3NOYW1lLCBlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXRyeQotCQl7Ci0JCQlQaXBlbGluZURlZmluaXRpb24gcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmVEZWZpbml0aW9uKGxhdW5jaEZpbGUpOwotCQkJcGlwZWxpbmUuY29uZmlndXJlKGludm9rZXIpOwotCQkJaW52b2tlci50cmFuc2Zvcm0obmV3IFVSTChzcmMpLCBuZXcgU3RyZWFtUmVzdWx0KG5ldyBGaWxlT3V0cHV0U3RyZWFtKG5ldyBGaWxlKHRhcmdldCkpKSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQloYW5kbGVGYXRhbEVycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgaGFuZGxlRmF0YWxFcnJvcihTdHJpbmcgbXNnLCBUaHJvd2FibGUgdCkKLQl7Ci0JCWxvZy5mYXRhbChtc2csIHQpOwotCQlTeXN0ZW0uZXhpdCgxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWUzOTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLyoqCi0gKiBNZXNzYWdlcyBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcwotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkKLQl7Ci0JfQotCi0JLyoqCi0JICogR2V0IGEgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGtleS4KLQkgKiAKLQkgKiBAcGFyYW0ga2V5IHRoZSBtZXNzYWdlIGtleQotCSAqIEByZXR1cm4gdGhlIG1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLQkJewotCQkJcmV0dXJuICchJyArIGtleSArICchJzsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNWFlZWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1KQVhQU0FYUHJvY2Vzc29ySW52b2tlcl80PVVuYWJsZSB0byBzZXQgbGV4aWNhbCBjb250ZW50IGhhbmRsZXIuICBDb21tZW50cyBhbmQgUHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgbWF5IGJlIHNraXBwZWQKLUpBWFBTQVhQcm9jZXNzb3JJbnZva2VyXzU9TGV4aWNhbCBwcm9wZXJ0eSBub3Qgc3VwcG9ydGVkLiAgQ29tbWVudHMgYW5kIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIG1heSBiZSBza2lwcGVkCi1KQVhQU0FYUHJvY2Vzc29ySW52b2tlci4wPVNldHRpbmcgYXR0cmlidXRlICcKLUpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjE9JyB0byB2YWx1ZSAKLUpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjI9U2V0dGluZyBwYXJhbWV0ZXIgJwotSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuMz0nIHRvIHZhbHVlIAotSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuNj1TZXR0aW5nIHByb3BlcnRpZXM6IAotSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuNz1ObyBlbWJlZGRlZCBzdHlsZXNoZWV0IGluc3RydWN0aW9uIGZvciBmaWxlOiAKLUpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjg9VHJhbnNmb3JtaW5nLi4uCi1KQVhQU0FYUHJvY2Vzc29ySW52b2tlci45PURvbmUuCi1NYWluLjQ9bGF1bmNoRmlsZTogCi1NYWluLjU9Q291bGQgbm90IGluc3RhbnRpYXRlIGludm9rZXI6IApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVhOWIzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVBpcGVsaW5lRGVmaW5pdGlvbi4xMD1FcnJvciB3aXRoIHN0eWxlc2hlZXQ6IAotUGlwZWxpbmVEZWZpbml0aW9uLjg9Q291bGQgbm90IGluc3RhbnRpYXRlIHBhcmFtZXRlcgotUGlwZWxpbmVEZWZpbml0aW9uLjk9SW52YWxpZCBzdHlsZXNoZWV0IFVSTDogCi1UcmFuc2Zvcm1EZWZpbml0aW9uLjE9dXJsCi1UcmFuc2Zvcm1EZWZpbml0aW9uLjE4PVBhcmFtZXRlcnMKLVRyYW5zZm9ybURlZmluaXRpb24uMTk9UGFyYW1ldGVyCi1UcmFuc2Zvcm1EZWZpbml0aW9uLjIwPW5hbWUKLVRyYW5zZm9ybURlZmluaXRpb24uMjE9dHlwZQotVHJhbnNmb3JtRGVmaW5pdGlvbi4yMj12YWx1ZQotVHlwZWRWYWx1ZS4xMD0nIHRvIGFuIEludGVnZXIKLVR5cGVkVmFsdWUuMTE9Q291bGQgbm90IGNvbnZlcnQgdmFsdWUgJwotVHlwZWRWYWx1ZS4xMj0nIHRvIGEgRG91YmxlCi1UeXBlZFZhbHVlLjEzPUNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlICcKLVR5cGVkVmFsdWUuMTQ9JyB0byBhIEZsb2F0Ci1UeXBlZFZhbHVlLjE1PUNsYXNzICcKLVR5cGVkVmFsdWUuMTY9JyBjb3VsZCBub3QgYmUgbG9jYXRlZCAoY2hlY2sgdGhlIGNsYXNzcGF0aCkKLVR5cGVkVmFsdWUuMTc9Q2xhc3MgJwotVHlwZWRWYWx1ZS4xOD0nIGNvdWxkIG5vdCBiZSBsb2NhdGVkIChjaGVjayB0aGUgY2xhc3NwYXRoKQotVHlwZWRWYWx1ZS4xOT1PYmplY3QgJwotVHlwZWRWYWx1ZS4yMD0nIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQKLVR5cGVkVmFsdWUuMjE9T2JqZWN0ICcKLVR5cGVkVmFsdWUuMjI9XCBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkCi1UeXBlZFZhbHVlLjIzPUF0dHJpYnV0ZSB0eXBlICcKLVR5cGVkVmFsdWUuMjQ9JyBpcyBub3QgcmVjb2duaXNlZAotVHlwZWRWYWx1ZS45PUNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlICcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGVhN2VjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjEyMjk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jVGh1IEp1biAxMSAwMTozNzoyOCBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5jb21wYXJpbmdJZGVudGljYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZWFkQ29kZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdEF0dHJpYnV0ZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyNDRkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdEF0dHJpYnV0ZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdE91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQyM2U5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdE91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLW1ldGhvZD1tZXRob2QKLW1ldGhvZC5ERVNDPSJ4bWwiIHwgImh0bWwiIHwgInRleHQiIHwgcW5hbWUtYnV0LW5vdC1uY25hbWUgCi0KLXZlcnNpb249dmVyc2lvbgotdmVyc2lvbi5ERVNDPXNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgb3V0cHV0IG1ldGhvZAotCi1pbmRlbnQ9aW5kZW50Ci1pbmRlbnQuREVTQz1zcGVjaWZpZXMgd2hldGhlciB0aGUgWFNMVCBwcm9jZXNzb3IgbWF5IGFkZCBhZGRpdGlvbmFsIHdoaXRlc3BhY2Ugd2hlbiBvdXRwdXR0aW5nIHRoZSByZXN1bHQgdHJlZTsgdGhlIHZhbHVlIG11c3QgYmUgeWVzIG9yIG5vCi0KLWVuY29kaW5nPWVuY29kaW5nCi1lbmNvZGluZy5ERVNDPXNwZWNpZmllcyB0aGUgcHJlZmVycmVkIGNoYXJhY3RlciBlbmNvZGluZyB0aGF0IHRoZSBYU0xUIHByb2Nlc3NvciBzaG91bGQgdXNlIHRvIGVuY29kZSBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyBhcyBzZXF1ZW5jZXMgb2YgYnl0ZXM7IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSB0cmVhdGVkIGNhc2UtaW5zZW5zaXRpdmVseTsgdGhlIHZhbHVlIG11c3QgY29udGFpbiBvbmx5IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlICN4MjEgdG8gI3g3RSAoaS5lLiBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyk7IHRoZSB2YWx1ZSBzaG91bGQgZWl0aGVyIGJlIGEgY2hhcnNldCByZWdpc3RlcmVkIHdpdGggdGhlIEludGVybmV0IEFzc2lnbmVkIE51bWJlcnMgQXV0aG9yaXR5IFtJQU5BXSwgW1JGQzIyNzhdIG9yIHN0YXJ0IHdpdGggWC0KLQotbWVkaWEtdHlwZT1tZWRpYS10eXBlCi1tZWRpYS10eXBlLkRFU0M9c3BlY2lmaWVzIHRoZSBtZWRpYSB0eXBlIChNSU1FIGNvbnRlbnQgdHlwZSkgb2YgdGhlIGRhdGEgdGhhdCByZXN1bHRzIGZyb20gb3V0cHV0dGluZyB0aGUgcmVzdWx0IHRyZWU7IHRoZSBjaGFyc2V0IHBhcmFtZXRlciBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBleHBsaWNpdGx5OyBpbnN0ZWFkLCB3aGVuIHRoZSB0b3AtbGV2ZWwgbWVkaWEgdHlwZSBpcyB0ZXh0LCBhIGNoYXJzZXQgcGFyYW1ldGVyIHNob3VsZCBiZSBhZGRlZCBhY2NvcmRpbmcgdG8gdGhlIGNoYXJhY3RlciBlbmNvZGluZyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBvdXRwdXQgbWV0aG9kCi0KLWRvY3R5cGUtc3lzdGVtPWRvY3R5cGUtc3lzdGVtCi1kb2N0eXBlLXN5c3RlbS5ERVNDPXNwZWNpZmllcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBpbiB0aGUgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbgotCi1kb2N0eXBlLXB1YmxpYz1kb2N0eXBlLXB1YmxpYwotZG9jdHlwZS1wdWJsaWMuREVTQz1zcGVjaWZpZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHRvIGJlIHVzZWQgaW4gdGhlIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24KLQotb21pdC14bWwtZGVjbGFyYXRpb249b21pdC14bWwtZGVjbGFyYXRpb24KLW9taXQteG1sLWRlY2xhcmF0aW9uLkRFU0M9c3BlY2lmaWVzIHdoZXRoZXIgdGhlIFhTTFQgcHJvY2Vzc29yIHNob3VsZCBvdXRwdXQgYW4gWE1MIGRlY2xhcmF0aW9uOyB0aGUgdmFsdWUgbXVzdCBiZSB5ZXMgb3Igbm8KLQotc3RhbmRhbG9uZT1zdGFuZGFsb25lCi1zdGFuZGFsb25lLkRFU0M9c3BlY2lmaWVzIHdoZXRoZXIgdGhlIFhTTFQgcHJvY2Vzc29yIHNob3VsZCBvdXRwdXQgYSBzdGFuZGFsb25lIGRvY3VtZW50IGRlY2xhcmF0aW9uOyB0aGUgdmFsdWUgbXVzdCBiZSB5ZXMgb3Igbm8KLQotY2RhdGEtc2VjdGlvbi1lbGVtZW50cz1jZGF0YS1zZWN0aW9uLWVsZW1lbnRzCi1jZGF0YS1zZWN0aW9uLWVsZW1lbnRzLkRFU0M9c3BlY2lmaWVzIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgZWxlbWVudHMgd2hvc2UgdGV4dCBub2RlIGNoaWxkcmVuIHNob3VsZCBiZSBvdXRwdXQgdXNpbmcgQ0RBVEEgc2VjdGlvbnMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YmQ1YzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMTAwLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZztidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5vc2dpLnV0aWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZywKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcubW9kZWwKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMDAwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmMzNmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBzY2hlbWEvLFwKLSAgICAgICAgICAgICAgIEpSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgSlJFRGVmYXVsdE91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2xvZzRqLmRlYnVnLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvbG9nNGouZGVidWcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkZmI2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvbG9nNGouZGVidWcucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMgU2V0IHJvb3QgbG9nZ2VyIGxldmVsIHRvIERFQlVHIGFuZCBpdHMgYXBwZW5kZXJzIGFyZSBBMSBhbmQgQTIKLWxvZzRqLnJvb3RMb2dnZXI9RVJST1IsIEEyCi0KLSMgQTIgaXMgc2V0IHRvIGJlIGEgQ29uc29sZUFwcGVuZGVyCi1sb2c0ai5hcHBlbmRlci5BMj1vcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlcgotCi0jIEEyIHVzZXMgUGF0dGVybkxheW91dC4KLWxvZzRqLmFwcGVuZGVyLkEyLmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKLWxvZzRqLmFwcGVuZGVyLkEyLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHtISDptbTpzcyxTU1N9ICUtNXAgWyV0XSAlY3sxfSAleCAtICVtJW4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjY2YjI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYU0wgSkFYUCBMYXVuY2hpbmcKLWxhdW5jaERlbGVnYXRlLm5hbWUuMCA9IEphdmEKLXByb2Nlc3NvclR5cGUubGFiZWwuMSA9IEpSRSBEZWZhdWx0Ci1wcm9jZXNzb3IubGFiZWwuMSA9IEpSRSBJbnN0YW5jZSBEZWZhdWx0Ci1kZWJ1Z2dlciA9IGRlYnVnZ2VyCi1pbnZva2UgPSBpbnZva2UKLXByb2Nlc3NvciA9IHByb2Nlc3NvcgotcHJvY2Vzc29yVHlwZSA9IHByb2Nlc3NvclR5cGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjU0OWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImRlYnVnZ2VyIiBuYW1lPSIlZGVidWdnZXIiIHNjaGVtYT0ic2NoZW1hL2RlYnVnZ2VyLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9Imludm9rZSIgbmFtZT0iJWludm9rZSIgc2NoZW1hPSJzY2hlbWEvaW52b2tlLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InByb2Nlc3NvciIgbmFtZT0iJXByb2Nlc3NvciIgc2NoZW1hPSJzY2hlbWEvcHJvY2Vzc29yLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InByb2Nlc3NvclR5cGUiIG5hbWU9IiVwcm9jZXNzb3JUeXBlIiBzY2hlbWE9InNjaGVtYS9wcm9jZXNzb3JUeXBlLmV4c2QiLz4KLSA8ZXh0ZW5zaW9uCi0gICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubGF1bmNoRGVsZWdhdGVzIj4KLSAgICA8bGF1bmNoRGVsZWdhdGUKLSAgICAgICAgICBkZWxlZ2F0ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZSIKLSAgICAgICAgICBkZWxlZ2F0ZURlc2NyaXB0aW9uPSJUaGUgWFNMVCBMYXVuY2hlciBmb3IgSkFYUCBzdXBwb3J0cyBydW5uaW5nIGFuZCBkZWJ1Z2dpbmcgdHJhbnNmb3JtYXRpb25zIHVzaW5nIEpBWFAtY29tcGxpYW50IFhTTFQgcHJvY2Vzc29ycyIKLSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuaW50ZXJuYWwuamF4cC5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIgotICAgICAgICAgIG1vZGVzPSJydW4sIGRlYnVnIgotICAgICAgICAgIG5hbWU9IiVsYXVuY2hEZWxlZ2F0ZS5uYW1lLjAiCi0gICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgotICAgIDwvbGF1bmNoRGVsZWdhdGU+ICAgIAotIDwvZXh0ZW5zaW9uPgotICAgICAJCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KLQkJPGluaXRpYWxpemVyCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPgotCQk8L2luaXRpYWxpemVyPgotCTwvZXh0ZW5zaW9uPgotIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW52b2tlIj4KLQkJPGludm9rZXIgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAuaW52b2tlIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyIgotCQkJY2xhc3NwYXRoPSIke2VjbGlwc2Vfb3JiaXQ6b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnfTske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmd9OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLmxvZzRqfSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotICAJPGV4dGVuc2lvbgotCSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlIj4KLSAgICAgPHByb2Nlc3NvclR5cGUKLSAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXM9IkpSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZS5qcmVEZWZhdWx0IgotICAgICAgICAgICAgbGFiZWw9IiVwcm9jZXNzb3JUeXBlLmxhYmVsLjEiCi0gICAgICAgICAgICBvdXRwdXRQcm9wZXJ0aWVzPSJKUkVEZWZhdWx0T3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIiAvPgotCSA8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3IiPgotICAgICAgICA8cHJvY2Vzc29yCi0gICAgICAgICAgICAgIGNsYXNzcGF0aD0iIgotICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuanJlLmRlZmF1bHQiCi0gICAgICAgICAgICAgIGxhYmVsPSIlcHJvY2Vzc29yLmxhYmVsLjEiCi0gICAgICAgICAgICAgIHByb2Nlc3NvclR5cGVJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZS5qcmVEZWZhdWx0IgotICAgICAgICAgICAgICBzdXBwb3J0cz0iMS4wIi8+Ci0JIDwvZXh0ZW5zaW9uPgotIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL2RlYnVnZ2VyLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL2RlYnVnZ2VyLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmODBmMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9kZWJ1Z2dlci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgaWQ9ImRlYnVnZ2VyIiBuYW1lPSJYU0xUIERlYnVnZ2VyIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvbnRyaWJ1dGUgYSBkZWJ1Z2dlciBmb3IgYSBwYXJ0aWN1bGFyIEpBWFAgcHJvY2Vzc29yIHR5cGUgKGUuZy4gU2F4b24pLiBUaGUgZXh0ZW5zaW9uIHBvaW50IHByaW1hcmlseSBkZWZpbmVzIHRoZSBjbGFzc3BhdGggYW5kIHRyYW5zZm9ybWVyIGZhY3RvcnkgdG8gYmUgdXNlZCB3aGVuIGRlYnVnZ2luZy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9ImRlYnVnZ2VyIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImRlYnVnZ2VyIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBBIGRlYnVnZ2VyIGZvciBhIHByb2Nlc3NvciB0eXBlCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkIGZvciB0aGlzIGRlYnVnZ2VyCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIG5hbWUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBVSQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzcGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBICZhcG9zOzsmYXBvczstc2VwYXJhdGVkIGNsYXNzcGF0aCByZXF1aXJlZCB0byBydW4gdGhlIGRlYnVnZ2VyIChpbiBhZGRpdGlvbiB0byB0aGF0IGFscmVhZHkgYWRkZWQgYnkgdGhlIHByb2Nlc3NvciBpdHNlbGYpLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InByb2Nlc3NvclR5cGVJZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgcHJvY2Vzc29yIHR5cGUgdGhhdCB0aGlzIGRlYnVnZ2VyIHdvcmtzIHdpdGgKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzc05hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBmdWxseS1xdWFsaWZpZWQgY2xhc3MgdGhhdCBpbXBsZW1lbnQgdGhlIElYU0xEZWJ1Z2dlciBpbnRlcmZhY2UuIEl0IGlzIGVhc2llciB0byBleHRlbmQgQWJzdHJhY3RYU0xEZWJ1Z2dlci4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249IjpvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuSVhTTERlYnVnZ2VyIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHJhbnNmb3JtZXJGYWN0b3J5Q2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSB0cmFuc2Zvcm1lciBmYWN0b3J5IHRvIHVzZSBmb3IgZGVidWdnaW5nLiBUaGlzIG11c3QgYmUgb25lIG9mIHRoZSB0cmFuc2Zvcm1lciBmYWN0b3JpZXMgYmVsb25naW5nIHRvIHRoZSBwcm9jZXNzb3IgdHlwZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249ImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OiIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmRlYnVnZ2VyJnF1b3Q7Jmd0OwotICAgICAgJmx0O2RlYnVnZ2VyCi0gICAgICAgICAgICBjbGFzc05hbWU9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyJnF1b3Q7Ci0gICAgICAgICAgICBjbGFzc3BhdGg9JnF1b3Q7JHtlY2xpcHNlX29yYml0Om9yZy5lY2xpcHNlLndzdC54c2wueGFsYW59JnF1b3Q7Ci0gICAgICAgICAgICBpZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyJnF1b3Q7Ci0gICAgICAgICAgICBuYW1lPSZxdW90O1hhbGFuIDIuNS4xIG9yIGdyZWF0ZXImcXVvdDsKLSAgICAgICAgICAgIHByb2Nlc3NvclR5cGVJZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUmcXVvdDsKLSAgICAgICAgICAgIHRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzPSZxdW90O29yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7L2RlYnVnZ2VyJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJmx0Oy9hJmd0Oy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9pbnZva2UuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvaW52b2tlLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMGMxZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9pbnZva2UuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgaWQ9Imludm9rZSIgbmFtZT0iWFNMVCBQcm9jZXNzb3IgSW52b2tlciIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7YiZndDtUaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwbHVnaW5zLiZsdDsvYiZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IGludGVybmFsPSJ0cnVlIiAvPgotICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJpbnZva2VyIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9Imludm9rZXIiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBVbmlxdWUgaWQgZm9yIHRoaXMgaW52b2tlcgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBJUHJvY2Vzc29ySW52b2tlciBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzc3BhdGgiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBzZW1pLWNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGphcnMgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGNvbnRyaWJ1dGluZyBwbHVnaW4uIE9uZSBvZiB0aGUgamFycyBtdXN0IGNvbnRhaW4gdGhlIEludm9rZXIgY2xhc3MgbmFtZWQgaW4gdGhlIGNsYXNzIGF0dHJpYnV0ZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotCi0KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZxdW90OyZndDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZsdDsvYSZndDsuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvcHJvY2Vzc29yLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL3Byb2Nlc3Nvci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTllMDhjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvcHJvY2Vzc29yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiBpZD0icHJvY2Vzc29yIiBuYW1lPSJYU0xUIFByb2Nlc3NvciIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb250cmlidXRlIGEgSmF2YSBYU0xUIHByb2Nlc3NvciBpbnN0YW5jZSAoZS5nLiBYYWxhbiAyLjcuMCkuIFRoZSBleHRlbnNpb24gcG9pbnQgcHJpbWFyaWx5IGRlZmluZXMgdGhlIGNsYXNzcGF0aCB0byBiZSB1c2VkIHdoZW4gbGF1bmNoaW5nIGFuIFhTTFQgdHJhbnNmb3JtYXRpb24uCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgPG1ldGEuZWxlbWVudCAvPgotICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwcm9jZXNzb3IiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icHJvY2Vzc29yIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IGxhYmVsQXR0cmlidXRlPSJsYWJlbCIvPgotICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBBbiBpbnN0YW5jZSBvZiBhIEpBWFAtY29tcGxpYW50IFhTTFQgcHJvY2Vzc29yCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkIGZvciB0aGlzIHByb2Nlc3NvciBpbnN0YW5jZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgbGFiZWwgZm9yIHRoaXMgaW5zdGFuY2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBVSQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvY2Vzc29yVHlwZUlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBpZCBmb3IgdGhlIHByb2Nlc3NvciB0eXBlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3NwYXRoIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBjbGFzc3BhdGggdG8gdXNlIHdoZW4gdGhpcyBwcm9jZXNzb3IgaXMgbGF1bmNoZWQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZWJ1Z2dlcklkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBpZCBvZiBhIGRlYnVnZ2VyIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBwcm9jZXNzb3IKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzdXBwb3J0cyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHN1cHBvcnRlZCBYU0xUIHZlcnNpb25zIGUuZy4gMS4wLDIuMAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvciZxdW90OyZndDsKLSAgICAgICZsdDshLS0gQW4gYWRvcHRlciBjYW4gc3BlY2lmeSB0aGUgJHtlY2xpcHNlX29yYml0OiB9IHZhcmlhYmxlIHRvIGluZGljYXRlIHdoaWNoIGVjbGlwc2UKLSAgICAgICAgICAgYnVuZGxlIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY2xhc3MgcGF0aC4gLS0mZ3Q7Ci0gICAgICAmbHQ7cHJvY2Vzc29yCi0gICAgICBjbGFzc3BhdGg9JnF1b3Q7JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUueGFsYW59OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyfTske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS5iY2VsfTske2VjbGlwc2Vfb3JiaXQ6amF2YV9jdXAucnVudGltZX0mcXVvdDsKLSAgICAgICAgICAgIGlkPSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnhhbGFuLnByb2Nlc3NvciZxdW90OwotICAgICAgICAgICAgbGFiZWw9JnF1b3Q7JXByb2Nlc3Nvci5sYWJlbC4xJnF1b3Q7Ci0gICAgICAgICAgICBwcm9jZXNzb3JUeXBlSWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlJnF1b3Q7Ci0gICAgICAgICAgICBkZWJ1Z2dlcklkPSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXImcXVvdDsKLSAgICAgICAgICAgIHN1cHBvcnRzPSZxdW90OzEuMCZxdW90OyZndDsKLSAgICAgICZsdDsvcHJvY2Vzc29yJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJmx0Oy9hJmd0Oy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9wcm9jZXNzb3JUeXBlLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL3Byb2Nlc3NvclR5cGUuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFhZGE1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL3Byb2Nlc3NvclR5cGUuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIGlkPSJwcm9jZXNzb3JUeXBlIiBuYW1lPSJYU0xUIFByb2Nlc3NvciBUeXBlIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvbnRyaWJ1dGUgYSBKYXZhIFhTTFQgcHJvY2Vzc29yIHR5cGUgKGUuZy4gWGFsYW4sIFNheG9uKS4gVGhlIHByb2Nlc3NvciB0eXBlIGRlZmluZXMgd2hpY2ggSkFYUCBhdHRyaWJ1dGVzIGFuZCBvdXRwdXQgcHJvcGVyaWVzIGFyZSBzdXBwb3J0ZWQsIGFuZCBhbHNvIHRoZSB0cmFuc2Zvcm1lciBmYWN0b3J5IGNsYXNzZXMgaXQgY29udGFpbnMuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgPG1ldGEuZWxlbWVudCAvPgotICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwcm9jZXNzb3JUeXBlIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InByb2Nlc3NvclR5cGUiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgbGFiZWxBdHRyaWJ1dGU9ImxhYmVsIi8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InRyYW5zZm9ybWVyRmFjdG9yeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVW5pcXVlIGlkIGZvciB0aGUgcHJvY2Vzc29yIHR5cGUKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBOYW1lIGZvciBkaXNwbGF5IGluIHRoZSBVSQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ib3V0cHV0UHJvcGVydGllcyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBMb2NhdGlvbiBvZiBhIHByb3BlcnRpZXMgZmlsZSBjb250YWluaW5nIHRoZSBsaXN0IG9mIHRoZSBwcm9jZXNzb3JzIG91dHB1dCBwcm9wZXJ0aWVzLiBNdXN0IGJlIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgYnVuZGxlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImF0dHJpYnV0ZVByb3BlcnRpZXMiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgTG9jYXRpb24gb2YgYSBwcm9wZXJ0aWVzIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiB0aGUgYXR0cmlidXRlcyBzdXBwb3J0ZWQgYnkgdGhpcyBwcm9jZXNzb3IuIE11c3QgYmUgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBidW5kbGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InRyYW5zZm9ybWVyRmFjdG9yeSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgQSBUcmFuc2Zvcm1lckZhY3RvcnkgZm9yIHRoaXMgdHlwZQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJmYWN0b3J5Q2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGZ1bGx5LXF1YWxpZmllZCB0cmFuc2Zvcm1lciBmYWN0b3J5IGNsYXNzCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeToiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgbmFtZSBmb3IgdGhpcyB0cmFuc2Zvcm1lciBmYWN0b3J5IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgVUkKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtwcmUmZ3Q7Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvclR5cGUmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7cHJvY2Vzc29yVHlwZQotICAgICAgICAgICAgYXR0cmlidXRlUHJvcGVydGllcz0mcXVvdDtYYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcyZxdW90OwotICAgICAgICAgICAgaWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlJnF1b3Q7Ci0gICAgICAgICAgICBsYWJlbD0mcXVvdDslcHJvY2Vzc29yVHlwZS5sYWJlbC4wJnF1b3Q7Ci0gICAgICAgICAgICBvdXRwdXRQcm9wZXJ0aWVzPSZxdW90O1hhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzJnF1b3Q7Jmd0OwotICAgICAgICAgJmx0O3RyYW5zZm9ybWVyRmFjdG9yeQotICAgICAgICAgICAgICAgZmFjdG9yeUNsYXNzPSZxdW90O29yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwmcXVvdDsKLSAgICAgICAgICAgICAgIG5hbWU9JnF1b3Q7SW50ZXJwcmV0aXZlJnF1b3Q7Jmd0OwotICAgICAgICAgJmx0Oy90cmFuc2Zvcm1lckZhY3RvcnkmZ3Q7Ci0gICAgICAgICAmbHQ7dHJhbnNmb3JtZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICBmYWN0b3J5Q2xhc3M9JnF1b3Q7b3JnLmFwYWNoZS54YWxhbi54c2x0Yy50cmF4LlRyYW5zZm9ybWVyRmFjdG9yeUltcGwmcXVvdDsKLSAgICAgICAgICAgICAgIG5hbWU9JnF1b3Q7Q29tcGlsaW5nJnF1b3Q7Jmd0OwotICAgICAgICAgJmx0Oy90cmFuc2Zvcm1lckZhY3RvcnkmZ3Q7Ci0gICAgICAmbHQ7L3Byb2Nlc3NvclR5cGUmZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmcXVvdDsmZ3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmbHQ7L2EmZ3Q7LiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSUF0dHJpYnV0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lBdHRyaWJ1dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY3OTE0Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSUF0dHJpYnV0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotCi0vKioKLSAqIEEgYXR0cmlidXRlIHN1cHBvcnRlZCBieSBhbiBYU0xUIHByb2Nlc3Nvci4gCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGludGVyZmFjZSBJQXR0cmlidXRlCi17Ci0JLyoqCi0JICogQ29uc3RhbnQgZm9yIGF0dHJpYnV0ZXMgb2YgdHlwZSA8Y29kZT5zdHJpbmc8L2NvZGU+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCi0JICovCi0JU3RyaW5nIFRZUEVfU1RSSU5HID0gInN0cmluZyI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBDb25zdGFudCBmb3IgYXR0cmlidXRlcyBvZiB0eXBlIDxjb2RlPmJvb2xlYW48L2NvZGU+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCi0JICovCi0JU3RyaW5nIFRZUEVfQk9PTEVBTiA9ICJib29sZWFuIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIENvbnN0YW50IGZvciBhdHRyaWJ1dGVzIG9mIHR5cGUgPGNvZGU+aW50PC9jb2RlPgotCSAqIEBzZWUgI2dldFR5cGUoKQotCSAqLwotCVN0cmluZyBUWVBFX0lOVCA9ICJpbnQiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQ29uc3RhbnQgZm9yIGF0dHJpYnV0ZXMgb2YgdHlwZSA8Y29kZT5kb3VibGU8L2NvZGU+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCi0JICovCi0JU3RyaW5nIFRZUEVfRE9VQkxFID0gImRvdWJsZSI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBDb25zdGFudCBmb3IgYXR0cmlidXRlcyBvZiB0eXBlIDxjb2RlPmZsb2F0PC9jb2RlPgotCSAqIEBzZWUgI2dldFR5cGUoKQotCSAqLwotCVN0cmluZyBUWVBFX0ZMT0FUID0gImZsb2F0IjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIENvbnN0YW50IGZvciBhdHRyaWJ1dGVzIG9mIHR5cGUgPGNvZGU+Y2xhc3M8L2NvZGU+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCi0JICovCi0JU3RyaW5nIFRZUEVfQ0xBU1MgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQ29uc3RhbnQgZm9yIGF0dHJpYnV0ZXMgb2YgdHlwZSA8Y29kZT5vYmplY3Q8L2NvZGU+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCi0JICovCi0JU3RyaW5nIFRZUEVfT0JKRUNUID0gIm9iamVjdCI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIEdldCB0aGUgVVJJIGZvciB0aGlzIGF0dHJpYnV0ZQotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSBVUkkKLQkgKi8KLQlTdHJpbmcgZ2V0VVJJKCk7Ci0KLQkvKioKLQkgKiBHZXQgYSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBhdHRyaWJ1dGUKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgZGVzY3JpcHRpb24KLQkgKi8KLQlTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKTsKLQotCS8qKgotCSAqIEdldCB0aGUgdHlwZSBvZiB0aGlzIGF0dHJpYnV0ZS4gV2lsbCBtYXRjaCBvbmUgb2YgdGhlIFRZUEUgY29uc3RhbnRzIGluIHRoaXMgaW50ZXJmYWNlLgotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSB0eXBlOiBvbmUgb2YgPGNvZGU+VFlQRV9TVFJJTkc8L2NvZGU+LCA8Y29kZT5UWVBFX0JPT0xFQU48L2NvZGU+LCAKLQkgKiA8Y29kZT5UWVBFX0lOVDwvY29kZT4sIDxjb2RlPlRZUEVfRE9VQkxFPC9jb2RlPiwgPGNvZGU+VFlQRV9GTE9BVDwvY29kZT4sIDxjb2RlPlRZUEVfQ0xBU1M8L2NvZGU+LCAKLQkgKiBvciA8Y29kZT5UWVBFX09CSkVDVDwvY29kZT4KLQkgKi8KLQlTdHJpbmcgZ2V0VHlwZSgpOwotCi0JLyoqCi0JICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgdmFsaWQgb25lIGZvciB0aGlzIGF0dHJpYnV0ZS4KLQkgKiBAcmV0dXJuIGFuIDxjb2RlPklTdGF0dXM8L2NvZGU+IHdpdGggc2V2ZXJpdHkgPGNvZGU+T0s8L2NvZGU+IGlmIHZhbGlkLCBvciA8Y29kZT5FUlJPUjwvY29kZT4gaWYgaW52YWxpZC4KLQkgKi8KLQlJU3RhdHVzIHZhbGlkYXRlVmFsdWUoU3RyaW5nIHZhbHVlKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JRGVidWdnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JRGVidWdnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUwMmY5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSURlYnVnZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi0vKioKLSAqIEFuIFhTTFQgZGVidWdnZXIuIFR5cGljYWxseSB0aGlzIHdpbGwgaGF2ZSBiZWVuIAotICogY29udHJpYnV0ZWQgdmlhIHRoZSA8Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5kZWJ1Z2dlcjwvY29kZT4gZXh0ZW5zaW9uIHBvaW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSURlYnVnZ2VyCi17Ci0JLyoqCi0JICogR2V0IHRoZSB1bmlxdWUgaWQgZm9yIHRoaXMgZGVidWdnZXIuCi0JICogQHJldHVybiBkZWJ1Z2dlciBpZAotCSAqLwotCVN0cmluZyBnZXRJZCgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBzZXQgb2YgYnVuZGxlLXJlbGF0aXZlIGphciBmaWxlcyB0byBhZGQgdG8gdGhlIGNsYXNzcGF0aC4gCi0JICogQHJldHVybiBhcnJheSBvZiBidW5kbGUtcmVsYXRpdmUgamFycwotCSAqLwotCVN0cmluZ1tdIGdldENsYXNzUGF0aCgpOwotCi0JLyoqCi0JICogR2V0IGEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgZGVidWdnZXIKLQkgKiBAcmV0dXJuIHRoZSBuYW1lIGZvciB0aGUgZGVidWdnZXIKLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBwcm9jZXNzb3IgdHlwZSB0aGF0IHRoaXMgZGVidWdnZXIgaXMgYXNzb2NpYXRlZCB3aXRoCi0JICogQHJldHVybiB0aGUgcHJvY2Vzc29yIHR5cGUKLQkgKi8KLQlJUHJvY2Vzc29yVHlwZSBnZXRQcm9jZXNzb3JUeXBlKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGNsYXNzIG5hbWUgZm9yIHRoaXMgZGVidWdnZXIKLQkgKiBAcmV0dXJuIHRoZSBjbGFzcyBuYW1lCi0JICovCi0JU3RyaW5nIGdldENsYXNzTmFtZSgpOwotCQotCS8qKgotCSAqIEdldCB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yeSB0aGlzIGRlYnVnZ2VyIGlzIGFzc29jaWF0ZWQgd2l0aAotCSAqIEByZXR1cm4gdGhlIHRyYW5zZm9ybWVyIGZhY3RvcnkKLQkgKi8KLQlTdHJpbmcgZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSU91dHB1dFByb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSU91dHB1dFByb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZDJjNzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lPdXRwdXRQcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotLyoqCi0gKiBBbiBvdXRwdXQgcHJvcGVydHkgc3VwcG9ydGVkIGJ5IGFuIFhTTFQgcHJvY2Vzc29yLiAKLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElPdXRwdXRQcm9wZXJ0eQotewotCS8qKgotCSAqIEdldCB0aGUgVVJJIG9mIHRoaXMgb3V0cHV0IHByb3BlcnR5LiAKLQkgKiBAcmV0dXJuIGEgdW5pcXVlIFVSSQotCSAqLwotCVN0cmluZyBnZXRVUkkoKTsKLQotCS8qKgotCSAqIEdldCBhIGRlc2NyaXB0aW9uIGZvciB0aGlzIG91dHB1dCBwcm9wZXJ0eS4gCi0JICogQHJldHVybiBhIGRlc2NyaXB0aW9uCi0JICovCi0JU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckluc3RhbGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySW5zdGFsbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2FiMjdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySW5zdGFsbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotLyoqCi0gKiBBbiBpbnN0YW5jZSBvZiBhbiBYU0xUIHByb2Nlc3NvciAoZS5nLiBYYWxhbiAyLjcuMCkuCi0gKiAKLSAqIEBzZWUgSVByb2Nlc3Nvckluc3RhbGwKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGludGVyZmFjZSBJUHJvY2Vzc29ySW5zdGFsbAotewotCS8qKgotCSAqIEdldCB0aGUgdW5xaXVlIGlkIG9mIHRoaXMgaW5zdGFsbAotCSAqIEByZXR1cm4gdGhlIHVuaXF1ZSBpZAotCSAqLwotCVN0cmluZyBnZXRJZCgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBuYW1lIG9mIHRoaXMgaW5zdGFsbAotCSAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBpbnN0YWxsCi0JICovCi0JU3RyaW5nIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgdGhlIHByb2Nlc3NvciB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbGwKLQkgKiBAcmV0dXJuIHRoZSBwcm9jZXNzb3IgdHlwZSBpZAotCSAqLwotCUlQcm9jZXNzb3JUeXBlIGdldFByb2Nlc3NvclR5cGUoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgamFyIGZpbGVzIGZvciB0aGlzIHByb2Nlc3NvcgotCSAqIEByZXR1cm4gYSBzZXQgb2YgamFyIGZpbGVzCi0JICovCi0JSVByb2Nlc3NvckphcltdIGdldFByb2Nlc3NvckphcnMoKTsKLQotCS8qKgotCSAqIEdldCB3aGV0aGVyIHRoaXMgaW5zdGFsbCBoYXMgYmVlbiBjb250cmlidXRlZCB2aWEgdGhlIDxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnByb2Nlc3NvcjwvY29kZT4gZXh0ZW5zaW9uIHBvaW50LgotCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgY29udHJpYnV0ZWQgdmlhIHRoZSBleHRlbnNpb24gcG9pbnQsIG90aGVyd2lzZSA8Y29kZT5mYWxzZTwvY29kZT4uCi0JICovCi0JYm9vbGVhbiBpc0NvbnRyaWJ1dGVkKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIFhTTFQgdmVyc2lvbnMKLQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaW5zdGFsbCBoYXMgYSBkZWJ1Z2dlciwgb3RoZXJ3aXNlIDxjb2RlPmZhbHNlPC9jb2RlPi4KLQkgKi8KLQkvLyBUT0RPIGRlcHJlY2F0ZSBhbmQgdXNlIGJvb2xlYW4gc3VwcG9ydHMgaW5zdGFlZAotCVN0cmluZyBnZXRTdXBwb3J0cygpOwotCi0JLyoqCi0JICogR2V0IHdoZXRoZXIgdGhpcyBpbnN0YWxsIHN1cHBvcnRzIHRoZSBzcGVjaWZpZWQgeHNsdCB2ZXJzaW9uLgotCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpbnN0YWxsIHN1cHBvcnRzIHRoZSB2ZXJzaW9uLCBvdGhlcndpc2UgPGNvZGU+ZmFsc2U8L2NvZGU+LgotCSAqLwotCWJvb2xlYW4gc3VwcG9ydHMoU3RyaW5nIHhzbHRWZXJzaW9uKTsKLQotCS8qKgotCSAqIEdldCB0aGUgZGVidWdnZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFsbAotCSAqIEByZXR1cm4gdGhlIGRlYnVnZ2VyLCBvciBudWxsIGlmIG5vIGRlYnVnZ2VyIGhhcyBiZWVuIHNldAotCSAqLwotCUlEZWJ1Z2dlciBnZXREZWJ1Z2dlcigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JJbnZva2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckludm9rZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwMTAxYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckludm9rZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVByb2Nlc3Nvckludm9rZXIKLXsKLQlTdHJpbmcgZ2V0SWQoKTsKLQotCVN0cmluZyBnZXRJbnZva2VyQ2xhc3NOYW1lKCk7Ci0KLQlTdHJpbmdbXSBnZXRDbGFzc3BhdGhFbnRyaWVzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckphci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JKYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMwNTJiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckphci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLQotLyoqCi0gKiBBIGphciBmaWxlIGZvciBhbiBYU0xUIHByb2Nlc3NvcgotICogCi0gKiBAc2VlIElQcm9jZXNzb3JJbnN0YWxsCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVByb2Nlc3NvckphcgotewotCS8qKgotCSAqIFRoZSBwYXRoIG1heSBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZTsgaW4gdGhlIHdvcmtzcGFjZSBvciBleHRlcm5hbC4KLQkgKiBAcmV0dXJuIHRoZSBwYXRoIHRvIHRoaXMgamFyCi0JICovCi0JSVBhdGggZ2V0UGF0aCgpOwotCi0JLyoqCi0JICogVGhlIFVSTCB3aWxsIGFsd2F5cyBiZSBhYnNvbHV0ZSBhbmQgY2FuIGJlIG9wZW5lZC4KLQkgKiBAcmV0dXJuIGEgVVJMIHRvIHRoZSBqYXIKLQkgKi8KLQlVUkwgYXNVUkwoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29yVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxM2U3MDAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBBIHBhcnRpY3VsYXIgdHlwZSBvZiBYU0xUIFByb2Nlc3NvciAoZS5nLiBYYWxhbikgZm9yIHdoaWNoIHRoZXJlIG1heSBiZSBhbnkgbnVtYmVyIG9mIGluc3RhbGxzLgotICogCi0gKiBAc2VlIElQcm9jZXNzb3JJbnN0YWxsCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVByb2Nlc3NvclR5cGUKLXsKLQlTdHJpbmcgZ2V0SWQoKTsKLQotCVN0cmluZyBnZXRMYWJlbCgpOwotCi0JYm9vbGVhbiBpc0pSRURlZmF1bHQoKTsKLQotCUlUcmFuc2Zvcm1lckZhY3RvcnlbXSBnZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpOwotCi0JSUF0dHJpYnV0ZVtdIGdldEF0dHJpYnV0ZXMoKTsKLQotCU1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0QXR0cmlidXRlVmFsdWVzKCk7Ci0KLQlJT3V0cHV0UHJvcGVydHlbXSBnZXRPdXRwdXRQcm9wZXJ0aWVzKCk7Ci0KLQlNYXA8U3RyaW5nLCBTdHJpbmc+IGdldE91dHB1dFByb3BlcnR5VmFsdWVzKCk7Ci0KLQlJVHJhbnNmb3JtZXJGYWN0b3J5IGdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JVHJhbnNmb3JtZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVRyYW5zZm9ybWVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDcxNmFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JVHJhbnNmb3JtZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotcHVibGljIGludGVyZmFjZSBJVHJhbnNmb3JtZXJGYWN0b3J5Ci17Ci0JU3RyaW5nIGdldE5hbWUoKTsKLQlTdHJpbmcgZ2V0RmFjdG9yeUNsYXNzKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmZkZmUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLQotcHVibGljIGNsYXNzIEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5WT0tFUl9ERVNDUklQVE9SID0gSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLklOVk9LRVJfREVTQ1JJUFRPUiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1BST0NFU1NPUiA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX1BST0NFU1NPUiI7IC8vJE5PTi1OTFMtMSQJCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9PVVRQVVRfUFJPUEVSVElFUyA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX09VVFBVVF9QUk9QRVJUSUVTIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfQVRUUklCVVRFUyA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX0FUVFJJQlVURVMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9ERUZBVUxUX0RFQlVHR0lOR19JTlNUQUxMX0lEID0gSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfREVGQVVMVF9ERUJVR0dJTkdfSU5TVEFMTF9JRCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1RSQU5TRk9STUVSX0ZBQ1RPUlkgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9UUkFOU0ZPUk1FUl9GQUNUT1JZIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWEFMQU5fVFlQRV9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FYT05fVFlQRV9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLnByb2Nlc3NvclR5cGUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FYT05fMV8wX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbl8xXzAucHJvY2Vzc29yVHlwZSI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9KQVhQUnVudGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0pBWFBSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxY2U5ZmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0pBWFBSdW50aW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuRmVhdHVyZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlByb2Nlc3NvclByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnkuRGVidWdnZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5Lkludm9rZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5LlByb2Nlc3NvclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnkuUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5OwotCi1wdWJsaWMgY2xhc3MgSkFYUFJ1bnRpbWUKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGX1BST0NFU1NPUl9YTUwgPSAiUFJFRl9QUk9DRVNTT1JfWE1MIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZfRkVBVFVSRV9YTUwgPSAiUFJFRl9GRUFUVVJFX1hNTCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGX09VVFBVVF9QUk9QRVJUSUVTX1hNTCA9ICJQUkVGX09VVFBVVF9QUk9QRVJUSUVTX1hNTCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKUkVfREVGQVVMVF9QUk9DRVNTT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuanJlLmRlZmF1bHQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlJFX0RFRkFVTFRfUFJPQ0VTU09SX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZS5qcmVEZWZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIE5FWFRfSURfTE9DSyA9IG5ldyBieXRlWzBdOwotCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBSRUdJU1RSWV9MT0NLID0gbmV3IGJ5dGVbMF07Ci0KLQlwcml2YXRlIHN0YXRpYyBpbnQgbGFzdFN0YW5kaW5JRDsKLQlwcml2YXRlIHN0YXRpYyBQcm9jZXNzb3JUeXBlUmVnaXN0cnkgcHJvY2Vzc29yVHlwZVJlZ2lzdHJ5OwotCXByaXZhdGUgc3RhdGljIFByb2Nlc3NvclJlZ2lzdHJ5IHByb2Nlc3NvclJlZ2lzdHJ5OwotCXByaXZhdGUgc3RhdGljIEludm9rZXJSZWdpc3RyeSBpbnZva2VyUmVnaXN0cnk7Ci0JcHJpdmF0ZSBzdGF0aWMgRGVidWdnZXJSZWdpc3RyeSBkZWJ1Z2dlclJlZ2lzdHJ5OwotCi0JcHJpdmF0ZSBzdGF0aWMgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5IGdldFByb2Nlc3NvclR5cGVSZWdpc3RyeSgpCi0JewotCQlzeW5jaHJvbml6ZWQgKFJFR0lTVFJZX0xPQ0spCi0JCXsKLQkJCWlmIChwcm9jZXNzb3JUeXBlUmVnaXN0cnkgPT0gbnVsbCkKLQkJCQlwcm9jZXNzb3JUeXBlUmVnaXN0cnkgPSBuZXcgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5KCk7Ci0JCX0KLQkJcmV0dXJuIHByb2Nlc3NvclR5cGVSZWdpc3RyeTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBQcm9jZXNzb3JSZWdpc3RyeSBnZXRQcm9jZXNzb3JSZWdpc3RyeSgpCi0JewotCQlzeW5jaHJvbml6ZWQgKFJFR0lTVFJZX0xPQ0spCi0JCXsKLQkJCWlmIChwcm9jZXNzb3JSZWdpc3RyeSA9PSBudWxsKQotCQkJCXByb2Nlc3NvclJlZ2lzdHJ5ID0gbmV3IFByb2Nlc3NvclJlZ2lzdHJ5KCk7Ci0JCX0KLQkJcmV0dXJuIHByb2Nlc3NvclJlZ2lzdHJ5OwotCX0KLQotCXByaXZhdGUgc3RhdGljIEludm9rZXJSZWdpc3RyeSBnZXRJbnZva2VyUmVnaXN0cnkoKQotCXsKLQkJc3luY2hyb25pemVkIChSRUdJU1RSWV9MT0NLKQotCQl7Ci0JCQlpZiAoaW52b2tlclJlZ2lzdHJ5ID09IG51bGwpCi0JCQkJaW52b2tlclJlZ2lzdHJ5ID0gbmV3IEludm9rZXJSZWdpc3RyeSgpOwotCQl9Ci0JCXJldHVybiBpbnZva2VyUmVnaXN0cnk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRGVidWdnZXJSZWdpc3RyeSBnZXREZWJ1Z2dlclJlZ2lzdHJ5KCkKLQl7Ci0JCXN5bmNocm9uaXplZCAoUkVHSVNUUllfTE9DSykKLQkJewotCQkJaWYgKGRlYnVnZ2VyUmVnaXN0cnkgPT0gbnVsbCkKLQkJCQlkZWJ1Z2dlclJlZ2lzdHJ5ID0gbmV3IERlYnVnZ2VyUmVnaXN0cnkoKTsKLQkJfQotCQlyZXR1cm4gZGVidWdnZXJSZWdpc3RyeTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUHJlZmVyZW5jZXMoKQotCXsKLQkJSkFYUExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXN5bmNocm9uaXplZCAoUkVHSVNUUllfTE9DSykKLQkJewotCQkJLy8gZm9yY2UgdGhlIHJlZ2lzdHJpZXMgdG8gYmUgcmUtaW5pdGlhbGlzZWQgbmV4dCB0aW1lIGl0IGlzIHJlcXVpcmVkCi0JCQlwcm9jZXNzb3JSZWdpc3RyeSA9IG51bGw7Ci0JCQlwcm9jZXNzb3JUeXBlUmVnaXN0cnkgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogRmluZCBhIHVuaXF1ZSBwcm9jZXNzb3IgaW5zdGFsbCBpZC4gQ2hlY2sgZXhpc3RpbmcgJ3JlYWwnIHByb2Nlc3NvcnMsIGFzCi0JICogd2VsbCBhcyB0aGUgbGFzdCBpZCB1c2VkIGZvciBhIHN0YW5kaW4uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlUHJvY2Vzc29ySWQoSVByb2Nlc3NvclR5cGUgdHlwZSkKLQl7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsW10gaW5zdGFsbHMgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JzKHR5cGUuZ2V0SWQoKSk7Ci0JCVN0cmluZyBpZCA9IG51bGw7Ci0JCXN5bmNocm9uaXplZCAoTkVYVF9JRF9MT0NLKQotCQl7Ci0JCQlkbwotCQkJewotCQkJCWlkID0gU3RyaW5nLnZhbHVlT2YoKytsYXN0U3RhbmRpbklEKTsKLQkJCX0KLQkJCXdoaWxlIChpc1Rha2VuKGlkLCBpbnN0YWxscykpOwotCQl9Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JKYXIgY3JlYXRlUHJvY2Vzc29ySmFyKElQYXRoIHBhdGgpCi0JewotCQlyZXR1cm4gbmV3IFByb2Nlc3NvckphcihwYXRoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVGFrZW4oU3RyaW5nIGlkLCBJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzKQotCXsKLQkJZm9yIChJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsIDogaW5zdGFsbHMpCi0JCXsKLQkJCWlmIChpbnN0YWxsLmdldElkKCkuZXF1YWxzKGlkKSkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRGVidWdnZXJbXSBnZXREZWJ1Z2dlcnMoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnZ2VyUmVnaXN0cnkoKS5nZXREZWJ1Z2dlcnMoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElEZWJ1Z2dlciBnZXREZWJ1Z2dlcihTdHJpbmcgaWQpCi0JewotCQlyZXR1cm4gZ2V0RGVidWdnZXJSZWdpc3RyeSgpLmdldERlYnVnZ2VyKGlkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsW10gZ2V0UHJvY2Vzc29ycygpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JzKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW5zdGFsbFtdIGdldFByb2Nlc3NvcnMoU3RyaW5nIHR5cGVJZCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JSZWdpc3RyeSgpLmdldFByb2Nlc3NvcnModHlwZUlkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldFByb2Nlc3NvcihTdHJpbmcgcHJvY2Vzc29ySWQpCi0JewotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIHByb2Nlc3NvcnMgPSBnZXRQcm9jZXNzb3JzKCk7Ci0JCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA6IHByb2Nlc3NvcnMpCi0JCXsKLQkJCWlmIChpbnN0YWxsLmdldElkKCkuZXF1YWxzKHByb2Nlc3NvcklkKSkKLQkJCQlyZXR1cm4gaW5zdGFsbDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldERlZmF1bHRQcm9jZXNzb3IoKQotCXsKLQkJcmV0dXJuIGdldFByb2Nlc3NvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdFByb2Nlc3NvcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3Nvckluc3RhbGwgZ2V0SlJFRGVmYXVsdFByb2Nlc3NvcigpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yUmVnaXN0cnkoKS5nZXRKUkVEZWZhdWx0UHJvY2Vzc29yKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29yVHlwZVtdIGdldFByb2Nlc3NvclR5cGVzKCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JUeXBlcygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3NvclR5cGVbXSBnZXRQcm9jZXNzb3JUeXBlc0V4Y2xKUkVEZWZhdWx0KCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JUeXBlc0V4Y2xKUkVEZWZhdWx0KCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29yVHlwZSBnZXRQcm9jZXNzb3JUeXBlKFN0cmluZyBpZCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JUeXBlKGlkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnZva2VyIGdldFByb2Nlc3Nvckludm9rZXIoU3RyaW5nIGludm9rZXJJZCkKLQl7Ci0JCXJldHVybiBnZXRJbnZva2VyUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JJbnZva2VyKGludm9rZXJJZCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW52b2tlcltdIGdldFByb2Nlc3Nvckludm9rZXJzKCkKLQl7Ci0JCXJldHVybiBnZXRJbnZva2VyUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JJbnZva2VycygpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFByZWZlcmVuY2VzIGdldFByZWZlcmVuY2VzKCkKLQl7Ci0JCXJldHVybiBKQVhQTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlRmVhdHVyZVByZWZlcmVuY2VzKE1hcDxJUHJvY2Vzc29yVHlwZSwgTWFwPFN0cmluZywgU3RyaW5nPj4gdHlwZUZlYXR1cmVzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQlyZXR1cm47Ci0JCXRyeQotCQl7Ci0JCQltb25pdG9yLmJlZ2luVGFzayhNZXNzYWdlcy5YU0xUUnVudGltZV81LCAxMDApOyAKLQkJCUZlYXR1cmVQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBGZWF0dXJlUHJlZmVyZW5jZXMoKTsKLQkJCU1hcDxTdHJpbmcsTWFwPFN0cmluZyxTdHJpbmc+PiB0eXBlSWRGZWF0dXJlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxNYXA8U3RyaW5nLFN0cmluZz4+KHR5cGVGZWF0dXJlcy5zaXplKCkpOwotCQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogdHlwZUZlYXR1cmVzLmtleVNldCgpKQotCQkJewotCQkJCU1hcDxTdHJpbmcsU3RyaW5nPiB2YWx1ZXMgPSB0eXBlRmVhdHVyZXMuZ2V0KHR5cGUpOwotCQkJCXR5cGVJZEZlYXR1cmVzLnB1dCh0eXBlLmdldElkKCksIHZhbHVlcyk7Ci0JCQl9Ci0JCQlwcmVmcy5zZXRUeXBlRmVhdHVyZXModHlwZUlkRmVhdHVyZXMpOwotCQkJU3RyaW5nIHhtbCA9IHByZWZzLmdldEFzWE1MKCk7Ci0JCQltb25pdG9yLndvcmtlZCg0MCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuZ2V0UHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShKQVhQUnVudGltZS5QUkVGX0ZFQVRVUkVfWE1MLCB4bWwpOwotCQkJbW9uaXRvci53b3JrZWQoMzApOwotCQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJCXJldHVybjsKLQkJCUpBWFBSdW50aW1lLnNhdmVQcmVmZXJlbmNlcygpOwotCQkJbW9uaXRvci53b3JrZWQoMzApOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELE1lc3NhZ2VzLlhTTFRSdW50aW1lXzYsZSkpOyAKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCW1vbml0b3IuZG9uZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNhdmVPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzKE1hcDxJUHJvY2Vzc29yVHlwZSwgTWFwPFN0cmluZyxTdHJpbmc+PiB0eXBlUHJvcGVydGllcywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJcmV0dXJuOwotCQl0cnkKLQkJewotCQkJbW9uaXRvci5iZWdpblRhc2soTWVzc2FnZXMuWFNMVFJ1bnRpbWVfNywgMTAwKTsgCi0JCQlPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzIHByZWZzID0gbmV3IE91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMoKTsKLQkJCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IHR5cGVQcm9wZXJ0aWVzLmtleVNldCgpKQotCQkJewotCQkJCXByZWZzLnNldE91dHB1dFByb3BlcnR5VmFsdWVzKHR5cGUuZ2V0SWQoKSwgdHlwZVByb3BlcnRpZXMuZ2V0KHR5cGUpKTsKLQkJCX0KLQkJCVN0cmluZyB4bWwgPSBwcmVmcy5nZXRBc1hNTCgpOwotCQkJbW9uaXRvci53b3JrZWQoNDApOwotCQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJCXJldHVybjsKLQkJCUpBWFBSdW50aW1lLmdldFByZWZlcmVuY2VzKCkuc2V0VmFsdWUoSkFYUFJ1bnRpbWUuUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwsIHhtbCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuc2F2ZVByZWZlcmVuY2VzKCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsTWVzc2FnZXMuWFNMVFJ1bnRpbWVfOCxlKSk7IAotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJbW9uaXRvci5kb25lKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2F2ZVByb2Nlc3NvclByZWZlcmVuY2VzKElQcm9jZXNzb3JJbnN0YWxsW10gaW5zdGFsbHMsIElQcm9jZXNzb3JJbnN0YWxsIGRlZmF1bHRJbnN0YWxsLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQlyZXR1cm47Ci0JCXRyeQotCQl7Ci0JCQltb25pdG9yLmJlZ2luVGFzayhNZXNzYWdlcy5YU0xUUnVudGltZV85LCAxMDApOyAKLQkJCVByb2Nlc3NvclByZWZlcmVuY2VzIHByZWZzID0gbmV3IFByb2Nlc3NvclByZWZlcmVuY2VzKCk7Ci0JCQlpZiAoZGVmYXVsdEluc3RhbGwgIT0gbnVsbCkKLQkJCQlwcmVmcy5zZXREZWZhdWx0UHJvY2Vzc29ySWQoZGVmYXVsdEluc3RhbGwuZ2V0SWQoKSk7Ci0JCQlwcmVmcy5zZXRQcm9jZXNzb3JzKG5ldyBBcnJheUxpc3Q8SVByb2Nlc3Nvckluc3RhbGw+KEFycmF5cy5hc0xpc3QoaW5zdGFsbHMpKSk7Ci0JCQlTdHJpbmcgeG1sID0gcHJlZnMuZ2V0QXNYTUwoKTsKLQkJCW1vbml0b3Iud29ya2VkKDQwKTsKLQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCQlyZXR1cm47Ci0JCQlKQVhQUnVudGltZS5nZXRQcmVmZXJlbmNlcygpLnNldFZhbHVlKEpBWFBSdW50aW1lLlBSRUZfUFJPQ0VTU09SX1hNTCwgeG1sKTsKLQkJCW1vbml0b3Iud29ya2VkKDMwKTsKLQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCQlyZXR1cm47Ci0JCQlKQVhQUnVudGltZS5zYXZlUHJlZmVyZW5jZXMoKTsKLQkJCW1vbml0b3Iud29ya2VkKDMwKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCxNZXNzYWdlcy5YU0xUUnVudGltZV8xMCxlKSk7IAotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJbW9uaXRvci5kb25lKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsU3RyaW5nPiBjcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhTdHJpbmcgdHlwZUlkKQotCXsKLQkJTWFwPFN0cmluZyxTdHJpbmc+IHByb3BzID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsKLQkJaWYgKEpSRV9ERUZBVUxUX1BST0NFU1NPUl9UWVBFX0lELmVxdWFscyh0eXBlSWQpKQotCQkJcHJvcHMucHV0KCJpbmRlbnQiLCAieWVzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQllbHNlIGlmIChKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5YQUxBTl9UWVBFX0lELmVxdWFscyh0eXBlSWQpKQotCQl7Ci0JCQlwcm9wcy5wdXQoImluZGVudCIsICJ5ZXMiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlwcm9wcy5wdXQoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQkJZWxzZSBpZiAoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuU0FYT05fVFlQRV9JRC5lcXVhbHModHlwZUlkKSkKLQkJewotCQkJcHJvcHMucHV0KCJpbmRlbnQiLCAieWVzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcHJvcHMucHV0KCJ7aHR0cDovL3NheG9uLnNmLm5ldC99aW5kZW50LXNwYWNlcyIsICI0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JCWVsc2UgaWYgKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OXzFfMF9UWVBFX0lELmVxdWFscyh0eXBlSWQpKQotCQl7Ci0JCQlwcm9wcy5wdXQoImluZGVudCIsICJ5ZXMiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlwcm9wcy5wdXQoIntodHRwOi8vc2F4b24uc2YubmV0L31pbmRlbnQtc3BhY2VzIiwgIjQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQkJcmV0dXJuIHByb3BzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hBdHRyaWJ1dGVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoQXR0cmlidXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQ4NjkxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hBdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLlByZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hBdHRyaWJ1dGVzCi17Ci0JcHJpdmF0ZSBmaW5hbCBTZXQ8TGF1bmNoQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gbmV3IEhhc2hTZXQ8TGF1bmNoQXR0cmlidXRlPigpOwotCi0JcHVibGljIFNldDxMYXVuY2hBdHRyaWJ1dGU+IGdldEF0dHJpYnV0ZXMoKQotCXsKLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkQXR0cmlidXRlKExhdW5jaEF0dHJpYnV0ZSBhdHRyaWJ1dGUpCi0JewotCQlhdHRyaWJ1dGVzLmFkZChhdHRyaWJ1dGUpOwotCX0KLQotCXB1YmxpYyBMYXVuY2hBdHRyaWJ1dGUgZ2V0QXR0cmlidXRlKFN0cmluZyB1cmkpCi0JewotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlciA9IGF0dHJpYnV0ZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgdHYgPSBpdGVyLm5leHQoKTsKLQkJCWlmICh0di51cmkuZXF1YWxzKHVyaSkpCi0JCQkJcmV0dXJuIHR2OwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUF0cmlidXRlKFN0cmluZyB1cmkpCi0JewotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlciA9IGF0dHJpYnV0ZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgYXR0cmlidXRlID0gaXRlci5uZXh0KCk7Ci0JCQlpZiAoYXR0cmlidXRlLnVyaS5lcXVhbHModXJpKSkKLQkJCQlpdGVyLnJlbW92ZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1hNTCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBhdHRyaWJ1dGVzRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiQXR0cmlidXRlcyIpOyAvLyROT04tTkxTLTEkCi0JCWRvYy5hcHBlbmRDaGlsZChhdHRyaWJ1dGVzRWwpOwotCi0JCWZvciAoSXRlcmF0b3I8TGF1bmNoQXR0cmlidXRlPiBpdGVyID0gYXR0cmlidXRlcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHRyaWJ1dGUgPSBpdGVyLm5leHQoKTsKLQkJCUVsZW1lbnQgYXR0cmlidXRlRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiQXR0cmlidXRlIik7IC8vJE5PTi1OTFMtMSQKLQkJCWF0dHJpYnV0ZUVsLnNldEF0dHJpYnV0ZSgibmFtZSIsIGF0dHJpYnV0ZS51cmkpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVFbC5zZXRBdHRyaWJ1dGUoInR5cGUiLCBhdHRyaWJ1dGUudHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWF0dHJpYnV0ZUVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBhdHRyaWJ1dGUudmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVzRWwuYXBwZW5kQ2hpbGQoYXR0cmlidXRlRWwpOwotCQl9Ci0KLQkJcmV0dXJuIFByZWZlcmVuY2VVdGlsLnNlcmlhbGl6ZURvY3VtZW50KGRvYyk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMYXVuY2hBdHRyaWJ1dGVzIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudChpbnB1dFN0cmVhbSk7Ci0KLQkJTGF1bmNoQXR0cmlidXRlcyBwZGVmID0gbmV3IExhdW5jaEF0dHJpYnV0ZXMoKTsKLQotCQlFbGVtZW50IGF0dHJpYnV0ZXNFbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQlOb2RlTGlzdCBhdHRyaWJ1dGVFbHMgPSBhdHRyaWJ1dGVzRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkF0dHJpYnV0ZSIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlRWxzLmdldExlbmd0aCgpOyBpKyspCi0JCXsKLQkJCUVsZW1lbnQgYXR0cmlidXRlRWwgPSAoRWxlbWVudCkgYXR0cmlidXRlRWxzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IGF0dHJpYnV0ZUVsLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdHlwZSA9IGF0dHJpYnV0ZUVsLmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdmFsdWUgPSBhdHRyaWJ1dGVFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCXBkZWYuYWRkQXR0cmlidXRlKG5ldyBMYXVuY2hBdHRyaWJ1dGUobmFtZSwgdHlwZSwgdmFsdWUpKTsKLQkJfQotCi0JCXJldHVybiBwZGVmOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njk2MTRmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hQcm9wZXJ0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIExhdW5jaFByb3BlcnRpZXMKLXsKLQlwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCi0JcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0UHJvcGVydGllcygpCi0JewotCQlyZXR1cm4gcHJvcGVydGllczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKQotCXsKLQkJcHJvcGVydGllcy5wdXQobmFtZSwgdmFsdWUpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIG5hbWUpCi0JewotCQlyZXR1cm4gcHJvcGVydGllcy5nZXQobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlUHJvcGVydHkoU3RyaW5nIG5hbWUpCi0JewotCQlwcm9wZXJ0aWVzLnJlbW92ZShuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvWE1MKCkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IHByb3BlcnR5c0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlByb3BlcnRpZXMiKTsgLy8kTk9OLU5MUy0xJAotCQlkb2MuYXBwZW5kQ2hpbGQocHJvcGVydHlzRWwpOwotCi0JCWZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0eSA6IHByb3BlcnRpZXMuZW50cnlTZXQoKSkKLQkJewotCQkJU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eS5nZXRLZXkoKTsKLQkJCVN0cmluZyB2YWx1ZSA9IHByb3BlcnR5LmdldFZhbHVlKCk7Ci0JCQlFbGVtZW50IHByb3BlcnR5RWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUHJvcGVydHkiKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcGVydHlFbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcGVydHlFbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wZXJ0eXNFbC5hcHBlbmRDaGlsZChwcm9wZXJ0eUVsKTsKLQkJfQotCi0JCXJldHVybiBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGF1bmNoUHJvcGVydGllcyBmcm9tWE1MKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoaW5wdXRTdHJlYW0pOwotCi0JCUxhdW5jaFByb3BlcnRpZXMgcGRlZiA9IG5ldyBMYXVuY2hQcm9wZXJ0aWVzKCk7Ci0KLQkJRWxlbWVudCBwcm9wZXJ0eXNFbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQlOb2RlTGlzdCBwcm9wZXJ0eUVscyA9IHByb3BlcnR5c0VsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJQcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydHlFbHMuZ2V0TGVuZ3RoKCk7IGkrKykKLQkJewotCQkJRWxlbWVudCBwcm9wZXJ0eUVsID0gKEVsZW1lbnQpIHByb3BlcnR5RWxzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IHByb3BlcnR5RWwuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyB2YWx1ZSA9IHByb3BlcnR5RWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCi0JCQlwZGVmLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLQkJfQotCi0JCXJldHVybiBwZGVmOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9Qcm9jZXNzb3JJbnN0YWxsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvUHJvY2Vzc29ySW5zdGFsbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWU4NzE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9Qcm9jZXNzb3JJbnN0YWxsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuUGx1Z2luUHJvY2Vzc29ySmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuVXRpbHM7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JJbnN0YWxsIGltcGxlbWVudHMgSVByb2Nlc3Nvckluc3RhbGwKLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBpZDsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgU3RyaW5nIHR5cGU7Ci0JcHJpdmF0ZSBJUHJvY2Vzc29ySmFyW10gamFyczsKLQlwcml2YXRlIGZpbmFsIGJvb2xlYW4gY29udHJpYnV0ZWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgZGVidWdnZXJJZDsKLQlwcml2YXRlIFN0cmluZyBzdXBwb3J0czsKLQotCXB1YmxpYyBQcm9jZXNzb3JJbnN0YWxsKFN0cmluZyBpZCwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgdHlwZUlkLCBJUHJvY2Vzc29ySmFyW10gamFycywgU3RyaW5nIGRlYnVnZ2VySWQsIFN0cmluZyBzdXBwb3J0cywgYm9vbGVhbiBjb250cmlidXRlZCkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJbmFtZSA9IGxhYmVsOwotCQl0eXBlID0gdHlwZUlkOwotCQl0aGlzLmRlYnVnZ2VySWQgPSBkZWJ1Z2dlcklkOwotCQl0aGlzLmNvbnRyaWJ1dGVkID0gY29udHJpYnV0ZWQ7Ci0JCXRoaXMuamFycyA9IGphcnM7Ci0JCXRoaXMuc3VwcG9ydHMgPSBzdXBwb3J0czsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldElkKCkKLQl7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLQl7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JKYXJbXSBnZXRQcm9jZXNzb3JKYXJzKCkKLQl7Ci0JCXJldHVybiBqYXJzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFByb2Nlc3NvckphcnMoSVByb2Nlc3NvckphcltdIGphcnMpCi0JewotCQl0aGlzLmphcnMgPSBqYXJzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvY2Vzc29yVHlwZUlkKCkKLQl7Ci0JCXJldHVybiB0eXBlOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29yVHlwZSBnZXRQcm9jZXNzb3JUeXBlKCkKLQl7Ci0JCXJldHVybiBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlKHR5cGUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFByb2Nlc3NvclR5cGVJZChTdHJpbmcgaWQpCi0JewotCQl0eXBlID0gaWQ7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDb250cmlidXRlZCgpCi0JewotCQlyZXR1cm4gY29udHJpYnV0ZWQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySmFyW10gY3JlYXRlSmFycyhTdHJpbmcgYnVuZGxlSWQsIFN0cmluZyBjbGFzc3BhdGgpCi0JewotCQlJUHJvY2Vzc29ySmFyW10gamFyczsKLQkJaWYgKGNsYXNzcGF0aCA9PSBudWxsKQotCQkJcmV0dXJuIG5ldyBJUHJvY2Vzc29ySmFyWzBdOwotCQlTdHJpbmdbXSBqYXJzdHJpbmcgPSBjbGFzc3BhdGguc3BsaXQoIjsiKTsgLy8kTk9OLU5MUy0xJAotCQlqYXJzID0gbmV3IElQcm9jZXNzb3JKYXJbamFyc3RyaW5nLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgamFyc3RyaW5nLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgamFyID0gamFyc3RyaW5nW2ldOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJaWYgKGphci5zdGFydHNXaXRoKCIke2VjbGlwc2Vfb3JiaXQ6IikgJiYgamFyLmVuZHNXaXRoKCJ9IikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCXsKLQkJCQkJamFyID0gamFyLnN1YnN0cmluZygiJHtlY2xpcHNlX29yYml0OiIubGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJCWphciA9IGphci5zdWJzdHJpbmcoMCxqYXIubGVuZ3RoKCktMSk7Ci0JCQkJCS8vamFyID0gVXRpbHMuZ2V0RmlsZUxvY2F0aW9uKGphciwiIik7Ci0JCQkJCWphcnNbaV0gPSBuZXcgUGx1Z2luUHJvY2Vzc29ySmFyKGphciwgbnVsbCk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWphciA9IFV0aWxzLmdldEZpbGVMb2NhdGlvbihidW5kbGVJZCxqYXIpOwotCQkJCQlqYXJzW2ldID0gbmV3IFBsdWdpblByb2Nlc3NvckphcihidW5kbGVJZCwgbmV3IFBhdGgoamFyKSk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gamFyczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNEZWJ1Z2dlcigpCi0JewotCQlyZXR1cm4gZGVidWdnZXJJZCAhPSBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHN1cHBvcnRzKFN0cmluZyB4c2x0VmVyc2lvbikKLQl7Ci0JCXJldHVybiBzdXBwb3J0cy5pbmRleE9mKHhzbHRWZXJzaW9uKSA+PSAwOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3VwcG9ydHMoKQotCXsKLQkJcmV0dXJuIHN1cHBvcnRzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN1cHBvcnRzKFN0cmluZyBzdXBwb3J0cykKLQl7Ci0JCXRoaXMuc3VwcG9ydHMgPSBzdXBwb3J0czsKLQl9Ci0KLQlwdWJsaWMgSURlYnVnZ2VyIGdldERlYnVnZ2VyKCkKLQl7Ci0JCXJldHVybiBKQVhQUnVudGltZS5nZXREZWJ1Z2dlcihkZWJ1Z2dlcklkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWJ1Z2dlcklkKFN0cmluZyBkZWJ1Z2dlcklkKQotCXsKLQkJdGhpcy5kZWJ1Z2dlcklkID0gZGVidWdnZXJJZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvQXR0cmlidXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvQXR0cmlidXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3Y2FjY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0F0dHJpYnV0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JQXR0cmlidXRlOwotCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlIGltcGxlbWVudHMgSUF0dHJpYnV0ZSwgQ29tcGFyYWJsZTxPYmplY3Q+IHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyB1cmk7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHlwZTsKLQotCXB1YmxpYyBBdHRyaWJ1dGUoU3RyaW5nIHVyaSwgU3RyaW5nIHR5cGUsIFN0cmluZyBkZXNjcmlwdGlvbikgewotCQl0aGlzLnVyaSA9IHVyaTsKLQkJdGhpcy50eXBlID0gdHlwZTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiBkZXNjcmlwdGlvbjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7Ci0JCXJldHVybiB0eXBlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkgewotCQlyZXR1cm4gdXJpOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlVmFsdWUoU3RyaW5nIHZhbHVlKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQkJaWYgKFRZUEVfQk9PTEVBTi5lcXVhbHModHlwZSkpIHsKLQkJCWJvb2xlYW4gdmFsaWQgPSAidHJ1ZSIuZXF1YWxzKHZhbHVlKSB8fCAiZmFsc2UiLmVxdWFscyh2YWx1ZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJaWYgKCF2YWxpZCkKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgTWVzc2FnZXMuQXR0cmlidXRlXzIsCi0JCQkJCQludWxsKTsKLQkJfSBlbHNlIGlmIChUWVBFX0lOVC5lcXVhbHModHlwZSkpIHsKLQkJCXRyeSB7Ci0JCQkJSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7Ci0JCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBNZXNzYWdlcy5BdHRyaWJ1dGVfMSwKLQkJCQkJCW51bGwpOwotCQkJfQotCQl9IGVsc2UgaWYgKFRZUEVfRE9VQkxFLmVxdWFscyh0eXBlKSkgewotCQkJdHJ5IHsKLQkJCQlEb3VibGUucGFyc2VEb3VibGUodmFsdWUpOwotCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgTWVzc2FnZXMuQXR0cmlidXRlXzAsCi0JCQkJCQludWxsKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChUWVBFX0ZMT0FULmVxdWFscyh0eXBlKSkgewotCQkJdHJ5IHsKLQkJCQlGbG9hdC5wYXJzZUZsb2F0KHZhbHVlKTsKLQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIE1lc3NhZ2VzLkF0dHJpYnV0ZV81LAotCQkJCQkJbnVsbCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoVFlQRV9DTEFTUy5lcXVhbHModHlwZSkgfHwgVFlQRV9PQkpFQ1QuZXF1YWxzKHR5cGUpKSB7Ci0JCQkvLyBzdGF0dXMgPSBKYXZhQ29udmVudGlvbnMudmFsaWRhdGVKYXZhVHlwZU5hbWUodmFsdWUpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IG8pIHsKLQkJaWYgKG8gaW5zdGFuY2VvZiBJQXR0cmlidXRlKSB7Ci0JCQlJQXR0cmlidXRlIGYgPSAoSUF0dHJpYnV0ZSkgbzsKLQkJCXJldHVybiBmLmdldFVSSSgpLmNvbXBhcmVUbyhnZXRVUkkoKSk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0RlYnVnZ2VyRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0RlYnVnZ2VyRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjFkYzcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9EZWJ1Z2dlckRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklEZWJ1Z2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBEZWJ1Z2dlckRlc2NyaXB0b3IgaW1wbGVtZW50cyBJRGVidWdnZXIKLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZ1tdIGNsYXNzcGF0aDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBpZDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBidW5kbGVJZDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIHByb2Nlc3NvclR5cGVJZDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBjbGFzc05hbWU7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHJhbnNmb3JtZXJGYWN0b3J5OwotCi0JcHVibGljIERlYnVnZ2VyRGVzY3JpcHRvcihTdHJpbmcgaWQsIFN0cmluZyBidW5kbGVJZCwgU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nW10gY2xhc3NwYXRoLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHByb2Nlc3NvclR5cGVJZCwgU3RyaW5nIHRyYW5zZm9ybWVyRmFjdG9yeSkKLQl7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5jbGFzc3BhdGggPSBjbGFzc3BhdGg7Ci0JCXRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDsKLQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJdGhpcy5wcm9jZXNzb3JUeXBlSWQgPSBwcm9jZXNzb3JUeXBlSWQ7Ci0JCXRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwotCQl0aGlzLnRyYW5zZm9ybWVyRmFjdG9yeSA9IHRyYW5zZm9ybWVyRmFjdG9yeTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpCi0JewotCQlyZXR1cm4gY2xhc3NOYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmdbXSBnZXRDbGFzc1BhdGgoKQotCXsKLQkJcmV0dXJuIFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yLmNyZWF0ZUVudHJpZXMoYnVuZGxlSWQsIGNsYXNzcGF0aCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRJZCgpCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29yVHlwZSBnZXRQcm9jZXNzb3JUeXBlKCkKLQl7Ci0JCXJldHVybiBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlKHByb2Nlc3NvclR5cGVJZCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUcmFuc2Zvcm1lckZhY3RvcnkoKQotCXsKLQkJcmV0dXJuIHRyYW5zZm9ybWVyRmFjdG9yeTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvRmVhdHVyZVByZWZlcmVuY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvRmVhdHVyZVByZWZlcmVuY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZGM1ZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0ZlYXR1cmVQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5QcmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRmVhdHVyZVByZWZlcmVuY2VzCi17Ci0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0eXBlRmVhdHVyZXM7Ci0KLQlwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRGZWF0dXJlc1ZhbHVlcyhTdHJpbmcgdHlwZUlkKQotCXsKLQkJcmV0dXJuIHR5cGVGZWF0dXJlcy5nZXQodHlwZUlkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUeXBlRmVhdHVyZXMoTWFwPFN0cmluZywgTWFwPFN0cmluZywgU3RyaW5nPj4gdHlwZUZlYXR1cmVzKQotCXsKLQkJdGhpcy50eXBlRmVhdHVyZXMgPSB0eXBlRmVhdHVyZXM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRBc1hNTCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KCk7Ci0JCUVsZW1lbnQgY29uZmlnID0gZG9jLmNyZWF0ZUVsZW1lbnQoImZlYXR1cmVQcmVmZXJlbmNlcyIpOyAgLy8kTk9OLU5MUy0xJAotCQlkb2MuYXBwZW5kQ2hpbGQoY29uZmlnKTsKLQkJCi0JCWZvciAoU3RyaW5nIHR5cGVJZCA6IHR5cGVGZWF0dXJlcy5rZXlTZXQoKSkKLQkJewotCQkJRWxlbWVudCBwcm9jZXNzb3JUeXBlRWxlbWVudCA9IHR5cGVBc0VsZW1lbnQoZG9jLCB0eXBlSWQpOwotCQkJTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJlVmFsdWVzID0gdHlwZUZlYXR1cmVzLmdldCh0eXBlSWQpOwotCQkJZmVhdHVyZVZhbHVlc0FzRWxlbWVudChkb2MsIHByb2Nlc3NvclR5cGVFbGVtZW50LCBmZWF0dXJlVmFsdWVzKTsKLQkJCWNvbmZpZy5hcHBlbmRDaGlsZChwcm9jZXNzb3JUeXBlRWxlbWVudCk7Ci0JCX0KLQotCQkvLyBTZXJpYWxpemUgdGhlIERvY3VtZW50IGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBTdHJpbmcKLQkJcmV0dXJuIFByZWZlcmVuY2VVdGlsLnNlcmlhbGl6ZURvY3VtZW50KGRvYyk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGZWF0dXJlUHJlZmVyZW5jZXMgZnJvbVhNTChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUZlYXR1cmVQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBGZWF0dXJlUHJlZmVyZW5jZXMoKTsKLQotCQkvLyBEbyB0aGUgcGFyc2luZyBhbmQgb2J0YWluIHRoZSB0b3AtbGV2ZWwgbm9kZQotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudChpbnB1dFN0cmVhbSk7Ci0JCUVsZW1lbnQgY29uZmlnID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotCi0JCU1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHR5cGVGZWF0dXJlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTWFwPFN0cmluZywgU3RyaW5nPj4oKTsKLQkJRWxlbWVudFtdIHByb2Nlc3NvclR5cGVFbHMgPSBQcmVmZXJlbmNlVXRpbC5nZXRDaGlsZEVsZW1lbnRzKGNvbmZpZywgInByb2Nlc3NvclR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2Nlc3NvclR5cGVFbHMubGVuZ3RoOyArK2kpCi0JCXsKLQkJCUVsZW1lbnQgcHJvY2Vzc29yVHlwZUVsID0gcHJvY2Vzc29yVHlwZUVsc1tpXTsKLQkJCVN0cmluZyB0eXBlID0gZWxlbWVudEFzVHlwZShwcm9jZXNzb3JUeXBlRWwpOwotCQkJTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJlVmFsdWVzID0gZWxlbWVudEFzRmVhdHVyZVZhbHVlcyhwcm9jZXNzb3JUeXBlRWwpOwotCQkJdHlwZUZlYXR1cmVzLnB1dCh0eXBlLCBmZWF0dXJlVmFsdWVzKTsKLQkJfQotCi0JCXByZWZzLnNldFR5cGVGZWF0dXJlcyh0eXBlRmVhdHVyZXMpOwotCi0JCXJldHVybiBwcmVmczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZWxlbWVudEFzVHlwZShFbGVtZW50IHBhcmVudCkKLQl7Ci0JCVN0cmluZyBpZCA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoImlkIik7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGlkOwotCX0KLQotCXByaXZhdGUgc3RhdGljIEVsZW1lbnQgdHlwZUFzRWxlbWVudChEb2N1bWVudCBkb2MsIFN0cmluZyB0eXBlKQotCXsKLQkJRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInByb2Nlc3NvclR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGVsZW1lbnRBc0ZlYXR1cmVWYWx1ZXMoRWxlbWVudCBlbGVtZW50KQotCXsKLQkJRWxlbWVudFtdIGZlYXR1cmVFbHMgPSBQcmVmZXJlbmNlVXRpbC5nZXRDaGlsZEVsZW1lbnRzKGVsZW1lbnQsICJmZWF0dXJlIik7IC8vJE5PTi1OTFMtMSQKLQkJTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJlVmFsdWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KGZlYXR1cmVFbHMubGVuZ3RoKTsKLQkJZm9yIChFbGVtZW50IGZlYXR1cmVFbCA6IGZlYXR1cmVFbHMpCi0JCXsKLQkJCVN0cmluZyB1cmkgPSBmZWF0dXJlRWwuZ2V0QXR0cmlidXRlKCJ1cmkiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHZhbHVlID0gZmVhdHVyZUVsLmdldEF0dHJpYnV0ZSgidmFsdWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJZmVhdHVyZVZhbHVlcy5wdXQodXJpLCB2YWx1ZSk7Ci0JCX0KLQkJcmV0dXJuIGZlYXR1cmVWYWx1ZXM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBmZWF0dXJlVmFsdWVzQXNFbGVtZW50KERvY3VtZW50IGRvYywgRWxlbWVudCBmZWF0dXJlc0VsLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGZlYXR1cmVWYWx1ZXMpCi0JewotCQlpZiAoZmVhdHVyZVZhbHVlcyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsU3RyaW5nPiBlbnRyeTIgOiBmZWF0dXJlVmFsdWVzLmVudHJ5U2V0KCkpCi0JCQl7Ci0JCQkJU3RyaW5nIHVyaSA9IGVudHJ5Mi5nZXRLZXkoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBlbnRyeTIuZ2V0VmFsdWUoKTsKLQkJCQlFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgiZmVhdHVyZSIpOyAvLyROT04tTkxTLTEkCi0JCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInVyaSIsIHVyaSk7IC8vJE5PTi1OTFMtMSQKLQkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlmZWF0dXJlc0VsLmFwcGVuZENoaWxkKGVsZW1lbnQpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhOThhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JQnJlYWtwb2ludE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JRGVidWdFdmVudFNldExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklTb3VyY2VMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVN0YWNrRnJhbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5JVk1SdW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KYXZhTGF1bmNoRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JRGVidWdnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnZva2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklUcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcubW9kZWwuSkFYUERlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLklYU0xDb25zdGFudHM7Ci0KLXB1YmxpYyBjbGFzcyBKQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZSBleHRlbmRzIEphdmFMYXVuY2hEZWxlZ2F0ZQotCQlpbXBsZW1lbnRzIElEZWJ1Z0V2ZW50U2V0TGlzdGVuZXIgewotCXByaXZhdGUgU3RyaW5nIG1vZGU7Ci0JTGF1bmNoSGVscGVyIGxhdW5jaEhlbHBlcjsKLQotCUBPdmVycmlkZQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBsYXVuY2goSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwKLQkJCWZpbmFsIFN0cmluZyBtb2RlLCBmaW5hbCBJTGF1bmNoIGxhdW5jaCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQl0aGlzLm1vZGUgPSBtb2RlOwotCQlsYXVuY2hIZWxwZXIuc2F2ZShnZXRMYXVuY2hDb25maWdGaWxlKCkpOwotCi0JCS8vIHNldCB0aGUgbGF1bmNoIG5hbWUKLQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbiwgbW9kZSk7Ci0JCVN0cmluZyB0ZmFjdG9yeSA9IGdldFRyYW5zZm9ybWVyRmFjdG9yeShpbnN0YWxsKTsKLQkJU3RyaW5nIG5hbWUgPSBpbnN0YWxsLmdldE5hbWUoKTsKLQkJaWYgKHRmYWN0b3J5ICE9IG51bGwpCi0JCQluYW1lICs9ICJbIiArIHRmYWN0b3J5ICsgIl0iOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQlsYXVuY2guc2V0QXR0cmlidXRlKCJsYXVuY2hOYW1lIiwgbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyB0aGUgc3VwZXIubGF1bmNoIHdpbGwgYWRkIGEgSmF2YSBzb3VyY2UgZGlyZWN0b3IgaWYgd2Ugc2V0IGl0IHRvIG51bGwKLQkJLy8gaGVyZQotCQlmaW5hbCBJU291cmNlTG9jYXRvciBjb25maWd1cmVkTG9jYXRvciA9IGxhdW5jaC5nZXRTb3VyY2VMb2NhdG9yKCk7Ci0JCWxhdW5jaC5zZXRTb3VyY2VMb2NhdG9yKG51bGwpOwotCi0JCXN1cGVyLmxhdW5jaChjb25maWd1cmF0aW9uLCBtb2RlLCBsYXVuY2gsIG1vbml0b3IpOwotCi0JCS8vIG5vdyBnZXQgdGhlIGphdmEgc291cmNlIGxvY2F0b3IKLQkJZmluYWwgSVNvdXJjZUxvY2F0b3IgamF2YVNvdXJjZUxvb2t1cERpcmVjdG9yID0gbGF1bmNoCi0JCQkJLmdldFNvdXJjZUxvY2F0b3IoKTsKLQkJLy8gbm93IGFkZCBvdXIgb3duIHBhcnRpY2lwYW50IHRvIHRoZSBqYXZhIGRpcmVjdG9yCi0JCWxhdW5jaC5zZXRTb3VyY2VMb2NhdG9yKG5ldyBJU291cmNlTG9jYXRvcigpIHsKLQotCQkJcHVibGljIE9iamVjdCBnZXRTb3VyY2VFbGVtZW50KElTdGFja0ZyYW1lIHN0YWNrRnJhbWUpIHsKLQkJCQkvLyBzaW1wbHkgbG9vayBhdCBvbmUgYW5kIHRoZW4gdGhlIG90aGVyCi0JCQkJT2JqZWN0IHNvdXJjZUVsZW1lbnQgPSBqYXZhU291cmNlTG9va3VwRGlyZWN0b3IKLQkJCQkJCS5nZXRTb3VyY2VFbGVtZW50KHN0YWNrRnJhbWUpOwotCQkJCWlmIChzb3VyY2VFbGVtZW50ID09IG51bGwpCi0JCQkJCXNvdXJjZUVsZW1lbnQgPSBjb25maWd1cmVkTG9jYXRvcgotCQkJCQkJCS5nZXRTb3VyY2VFbGVtZW50KHN0YWNrRnJhbWUpOwotCQkJCXJldHVybiBzb3VyY2VFbGVtZW50OwotCQkJfQotCQl9KTsKLQotCQkvLyBJSmF2YURlYnVnVGFyZ2V0IGphdmFUYXJnZXQgPQotCQkvLyAoSUphdmFEZWJ1Z1RhcmdldClsYXVuY2guZ2V0RGVidWdUYXJnZXQoKTsKLQkJLy8gbGF1bmNoLnJlbW92ZURlYnVnVGFyZ2V0KGphdmFUYXJnZXQpOwotCi0JCUlEZWJ1Z1RhcmdldCBqYXZhVGFyZ2V0ID0gbGF1bmNoLmdldERlYnVnVGFyZ2V0KCk7Ci0JCUlEZWJ1Z1RhcmdldCB4c2xUYXJnZXQgPSBuZXcgSkFYUERlYnVnVGFyZ2V0KGxhdW5jaCwgbGF1bmNoCi0JCQkJLmdldFByb2Nlc3NlcygpWzBdLCBsYXVuY2hIZWxwZXIpOwotCi0JCS8vIHJlbW92ZSBqYXZhIGFzIHRoZSBwcmltYXJ5IHRhcmdldCBhbmQgbWFrZSB4c2wgdGhlIHByaW1hcnkgdGFyZ2V0Ci0JCWxhdW5jaC5yZW1vdmVEZWJ1Z1RhcmdldChqYXZhVGFyZ2V0KTsKLQkJbGF1bmNoLmFkZERlYnVnVGFyZ2V0KHhzbFRhcmdldCk7Ci0JCS8vIGFkZCB0aGlzIGhlcmUgdG8gbWFrZSBqYXZhIHRoZSBub24tcHJpbWFyeSB0YXJnZXQKLQkJLy8gbGF1bmNoLmFkZERlYnVnVGFyZ2V0KGphdmFUYXJnZXQpOwotCi0JCS8vIGxhdW5jaC5hZGREZWJ1Z1RhcmdldChuZXcgSmF2YVhTTERlYnVnVGFyZ2V0KGxhdW5jaCwKLQkJLy8gbGF1bmNoLmdldFByb2Nlc3NlcygpWzBdLCBsYXVuY2hIZWxwZXIsIGphdmFUYXJnZXQpKTsKLQotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgSmF2YSBicmVha3BvaW50IGFuZCB0aGUgWFNMIGJyZWFrcG9pbnRzCi0JICovCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElCcmVha3BvaW50W10gZ2V0QnJlYWtwb2ludHMoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQlJQnJlYWtwb2ludE1hbmFnZXIgYnJlYWtwb2ludE1hbmFnZXIgPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkuZ2V0QnJlYWtwb2ludE1hbmFnZXIoKTsKLQkJaWYgKCFicmVha3BvaW50TWFuYWdlci5pc0VuYWJsZWQoKSkKLQkJCXJldHVybiBudWxsOwotCi0JCUlCcmVha3BvaW50W10gamF2YUJyZWFrcG9pbnRzID0gc3VwZXIuZ2V0QnJlYWtwb2ludHMoY29uZmlndXJhdGlvbik7Ci0JCUlCcmVha3BvaW50W10geHNsQnJlYWtwb2ludHMgPSBicmVha3BvaW50TWFuYWdlcgotCQkJCS5nZXRCcmVha3BvaW50cyhJWFNMQ29uc3RhbnRzLklEX1hTTF9ERUJVR19NT0RFTCk7Ci0JCUlCcmVha3BvaW50W10gYnJlYWtwb2ludHMgPSBuZXcgSUJyZWFrcG9pbnRbamF2YUJyZWFrcG9pbnRzLmxlbmd0aAotCQkJCSsgeHNsQnJlYWtwb2ludHMubGVuZ3RoXTsKLQkJU3lzdGVtLmFycmF5Y29weShqYXZhQnJlYWtwb2ludHMsIDAsIGJyZWFrcG9pbnRzLCAwLAotCQkJCWphdmFCcmVha3BvaW50cy5sZW5ndGgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KHhzbEJyZWFrcG9pbnRzLCAwLCBicmVha3BvaW50cywKLQkJCQlqYXZhQnJlYWtwb2ludHMubGVuZ3RoLCB4c2xCcmVha3BvaW50cy5sZW5ndGgpOwotCi0JCXJldHVybiBicmVha3BvaW50czsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBwcmVMYXVuY2hDaGVjayhJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLAotCQkJU3RyaW5nIG1vZGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQl0aGlzLmxhdW5jaEhlbHBlciA9IG5ldyBMYXVuY2hIZWxwZXIoY29uZmlndXJhdGlvbik7Ci0JCWlmIChtb2RlLmVxdWFscyhJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFKSkgewotCQkJLy8gVE9ETyBkb24ndCBsaWtlIGhhdmluZyBVSSBjb2RlIGluIHRoZSBsYXVuY2hpbmcgcGx1Z2luLi4ud2hlcmUKLQkJCS8vIGVsc2UgY2FuIGl0IGdvPwotCQkJZmluYWwgSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGdldFByb2Nlc3Nvckluc3RhbGwoCi0JCQkJCWNvbmZpZ3VyYXRpb24sIElMYXVuY2hNYW5hZ2VyLlJVTl9NT0RFKTsKLQkJCWlmIChpbnN0YWxsLmdldERlYnVnZ2VyKCkgPT0gbnVsbCkgewotCQkJCWZpbmFsIGJvb2xlYW5bXSByZXN1bHQgPSBuZXcgYm9vbGVhbltdIHsgZmFsc2UgfTsKLQkJCQkvLyBvcGVuIGEgZGlhbG9nIGZvciBjaG9vc2luZyBhIGRpZmZlcmVudCBpbnN0YWxsIHRoYXQgZG9lcyBoYXZlCi0JCQkJLy8gYW4gYXNzb2NpYXRlZCBkZWJ1Z2dlcgotCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJU3RyaW5nIGRlYnVnZ2luZ0luc3RhbGxJZCA9IEpBWFBMYXVuY2hpbmdQbHVnaW4KLQkJCQkJCQkJLmdldERlZmF1bHQoKQotCQkJCQkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKQotCQkJCQkJCQkuZ2V0U3RyaW5nKAotCQkJCQkJCQkJCUpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfREVGQVVMVF9ERUJVR0dJTkdfSU5TVEFMTF9JRCk7Ci0JCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBwcm9jZXNzb3IgPSBKQVhQUnVudGltZQotCQkJCQkJCQkuZ2V0UHJvY2Vzc29yKGRlYnVnZ2luZ0luc3RhbGxJZCk7Ci0KLQkJCQkJCUlXb3JrYmVuY2hXaW5kb3cgZHcgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpCi0JCQkJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQotCQkJCQkJU3RyaW5nIHRpdGxlID0gTWVzc2FnZXMuWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8wOwotCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlcy5YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzEKLQkJCQkJCQkJKyBpbnN0YWxsLmdldE5hbWUoKQotCQkJCQkJCQkrIE1lc3NhZ2VzLlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMgotCQkJCQkJCQkrIE1lc3NhZ2VzLlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMwotCQkJCQkJCQkrIHByb2Nlc3Nvci5nZXROYW1lKCkKLQkJCQkJCQkJKyBNZXNzYWdlcy5YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzQ7Ci0KLQkJCQkJCU1lc3NhZ2VEaWFsb2cgZGlhbG9nID0gbmV3IE1lc3NhZ2VEaWFsb2coZHcuZ2V0U2hlbGwoKSwKLQkJCQkJCQkJdGl0bGUsIG51bGwsIG1lc3NhZ2UsIE1lc3NhZ2VEaWFsb2cuUVVFU1RJT04sCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsCi0JCQkJCQkJCQkJSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwgfSwgMCk7IC8vIHllcwotCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBpcwotCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyB0aGUKLQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gZGVmYXVsdAotCi0JCQkJCQlyZXN1bHRbMF0gPSBkaWFsb2cub3BlbigpID09IDA7Ci0JCQkJCX0KLQkJCQl9KTsKLQkJCQlyZXR1cm4gcmVzdWx0WzBdOwotCQkJfSBlbHNlIHsKLQkJCQlTdHJpbmcgZGVidWdnZXJURiA9IGluc3RhbGwuZ2V0RGVidWdnZXIoKQotCQkJCQkJLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQkJCVN0cmluZyBpbnN0YWxsVEYgPSBsYXVuY2hIZWxwZXIuZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCkgPT0gbnVsbCA/IG51bGwKLQkJCQkJCTogbGF1bmNoSGVscGVyLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpCi0JCQkJCQkJCS5nZXRGYWN0b3J5Q2xhc3MoKTsKLQkJCQlpZiAoIWRlYnVnZ2VyVEYuZXF1YWxzKGluc3RhbGxURikpIHsKLQkJCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuc3luY0V4ZWMoCi0JCQkJCQkJbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJCQlJV29ya2JlbmNoV2luZG93IGR3ID0gUGxhdGZvcm1VSQotCQkJCQkJCQkJCQkuZ2V0V29ya2JlbmNoKCkKLQkJCQkJCQkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCi0JCQkJCQkJCQlTdHJpbmcgdGl0bGUgPSBNZXNzYWdlcy5KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8wOwotCQkJCQkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBpbnN0YWxsLmdldE5hbWUoKQotCQkJCQkJCQkJCQkrIE1lc3NhZ2VzLkpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzEKLQkJCQkJCQkJCQkJKyBsYXVuY2hIZWxwZXIKLQkJCQkJCQkJCQkJCQkuZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCkKLQkJCQkJCQkJCQkJCQkuZ2V0TmFtZSgpCi0JCQkJCQkJCQkJCSsgTWVzc2FnZXMuSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMgotCQkJCQkJCQkJCQkrIE1lc3NhZ2VzLkpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzMKLQkJCQkJCQkJCQkJKyBsYXVuY2hIZWxwZXIKLQkJCQkJCQkJCQkJCQkuZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCkKLQkJCQkJCQkJCQkJCQkuZ2V0TmFtZSgpCi0JCQkJCQkJCQkJCSsgTWVzc2FnZXMuSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNDsKLQotCQkJCQkJCQkJTWVzc2FnZURpYWxvZyBkaWFsb2cgPSBuZXcgTWVzc2FnZURpYWxvZygKLQkJCQkJCQkJCQkJZHcuZ2V0U2hlbGwoKSwKLQkJCQkJCQkJCQkJdGl0bGUsCi0JCQkJCQkJCQkJCW51bGwsCi0JCQkJCQkJCQkJCW1lc3NhZ2UsCi0JCQkJCQkJCQkJCU1lc3NhZ2VEaWFsb2cuV0FSTklORywKLQkJCQkJCQkJCQkJbmV3IFN0cmluZ1tdIHsKLQkJCQkJCQkJCQkJCQlJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotCQkJCQkJCQkJCQkJCUlEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMIH0sCi0JCQkJCQkJCQkJCTApOyAvLyB5ZXMgaXMgdGhlIGRlZmF1bHQKLQkJCQkJCQkJCWRpYWxvZy5vcGVuKCk7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHN1cGVyLnByZUxhdW5jaENoZWNrKGNvbmZpZ3VyYXRpb24sIG1vZGUsIG1vbml0b3IpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJVk1SdW5uZXIgZ2V0Vk1SdW5uZXIoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgU3RyaW5nIG1vZGUpCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIGNvbW1lbnQgdGhpcyBvdXQgaW4gb3JkZXIgdG8gZ2V0IGphdmEgZGVidWdnaW5nIGFzIHdlbGwgYXMgWFNMCi0JCS8vIGRlYnVnZ2luZwotCQkvLyBpZiAoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERS5lcXVhbHMobW9kZSkpCi0JCS8vIHJldHVybiBzdXBlci5nZXRWTVJ1bm5lcihjb25maWd1cmF0aW9uLCBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSk7Ci0JCXJldHVybiBzdXBlci5nZXRWTVJ1bm5lcihjb25maWd1cmF0aW9uLCBtb2RlKTsKLQl9Ci0KLQlwcml2YXRlIEZpbGUgZ2V0TGF1bmNoQ29uZmlnRmlsZSgpIHsKLQkJSVBhdGggbGF1bmNoUGF0aCA9IFBsYXRmb3JtLmdldFN0YXRlTG9jYXRpb24oCi0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkpLmFwcGVuZCgibGF1bmNoIik7IC8vJE5PTi1OTFMtMSQKLQkJRmlsZSBsYXVuY2hEaXIgPSBsYXVuY2hQYXRoLnRvRmlsZSgpOwotCQlpZiAoIWxhdW5jaERpci5leGlzdHMoKSkgewotCQkJIGxhdW5jaERpci5ta2RpcigpOwotCQl9Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGxhdW5jaERpciwgImxhdW5jaC54bWwiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSVBhdGggZ2V0V29ya2luZ0RpcmVjdG9yeVBhdGgoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJcmV0dXJuIGxhdW5jaEhlbHBlci5nZXRXb3JraW5nRGlyKCk7Ci0JfQotCi0JcHJpdmF0ZSBJUHJvY2Vzc29ySW52b2tlciBnZXRQcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvcigKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGludm9rZXJJZCA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCUpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLklOVk9LRVJfREVTQ1JJUFRPUiwKLQkJCQlNZXNzYWdlcy5KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV81KTsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldFByb2Nlc3Nvckludm9rZXIoaW52b2tlcklkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldFByb2Nlc3Nvckluc3RhbGwoCi0JCQlJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLCBTdHJpbmcgbW9kZSkKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IExhdW5jaEhlbHBlcgotCQkJCS5nZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24pOwotCQlpZiAobW9kZS5lcXVhbHMoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERSkKLQkJCQkmJiBpbnN0YWxsLmdldERlYnVnZ2VyKCkgPT0gbnVsbCkgewotCQkJU3RyaW5nIGRlYnVnZ2luZ0luc3RhbGxJZCA9IEpBWFBMYXVuY2hpbmdQbHVnaW4KLQkJCQkJLmdldERlZmF1bHQoKQotCQkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKQotCQkJCQkuZ2V0U3RyaW5nKAotCQkJCQkJCUpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfREVGQVVMVF9ERUJVR0dJTkdfSU5TVEFMTF9JRCk7Ci0JCQlpbnN0YWxsID0gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yKGRlYnVnZ2luZ0luc3RhbGxJZCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRNYWluVHlwZU5hbWUoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUuZXF1YWxzKG1vZGUpKQotCQkJcmV0dXJuICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuRGVidWdSdW5uZXIiOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuTWFpbiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFByb2dyYW1Bcmd1bWVudHMoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gY2xhc3NuYW1lLCBzb3VyY2V1cmwsIG91dHB1dCBmaWxlCi0JCUlQcm9jZXNzb3JJbnZva2VyIGludm9rZXIgPSBnZXRQcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvcihjb25maWd1cmF0aW9uKTsKLQkJU3RyaW5nIGNsYXp6ID0gaW52b2tlci5nZXRJbnZva2VyQ2xhc3NOYW1lKCk7Ci0KLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzYi5hcHBlbmQoY2xhenopOwotCQlzYi5hcHBlbmQoIiAiKTsgLy8kTk9OLU5MUy0xJAotCQlzYi5hcHBlbmQoIlwiIiArIGdldExhdW5jaENvbmZpZ0ZpbGUoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJc2IuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJc2IuYXBwZW5kKCJcIiIgKyBsYXVuY2hIZWxwZXIuZ2V0U291cmNlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXNiLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCi0JCXNiLmFwcGVuZCgiXCIiICsgbGF1bmNoSGVscGVyLmdldFRhcmdldCgpLmdldEFic29sdXRlUGF0aCgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlpZiAoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERS5lcXVhbHMobW9kZSkpIHsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24sIG1vZGUpOwotCQkJaWYgKGluc3RhbGwuZ2V0RGVidWdnZXIoKSAhPSBudWxsKSB7Ci0JCQkJSURlYnVnZ2VyIGRlYnVnZ2VyID0gaW5zdGFsbC5nZXREZWJ1Z2dlcigpOwotCQkJCVN0cmluZyBjbGFzc05hbWUgPSBkZWJ1Z2dlci5nZXRDbGFzc05hbWUoKTsKLQkJCQlzYi5hcHBlbmQoIiAtZGVidWcgIikuYXBwZW5kKGNsYXNzTmFtZSkuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCXNiLmFwcGVuZChsYXVuY2hIZWxwZXIuZ2V0UmVxdWVzdFBvcnQoKSk7Ci0JCQkJc2IuYXBwZW5kKCIgIikuYXBwZW5kKGxhdW5jaEhlbHBlci5nZXRFdmVudFBvcnQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlzYi5hcHBlbmQoIiAiKS5hcHBlbmQobGF1bmNoSGVscGVyLmdldEdlbmVyYXRlUG9ydCgpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZ1tdIGdldENsYXNzcGF0aChJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyBnZXQgdGhlIGNsYXNzcGF0aCBkZWZpbmVkIGJ5IHRoZSB1c2VyCi0JCVN0cmluZ1tdIHVzZXJDbGFzc3BhdGggPSBzdXBlci5nZXRDbGFzc3BhdGgoY29uZmlndXJhdGlvbik7Ci0KLQkJLy8gZ2V0IHRoZSBjbGFzc3BhdGggcmVxdWlyZWQgZm9yIHRoZSB0cmFuc2Zvcm1hdGlvbgotCQlJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyID0gZ2V0UHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IoY29uZmlndXJhdGlvbik7Ci0JCUxpc3Q8U3RyaW5nPiBpbnZva2VyQ1AgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJZm9yIChTdHJpbmcgZW50cnkgOiBpbnZva2VyLmdldENsYXNzcGF0aEVudHJpZXMoKSkgewotCQkJaW52b2tlckNQLmFkZChlbnRyeSk7Ci0JCX0KLQotCQkvLyBhZGQgdGhlIGRlYnVnZ2VyLi4uCi0JCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24sIG1vZGUpOwotCQlpZiAoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERS5lcXVhbHMobW9kZSkKLQkJCQkmJiBpbnN0YWxsLmdldERlYnVnZ2VyKCkgIT0gbnVsbCkgewotCQkJU3RyaW5nW10gamFycyA9IGluc3RhbGwuZ2V0RGVidWdnZXIoKS5nZXRDbGFzc1BhdGgoKTsKLQkJCWZvciAoU3RyaW5nIGphciA6IGphcnMpIHsKLQkJCQlpbnZva2VyQ1AuYWRkKGphcik7Ci0JCQl9Ci0JCX0KLQotCQlTdHJpbmdbXSBpbnZva2VyQ2xhc3NwYXRoID0gaW52b2tlckNQLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0KLQkJLy8gYWRkIHRoZW0gdG9nZXRoZXIKLQkJU3RyaW5nW10gY2xhc3NwYXRoID0gbmV3IFN0cmluZ1t1c2VyQ2xhc3NwYXRoLmxlbmd0aAotCQkJCSsgaW52b2tlckNsYXNzcGF0aC5sZW5ndGhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGludm9rZXJDbGFzc3BhdGgsIDAsIGNsYXNzcGF0aCwgMCwKLQkJCQlpbnZva2VyQ2xhc3NwYXRoLmxlbmd0aCk7Ci0JCVN5c3RlbS5hcnJheWNvcHkodXNlckNsYXNzcGF0aCwgMCwgY2xhc3NwYXRoLCBpbnZva2VyQ2xhc3NwYXRoLmxlbmd0aCwKLQkJCQl1c2VyQ2xhc3NwYXRoLmxlbmd0aCk7Ci0KLQkJcmV0dXJuIGNsYXNzcGF0aDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFZNQXJndW1lbnRzKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyB2bWFyZ3MgPSBzdXBlci5nZXRWTUFyZ3VtZW50cyhjb25maWd1cmF0aW9uKTsKLQotCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uLCBtb2RlKTsKLQkJaWYgKGluc3RhbGwgIT0gbnVsbCAmJiAhaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuaXNKUkVEZWZhdWx0KCkpIHsKLQkJCS8vIGNsZWFyIHRoZSBlbmRvcnNlZCBkaXIKLQkJCUZpbGUgdGVtcERpciA9IGdldEVuZG9yc2VkRGlyKCk7Ci0JCQlpZiAodGVtcERpci5leGlzdHMoKSkgewotCQkJCUZpbGVbXSBjaGlsZHJlbiA9IHRlbXBEaXIubGlzdEZpbGVzKCk7Ci0JCQkJZm9yIChGaWxlIGNoaWxkIDogY2hpbGRyZW4pIHsKLQkJCQkJY2hpbGQuZGVsZXRlKCk7Ci0JCQkJfQotCQkJCXRlbXBEaXIuZGVsZXRlKCk7Ci0JCQl9Ci0JCQl0ZW1wRGlyLm1rZGlyKCk7Ci0KLQkJCS8vIG1vdmUgdGhlIHJlcXVpcmVkIGphcnMgdG8gdGhlIGVuZG9yc2VkIGRpcgotCQkJSVByb2Nlc3NvckphcltdIGphcnMgPSBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgamFycy5sZW5ndGg7IGkrKykgewotCQkJCVVSTCBlbnRyeSA9IGphcnNbaV0uYXNVUkwoKTsKLQkJCQlpZiAoZW50cnkgPT0gbnVsbCkKLQkJCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLAotCQkJCQkJCU1lc3NhZ2VzLlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMjMKLQkJCQkJCQkJCSsgamFyc1tpXSwgbnVsbCkpOwotCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHRlbXBEaXIsICJFTkRfIiArIGkgKyAiLmphciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQltb3ZlRmlsZShlbnRyeSwgZmlsZSk7Ci0JCQl9Ci0JCQkvLyBhZGQgdGhlIGVuZG9yc2VkIGRpcgotCQkJdm1hcmdzICs9ICIgLURqYXZhLmVuZG9yc2VkLmRpcnM9XCIiICsgdGVtcERpci5nZXRBYnNvbHV0ZVBhdGgoKSArICJcIiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0JCQlTdHJpbmcgdGZhY3RvcnkgPSBnZXRUcmFuc2Zvcm1lckZhY3RvcnkoaW5zdGFsbCk7Ci0JCQlpZiAodGZhY3RvcnkgIT0gbnVsbCkKLQkJCQl2bWFyZ3MgKz0gIiAtRGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5PSIgKyB0ZmFjdG9yeTsgLy8kTk9OLU5MUy0xJAotCi0JCQkvLyBpZiAoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERS5lcXVhbHMobW9kZSkpCi0JCQkvLyB7Ci0JCQkvLyAvLyBpbiBkZWJ1ZyBtb2RlLCBzZXQgdGhlIGxvZ2dpbmcgdG8gRVJST1IuIFRoaXMgcHJldmVudHMgdGhlCi0JCQkvLyBjb25zb2xlIGZyb20gcG9wcGluZyB1cCBvbiB0b3Agb2YgdGhlIHJlc3VsdCB2aWV3IQotCQkJLy8gdHJ5Ci0JCQkvLyB7Ci0JCQkvLyBVUkwgdXJsID0KLQkJCS8vIEZpbGVMb2NhdG9yLnJlc29sdmUoRmlsZUxvY2F0b3IuZmluZChQbGF0Zm9ybS5nZXRCdW5kbGUoSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQpLAotCQkJLy8gbmV3IFBhdGgoIi9sb2c0ai5kZWJ1Zy5wcm9wZXJ0aWVzIiksIG51bGwpKTsKLQkJCS8vCQkJCQl2bWFyZ3MgKz0gIiAtRGxvZzRqLmNvbmZpZ3VyYXRpb249XCIiK3VybC50b0V4dGVybmFsRm9ybSgpKyJcIiI7IC8vJE5PTi1OTFMtMSQKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJLy8gewotCQkJLy8gSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkvLyB9Ci0JCQkvLyB9Ci0JCX0KLQkJcmV0dXJuIHZtYXJnczsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRUcmFuc2Zvcm1lckZhY3RvcnkoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkgewotCQlTdHJpbmcgdGZhY3RvcnkgPSBudWxsOwotCQlpZiAoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERS5lcXVhbHMobW9kZSkpCi0JCQl0ZmFjdG9yeSA9IGluc3RhbGwuZ2V0RGVidWdnZXIoKS5nZXRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJZWxzZSB7Ci0JCQlJVHJhbnNmb3JtZXJGYWN0b3J5IHQgPSBsYXVuY2hIZWxwZXIuZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci0JCQlpZiAodCAhPSBudWxsKQotCQkJCXRmYWN0b3J5ID0gdC5nZXRGYWN0b3J5Q2xhc3MoKTsKLQkJfQotCQlyZXR1cm4gdGZhY3Rvcnk7Ci0JfQotCi0JcHJpdmF0ZSBGaWxlIGdldEVuZG9yc2VkRGlyKCkgewotCQlJUGF0aCB0ZW1wTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRTdGF0ZUxvY2F0aW9uKAotCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpKQotCQkJCS5hcHBlbmQoImVuZG9yc2VkIik7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIHRlbXBMb2NhdGlvbi50b0ZpbGUoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIG1vdmVGaWxlKFVSTCBzcmMsIEZpbGUgdGFyZ2V0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUJ1ZmZlcmVkT3V0cHV0U3RyZWFtIGJvcyA9IG51bGw7Ci0JCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gYmlzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJvcyA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbSh0YXJnZXQpKTsKLQkJCWJpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHNyYy5vcGVuU3RyZWFtKCkpOwotCQkJd2hpbGUgKGJpcy5hdmFpbGFibGUoKSA+IDApIHsKLQkJCQlpbnQgc2l6ZSA9IGJpcy5hdmFpbGFibGUoKTsKLQkJCQlpZiAoc2l6ZSA+IDEwMjQpCi0JCQkJCXNpemUgPSAxMDI0OwotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbc2l6ZV07Ci0JCQkJYmlzLnJlYWQoYiwgMCwgYi5sZW5ndGgpOwotCQkJCWJvcy53cml0ZShiKTsKLQkJCX0KLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwKLQkJCQkJTWVzc2FnZXMuWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV83ICsgc3JjCi0JCQkJCQkJKyBNZXNzYWdlcy5YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzMxCi0JCQkJCQkJKyB0YXJnZXQsIGUpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChiaXMgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWJpcy5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGJvcyAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJYm9zLmNsb3NlKCk7Ci0JCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvSkFYUExhdW5jaGluZ1BsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBMYXVuY2hpbmdQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg5NmJjNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvSkFYUExhdW5jaGluZ1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgSkFYUExhdW5jaGluZ1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEpBWFBMYXVuY2hpbmdQbHVnaW4gcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBKQVhQTGF1bmNoaW5nUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSkFYUExhdW5jaGluZ1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coRXhjZXB0aW9uIGUpCi0JewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCAiIiwgZSkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhDb3JlRXhjZXB0aW9uIGUpCi0JewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKGUuZ2V0U3RhdHVzKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9MYXVuY2hIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9MYXVuY2hIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RjOWRlYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvTGF1bmNoSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlBpcGVsaW5lRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5UcmFuc2Zvcm1EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlR5cGVkVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklUcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuTGF1bmNoQXR0cmlidXRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkxhdW5jaFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkJhc2VMYXVuY2hIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5QcmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIExhdW5jaEhlbHBlciBleHRlbmRzIEJhc2VMYXVuY2hIZWxwZXIgewotCXByaXZhdGUgZmluYWwgTGF1bmNoQXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotCXByaXZhdGUgZmluYWwgTGF1bmNoUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzOwotCXByaXZhdGUgZmluYWwgSVRyYW5zZm9ybWVyRmFjdG9yeSB0cmFuc2Zvcm1lckZhY3Rvcnk7Ci0KLQlwdWJsaWMgTGF1bmNoSGVscGVyKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXN1cGVyKGNvbmZpZ3VyYXRpb24pOwotCQlhdHRyaWJ1dGVzID0gaHlkcmF0ZUF0dHJpYnV0ZXMoY29uZmlndXJhdGlvbik7Ci0JCW91dHB1dFByb3BlcnRpZXMgPSBoeWRyYXRlT3V0cHV0UHJvcGVydGllcyhjb25maWd1cmF0aW9uKTsKLQkJdHJhbnNmb3JtZXJGYWN0b3J5ID0gaHlkcmF0ZVRyYW5zZm9ybWVyRmFjdG9yeShjb25maWd1cmF0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgTGF1bmNoUHJvcGVydGllcyBnZXRQcm9wZXJ0aWVzKCkgewotCQlyZXR1cm4gb3V0cHV0UHJvcGVydGllczsKLQl9Ci0KLQlwdWJsaWMgTGF1bmNoQXR0cmlidXRlcyBnZXRBdHRyaWJ1dGVzKCkgewotCQlyZXR1cm4gYXR0cmlidXRlczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzYXZlKEZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlCdWZmZXJlZFdyaXRlciB3cml0ZXIgPSBudWxsOwotCQl0cnkgewotCQkJLy8gZW5zdXJlIGl0IGV4aXN0cwotCQkJZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0JCQl3cml0ZXIgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoZmlsZSkpOwotCQkJUGlwZWxpbmVEZWZpbml0aW9uIHBkZWYgPSBuZXcgUGlwZWxpbmVEZWZpbml0aW9uKCk7Ci0JCQlmb3IgKEl0ZXJhdG9yPD8+IGl0ZXIgPSBhdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZXMoKS5pdGVyYXRvcigpOyBpdGVyCi0JCQkJCS5oYXNOZXh0KCk7KSB7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIGl0ZXIubmV4dCgpOwotCQkJCXBkZWYuYWRkQXR0cmlidXRlKG5ldyBUeXBlZFZhbHVlKGF0dC51cmksCi0JCQkJCQlUeXBlZFZhbHVlLlRZUEVfU1RSSU5HLCBhdHQudmFsdWUpKTsKLQkJCX0KLQkJCWZvciAoSXRlcmF0b3I8Pz4gaXRlciA9IHBpcGVsaW5lLmdldFRyYW5zZm9ybURlZnMoKS5pdGVyYXRvcigpOyBpdGVyCi0JCQkJCS5oYXNOZXh0KCk7KSB7Ci0JCQkJTGF1bmNoVHJhbnNmb3JtIGx0ID0gKExhdW5jaFRyYW5zZm9ybSkgaXRlci5uZXh0KCk7Ci0JCQkJVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmID0gbmV3IFRyYW5zZm9ybURlZmluaXRpb24oKTsKLQkJCQlVUkwgdXJsID0gcGF0aFRvVVJMKGx0LmdldExvY2F0aW9uKCkpOwotCQkJCXRkZWYuc2V0U3R5bGVzaGVldFVSTCh1cmwudG9FeHRlcm5hbEZvcm0oKSk7Ci0JCQkJdGRlZi5zZXRSZXNvbHZlckNsYXNzKGx0LmdldFJlc29sdmVyKCkpOwotCQkJCWZvciAoSXRlcmF0b3I8Pz4gaXRlcmF0b3IgPSBsdC5nZXRQYXJhbWV0ZXJzKCkuaXRlcmF0b3IoKTsgaXRlcmF0b3IKLQkJCQkJCS5oYXNOZXh0KCk7KSB7Ci0JCQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHQgPSAoTGF1bmNoQXR0cmlidXRlKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJCXRkZWYuYWRkUGFyYW1ldGVyKG5ldyBUeXBlZFZhbHVlKGF0dC51cmksCi0JCQkJCQkJVHlwZWRWYWx1ZS5UWVBFX1NUUklORywgYXR0LmdldFJlc29sdmVkVmFsdWUoKSkpOwotCQkJCX0KLQkJCQkvLyBzZXQgdGhlIG91dHB1dCBwcm9wcyBmb3IgdGhlIExBU1QgdHJhbnNmb3JtIG9ubHkKLQkJCQlpZiAoIWl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IG91dHB1dFByb3BlcnRpZXMKLQkJCQkJCQkuZ2V0UHJvcGVydGllcygpLmVudHJ5U2V0KCkpIHsKLQkJCQkJCVN0cmluZyBuYW1lID0gZW50cnkuZ2V0S2V5KCk7Ci0JCQkJCQlTdHJpbmcgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpOwotCQkJCQkJaWYgKG5hbWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSBudWxsKQotCQkJCQkJCXRkZWYuc2V0T3V0cHV0UHJvcGVydHkobmFtZSwgdmFsdWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJCXBkZWYuYWRkVHJhbnNmb3JtRGVmKHRkZWYpOwotCQkJfQotCi0JCQlEb2N1bWVudCBkb2MgPSBwZGVmLnRvWE1MKCk7Ci0JCQlTdHJpbmcgcyA9IFByZWZlcmVuY2VVdGlsLnNlcmlhbGl6ZURvY3VtZW50KGRvYyk7Ci0JCQl3cml0ZXIud3JpdGUocyk7Ci0JCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLAotCQkJCQlNZXNzYWdlcy5MYXVuY2hIZWxwZXJfMCwgZSkpOwotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLAotCQkJCQlNZXNzYWdlcy5MYXVuY2hIZWxwZXJfMSwgZSkpOwotCQl9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCSJQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIiwgZSkpOyAvLyROT04tTkxTLTEkCi0JCX0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCSJUcmFuc2Zvcm1lckV4Y2VwdGlvbiIsIGUpKTsgLy8kTk9OLU5MUy0xJAotCQl9IGZpbmFsbHkgewotCQkJaWYgKHdyaXRlciAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJd3JpdGVyLmNsb3NlKCk7Ci0JCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExhdW5jaFByb3BlcnRpZXMgaHlkcmF0ZU91dHB1dFByb3BlcnRpZXMoCi0JCQlJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUxhdW5jaFByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBMYXVuY2hQcm9wZXJ0aWVzKCk7Ci0JCWJvb2xlYW4gdXNlUHJlZmVyZW5jZVByb3BlcnRpZXMgPSBmYWxzZTsgLy8gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfUFJPUEVSVElFU19GUk9NX1BSRUZFUkVOQ0VTLAotCQkJCQkJCQkJCQkJCS8vIHRydWUpOwotCQlJUHJvY2Vzc29yVHlwZSBwdCA9IGdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbikKLQkJCQkuZ2V0UHJvY2Vzc29yVHlwZSgpOwotCQlpZiAodXNlUHJlZmVyZW5jZVByb3BlcnRpZXMpIHsKLQkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IHB0LmdldE91dHB1dFByb3BlcnR5VmFsdWVzKCkKLQkJCQkJLmVudHJ5U2V0KCkpIHsKLQkJCQlTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCk7Ci0JCQkJcHJvcGVydGllcy5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlTdHJpbmcgcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCQlKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9QUk9QRVJUSUVTLAotCQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShzCi0JCQkJCQkuZ2V0Qnl0ZXMoKSk7Ci0JCQkJcHJvcGVydGllcyA9IExhdW5jaFByb3BlcnRpZXMuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHByb3BlcnRpZXM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGF1bmNoQXR0cmlidXRlcyBoeWRyYXRlQXR0cmlidXRlcygKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJTGF1bmNoQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbmV3IExhdW5jaEF0dHJpYnV0ZXMoKTsKLQkJYm9vbGVhbiB1c2VEZWZhdWx0QXR0cmlidXRlcyA9IGZhbHNlOyAvLyBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9GRUFUVVJFU19GUk9NX1BSRUZFUkVOQ0VTLAotCQkJCQkJCQkJCQkJLy8gdHJ1ZSk7Ci0JCWlmICh1c2VEZWZhdWx0QXR0cmlidXRlcykgewotCQkJSVByb2Nlc3NvclR5cGUgcHQgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24pCi0JCQkJCS5nZXRQcm9jZXNzb3JUeXBlKCk7Ci0JCQlNYXA8U3RyaW5nLCBTdHJpbmc+IGZ2YWxzID0gcHQuZ2V0QXR0cmlidXRlVmFsdWVzKCk7Ci0JCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBmdmFscy5lbnRyeVNldCgpKSB7Ci0JCQkJU3RyaW5nIHVyaSA9IGVudHJ5LmdldEtleSgpOwotCQkJCWdldEF0dHJpYnV0ZShwdC5nZXRBdHRyaWJ1dGVzKCksIHVyaSk7Ci0JCQkJYXR0cmlidXRlcy5hZGRBdHRyaWJ1dGUobmV3IExhdW5jaEF0dHJpYnV0ZSh1cmksCi0JCQkJCQkic3RyaW5nIiwgZW50cnkuZ2V0VmFsdWUoKSkpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlTdHJpbmcgcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCQlKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0FUVFJJQlVURVMsCi0JCQkJCShTdHJpbmcpIG51bGwpOwotCQkJaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkgewotCQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHMKLQkJCQkJCS5nZXRCeXRlcygpKTsKLQkJCQlhdHRyaWJ1dGVzID0gTGF1bmNoQXR0cmlidXRlcy5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYXR0cmlidXRlczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJQXR0cmlidXRlIGdldEF0dHJpYnV0ZShJQXR0cmlidXRlW10gYXR0cmlidXRlcywgU3RyaW5nIHVyaSkgewotCQlmb3IgKElBdHRyaWJ1dGUgYXR0cmlidXRlIDogYXR0cmlidXRlcykgewotCQkJaWYgKGF0dHJpYnV0ZS5nZXRVUkkoKS5lcXVhbHModXJpKSkKLQkJCQlyZXR1cm4gYXR0cmlidXRlOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3Nvckluc3RhbGwgZ2V0UHJvY2Vzc29ySW5zdGFsbCgKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJYm9vbGVhbiB1c2VEZWZhdWx0UHJvY2Vzc29yID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfREVGQVVMVF9QUk9DRVNTT1IsCi0JCQkJdHJ1ZSk7Ci0JCWlmICh1c2VEZWZhdWx0UHJvY2Vzc29yKQotCQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldERlZmF1bHRQcm9jZXNzb3IoKTsKLQkJU3RyaW5nIHByb2Nlc3NvcklkID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QUk9DRVNTT1IsICIiKTsgLy8kTk9OLU5MUy0xJAotCQlJUHJvY2Vzc29ySW5zdGFsbCBwcm9jZXNzb3IgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3IocHJvY2Vzc29ySWQpOwotCQlyZXR1cm4gcHJvY2Vzc29yOwotCX0KLQotCXByaXZhdGUgc3RhdGljIElUcmFuc2Zvcm1lckZhY3RvcnkgaHlkcmF0ZVRyYW5zZm9ybWVyRmFjdG9yeSgKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVByb2Nlc3NvclR5cGUgdHlwZSA9IGdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbikKLQkJCQkuZ2V0UHJvY2Vzc29yVHlwZSgpOwotCQlib29sZWFuIHVzZURlZmF1bHRGYWN0b3J5ID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfREVGQVVMVF9QUk9DRVNTT1IsCi0JCQkJdHJ1ZSk7Ci0JCWlmICh1c2VEZWZhdWx0RmFjdG9yeSkKLQkJCXJldHVybiB0eXBlLmdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQotCQlTdHJpbmcgZmFjdG9yeUlkID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9UUkFOU0ZPUk1FUl9GQUNUT1JZLAotCQkJCShTdHJpbmcpIG51bGwpOwotCQlpZiAoZmFjdG9yeUlkID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlmb3IgKElUcmFuc2Zvcm1lckZhY3RvcnkgZmFjdG9yeSA6IHR5cGUuZ2V0VHJhbnNmb3JtZXJGYWN0b3JpZXMoKSkgewotCQkJaWYgKGZhY3RvcnkuZ2V0RmFjdG9yeUNsYXNzKCkuZXF1YWxzKGZhY3RvcnlJZCkpCi0JCQkJcmV0dXJuIGZhY3Rvcnk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElUcmFuc2Zvcm1lckZhY3RvcnkgZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCkgewotCQlyZXR1cm4gdHJhbnNmb3JtZXJGYWN0b3J5OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMDQwNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVFJ1bnRpbWVfMTA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVFJ1bnRpbWVfNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUUnVudGltZV82OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRSdW50aW1lXzc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVFJ1bnRpbWVfODsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUUnVudGltZV85OwotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEF0dHJpYnV0ZV8wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEF0dHJpYnV0ZV8xOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEF0dHJpYnV0ZV8yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEF0dHJpYnV0ZV81OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBsdWdpblByb2Nlc3Nvckphcl8wOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JUeXBlXzI7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvclR5cGVfMzsgCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yVHlwZV80OyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JUeXBlXzU7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFV0aWxzXzA7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFV0aWxzXzE7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzE7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzIzOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzM7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMzE7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV82OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNzsgCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl8zOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl82OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFic3RyYWN0UmVnaXN0cnlSZWFkZXJfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl85OwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzE7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8yOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMzsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzQ7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV81OwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIExhdW5jaEhlbHBlcl8wOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIExhdW5jaEhlbHBlcl8xOwotCQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTERlYnVnVGFyZ2V0XzA7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMRGVidWdUYXJnZXRfMTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xEZWJ1Z1RhcmdldF8xOTsgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMRGVidWdUYXJnZXRfMjsgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMRGVidWdUYXJnZXRfMjA7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMRGVidWdUYXJnZXRfMzsgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMRGVidWdUYXJnZXRfNDsKLSAgICAKLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCX0KLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9PdXRwdXRQcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL091dHB1dFByb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMGM5NmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL091dHB1dFByb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JT3V0cHV0UHJvcGVydHk7Ci0KLXB1YmxpYyBjbGFzcyBPdXRwdXRQcm9wZXJ0eSBpbXBsZW1lbnRzIElPdXRwdXRQcm9wZXJ0eQotewotCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVzYzsKLQotCXB1YmxpYyBPdXRwdXRQcm9wZXJ0eShTdHJpbmcga2V5LCBTdHJpbmcgZGVzYykKLQl7Ci0JCXRoaXMubmFtZSA9IGtleTsKLQkJdGhpcy5kZXNjID0gZGVzYzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkKLQl7Ci0JCXJldHVybiBkZXNjOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL091dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9PdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNzMxMzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL091dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMKLXsKLQlwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsU3RyaW5nPj4gdHlwZVByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsU3RyaW5nPj4oKTsKLQotCXB1YmxpYyBNYXA8U3RyaW5nLFN0cmluZz4gZ2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoU3RyaW5nIHR5cGVJZCkKLQl7Ci0JCXJldHVybiB0eXBlUHJvcGVydGllcy5nZXQodHlwZUlkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhTdHJpbmcgdHlwZUlkLCBNYXA8U3RyaW5nLFN0cmluZz4gcHJvcGVydGllcykKLQl7Ci0JCXR5cGVQcm9wZXJ0aWVzLnB1dCh0eXBlSWQsIHByb3BlcnRpZXMpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0QXNYTUwoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5jcmVhdGVFbGVtZW50KCJvdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzIik7IC8vJE5PTi1OTFMtMSQKLQkJZG9jLmFwcGVuZENoaWxkKGNvbmZpZyk7Ci0KLQkJZm9yIChTdHJpbmcgdHlwZSA6IHR5cGVQcm9wZXJ0aWVzLmtleVNldCgpKQotCQl7Ci0JCQlFbGVtZW50IHByb2Nlc3NvclR5cGVFbGVtZW50ID0gdHlwZUFzRWxlbWVudChkb2MsIHR5cGUpOwotCQkJTWFwPFN0cmluZyxTdHJpbmc+IHByb3BlcnR5VmFsdWVzID0gdHlwZVByb3BlcnRpZXMuZ2V0KHR5cGUpOwotCQkJZmVhdHVyZVZhbHVlc0FzRWxlbWVudChkb2MsIHByb2Nlc3NvclR5cGVFbGVtZW50LCBwcm9wZXJ0eVZhbHVlcyk7Ci0JCQljb25maWcuYXBwZW5kQ2hpbGQocHJvY2Vzc29yVHlwZUVsZW1lbnQpOwotCQl9Ci0KLQkJLy8gU2VyaWFsaXplIHRoZSBEb2N1bWVudCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgU3RyaW5nCi0JCXJldHVybiBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyBmcm9tWE1MKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzKCk7Ci0KLQkJLy8gRG8gdGhlIHBhcnNpbmcgYW5kIG9idGFpbiB0aGUgdG9wLWxldmVsIG5vZGUKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoaW5wdXRTdHJlYW0pOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQlFbGVtZW50W10gcHJvY2Vzc29yVHlwZUVscyA9IFByZWZlcmVuY2VVdGlsLmdldENoaWxkRWxlbWVudHMoY29uZmlnLCAicHJvY2Vzc29yVHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2Vzc29yVHlwZUVscy5sZW5ndGg7ICsraSkKLQkJewotCQkJRWxlbWVudCBwcm9jZXNzb3JUeXBlRWwgPSBwcm9jZXNzb3JUeXBlRWxzW2ldOwotCQkJU3RyaW5nIHR5cGUgPSBlbGVtZW50QXNUeXBlKHByb2Nlc3NvclR5cGVFbCk7Ci0JCQlNYXA8U3RyaW5nLFN0cmluZz4gZmVhdHVyZVZhbHVlcyA9IGVsZW1lbnRBc1Byb3BlcnR5VmFsdWVzKHByb2Nlc3NvclR5cGVFbCk7Ci0JCQlwcmVmcy5zZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyh0eXBlLCBmZWF0dXJlVmFsdWVzKTsKLQkJfQotCi0JCXJldHVybiBwcmVmczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZWxlbWVudEFzVHlwZShFbGVtZW50IHBhcmVudCkKLQl7Ci0JCVN0cmluZyBpZCA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoImlkIik7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGlkOwotCX0KLQotCXByaXZhdGUgc3RhdGljIEVsZW1lbnQgdHlwZUFzRWxlbWVudChEb2N1bWVudCBkb2MsIFN0cmluZyB0eXBlKQotCXsKLQkJRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInByb2Nlc3NvclR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0eXBlKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGVsZW1lbnRBc1Byb3BlcnR5VmFsdWVzKEVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCUVsZW1lbnRbXSBwcm9wZXJ0eUVscyA9IFByZWZlcmVuY2VVdGlsLmdldENoaWxkRWxlbWVudHMoZWxlbWVudCwgInByb3BlcnR5Iik7IC8vJE5PTi1OTFMtMSQKLQkJTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0eVZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7Ci0JCWZvciAoRWxlbWVudCBmZWF0dXJlRWwgOiBwcm9wZXJ0eUVscykKLQkJewotCQkJU3RyaW5nIG5hbWUgPSBmZWF0dXJlRWwuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyB2YWx1ZSA9IGZlYXR1cmVFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCXByb3BlcnR5VmFsdWVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0JCX0KLQkJcmV0dXJuIHByb3BlcnR5VmFsdWVzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZmVhdHVyZVZhbHVlc0FzRWxlbWVudChEb2N1bWVudCBkb2MsIEVsZW1lbnQgZmVhdHVyZXNFbCwgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0eVZhbHVlcykKLQl7Ci0JCWlmIChwcm9wZXJ0eVZhbHVlcyAhPSBudWxsKQotCQl7Ci0JCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBwcm9wZXJ0eVZhbHVlcy5lbnRyeVNldCgpKQotCQkJewotCQkJCVN0cmluZyBuYW1lID0gZW50cnkuZ2V0S2V5KCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsKLQkJCQlFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgicHJvcGVydHkiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgidmFsdWUiLCB2YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlmZWF0dXJlc0VsLmFwcGVuZENoaWxkKGVsZW1lbnQpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1BsdWdpblByb2Nlc3Nvckphci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1BsdWdpblByb2Nlc3Nvckphci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmNlM2ZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9QbHVnaW5Qcm9jZXNzb3JKYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgUGx1Z2luUHJvY2Vzc29ySmFyIGltcGxlbWVudHMgSVByb2Nlc3NvckphcgotewotCXByaXZhdGUgZmluYWwgU3RyaW5nIHBsdWdpbklkOwotCXByaXZhdGUgZmluYWwgSVBhdGggcGF0aDsKLQotCXB1YmxpYyBQbHVnaW5Qcm9jZXNzb3JKYXIoU3RyaW5nIHBsdWdpbklkLCBJUGF0aCBwYXRoKQotCXsKLQkJdGhpcy5wbHVnaW5JZCA9IHBsdWdpbklkOwotCQl0aGlzLnBhdGggPSBwYXRoOwotCX0KLQotCXB1YmxpYyBVUkwgYXNVUkwoKQotCXsKLQkJVVJMIHVybCA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQkvLyBGSVhNRSB2ZXJ5IGNsdW1zeSB3YXkgdG8gZ2V0IGxvY2F0aW9uIG9yYml0IGphciBmaWxlCi0JCQkvLyBUaGVyZSBpcyBzdXJlbHkgYSBiZXR0ZXIgd2F5LCBidXQgSSBjYW4nZCBmaW5kIGl0LgotCQkJaWYgKHBhdGggPT0gbnVsbCkKLQkJCXsKLQkJCQl1cmwgPSBQbGF0Zm9ybS5nZXRCdW5kbGUocGx1Z2luSWQpLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJCQl1cmwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHVybCk7Ci0JCQkJU3RyaW5nIHMgPSB1cmwuZ2V0UGF0aCgpOwotCQkJCWlmIChzLmVuZHNXaXRoKCIhLyIpKSAvLyROT04tTkxTLTEkCi0JCQkJewotCQkJCQlzID0gcy5zdWJzdHJpbmcoMCxzLmxlbmd0aCgpLTIpOwotCQkJCX0KLQkJCQl1cmwgPSBuZXcgVVJMKHMpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUocGx1Z2luSWQpOwotCQkJCUlQYXRoIGphclBhdGggPSBuZXcgUGF0aCgiLyIgKyBwYXRoKTsgLy8kTk9OLU5MUy0xJAotCQkJCXVybCA9IEZpbGVMb2NhdG9yLmZpbmQoYnVuZGxlLCBqYXJQYXRoLCBudWxsKTsKLQkJCQlpZiAodXJsICE9IG51bGwpCi0JCQkJCXVybCA9IEZpbGVMb2NhdG9yLnJlc29sdmUodXJsKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQlwdWJsaWMgSVBhdGggZ2V0UGF0aCgpCi0JewotCQlyZXR1cm4gcGF0aDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCXJldHVybiAiUGx1Z2luICIgKyBwbHVnaW5JZCArIE1lc3NhZ2VzLlBsdWdpblByb2Nlc3Nvckphcl8wICsgcGF0aDsgLy8kTk9OLU5MUy0xJCAKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZjFiY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLS8qKgotICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcgotewotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCi0JewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgRGVmYXVsdFNjb3BlKCkuZ2V0Tm9kZShKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCk7Ci0KLQkJUHJvY2Vzc29yUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgUHJvY2Vzc29yUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0RGVmYXVsdFByb2Nlc3NvcklkKEpBWFBSdW50aW1lLkpSRV9ERUZBVUxUX1BST0NFU1NPUl9JRCk7Ci0KLQkJT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyBvdXRwdXRQcmVmcyA9IG5ldyBPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzKCk7Ci0JCW91dHB1dFByZWZzLnNldE91dHB1dFByb3BlcnR5VmFsdWVzKEpBWFBSdW50aW1lLkpSRV9ERUZBVUxUX1BST0NFU1NPUl9UWVBFX0lELCBKQVhQUnVudGltZS5jcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhKQVhQUnVudGltZS5KUkVfREVGQVVMVF9QUk9DRVNTT1JfVFlQRV9JRCkpOwotCQlvdXRwdXRQcmVmcy5zZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5YQUxBTl9UWVBFX0lELCBKQVhQUnVudGltZS5jcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5YQUxBTl9UWVBFX0lEKSk7Ci0JCW91dHB1dFByZWZzLnNldE91dHB1dFByb3BlcnR5VmFsdWVzKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OX1RZUEVfSUQsIEpBWFBSdW50aW1lLmNyZWF0ZURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OX1RZUEVfSUQpKTsKLQkJb3V0cHV0UHJlZnMuc2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuU0FYT05fMV8wX1RZUEVfSUQsIEpBWFBSdW50aW1lLmNyZWF0ZURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OXzFfMF9UWVBFX0lEKSk7Ci0KLQkJdHJ5Ci0JCXsKLQkJCVN0cmluZyB4bWwgPSBwcmVmcy5nZXRBc1hNTCgpOwotCQkJbm9kZS5wdXQoSkFYUFJ1bnRpbWUuUFJFRl9QUk9DRVNTT1JfWE1MLCB4bWwpOwotCi0JCQl4bWwgPSBvdXRwdXRQcmVmcy5nZXRBc1hNTCgpOwotCQkJbm9kZS5wdXQoSkFYUFJ1bnRpbWUuUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwsIHhtbCk7Ci0KLQkJCW5vZGUucHV0KEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfREVGQVVMVF9ERUJVR0dJTkdfSU5TVEFMTF9JRCwgIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnhhbGFuLnByb2Nlc3NvciIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkKLQkJewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOGZhOWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW52b2tlcjsKLQotcHVibGljIGNsYXNzIFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yIGltcGxlbWVudHMgSVByb2Nlc3Nvckludm9rZXIgewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaW52b2tlckNsYXNzOwotCXByaXZhdGUgZmluYWwgU3RyaW5nW10gY2xhc3NwYXRoOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGlkOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGJ1bmRsZUlkOwotCi0JcHVibGljIFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKFN0cmluZyBpZCwgU3RyaW5nIGJ1bmRsZUlkLAotCQkJU3RyaW5nIGludm9rZXJDbGFzcywgU3RyaW5nW10gY2xhc3NwYXRoKSB7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkOwotCQl0aGlzLmludm9rZXJDbGFzcyA9IGludm9rZXJDbGFzczsKLQkJdGhpcy5jbGFzc3BhdGggPSBjbGFzc3BhdGg7Ci0JfQotCi0JcHVibGljIFN0cmluZ1tdIGdldENsYXNzcGF0aEVudHJpZXMoKSB7Ci0JCXJldHVybiBjcmVhdGVFbnRyaWVzKGJ1bmRsZUlkLCBjbGFzc3BhdGgpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gY3JlYXRlRW50cmllcyhTdHJpbmcgYnVuZGxlSWQsIFN0cmluZ1tdIGNsYXNzcGF0aCkgewotCQlMaXN0PFN0cmluZz4gZW50cmllcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQl0cnkgewotCQkJLy8gaWYgaW4gZGV2IG1vZGUsIHVzZSB0aGUgYmluIGRpcgotCQkJaWYgKFBsYXRmb3JtLmluRGV2ZWxvcG1lbnRNb2RlKCkpCi0JCQkJZW50cmllcy5hZGQoVXRpbHMuZ2V0RmlsZUxvY2F0aW9uKGJ1bmRsZUlkLCAiL2JpbiIpKTsgLy8kTk9OLU5MUy0xJAotCQkJZm9yIChTdHJpbmcgamFyIDogY2xhc3NwYXRoKSB7Ci0JCQkJU3RyaW5nIGVudHJ5ID0gbnVsbDsKLQkJCQlpZiAoamFyLnN0YXJ0c1dpdGgoIiR7ZWNsaXBzZV9vcmJpdDoiKSAmJiBqYXIuZW5kc1dpdGgoIn0iKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJewotCQkJCQlqYXIgPSBqYXIuc3Vic3RyaW5nKCIke2VjbGlwc2Vfb3JiaXQ6Ii5sZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJamFyID0gamFyLnN1YnN0cmluZygwLCBqYXIubGVuZ3RoKCkgLSAxKTsKLQkJCQkJdHJ5IHsKLQkJCQkJCUZpbGUgYnVuZGxlRmlsZSA9IEZpbGVMb2NhdG9yLmdldEJ1bmRsZUZpbGUoUGxhdGZvcm0KLQkJCQkJCQkJLmdldEJ1bmRsZShqYXIpKTsKLQkJCQkJCWlmIChidW5kbGVGaWxlLmlzRGlyZWN0b3J5KCkpCi0JCQkJCQkJZW50cnkgPSBVdGlscy5nZXRQbHVnaW5Mb2NhdGlvbihqYXIpICsgIi9iaW4iOyAvLyROT04tTkxTLTEkCi0JCQkJCQllbHNlCi0JCQkJCQkJZW50cnkgPSBVdGlscy5nZXRQbHVnaW5Mb2NhdGlvbihqYXIpOwotCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQllbnRyeSA9IFV0aWxzLmdldEZpbGVMb2NhdGlvbihidW5kbGVJZCwgamFyKTsKLQkJCQl9Ci0JCQkJaWYgKGVudHJ5ICE9IG51bGwpCi0JCQkJCWVudHJpZXMuYWRkKGVudHJ5KTsKLQkJCX0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCQlyZXR1cm4gZW50cmllcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCX0KLQotCS8qKgotCSAqIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgSVByb2Nlc3Nvckludm9rZXIKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEludm9rZXJDbGFzc05hbWUoKSB7Ci0JCXJldHVybiBpbnZva2VyQ2xhc3M7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQkJcmV0dXJuIGlkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JKYXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JKYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQzZDljYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29ySmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvckphciBpbXBsZW1lbnRzIElQcm9jZXNzb3JKYXIgewotCXByaXZhdGUgZmluYWwgSVBhdGggcGF0aDsKLQotCXB1YmxpYyBQcm9jZXNzb3JKYXIoSVBhdGggcGF0aCkgewotCQl0aGlzLnBhdGggPSBwYXRoOwotCX0KLQotCXB1YmxpYyBVUkwgYXNVUkwoKSB7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkgewotCQkJLy8gZmlyc3QgdHJ5IHRvIHJlc29sdmUgYXMgd29ya3NwYWNlLXJlbGF0aXZlIHBhdGgKLQkJCUlQYXRoIHJvb3RQYXRoID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKQotCQkJCQkuZ2V0TG9jYXRpb24oKTsKLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHJvb3RQYXRoLmFwcGVuZChwYXRoKS50b09TU3RyaW5nKCkpOwotCQkJaWYgKGZpbGUuZXhpc3RzKCkpCi0JCQkJdXJsID0gZmlsZS50b1VSSSgpLnRvVVJMKCk7Ci0JCQllbHNlIHsKLQkJCQkvLyBub3cgdHJ5IHRvIHJlc29sdmUgYXMgYW4gYWJzb2x1dGUgcGF0aAotCQkJCWZpbGUgPSBuZXcgRmlsZShwYXRoLnRvT1NTdHJpbmcoKSk7Ci0JCQkJdXJsID0gZmlsZS50b1VSSSgpLnRvVVJMKCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCQlyZXR1cm4gdXJsOwotCX0KLQotCXB1YmxpYyBJUGF0aCBnZXRQYXRoKCkgewotCQlyZXR1cm4gcGF0aDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlyZXR1cm4gcGF0aC50b1N0cmluZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JQcmVmZXJlbmNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3NvclByZWZlcmVuY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYzEyYjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3NvclByZWZlcmVuY2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JQcmVmZXJlbmNlcwotewotCXByaXZhdGUgU3RyaW5nIGRlZmF1bHRQcm9jZXNzb3JJZDsKLQlwcml2YXRlIExpc3Q8SVByb2Nlc3Nvckluc3RhbGw+IHByb2Nlc3NvcnMgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPigpOwotCi0JcHVibGljIHZvaWQgc2V0UHJvY2Vzc29ycyhMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiBwcm9jZXNzb3JzKQotCXsKLQkJdGhpcy5wcm9jZXNzb3JzID0gcHJvY2Vzc29yczsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4gZ2V0UHJvY2Vzc29ycygpCi0JewotCQlyZXR1cm4gcHJvY2Vzc29yczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRQcm9jZXNzb3JJZCgpCi0JewotCQlyZXR1cm4gZGVmYXVsdFByb2Nlc3NvcklkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRQcm9jZXNzb3JJZChTdHJpbmcgZGVmYXVsdFByb2Nlc3NvcklkKQotCXsKLQkJdGhpcy5kZWZhdWx0UHJvY2Vzc29ySWQgPSBkZWZhdWx0UHJvY2Vzc29ySWQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRBc1hNTCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KCk7Ci0JCUVsZW1lbnQgY29uZmlnID0gZG9jLmNyZWF0ZUVsZW1lbnQoInByb2Nlc3NvclNldHRpbmdzIik7ICAvLyROT04tTkxTLTEkCi0JCWRvYy5hcHBlbmRDaGlsZChjb25maWcpOwotCi0JCS8vIFNldCB0aGUgZGVmYXVsdFZNIGF0dHJpYnV0ZSBvbiB0aGUgdG9wLWxldmVsIG5vZGUKLQkJaWYgKGRlZmF1bHRQcm9jZXNzb3JJZCAhPSBudWxsKQotCQl7Ci0JCQljb25maWcuc2V0QXR0cmlidXRlKCJkZWZhdWx0UHJvY2Vzc29yIiwgZGVmYXVsdFByb2Nlc3NvcklkKTsgIC8vJE5PTi1OTFMtMSQKLQkJfQotCi0JCWZvciAoSXRlcmF0b3I8SVByb2Nlc3Nvckluc3RhbGw+IGl0ZXIgPSBwcm9jZXNzb3JzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGl0ZXIubmV4dCgpOwotCQkJaWYgKCFpbnN0YWxsLmlzQ29udHJpYnV0ZWQoKSkKLQkJCXsKLQkJCQlFbGVtZW50IHZtVHlwZUVsZW1lbnQgPSBpbnN0YWxsQXNFbGVtZW50KGRvYywgaW5zdGFsbCk7Ci0JCQkJY29uZmlnLmFwcGVuZENoaWxkKHZtVHlwZUVsZW1lbnQpOwotCQkJfQotCQl9Ci0KLQkJLy8gU2VyaWFsaXplIHRoZSBEb2N1bWVudCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgU3RyaW5nCi0JCXJldHVybiBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUHJvY2Vzc29yUHJlZmVyZW5jZXMgZnJvbVhNTChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVByb2Nlc3NvclByZWZlcmVuY2VzIHByZWZzID0gbmV3IFByb2Nlc3NvclByZWZlcmVuY2VzKCk7Ci0KLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoaW5wdXRTdHJlYW0pOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQkvLyBQb3B1bGF0ZSB0aGUgZGVmYXVsdCBWTS1yZWxhdGVkIGZpZWxkcwotCQlwcmVmcy5zZXREZWZhdWx0UHJvY2Vzc29ySWQoY29uZmlnLmdldEF0dHJpYnV0ZSgiZGVmYXVsdFByb2Nlc3NvciIpKTsgLy8kTk9OLU5MUy0xJAotCi0JCUxpc3Q8SVByb2Nlc3Nvckluc3RhbGw+IHByb2Nlc3NvcnMgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPigpOwotCQkvLyBUcmF2ZXJzZSB0aGUgcGFyc2VkIHN0cnVjdHVyZSBhbmQgcG9wdWxhdGUgdGhlIFZNVHlwZSB0byBWTSBNYXAKLQkJRWxlbWVudFtdIHByb2Nlc3NvckVscyA9IFByZWZlcmVuY2VVdGlsLmdldENoaWxkRWxlbWVudHMoY29uZmlnLCAicHJvY2Vzc29yIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZXNzb3JFbHMubGVuZ3RoOyArK2kpCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIHByb2Nlc3NvciA9IGVsZW1lbnRBc0luc3RhbGwocHJvY2Vzc29yRWxzW2ldKTsKLQkJCXByb2Nlc3NvcnMuYWRkKHByb2Nlc3Nvcik7Ci0JCX0KLQotCQlwcmVmcy5zZXRQcm9jZXNzb3JzKHByb2Nlc3NvcnMpOwotCi0JCXJldHVybiBwcmVmczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJUHJvY2Vzc29ySW5zdGFsbCBlbGVtZW50QXNJbnN0YWxsKEVsZW1lbnQgcGFyZW50KQotCXsKLQkJU3RyaW5nIGlkID0gcGFyZW50LmdldEF0dHJpYnV0ZSgiaWQiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgbGFiZWwgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJsYWJlbCIpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyB0eXBlSWQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJ0eXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIHN1cHBvcnRzID0gcGFyZW50LmdldEF0dHJpYnV0ZSgic3VwcG9ydHMiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgZGVidWdnZXJJZCA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoImRlYnVnZ2VySWQiKTsgLy8kTk9OLU5MUy0xJAotCi0JCUlQcm9jZXNzb3JKYXJbXSBqYXJzID0gbnVsbDsKLQkJRWxlbWVudFtdIGphcnNFbHMgPSBQcmVmZXJlbmNlVXRpbC5nZXRDaGlsZEVsZW1lbnRzKHBhcmVudCwgImphcnMiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoamFyc0Vscy5sZW5ndGggPT0gMSkKLQkJewotCQkJamFycyA9IGVsZW1lbnRBc0phcnMoamFyc0Vsc1swXSk7Ci0JCX0KLQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IG5ldyBQcm9jZXNzb3JJbnN0YWxsKGlkLCBsYWJlbCwgdHlwZUlkLCBqYXJzLCBkZWJ1Z2dlcklkLCBzdXBwb3J0cywgZmFsc2UpOwotCQlyZXR1cm4gaW5zdGFsbDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBFbGVtZW50IGluc3RhbGxBc0VsZW1lbnQoRG9jdW1lbnQgZG9jLCBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInByb2Nlc3NvciIpOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsIGluc3RhbGwuZ2V0SWQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImxhYmVsIiwgaW5zdGFsbC5nZXROYW1lKCkpOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0SWQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInN1cHBvcnRzIiwgaW5zdGFsbC5nZXRTdXBwb3J0cygpKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgiZGVidWdnZXJJZCIsIGluc3RhbGwuZ2V0RGVidWdnZXIoKSAhPSBudWxsID8gaW5zdGFsbC5nZXREZWJ1Z2dlcigpLmdldElkKCkgOiBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LmFwcGVuZENoaWxkKGphcnNBc0VsZW1lbnQoZG9jLCBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKSkpOwotCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJUHJvY2Vzc29ySmFyW10gZWxlbWVudEFzSmFycyhFbGVtZW50IGVsZW1lbnQpCi0JewotCQlFbGVtZW50W10gamFyRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhlbGVtZW50LCAiamFyIik7IC8vJE5PTi1OTFMtMSQKLQkJTGlzdDxQcm9jZXNzb3JKYXI+IGphcnMgPSBuZXcgQXJyYXlMaXN0PFByb2Nlc3Nvckphcj4oamFyRWxzLmxlbmd0aCk7Ci0JCWZvciAoRWxlbWVudCBqYXJFbCA6IGphckVscykKLQkJewotCQkJTm9kZSBub2RlID0gamFyRWwuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJaWYgKG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpCi0JCQl7Ci0JCQkJU3RyaW5nIHBhdGggPSAoKFRleHQpIG5vZGUpLmdldE5vZGVWYWx1ZSgpOwotCQkJCWphcnMuYWRkKG5ldyBQcm9jZXNzb3JKYXIoUGF0aC5mcm9tUG9ydGFibGVTdHJpbmcocGF0aCkpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gamFycy50b0FycmF5KG5ldyBJUHJvY2Vzc29ySmFyWzBdKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBFbGVtZW50IGphcnNBc0VsZW1lbnQoRG9jdW1lbnQgZG9jLCBJUHJvY2Vzc29ySmFyW10gamFycykKLQl7Ci0JCUVsZW1lbnQgamFyc0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoImphcnMiKTsgIC8vJE5PTi1OTFMtMSQKLQkJZm9yIChJUHJvY2Vzc29ySmFyIGphciA6IGphcnMpCi0JCXsKLQkJCWlmIChqYXIgIT0gbnVsbCAmJiBqYXIuZ2V0UGF0aCgpICE9IG51bGwpCi0JCQl7Ci0JCQkJRWxlbWVudCBqYXJFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJqYXIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCVRleHQgdGV4dCA9IGRvYy5jcmVhdGVUZXh0Tm9kZShqYXIuZ2V0UGF0aCgpLnRvUG9ydGFibGVTdHJpbmcoKSk7Ci0JCQkJamFyRWwuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCQkJamFyc0VsLmFwcGVuZENoaWxkKGphckVsKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gamFyc0VsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmJjNWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSU91dHB1dFByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JUeXBlIGltcGxlbWVudHMgSVByb2Nlc3NvclR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERVNDX1NVRkZJWCA9ICIuREVTQyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9TVUZGSVggPSAiLlRZUEUiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBpZDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwotCXByaXZhdGUgZmluYWwgSVRyYW5zZm9ybWVyRmFjdG9yeVtdIHRyYW5zZm9ybWVyRmFjdG9yaWVzOwotCXByaXZhdGUgZmluYWwgVVJMIGF0dHJpYnV0ZVByb3BlcnRpZXNVUkw7Ci0JcHJpdmF0ZSBmaW5hbCBVUkwgb3V0cHV0UHJvcGVydGllc1VSTDsKLQotCXByaXZhdGUgSUF0dHJpYnV0ZVtdIGF0dHJpYnV0ZXM7Ci0JcHJpdmF0ZSBJT3V0cHV0UHJvcGVydHlbXSBvdXRwdXRQcm9wZXJ0aWVzOwotCXByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBvdXRwdXRQcm9wZXJ0eVZhbHVlczsKLQlwcml2YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlVmFsdWVzOwotCi0JcHVibGljIFByb2Nlc3NvclR5cGUoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgVVJMIGF0dHJpYnV0ZVByb3BlcnRpZXNVUkwsCi0JCQlVUkwgb3V0cHV0UHJvcGVydGllc1VSTCwgTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVWYWx1ZXMsCi0JCQlNYXA8U3RyaW5nLCBTdHJpbmc+IG91dHB1dFByb3BlcnR5VmFsdWVzLAotCQkJSVRyYW5zZm9ybWVyRmFjdG9yeVtdIHRyYW5zZm9ybWVyRmFjdG9yaWVzKSB7Ci0JCXRoaXMuaWQgPSBpZDsKLQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJdGhpcy5hdHRyaWJ1dGVQcm9wZXJ0aWVzVVJMID0gYXR0cmlidXRlUHJvcGVydGllc1VSTDsKLQkJdGhpcy5vdXRwdXRQcm9wZXJ0aWVzVVJMID0gb3V0cHV0UHJvcGVydGllc1VSTDsKLQkJdGhpcy5hdHRyaWJ1dGVWYWx1ZXMgPSBhdHRyaWJ1dGVWYWx1ZXM7Ci0JCXRoaXMudHJhbnNmb3JtZXJGYWN0b3JpZXMgPSB0cmFuc2Zvcm1lckZhY3RvcmllczsKLQkJdGhpcy5vdXRwdXRQcm9wZXJ0eVZhbHVlcyA9IG91dHB1dFByb3BlcnR5VmFsdWVzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkgewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRBdHRyaWJ1dGVWYWx1ZXMoKSB7Ci0JCXJldHVybiBhdHRyaWJ1dGVWYWx1ZXM7Ci0JfQotCi0JcHVibGljIElBdHRyaWJ1dGVbXSBnZXRBdHRyaWJ1dGVzKCkgewotCQlpZiAoYXR0cmlidXRlcyA9PSBudWxsKSB7Ci0JCQlpZiAoYXR0cmlidXRlUHJvcGVydGllc1VSTCAhPSBudWxsKQotCQkJCWF0dHJpYnV0ZXMgPSBsb2FkQXR0cmlidXRlcygpOwotCQkJZWxzZQotCQkJCWF0dHJpYnV0ZXMgPSBuZXcgSUF0dHJpYnV0ZVswXTsKLQkJfQotCQlyZXR1cm4gYXR0cmlidXRlczsKLQl9Ci0KLQlwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcygpIHsKLQkJcmV0dXJuIG91dHB1dFByb3BlcnR5VmFsdWVzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzSlJFRGVmYXVsdCgpIHsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLkpSRV9ERUZBVUxUX1BST0NFU1NPUl9UWVBFX0lELmVxdWFscyhpZCk7Ci0JfQotCi0JcHVibGljIElUcmFuc2Zvcm1lckZhY3RvcnlbXSBnZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpIHsKLQkJcmV0dXJuIHRyYW5zZm9ybWVyRmFjdG9yaWVzOwotCX0KLQotCXB1YmxpYyBJVHJhbnNmb3JtZXJGYWN0b3J5IGdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKSB7Ci0JCWlmICh0cmFuc2Zvcm1lckZhY3Rvcmllcy5sZW5ndGggPiAwKQotCQkJcmV0dXJuIHRyYW5zZm9ybWVyRmFjdG9yaWVzWzBdOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSU91dHB1dFByb3BlcnR5W10gZ2V0T3V0cHV0UHJvcGVydGllcygpIHsKLQkJaWYgKG91dHB1dFByb3BlcnRpZXMgPT0gbnVsbCkgewotCQkJaWYgKG91dHB1dFByb3BlcnRpZXNVUkwgIT0gbnVsbCkKLQkJCQlvdXRwdXRQcm9wZXJ0aWVzID0gbG9hZE91dHB1dFByb3BlcnRpZXMoKTsKLQkJCWVsc2UKLQkJCQlvdXRwdXRQcm9wZXJ0aWVzID0gbmV3IElPdXRwdXRQcm9wZXJ0eVswXTsKLQkJfQotCQlyZXR1cm4gb3V0cHV0UHJvcGVydGllczsKLQl9Ci0KLQlwcml2YXRlIElPdXRwdXRQcm9wZXJ0eVtdIGxvYWRPdXRwdXRQcm9wZXJ0aWVzKCkgewotCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbnVsbDsKLQkJTGlzdDxPdXRwdXRQcm9wZXJ0eT4gb3V0cHV0cyA9IG5ldyBBcnJheUxpc3Q8T3V0cHV0UHJvcGVydHk+KCk7Ci0JCVByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCQl0cnkgewotCi0JCQlpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG91dHB1dFByb3BlcnRpZXNVUkwub3BlblN0cmVhbSgpKTsKLQkJCXByb3BzLmxvYWQoaXMpOwotCQkJZm9yIChPYmplY3QgZWxlbWVudCA6IHByb3BzLmtleVNldCgpKSB7Ci0JCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGVsZW1lbnQ7Ci0JCQkJaWYgKCFrZXkuZW5kc1dpdGgoREVTQ19TVUZGSVgpKSB7Ci0JCQkJCVN0cmluZyBuYW1lID0ga2V5OwotCQkJCQlTdHJpbmcgdXJpID0gcHJvcHMuZ2V0UHJvcGVydHkoa2V5KTsKLQkJCQkJU3RyaW5nIGRlc2MgPSBwcm9wcy5nZXRQcm9wZXJ0eShrZXkgKyBERVNDX1NVRkZJWCk7Ci0JCQkJCWlmICh1cmkgIT0gbnVsbCAmJiBuYW1lICE9IG51bGwgJiYgZGVzYyAhPSBudWxsKSB7Ci0JCQkJCQlPdXRwdXRQcm9wZXJ0eSBwcm9wID0gbmV3IE91dHB1dFByb3BlcnR5KHVyaS50cmltKCksCi0JCQkJCQkJCWRlc2MpOwotCQkJCQkJb3V0cHV0cy5hZGQocHJvcCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKAotCQkJCQkJCQlJU3RhdHVzLldBUk5JTkcsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELAotCQkJCQkJCQlNZXNzYWdlcy5Qcm9jZXNzb3JUeXBlXzIgKyBvdXRwdXRQcm9wZXJ0aWVzVVJMCi0JCQkJCQkJCQkJKyBNZXNzYWdlcy5Qcm9jZXNzb3JUeXBlXzMgKyBrZXkpKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKGlzICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlpcy5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBvdXRwdXRzLnRvQXJyYXkobmV3IElPdXRwdXRQcm9wZXJ0eVswXSk7Ci0JfQotCi0JcHJpdmF0ZSBJQXR0cmlidXRlW10gbG9hZEF0dHJpYnV0ZXMoKSB7Ci0JCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCQlMaXN0PEF0dHJpYnV0ZT4gYXR0cmlidXRlc0xpc3QgPSBuZXcgQXJyYXlMaXN0PEF0dHJpYnV0ZT4oKTsKLQkJdHJ5IHsKLQkJCWlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oYXR0cmlidXRlUHJvcGVydGllc1VSTC5vcGVuU3RyZWFtKCkpOwotCQkJUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCQlwcm9wcy5sb2FkKGlzKTsKLQotCQkJZm9yIChPYmplY3QgZWxlbWVudCA6IHByb3BzLmtleVNldCgpKSB7Ci0JCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGVsZW1lbnQ7Ci0JCQkJaWYgKCFrZXkuZW5kc1dpdGgoREVTQ19TVUZGSVgpICYmICFrZXkuZW5kc1dpdGgoVFlQRV9TVUZGSVgpKSB7Ci0JCQkJCVN0cmluZyB1cmkgPSBwcm9wcy5nZXRQcm9wZXJ0eShrZXkpOwotCQkJCQlTdHJpbmcgdHlwZSA9IHByb3BzLmdldFByb3BlcnR5KGtleSArIFRZUEVfU1VGRklYKTsKLQkJCQkJU3RyaW5nIGRlc2MgPSBwcm9wcy5nZXRQcm9wZXJ0eShrZXkgKyBERVNDX1NVRkZJWCk7Ci0JCQkJCWlmICh1cmkgIT0gbnVsbCAmJiB0eXBlICE9IG51bGwgJiYgZGVzYyAhPSBudWxsKSB7Ci0JCQkJCQlBdHRyaWJ1dGUgYXR0cmlidXRlID0gbmV3IEF0dHJpYnV0ZSh1cmkudHJpbSgpLCB0eXBlCi0JCQkJCQkJCS50cmltKCksIGRlc2MpOwotCQkJCQkJYXR0cmlidXRlc0xpc3QuYWRkKGF0dHJpYnV0ZSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKAotCQkJCQkJCQlJU3RhdHVzLldBUk5JTkcsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELAotCQkJCQkJCQlNZXNzYWdlcy5Qcm9jZXNzb3JUeXBlXzQKLQkJCQkJCQkJCQkrIGF0dHJpYnV0ZVByb3BlcnRpZXNVUkwKLQkJCQkJCQkJCQkrIE1lc3NhZ2VzLlByb2Nlc3NvclR5cGVfNSArIGtleSkpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChpcyAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJaXMuY2xvc2UoKTsKLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlJQXR0cmlidXRlW10gYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXNMaXN0LnRvQXJyYXkobmV3IElBdHRyaWJ1dGVbMF0pOwotCQlBcnJheXMuc29ydChhdHRyaWJ1dGVzKTsKLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9UcmFuc2Zvcm1lckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9UcmFuc2Zvcm1lckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA0OWQ0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVHJhbnNmb3JtZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklUcmFuc2Zvcm1lckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBUcmFuc2Zvcm1lckZhY3RvcnkgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXJGYWN0b3J5Ci17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmFjdG9yeUNsYXNzOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0JCi0JcHVibGljIFRyYW5zZm9ybWVyRmFjdG9yeShTdHJpbmcgbmFtZSxTdHJpbmcgZmFjdG9yeUNsYXNzKQotCXsKLQkJc3VwZXIoKTsKLQkJdGhpcy5mYWN0b3J5Q2xhc3MgPSBmYWN0b3J5Q2xhc3M7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRGYWN0b3J5Q2xhc3MoKQotCXsKLQkJcmV0dXJuIGZhY3RvcnlDbGFzczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjk5NzZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1wdWJsaWMgY2xhc3MgVXRpbHMKLXsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVMb2NhdGlvbihTdHJpbmcgYnVuZGxlSWQsIFN0cmluZyBwYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBGaWxlTG9jYXRvci5maW5kKFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVJZCksIG5ldyBQYXRoKHBhdGgpLCBudWxsKTsKLQkJCWlmICh1cmwgIT0gbnVsbCkKLQkJCXsKLQkJCQlVUkwgZmlsZVVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVVcmwuZ2V0RmlsZSgpKTsKLQkJCQlsb2NhdGlvbiA9IGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIE1lc3NhZ2VzLlV0aWxzXzAgKyBwYXRoICsgTWVzc2FnZXMuVXRpbHNfMSArIGJ1bmRsZUlkLCBlKSk7IAotCQl9IAotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGx1Z2luTG9jYXRpb24oU3RyaW5nIGJ1bmRsZUlkKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKCJwbGF0Zm9ybTovcGx1Z2luLyIrYnVuZGxlSWQpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAodXJsICE9IG51bGwpCi0JCQl7Ci0JCQkJVVJMIGZpbGVVcmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlVXJsLmdldEZpbGUoKSk7Ci0JCQkJbG9jYXRpb24gPSBmaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5VdGlsc18wICsgYnVuZGxlSWQgKyBNZXNzYWdlcy5VdGlsc18xICsgYnVuZGxlSWQsIGUpKTsgCi0JCX0gCi0JCXJldHVybiBsb2NhdGlvbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxY2NjMDQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1YU0xUUnVudGltZV8xMD1GYWlsZWQgdG8gc2F2ZSBwcm9jZXNzIHByZWZlcmVuY2VzCi1YU0xUUnVudGltZV81PVNhdmluZyBhdHRyaWJ1dGVzLi4uCi1YU0xUUnVudGltZV82PUZhaWxlZCB0byBzYXZlIGF0dHJpYnV0ZSBwcmVmZXJlbmNlcwotWFNMVFJ1bnRpbWVfNz1TYXZpbmcgcHJvcGVydGllcy4uLgotWFNMVFJ1bnRpbWVfOD1GYWlsZWQgdG8gc2F2ZSBvdXRwdXQgcHJvcGVydHkgcHJlZmVyZW5jZXMKLVhTTFRSdW50aW1lXzk9U2F2aW5nIHByb2Nlc3NvcnMuLi4KLQotQXR0cmlidXRlXzA9VmFsdWUgbXVzdCBiZSBhIGRvdWJsZQotQXR0cmlidXRlXzE9VmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyCi1BdHRyaWJ1dGVfMj1WYWxpZCB2YWx1ZXMgYXJlICd0cnVlJyBvciAnZmFsc2UnCi1BdHRyaWJ1dGVfNT1WYWx1ZSBtdXN0IGJlIGEgZmxvYXQKLVBsdWdpblByb2Nlc3Nvckphcl8wPSwgcGF0aCAKLVByb2Nlc3NvclR5cGVfMj1PdXRwdXQgcHJvcGVydGllcyBmaWxlIAotUHJvY2Vzc29yVHlwZV8zPVwgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkgZm9yIGtleSAKLVByb2Nlc3NvclR5cGVfND1BdHRyaWJ1dGUgcHJvcGVydGllcyBmaWxlIAotUHJvY2Vzc29yVHlwZV81PVwgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkgZm9yIGtleSAKLVV0aWxzXzA9RXJyb3IgZGV0ZXJtaW5pbmcgamFyIGZpbGUgbG9jYXRpb246IAotVXRpbHNfMT1cIGZyb20gYnVuZGxlOiAKLVhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMD1Td2l0Y2ggdG8gRGVmYXVsdCBEZWJ1Z2dlcgotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8xPVRoZSAKLVhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMj1cIFhTTFQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgZGVidWdnaW5nX1xuCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzIzPUNvdWxkIG5vdCBsb2NhdGUgamFyIGZpbGUgCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzM9V291bGQgeW91IGxpa2UgdG8gZGVidWcgdXNpbmcgdGhlIGRlZmF1bHQgCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzMxPVwgdG8gCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzQ9XCBwcm9jZXNzb3IgaW5zdGVhZD8KLVhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNT1sYXVuY2gKLVhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNj1sYXVuY2gueG1sCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzc9RXJyb3IgY29weWluZyB1cmwgCi0KLUFic3RyYWN0UmVnaXN0cnlSZWFkZXJfMz0sIGV4dGVuc2lvbiAKLUFic3RyYWN0UmVnaXN0cnlSZWFkZXJfNT1SZXF1aXJlZCBhdHRyaWJ1dGUgJwotQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl82PScgbm90IGRlZmluZWQKLUFic3RyYWN0UmVnaXN0cnlSZWFkZXJfNz1SZXF1aXJlZCBzdWIgZWxlbWVudCAnCi1BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzg9JyBub3QgZGVmaW5lZAotQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl85PVVua25vd24gZXh0ZW5zaW9uIHRhZyBmb3VuZDogCi1KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8wPUNoYW5nZSBUcmFuc2Zvcm1lciBGYWN0b3J5Ci1KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8xPVwgbXVzdCB1c2UgdGhlIAotSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMj1cIHRyYW5zZm9ybWVyIGZhY3Rvcnkgd2hlbiBkZWJ1Z2dpbmcuXG4KLUpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzM9QmUgYXdhcmUgdGhhdCB0aGlzIG1heSBnaXZlIGRpZmZlcmVudCByZXN1bHRzIHRvIHRoZSAKLUpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzQ9XCB0cmFuc2Zvcm1lciBmYWN0b3J5IGNvbmZpZ3VyZWQgZm9yIHRoaXMgbGF1bmNoIGNvbmZpZ3VyYXRpb24uCi1KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV81PW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAuaW52b2tlCi0KLUxhdW5jaEhlbHBlcl8wPUZpbGUgbm90IGZvdW5kCi1MYXVuY2hIZWxwZXJfMT1JTyBFeGNlcHRpb24KLQotWFNMRGVidWdUYXJnZXRfMD1VbmFibGUgdG8gY29ubmVjdCB0byBkZWJ1Z2dlcgotWFNMRGVidWdUYXJnZXRfMT1sb2NhbGhvc3QKLVhTTERlYnVnVGFyZ2V0XzE5PVJlcXVlc3QgZmFpbGVkOiAKLVhTTERlYnVnVGFyZ2V0XzI9Q291bGQgbm90IGNvbm5lY3QgdG8gc29ja2V0IAotWFNMRGVidWdUYXJnZXRfMjA9RXZlbnQgRGlzcGF0Y2gKLVhTTERlYnVnVGFyZ2V0XzM9XCBhZnRlciAKLVhTTERlYnVnVGFyZ2V0XzQ9XCBhdHRlbXB0cwotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvQWJzdHJhY3RSZWdpc3RyeVJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0Fic3RyYWN0UmVnaXN0cnlSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNWY2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvQWJzdHJhY3RSZWdpc3RyeVJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTID0gImNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBsb2dFcnJvcihJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIHRleHQpCi0JewotCQlJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IGVsZW1lbnQuZ2V0RGVjbGFyaW5nRXh0ZW5zaW9uKCk7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJ1Zi5hcHBlbmQoIlBsdWdpbiAiICsgZXh0ZW5zaW9uLmdldE5hbWVzcGFjZUlkZW50aWZpZXIoKSArIE1lc3NhZ2VzLkFic3RyYWN0UmVnaXN0cnlSZWFkZXJfMyArIGV4dGVuc2lvbi5nZXRFeHRlbnNpb25Qb2ludFVuaXF1ZUlkZW50aWZpZXIoKSk7IC8vJE5PTi1OTFMtMSQgCi0JCWJ1Zi5hcHBlbmQoIlxuIiArIHRleHQpOyAvLyROT04tTkxTLTEkCi0JCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuT0ssIGJ1Zi50b1N0cmluZygpLCBudWxsKSkpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBsb2dNaXNzaW5nQXR0cmlidXRlKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgYXR0cmlidXRlTmFtZSkKLQl7Ci0JCWxvZ0Vycm9yKGVsZW1lbnQsIE1lc3NhZ2VzLkFic3RyYWN0UmVnaXN0cnlSZWFkZXJfNSArIGF0dHJpYnV0ZU5hbWUgKyBNZXNzYWdlcy5BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzYpOyAKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nTWlzc2luZ0VsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIFN0cmluZyBlbGVtZW50TmFtZSkKLQl7Ci0JCWxvZ0Vycm9yKGVsZW1lbnQsIE1lc3NhZ2VzLkFic3RyYWN0UmVnaXN0cnlSZWFkZXJfNyArIGVsZW1lbnROYW1lICsgTWVzc2FnZXMuQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl84KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nVW5rbm93bkVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlsb2dFcnJvcihlbGVtZW50LCBNZXNzYWdlcy5BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzkgKyBlbGVtZW50LmdldE5hbWUoKSk7IAotCX0KLQotCXB1YmxpYyBzdGF0aWMgSUV4dGVuc2lvbltdIG9yZGVyRXh0ZW5zaW9ucyhJRXh0ZW5zaW9uW10gZXh0ZW5zaW9ucykKLQl7Ci0JCUlFeHRlbnNpb25bXSBzb3J0ZWRFeHRlbnNpb24gPSBuZXcgSUV4dGVuc2lvbltleHRlbnNpb25zLmxlbmd0aF07Ci0JCVN5c3RlbS5hcnJheWNvcHkoZXh0ZW5zaW9ucywgMCwgc29ydGVkRXh0ZW5zaW9uLCAwLCBleHRlbnNpb25zLmxlbmd0aCk7Ci0JCUNvbXBhcmF0b3I8SUV4dGVuc2lvbj4gY29tcGFyZXIgPSBuZXcgQ29tcGFyYXRvcjxJRXh0ZW5zaW9uPigpCi0JCXsKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShJRXh0ZW5zaW9uIGFyZzAsIElFeHRlbnNpb24gYXJnMSkKLQkJCXsKLQkJCQlTdHJpbmcgczEgPSBhcmcwLmdldE5hbWVzcGFjZUlkZW50aWZpZXIoKTsKLQkJCQlTdHJpbmcgczIgPSBhcmcxLmdldE5hbWVzcGFjZUlkZW50aWZpZXIoKTsKLQkJCQlyZXR1cm4gczEuY29tcGFyZVRvSWdub3JlQ2FzZShzMik7Ci0JCQl9Ci0JCX07Ci0JCUNvbGxlY3Rpb25zLnNvcnQoQXJyYXlzLmFzTGlzdChzb3J0ZWRFeHRlbnNpb24pLCBjb21wYXJlcik7Ci0JCXJldHVybiBzb3J0ZWRFeHRlbnNpb247Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpOwotCi0JcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnRDaGlsZHJlbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCXJlYWRFbGVtZW50cyhlbGVtZW50LmdldENoaWxkcmVuKCkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50cyhJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cykKLQl7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWlmICghcmVhZEVsZW1lbnQoZWxlbWVudHNbaV0pKQotCQkJCWxvZ1Vua25vd25FbGVtZW50KGVsZW1lbnRzW2ldKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHJlYWRFeHRlbnNpb24oSUV4dGVuc2lvbiBleHRlbnNpb24pCi0JewotCQlyZWFkRWxlbWVudHMoZXh0ZW5zaW9uLmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZWFkUmVnaXN0cnkoSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5LCBTdHJpbmcgcGx1Z2luSWQsIFN0cmluZyBleHRlbnNpb25Qb2ludCkKLQl7Ci0JCUlFeHRlbnNpb25Qb2ludCBwb2ludCA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KHBsdWdpbklkLCBleHRlbnNpb25Qb2ludCk7Ci0JCWlmIChwb2ludCA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlJRXh0ZW5zaW9uW10gZXh0ZW5zaW9ucyA9IHBvaW50LmdldEV4dGVuc2lvbnMoKTsKLQkJZXh0ZW5zaW9ucyA9IG9yZGVyRXh0ZW5zaW9ucyhleHRlbnNpb25zKTsKLQkJZm9yIChJRXh0ZW5zaW9uIGVsZW1lbnQgOiBleHRlbnNpb25zKQotCQkJcmVhZEV4dGVuc2lvbihlbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXNjcmlwdGlvbihJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkKLQl7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIGNoaWxkcmVuID0gY29uZmlnRWxlbWVudC5nZXRDaGlsZHJlbihUQUdfREVTQ1JJUFRJT04pOwotCQlpZiAoY2hpbGRyZW4ubGVuZ3RoID49IDEpCi0JCXsKLQkJCXJldHVybiBjaGlsZHJlblswXS5nZXRWYWx1ZSgpOwotCQl9Ci0JCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENsYXNzVmFsdWUoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQsIFN0cmluZyBjbGFzc0F0dHJpYnV0ZU5hbWUpCi0JewotCQlTdHJpbmcgY2xhc3NOYW1lID0gY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyaWJ1dGVOYW1lKTsKLQkJaWYgKGNsYXNzTmFtZSAhPSBudWxsKQotCQkJcmV0dXJuIGNsYXNzTmFtZTsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY2FuZGlkYXRlQ2hpbGRyZW4gPSBjb25maWdFbGVtZW50LmdldENoaWxkcmVuKGNsYXNzQXR0cmlidXRlTmFtZSk7Ci0JCWlmIChjYW5kaWRhdGVDaGlsZHJlbi5sZW5ndGggPT0gMCkKLQkJCXJldHVybiBudWxsOwotCi0JCXJldHVybiBjYW5kaWRhdGVDaGlsZHJlblswXS5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0RlYnVnZ2VyUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YTBiYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0RlYnVnZ2VyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JRGVidWdnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5EZWJ1Z2dlckRlc2NyaXB0b3I7Ci0KLXB1YmxpYyBjbGFzcyBEZWJ1Z2dlclJlZ2lzdHJ5Ci17Ci0JcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBEZWJ1Z2dlckRlc2NyaXB0b3I+IGRlYnVnZ2VycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgRGVidWdnZXJEZXNjcmlwdG9yPigpOwotCi0JcHVibGljIERlYnVnZ2VyUmVnaXN0cnkoKQotCXsKLQkJRGVidWdnZXJSZWdpc3RyeVJlYWRlciByZWdpc3RyeVJlYWRlciA9IG5ldyBEZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyKCk7Ci0JCXJlZ2lzdHJ5UmVhZGVyLmFkZENvbmZpZ3ModGhpcyk7Ci0JfQotCi0JcHVibGljIElEZWJ1Z2dlciBnZXREZWJ1Z2dlcihTdHJpbmcgaWQpCi0JewotCQlyZXR1cm4gZGVidWdnZXJzLmdldChpZCk7Ci0JfQotCi0JcHVibGljIElEZWJ1Z2dlcltdIGdldERlYnVnZ2VycygpCi0JewotCQlyZXR1cm4gZGVidWdnZXJzLnZhbHVlcygpLnRvQXJyYXkobmV3IElEZWJ1Z2dlclswXSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkRGVidWdnZXIoRGVidWdnZXJEZXNjcmlwdG9yIGRlc2MpCi0JewotCQlkZWJ1Z2dlcnMucHV0KGRlc2MuZ2V0SWQoKSwgZGVzYyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0RlYnVnZ2VyUmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjllZTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0RlYnVnZ2VyUmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuRGVidWdnZXJEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLQotcHVibGljIGNsYXNzIERlYnVnZ2VyUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0RFQlVHR0VSID0gImRlYnVnZ2VyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9JRCA9ICJpZCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1NOQU1FID0gImNsYXNzTmFtZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1NQQVRIID0gImNsYXNzcGF0aCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTkFNRSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9QUk9DRVNTT1JfVFlQRV9JRCA9ICJwcm9jZXNzb3JUeXBlSWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1RSQU5TRk9STUVSX0ZBQ1RPUlkgPSAidHJhbnNmb3JtZXJGYWN0b3J5Q2xhc3MiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIERlYnVnZ2VyUmVnaXN0cnkgcmVnaXN0cnk7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCWlmICghZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKFRBR19ERUJVR0dFUikpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0lEKTsKLQkJaWYgKGlkID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0lEKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIGNsYXNzTmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9DTEFTU05BTUUpOwotCQlpZiAoY2xhc3NOYW1lID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0NMQVNTTkFNRSk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBjbGFzc3BhdGggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1NQQVRIKTsKLQkJaWYgKGNsYXNzcGF0aCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9DTEFTU1BBVEgpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmdbXSBlbnRyaWVzID0gY2xhc3NwYXRoLnNwbGl0KCI7Iik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgc3RyaW5nID0gZW50cmllc1tpXTsKLQkJCWVudHJpZXNbaV0gPSBzdHJpbmcudHJpbSgpOwotCQl9Ci0KLQkJU3RyaW5nIG5hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTkFNRSk7Ci0JCWlmIChuYW1lID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX05BTUUpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgcHJvY2Vzc29yVHlwZUlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX1BST0NFU1NPUl9UWVBFX0lEKTsKLQkJaWYgKHByb2Nlc3NvclR5cGVJZCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9QUk9DRVNTT1JfVFlQRV9JRCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlTdHJpbmcgdEZhY3QgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfVFJBTlNGT1JNRVJfRkFDVE9SWSk7Ci0KLQkJcmVnaXN0cnkuYWRkRGVidWdnZXIobmV3IERlYnVnZ2VyRGVzY3JpcHRvcihpZCwgZWxlbWVudC5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSwgY2xhc3NOYW1lLCBlbnRyaWVzLCBuYW1lLCBwcm9jZXNzb3JUeXBlSWQsIHRGYWN0KSk7Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVhZEVsZW1lbnQoRGVidWdnZXJSZWdpc3RyeSByZWdpc3RyeSwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRFbGVtZW50KGVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZENvbmZpZ3MoRGVidWdnZXJSZWdpc3RyeSByZWdpc3RyeSkKLQl7Ci0JCUlFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZFJlZ2lzdHJ5KGV4dGVuc2lvblJlZ2lzdHJ5LCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgImRlYnVnZ2VyIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvSW52b2tlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvSW52b2tlclJlZ2lzdHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjYjgxNmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0ludm9rZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnZva2VyOwotCi1wdWJsaWMgY2xhc3MgSW52b2tlclJlZ2lzdHJ5Ci17Ci0JcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBJUHJvY2Vzc29ySW52b2tlcj4gaW52b2tlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIElQcm9jZXNzb3JJbnZva2VyPigpOwotCi0JcHVibGljIEludm9rZXJSZWdpc3RyeSgpCi0JewotCQlJbnZva2VyUmVnaXN0cnlSZWFkZXIgcmVnaXN0cnlSZWFkZXIgPSBuZXcgSW52b2tlclJlZ2lzdHJ5UmVhZGVyKCk7Ci0JCXJlZ2lzdHJ5UmVhZGVyLmFkZENvbmZpZ3ModGhpcyk7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnZva2VyIGdldFByb2Nlc3Nvckludm9rZXIoU3RyaW5nIGlkKQotCXsKLQkJcmV0dXJuIGludm9rZXJzLmdldChpZCk7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnZva2VyW10gZ2V0UHJvY2Vzc29ySW52b2tlcnMoKQotCXsKLQkJcmV0dXJuIGludm9rZXJzLnZhbHVlcygpLnRvQXJyYXkobmV3IElQcm9jZXNzb3JJbnZva2VyWzBdKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRJbnZva2VyRGVzY3JpcHRvcihJUHJvY2Vzc29ySW52b2tlciBkZXNjKQotCXsKLQkJaW52b2tlcnMucHV0KGRlc2MuZ2V0SWQoKSwgZGVzYyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0ludm9rZXJSZWdpc3RyeVJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0ludm9rZXJSZWdpc3RyeVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWU2MTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9JbnZva2VyUmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yOwotCi1wdWJsaWMgY2xhc3MgSW52b2tlclJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcgotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19JTlZPS0UgPSAiaW52b2tlciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTID0gImNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTU1BBVEggPSAiY2xhc3NwYXRoIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBJbnZva2VyUmVnaXN0cnkgcmVnaXN0cnk7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCWlmICghZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKFRBR19JTlZPS0UpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9JRCk7Ci0JCWlmIChpZCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9JRCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBjbGFzc25hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotCQlpZiAoY2xhc3NuYW1lID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0NMQVNTKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIGNsYXNzcGF0aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9DTEFTU1BBVEgpOwotCQlpZiAoY2xhc3NwYXRoID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0NMQVNTUEFUSCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZ1tdIGVudHJpZXMgPSBjbGFzc3BhdGguc3BsaXQoIjsiKTsgLy8kTk9OLU5MUy0xJAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCVN0cmluZyBzdHJpbmcgPSBlbnRyaWVzW2ldOwotCQkJZW50cmllc1tpXSA9IHN0cmluZy50cmltKCk7Ci0JCX0KLQotCQlyZWdpc3RyeS5hZGRJbnZva2VyRGVzY3JpcHRvcihuZXcgUHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IoaWQsIGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCksIGNsYXNzbmFtZSwgZW50cmllcykpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRFbGVtZW50KEludm9rZXJSZWdpc3RyeSByZWdpc3RyeSwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRFbGVtZW50KGVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZENvbmZpZ3MoSW52b2tlclJlZ2lzdHJ5IHJlZ2lzdHJ5KQotCXsKLQkJSUV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQlyZWFkUmVnaXN0cnkoZXh0ZW5zaW9uUmVnaXN0cnksIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAiaW52b2tlIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQ0MDA4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLlByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuUHJvY2Vzc29yUHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JSZWdpc3RyeQotewotCXByaXZhdGUgZmluYWwgTGlzdDxQcm9jZXNzb3JJbnN0YWxsPiBjb250cmlidXRlZEluc3RhbGxzID0gbmV3IEFycmF5TGlzdDxQcm9jZXNzb3JJbnN0YWxsPigpOwotCXByaXZhdGUgTGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4gdXNlckluc3RhbGxzID0gbmV3IEFycmF5TGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4oKTsKLQlwcml2YXRlIElQcm9jZXNzb3JJbnN0YWxsIGRlZmF1bHRQcm9jZXNzb3I7Ci0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBqcmVEZWZhdWx0UHJvY2Vzc29yOwotCXByaXZhdGUgSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxsczsKLQotCXB1YmxpYyBQcm9jZXNzb3JSZWdpc3RyeSgpCi0JewotCQlpbml0aWFsaXplRnJvbVN0b3JhZ2UoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZUZyb21TdG9yYWdlKCkKLQl7Ci0JCS8vIHJlYWQgZnJvbSB0aGUgcmVnaXN0cnkKLQkJUHJvY2Vzc29yUmVnaXN0cnlSZWFkZXIgcmVnaXN0cnlSZWFkZXIgPSBuZXcgUHJvY2Vzc29yUmVnaXN0cnlSZWFkZXIoKTsKLQkJcmVnaXN0cnlSZWFkZXIuYWRkQ29uZmlncyh0aGlzKTsKLQkJLy8gZmluZCB0aGUganJlIGRlZmF1bHQKLQkJZm9yIChJdGVyYXRvcjxQcm9jZXNzb3JJbnN0YWxsPiBpdGVyID0gY29udHJpYnV0ZWRJbnN0YWxscy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBpdGVyLm5leHQoKTsKLQkJCWlmIChpbnN0YWxsLmdldElkKCkuZXF1YWxzKEpBWFBSdW50aW1lLkpSRV9ERUZBVUxUX1BST0NFU1NPUl9JRCkpCi0JCQl7Ci0JCQkJanJlRGVmYXVsdFByb2Nlc3NvciA9IGluc3RhbGw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJLy8gcmVhZCBmcm9tIHRoZSBwcmVmZXJlbmNlcwotCQlhZGRQZXJzaXN0ZWRWTXMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkUGVyc2lzdGVkVk1zKCkKLQl7Ci0JCS8vIFRyeSByZXRyaWV2aW5nIHRoZSBWTSBwcmVmZXJlbmNlcyBmcm9tIHRoZSBwcmVmZXJlbmNlIHN0b3JlCi0JCVN0cmluZyB2bVhNTFN0cmluZyA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKEpBWFBSdW50aW1lLlBSRUZfUFJPQ0VTU09SX1hNTCk7Ci0KLQkJLy8gSWYgdGhlIHByZWZlcmVuY2Ugd2FzIGZvdW5kLCBsb2FkIFZNcyBmcm9tIGl0IGludG8gbWVtb3J5Ci0JCWlmICh2bVhNTFN0cmluZy5sZW5ndGgoKSA+IDApCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHZtWE1MU3RyaW5nLmdldEJ5dGVzKCkpOwotCQkJCVByb2Nlc3NvclByZWZlcmVuY2VzIHByZWZzID0gUHJvY2Vzc29yUHJlZmVyZW5jZXMuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQcm9jZXNzb3JJZCA9IHByZWZzLmdldERlZmF1bHRQcm9jZXNzb3JJZCgpOwotCQkJCXVzZXJJbnN0YWxscyA9IHByZWZzLmdldFByb2Nlc3NvcnMoKTsKLQkJCQlmb3IgKEl0ZXJhdG9yPElQcm9jZXNzb3JJbnN0YWxsPiBpdGVyID0gdXNlckluc3RhbGxzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJCQl7Ci0JCQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBpdGVyLm5leHQoKTsKLQkJCQkJaWYgKGluc3RhbGwuZ2V0SWQoKS5lcXVhbHMoZGVmYXVsdFByb2Nlc3NvcklkKSkKLQkJCQkJewotCQkJCQkJZGVmYXVsdFByb2Nlc3NvciA9IGluc3RhbGw7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKGRlZmF1bHRQcm9jZXNzb3IgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWZvciAoSXRlcmF0b3I8UHJvY2Vzc29ySW5zdGFsbD4gaXRlciA9IGNvbnRyaWJ1dGVkSW5zdGFsbHMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQkJCQl7Ci0JCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gaXRlci5uZXh0KCk7Ci0JCQkJCQlpZiAoZGVmYXVsdFByb2Nlc3NvciA9PSBudWxsICYmIGluc3RhbGwuZ2V0SWQoKS5lcXVhbHMoZGVmYXVsdFByb2Nlc3NvcklkKSkKLQkJCQkJCXsKLQkJCQkJCQlkZWZhdWx0UHJvY2Vzc29yID0gaW5zdGFsbDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQkJLy8gbWFrZSB0aGUgSlJFIHRoZSBkZWZhdWx0IGRlZmF1bHQKLQkJaWYgKGRlZmF1bHRQcm9jZXNzb3IgPT0gbnVsbCkKLQkJewotCQkJZGVmYXVsdFByb2Nlc3NvciA9IGpyZURlZmF1bHRQcm9jZXNzb3I7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQcm9jZXNzb3IoU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCwgU3RyaW5nIHByb2Nlc3NvclR5cGVJZCwgU3RyaW5nIGNsYXNzcGF0aCwgU3RyaW5nIGRlYnVnZ2VySWQsIFN0cmluZyBzdXBwb3J0cykKLQl7Ci0JCUlQcm9jZXNzb3JKYXJbXSBqYXJzID0gUHJvY2Vzc29ySW5zdGFsbC5jcmVhdGVKYXJzKGJ1bmRsZUlkLCBjbGFzc3BhdGgpOwotCQljb250cmlidXRlZEluc3RhbGxzLmFkZChuZXcgUHJvY2Vzc29ySW5zdGFsbChpZCwgbGFiZWwsIHByb2Nlc3NvclR5cGVJZCwgamFycywgZGVidWdnZXJJZCwgc3VwcG9ydHMsIHRydWUpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQcm9jZXNzb3IoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCWlmICghaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpCi0JCQl1c2VySW5zdGFsbHMuYWRkKGluc3RhbGwpOwotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIG5ld2luc3RhbGxzID0gbmV3IElQcm9jZXNzb3JJbnN0YWxsW2luc3RhbGxzLmxlbmd0aCArIDFdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGluc3RhbGxzLCAwLCBuZXdpbnN0YWxscywgMCwgaW5zdGFsbHMubGVuZ3RoKTsKLQkJbmV3aW5zdGFsbHNbaW5zdGFsbHMubGVuZ3RoXSA9IGluc3RhbGw7Ci0JCWluc3RhbGxzID0gbmV3aW5zdGFsbHM7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlUHJvY2Vzc29yKGludCBpbmRleCkKLQl7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIHJlbW92ZWQgPSBpbnN0YWxsc1tpbmRleF07Ci0JCWlmICghcmVtb3ZlZC5pc0NvbnRyaWJ1dGVkKCkpCi0JCQl1c2VySW5zdGFsbHMucmVtb3ZlKHJlbW92ZWQpOwotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIG5ld2luc3RhbGxzID0gbmV3IElQcm9jZXNzb3JJbnN0YWxsW2luc3RhbGxzLmxlbmd0aCAtIDFdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGluc3RhbGxzLCAwLCBuZXdpbnN0YWxscywgMCwgaW5kZXgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KGluc3RhbGxzLCBpbmRleCArIDEsIG5ld2luc3RhbGxzLCBpbmRleCwgbmV3aW5zdGFsbHMubGVuZ3RoIC0gaW5kZXgpOwotCQlpbnN0YWxscyA9IG5ld2luc3RhbGxzOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW5zdGFsbFtdIGdldFByb2Nlc3NvcnMoKQotCXsKLQkJaWYgKGluc3RhbGxzID09IG51bGwpCi0JCXsKLQkJCWluc3RhbGxzID0gbmV3IElQcm9jZXNzb3JJbnN0YWxsW2NvbnRyaWJ1dGVkSW5zdGFsbHMuc2l6ZSgpICsgdXNlckluc3RhbGxzLnNpemUoKV07Ci0JCQlpbnQgc3RhcnRJbmRleCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGVkSW5zdGFsbHMuc2l6ZSgpOyBpKyspCi0JCQl7Ci0JCQkJaW5zdGFsbHNbaV0gPSBjb250cmlidXRlZEluc3RhbGxzLmdldChpKTsKLQkJCQlzdGFydEluZGV4ID0gaSArIDE7Ci0JCQl9Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHVzZXJJbnN0YWxscy5zaXplKCk7IGkrKykKLQkJCXsKLQkJCQlpbnN0YWxsc1tzdGFydEluZGV4ICsgaV0gPSB1c2VySW5zdGFsbHMuZ2V0KGkpOwotCQkJfQotCQl9Ci0JCXJldHVybiBpbnN0YWxsczsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3Nvckluc3RhbGxbXSBnZXRQcm9jZXNzb3JzKFN0cmluZyBpZCkKLQl7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsW10gaW5zdGFsbHMgPSBnZXRQcm9jZXNzb3JzKCk7Ci0JCUxpc3Q8SVByb2Nlc3Nvckluc3RhbGw+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8SVByb2Nlc3Nvckluc3RhbGw+KCk7Ci0JCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgdHlwZSA6IGluc3RhbGxzKQotCQl7Ci0JCQlpZiAodHlwZS5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0SWQoKS5lcXVhbHMoaWQpKQotCQkJCXJlc3VsdC5hZGQodHlwZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdC50b0FycmF5KG5ldyBJUHJvY2Vzc29ySW5zdGFsbFswXSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdFByb2Nlc3NvcihJUHJvY2Vzc29ySW5zdGFsbCBkZWZhdWx0SW5zdGFsbCkKLQl7Ci0JCWRlZmF1bHRQcm9jZXNzb3IgPSBkZWZhdWx0SW5zdGFsbDsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3Nvckluc3RhbGwgZ2V0RGVmYXVsdFByb2Nlc3NvcigpCi0JewotCQlyZXR1cm4gZGVmYXVsdFByb2Nlc3NvcjsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3Nvckluc3RhbGwgZ2V0SlJFRGVmYXVsdFByb2Nlc3NvcigpCi0JewotCQlyZXR1cm4ganJlRGVmYXVsdFByb2Nlc3NvcjsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3Nvckluc3RhbGxbXSBnZXRDb250cmlidXRlZFByb2Nlc3NvcnMoKQotCXsKLQkJcmV0dXJuIGNvbnRyaWJ1dGVkSW5zdGFsbHMudG9BcnJheShuZXcgSVByb2Nlc3Nvckluc3RhbGxbMF0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeVJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiZTNkMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JSZWdpc3RyeVJlYWRlciBleHRlbmRzIEFic3RyYWN0UmVnaXN0cnlSZWFkZXIKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfcHJvY2Vzc29yID0gInByb2Nlc3NvciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UWVBFX0lEID0gInByb2Nlc3NvclR5cGVJZCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfREVCVUdHRVJfSUQgPSAiZGVidWdnZXJJZCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1NQQVRIID0gImNsYXNzcGF0aCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfU1VQUE9SVFMgPSAic3VwcG9ydHMiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFByb2Nlc3NvclJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlpZiAoIWVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhUQUdfcHJvY2Vzc29yKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfSUQpOwotCQlpZiAoaWQgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgbGFiZWwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTEFCRUwpOwotCQlpZiAobGFiZWwgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfTEFCRUwpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgcHJvY2Vzc29yVHlwZUlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX1RZUEVfSUQpOwotCQlpZiAocHJvY2Vzc29yVHlwZUlkID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX1RZUEVfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgY2xhc3NwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTUEFUSCk7Ci0JCWlmIChjbGFzc3BhdGggPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfQ0xBU1NQQVRIKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIGRlYnVnZ2VySWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfREVCVUdHRVJfSUQpOwotCi0JCVN0cmluZyBzdXBwb3J0cyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9TVVBQT1JUUyk7Ci0JCWlmIChjbGFzc3BhdGggPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfU1VQUE9SVFMpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZWdpc3RyeS5hZGRQcm9jZXNzb3IoZWxlbWVudC5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSwgaWQsIGxhYmVsLCBwcm9jZXNzb3JUeXBlSWQsIGNsYXNzcGF0aCwgZGVidWdnZXJJZCwgc3VwcG9ydHMpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRFbGVtZW50KFByb2Nlc3NvclJlZ2lzdHJ5IHJlZ2lzdHJ5LCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZEVsZW1lbnQoZWxlbWVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkQ29uZmlncyhQcm9jZXNzb3JSZWdpc3RyeSByZWdpc3RyeSkKLQl7Ci0JCUlFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZFJlZ2lzdHJ5KGV4dGVuc2lvblJlZ2lzdHJ5LCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgInByb2Nlc3NvciIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclR5cGVSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclR5cGVSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWZmNDRjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuRmVhdHVyZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLk91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuVHJhbnNmb3JtZXJGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5Ci17Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ19TVUZGSVggPSAiLkRFU0MiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9TVUZGSVggPSAiLlRZUEUiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGZpbmFsIExpc3Q8SUNvbmZpZ3VyYXRpb25FbGVtZW50PiBlbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8SUNvbmZpZ3VyYXRpb25FbGVtZW50PigpOwotCXByaXZhdGUgSVByb2Nlc3NvclR5cGVbXSBpbnN0YWxsVHlwZXM7Ci0KLQlwdWJsaWMgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5KCkKLQl7Ci0JCVByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlciByZWdpc3RyeVJlYWRlciA9IG5ldyBQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIoKTsKLQkJcmVnaXN0cnlSZWFkZXIuYWRkQ29uZmlncyh0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvclR5cGVbXSBnZXRQcm9jZXNzb3JUeXBlcygpCi0JewotCQlpZiAoaW5zdGFsbFR5cGVzID09IG51bGwpCi0JCXsKLQkJCUxpc3Q8UHJvY2Vzc29yVHlwZT4gdHlwZXMgPSBuZXcgQXJyYXlMaXN0PFByb2Nlc3NvclR5cGU+KCk7Ci0JCQlTdHJpbmcgZmVhdHVyZVhNTFN0cmluZyA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKEpBWFBSdW50aW1lLlBSRUZfRkVBVFVSRV9YTUwpOwotCQkJLy8gSWYgdGhlIHByZWZlcmVuY2Ugd2FzIGZvdW5kLCBsb2FkIFZNcyBmcm9tIGl0IGludG8gbWVtb3J5Ci0JCQlGZWF0dXJlUHJlZmVyZW5jZXMgcHJlZnMgPSBudWxsOwotCQkJaWYgKGZlYXR1cmVYTUxTdHJpbmcubGVuZ3RoKCkgPiAwKQotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZmVhdHVyZVhNTFN0cmluZy5nZXRCeXRlcygpKTsKLQkJCQkJcHJlZnMgPSBGZWF0dXJlUHJlZmVyZW5jZXMuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCVN0cmluZyBwcm9wWE1MU3RyaW5nID0gSkFYUExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoSkFYUFJ1bnRpbWUuUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwpOwotCQkJLy8gSWYgdGhlIHByZWZlcmVuY2Ugd2FzIGZvdW5kLCBsb2FkIFZNcyBmcm9tIGl0IGludG8gbWVtb3J5Ci0JCQlPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzIG91dHB1dHByZWZzID0gbnVsbDsKLQkJCWlmIChwcm9wWE1MU3RyaW5nLmxlbmd0aCgpID4gMCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHByb3BYTUxTdHJpbmcuZ2V0Qnl0ZXMoKSk7Ci0JCQkJCW91dHB1dHByZWZzID0gT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcy5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQotCQkJZm9yIChJdGVyYXRvcjxJQ29uZmlndXJhdGlvbkVsZW1lbnQ+IGl0ZXIgPSBlbGVtZW50cy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCQl7Ci0JCQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBpdGVyLm5leHQoKTsKLQkJCQlTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuQVRUX0lEKTsKLQkJCQlTdHJpbmcgbGFiZWwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuQVRUX0xBQkVMKTsKLQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IGZlYXR1cmVWYWx1ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnR5VmFsdWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0JCQkJaWYgKHByZWZzICE9IG51bGwgJiYgcHJlZnMuZ2V0RmVhdHVyZXNWYWx1ZXMoaWQpICE9IG51bGwpCi0JCQkJCWZlYXR1cmVWYWx1ZXMucHV0QWxsKHByZWZzLmdldEZlYXR1cmVzVmFsdWVzKGlkKSk7Ci0JCQkJaWYgKG91dHB1dHByZWZzICE9IG51bGwgJiYgb3V0cHV0cHJlZnMuZ2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoaWQpICE9IG51bGwpCi0JCQkJCXByb3BlcnR5VmFsdWVzLnB1dEFsbChvdXRwdXRwcmVmcy5nZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhpZCkpOwotCi0JCQkJU3RyaW5nIG91dHB1dFByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuQVRUX09VVFBVVF9QUk9QRVJUSUVTKTsKLQkJCQlVUkwgb3V0cHV0UHJvcGVydGllc1VSTCA9IEZpbGVMb2NhdG9yLmZpbmQoUGxhdGZvcm0uZ2V0QnVuZGxlKGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkpLCBuZXcgUGF0aChvdXRwdXRQcm9wZXJ0aWVzKSwgbnVsbCk7Ci0JCQkJU3RyaW5nIGZlYXR1cmVQcm9wZXJ0aWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9BVFRSSUJVVEVfUFJPUEVSVElFUyk7Ci0JCQkJVVJMIGZlYXR1cmVQcm9wZXJ0aWVzVVJMID0gRmlsZUxvY2F0b3IuZmluZChQbGF0Zm9ybS5nZXRCdW5kbGUoZWxlbWVudC5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSksIG5ldyBQYXRoKGZlYXR1cmVQcm9wZXJ0aWVzKSwgbnVsbCk7Ci0JCQkJCi0JCQkJTGlzdDxJVHJhbnNmb3JtZXJGYWN0b3J5PiB0cmFuc0ZhY3RvcnlMaXN0ID0gbmV3IEFycmF5TGlzdDxJVHJhbnNmb3JtZXJGYWN0b3J5PigpOwotCQkJCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHRyYW5zRmFjdEVscyA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkVMX1RSQU5TRk9STUVSX0ZBQ1RPUlkpOwotCQkJCWZvciAoSUNvbmZpZ3VyYXRpb25FbGVtZW50IHRyYW5zRmFjdEVsIDogdHJhbnNGYWN0RWxzKQotCQkJCXsKLQkJCQkJU3RyaW5nIHRyYW5zRmFjdG9yeU5hbWUgPSB0cmFuc0ZhY3RFbC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZX05BTUUpOwotCQkJCQlTdHJpbmcgdHJhbnNGYWN0b3J5Q2xhc3MgPSB0cmFuc0ZhY3RFbC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZX0NMQVNTKTsKLQkJCQkJdHJhbnNGYWN0b3J5TGlzdC5hZGQobmV3IFRyYW5zZm9ybWVyRmFjdG9yeSh0cmFuc0ZhY3RvcnlOYW1lLHRyYW5zRmFjdG9yeUNsYXNzKSk7Ci0JCQkJfQotCQkJCQotCQkJCXR5cGVzLmFkZChuZXcgUHJvY2Vzc29yVHlwZShpZCwgbGFiZWwsIGZlYXR1cmVQcm9wZXJ0aWVzVVJMLCBvdXRwdXRQcm9wZXJ0aWVzVVJMLCBmZWF0dXJlVmFsdWVzLCBwcm9wZXJ0eVZhbHVlcywgdHJhbnNGYWN0b3J5TGlzdC50b0FycmF5KG5ldyBJVHJhbnNmb3JtZXJGYWN0b3J5WzBdKSkpOwotCQkJfQotCQkJaW5zdGFsbFR5cGVzID0gdHlwZXMudG9BcnJheShuZXcgSVByb2Nlc3NvclR5cGVbMF0pOwotCQl9Ci0JCXJldHVybiBpbnN0YWxsVHlwZXM7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JUeXBlW10gZ2V0UHJvY2Vzc29yVHlwZXNFeGNsSlJFRGVmYXVsdCgpCi0JewotCQlJUHJvY2Vzc29yVHlwZVtdIGluc3RhbGxUeXBlcyA9IGdldFByb2Nlc3NvclR5cGVzKCk7Ci0JCUxpc3Q8SVByb2Nlc3NvclR5cGU+IGV4Y2xUeXBlcyA9IG5ldyBBcnJheUxpc3Q8SVByb2Nlc3NvclR5cGU+KGluc3RhbGxUeXBlcy5sZW5ndGggLSAxKTsKLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogaW5zdGFsbFR5cGVzKQotCQl7Ci0JCQlpZiAoIXR5cGUuaXNKUkVEZWZhdWx0KCkpCi0JCQkJZXhjbFR5cGVzLmFkZCh0eXBlKTsKLQkJfQotCQlyZXR1cm4gZXhjbFR5cGVzLnRvQXJyYXkobmV3IElQcm9jZXNzb3JUeXBlWzBdKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRUeXBlKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJZWxlbWVudHMuYWRkKGVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29yVHlwZSBnZXRQcm9jZXNzb3JUeXBlKFN0cmluZyBpZCkKLQl7Ci0JCUlQcm9jZXNzb3JUeXBlW10gaW5zdGFsbFR5cGVzID0gZ2V0UHJvY2Vzc29yVHlwZXMoKTsKLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogaW5zdGFsbFR5cGVzKQotCQl7Ci0JCQlpZiAodHlwZS5nZXRJZCgpLmVxdWFscyhpZCkpCi0JCQkJcmV0dXJuIHR5cGU7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDMwYzQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlciBleHRlbmRzIEFic3RyYWN0UmVnaXN0cnlSZWFkZXIKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfcHJvY2Vzc29yVHlwZSA9ICJwcm9jZXNzb3JUeXBlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9JRCA9ICJpZCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfTEFCRUwgPSAibGFiZWwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX09VVFBVVF9QUk9QRVJUSUVTID0gIm91dHB1dFByb3BlcnRpZXMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0FUVFJJQlVURV9QUk9QRVJUSUVTID0gImF0dHJpYnV0ZVByb3BlcnRpZXMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxfVFJBTlNGT1JNRVJfRkFDVE9SWSA9ICJ0cmFuc2Zvcm1lckZhY3RvcnkiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1RSQU5TRk9STUVSX0ZBQ1RPUllfTkFNRSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZX0NMQVNTID0gImZhY3RvcnlDbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlpZiAoIWVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhUQUdfcHJvY2Vzc29yVHlwZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0lEKTsKLQkJaWYgKGlkID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0lEKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIGxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0xBQkVMKTsKLQkJaWYgKGxhYmVsID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0xBQkVMKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIG91dHB1dFByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfT1VUUFVUX1BST1BFUlRJRVMpOwotCQlpZiAob3V0cHV0UHJvcGVydGllcyA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9PVVRQVVRfUFJPUEVSVElFUyk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBmZWF0dXJlUHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9BVFRSSUJVVEVfUFJPUEVSVElFUyk7Ci0JCWlmIChmZWF0dXJlUHJvcGVydGllcyA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9BVFRSSUJVVEVfUFJPUEVSVElFUyk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCXJlZ2lzdHJ5LmFkZFR5cGUoZWxlbWVudCk7Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVhZEVsZW1lbnQoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5LCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZEVsZW1lbnQoZWxlbWVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQ29uZmlncyhQcm9jZXNzb3JUeXBlUmVnaXN0cnkgcmVnaXN0cnkpCi0JewotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRSZWdpc3RyeShleHRlbnNpb25SZWdpc3RyeSwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsICJwcm9jZXNzb3JUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvbW9kZWwvSkFYUERlYnVnVGFyZ2V0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvbW9kZWwvSkFYUERlYnVnVGFyZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NzA2NDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL21vZGVsL0pBWFBEZWJ1Z1RhcmdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LkNvbm5lY3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyRGVsdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklMaW5lQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklNZW1vcnlCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklQcm9jZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVN0YWNrRnJhbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVGhyZWFkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5EZWJ1Z0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuQmFzZUxhdW5jaEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5JWFNMQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLklYU0xEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xEZWJ1Z0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMU3RhY2tGcmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xUaHJlYWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMVmFyaWFibGU7Ci0KLXB1YmxpYyBjbGFzcyBKQVhQRGVidWdUYXJnZXQgZXh0ZW5kcyBYU0xEZWJ1Z0VsZW1lbnQgaW1wbGVtZW50cyBJWFNMRGVidWdUYXJnZXQgewotCXByaXZhdGUgZmluYWwgYnl0ZVtdIFNUQUNLX0ZSQU1FU19MT0NLID0gbmV3IGJ5dGVbMF07Ci0JcHJpdmF0ZSBmaW5hbCBieXRlW10gVkFMVUVfTUFQX0xPQ0sgPSBuZXcgYnl0ZVswXTsKLQlwcml2YXRlIGZpbmFsIGJ5dGVbXSBXUklURV9MT0NLID0gbmV3IGJ5dGVbMF07Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVF9BVFRFTVBUUyA9IDYwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNUX1dBSVQgPSAxMDAwOwotCi0JcHJpdmF0ZSBmaW5hbCBJUHJvY2VzcyBwcm9jZXNzOwotCXByaXZhdGUgZmluYWwgSUxhdW5jaCBsYXVuY2g7Ci0JcHJpdmF0ZSBYU0xUaHJlYWQgdGhyZWFkOwotCXByaXZhdGUgSVRocmVhZFtdIHRocmVhZHMgPSBuZXcgSVRocmVhZFswXTsKLQlwcml2YXRlIElTdGFja0ZyYW1lW10gc3RhY2tGcmFtZXNDYWNoZSA9IG5ldyBJU3RhY2tGcmFtZVswXTsKLQotCXByaXZhdGUgRXZlbnREaXNwYXRjaEpvYiBldmVudERpc3BhdGNoOwotCi0JcHJpdmF0ZSBmaW5hbCBNYXA8SW50ZWdlciwgWFNMVmFyaWFibGU+IHZhcmlhYmxlTWFwQ2FjaGUgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBYU0xWYXJpYWJsZT4oKTsKLQlwcml2YXRlIGZpbmFsIE1hcDxYU0xWYXJpYWJsZSwgWFNMVmFsdWU+IHZhbHVlTWFwQ2FjaGUgPSBuZXcgSGFzaE1hcDxYU0xWYXJpYWJsZSwgWFNMVmFsdWU+KCk7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIGJvb2xlYW4gc3VzcGVuZGVkOwotCi0JcHJpdmF0ZSBTb2NrZXQgcmVxdWVzdFNvY2tldDsKLQlwcml2YXRlIFNvY2tldCBldmVudFNvY2tldDsKLQlwcml2YXRlIFNvY2tldCBnZW5lcmF0ZVNvY2tldDsKLQlwcml2YXRlIEJ1ZmZlcmVkUmVhZGVyIHJlcXVlc3RSZWFkZXI7Ci0JcHJpdmF0ZSBCdWZmZXJlZFJlYWRlciBldmVudFJlYWRlcjsKLQlwcml2YXRlIFByaW50V3JpdGVyIHJlcXVlc3RXcml0ZXI7Ci0JcHJpdmF0ZSBSZWFkZXIgZ2VuZXJhdGVSZWFkZXI7Ci0JcHJpdmF0ZSBib29sZWFuIHN0YWxlOwotCi0JcHVibGljIEpBWFBEZWJ1Z1RhcmdldChJTGF1bmNoIGxhdW5jaCwgSVByb2Nlc3MgcHJvY2VzcywKLQkJCUJhc2VMYXVuY2hIZWxwZXIgQmFzZUxhdW5jaEhlbHBlcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlzdXBlcihudWxsKTsKLQkJdGhpcy5sYXVuY2ggPSBsYXVuY2g7Ci0JCXRoaXMucHJvY2VzcyA9IHByb2Nlc3M7Ci0JCXRoaXMucmVxdWVzdFNvY2tldCA9IGF0dGVtcHRDb25uZWN0KEJhc2VMYXVuY2hIZWxwZXIuZ2V0UmVxdWVzdFBvcnQoKSk7Ci0JCXRoaXMuZXZlbnRTb2NrZXQgPSBhdHRlbXB0Q29ubmVjdChCYXNlTGF1bmNoSGVscGVyLmdldEV2ZW50UG9ydCgpKTsKLQkJdGhpcy5nZW5lcmF0ZVNvY2tldCA9IGF0dGVtcHRDb25uZWN0KEJhc2VMYXVuY2hIZWxwZXIuZ2V0R2VuZXJhdGVQb3J0KCkpOwotCi0JCWlmICghcHJvY2Vzcy5pc1Rlcm1pbmF0ZWQoKSkgewotCQkJdHJ5IHsKLQkJCQl0aGlzLmV2ZW50UmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihldmVudFNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCQkJdGhpcy5yZXF1ZXN0V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKHJlcXVlc3RTb2NrZXQuZ2V0T3V0cHV0U3RyZWFtKCkpOwotCQkJCXRoaXMucmVxdWVzdFJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocmVxdWVzdFNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCQkJdGhpcy5nZW5lcmF0ZVJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihnZW5lcmF0ZVNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKTsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlhYm9ydChNZXNzYWdlcy5YU0xEZWJ1Z1RhcmdldF8wLCBlKTsgCi0JCQl9Ci0JCQl0aGlzLnRocmVhZCA9IG5ldyBYU0xUaHJlYWQodGhpcyk7Ci0JCQl0aGlzLnRocmVhZHMgPSBuZXcgSVRocmVhZFtdIHsgdGhyZWFkIH07Ci0JCQl0aGlzLmV2ZW50RGlzcGF0Y2ggPSBuZXcgRXZlbnREaXNwYXRjaEpvYigpOwotCQkJdGhpcy5ldmVudERpc3BhdGNoLnNjaGVkdWxlKCk7Ci0JCQkKLQkJCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCcmVha3BvaW50TWFuYWdlcigpLmFkZEJyZWFrcG9pbnRMaXN0ZW5lcih0aGlzKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgUmVhZGVyIGdldEdlbmVyYXRlUmVhZGVyKCkKLQl7Ci0JCXJldHVybiBnZW5lcmF0ZVJlYWRlcjsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWJvcnQoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBlKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlpZiAoIWdldERlYnVnVGFyZ2V0KCkuaXNUZXJtaW5hdGVkKCkpCi0JCQlnZXREZWJ1Z1RhcmdldCgpLmdldFByb2Nlc3MoKS50ZXJtaW5hdGUoKTsKLQkJdGhyb3cgbmV3IERlYnVnRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgRGVidWdQbHVnaW4uSU5URVJOQUxfRVJST1IsIG1lc3NhZ2UsCi0JCQkJZSkpOwotCX0KLQotCXByaXZhdGUgU29ja2V0IGF0dGVtcHRDb25uZWN0KGludCBwb3J0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBzb2NrZXQgPSBudWxsOwotCQlmb3IgKGludCBpID0gMDsgaSA8IENPTk5FQ1RfQVRURU1QVFM7IGkrKykgewotCQkJLy8gYnJlYWsgb3V0IGlmIHByb2Nlc3MgaXMgdGVybWluYXRlZAotCQkJaWYgKHByb2Nlc3MuaXNUZXJtaW5hdGVkKCkpCi0JCQkJYnJlYWs7Ci0JCQl0cnkgewotCQkJCXNvY2tldCA9IG5ldyBTb2NrZXQoCi0JCQkJCQlNZXNzYWdlcy5YU0xEZWJ1Z1RhcmdldF8xLCBwb3J0KTsgCi0JCQl9IGNhdGNoIChDb25uZWN0RXhjZXB0aW9uIGUpIHsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJCWlmIChzb2NrZXQgIT0gbnVsbCkKLQkJCQlicmVhazsKLQkJCXRyeSB7Ci0JCQkJVGhyZWFkLnNsZWVwKENPTk5FQ1RfV0FJVCk7Ci0JCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQkJaWYgKHNvY2tldCA9PSBudWxsICYmICFwcm9jZXNzLmlzVGVybWluYXRlZCgpKQotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24oCi0JCQkJCW5ldyBTdGF0dXMoCi0JCQkJCQkJSVN0YXR1cy5FUlJPUiwKLQkJCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJCQlNZXNzYWdlcy5YU0xEZWJ1Z1RhcmdldF8yICsgcG9ydCArIE1lc3NhZ2VzLlhTTERlYnVnVGFyZ2V0XzMgKyBDT05ORUNUX0FUVEVNUFRTICsgTWVzc2FnZXMuWFNMRGVidWdUYXJnZXRfNCkpOyAKLQkJcmV0dXJuIHNvY2tldDsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3MgZ2V0UHJvY2VzcygpIHsKLQkJcmV0dXJuIHByb2Nlc3M7Ci0JfQotCi0JcHVibGljIElUaHJlYWRbXSBnZXRUaHJlYWRzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHRocmVhZHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzVGhyZWFkcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXJldHVybiB0aHJlYWRzICE9IG51bGwgJiYgdGhyZWFkcy5sZW5ndGggPiAwOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSBsYXVuY2guZ2V0QXR0cmlidXRlKCJsYXVuY2hOYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0JyZWFrcG9pbnQoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCkgewotCQlpZiAoYnJlYWtwb2ludC5nZXRNb2RlbElkZW50aWZpZXIoKS5lcXVhbHMoCi0JCQkJSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUwpCi0JCQkJJiYgYnJlYWtwb2ludCBpbnN0YW5jZW9mIElMaW5lQnJlYWtwb2ludCkgewotCQkJLy8gdHJ5Ci0JCQkvLyB7Ci0JCQkvLyBJTGluZUJyZWFrcG9pbnQgbGIgPSAoSUxpbmVCcmVha3BvaW50KSBicmVha3BvaW50OwotCQkJLy8gSU1hcmtlciBtYXJrZXIgPSBsYi5nZXRNYXJrZXIoKTsKLQkJCS8vIGZvciAoSXRlcmF0b3I8Pz4gaXRlciA9Ci0JCQkvLyBCYXNlTGF1bmNoSGVscGVyLmdldFBpcGVsaW5lKCkuZ2V0VHJhbnNmb3JtRGVmcygpLml0ZXJhdG9yKCk7Ci0JCQkvLyBpdGVyLmhhc05leHQoKTspCi0JCQkvLyB7Ci0JCQkvLyBMYXVuY2hUcmFuc2Zvcm0gbHQgPSAoTGF1bmNoVHJhbnNmb3JtKSBpdGVyLm5leHQoKTsKLQkJCS8vIGlmIChtYXJrZXIuZ2V0UmVzb3VyY2UoKS5nZXRMb2NhdGlvbigpLmVxdWFscyhsdC5nZXRMb2NhdGlvbigpKSkKLQkJCS8vIHJldHVybiB0cnVlOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCS8vIHsKLQkJCS8vIEpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJLy8gfQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJRGVidWdUYXJnZXQgZ2V0RGVidWdUYXJnZXQoKSB7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJTGF1bmNoIGdldExhdW5jaCgpIHsKLQkJcmV0dXJuIGxhdW5jaDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5UZXJtaW5hdGUoKSB7Ci0JCXJldHVybiBnZXRQcm9jZXNzKCkuY2FuVGVybWluYXRlKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNUZXJtaW5hdGVkKCkgewotCQlyZXR1cm4gZ2V0UHJvY2VzcygpLmlzVGVybWluYXRlZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlcm1pbmF0ZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXN5bmNocm9uaXplZCAoV1JJVEVfTE9DSykgewotCQkJZ2V0UHJvY2VzcygpLnRlcm1pbmF0ZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuUmVzdW1lKCkgewotCQlyZXR1cm4gIWlzVGVybWluYXRlZCgpICYmIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3VzcGVuZCgpIHsKLQkJcmV0dXJuICFpc1Rlcm1pbmF0ZWQoKSAmJiAhaXNTdXNwZW5kZWQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1N1c3BlbmRlZCgpIHsKLQkJcmV0dXJuIHN1c3BlbmRlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXN1bWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1JFU1VNRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlc3VtZWQoaW50IGRldGFpbCkgewotCQlzdXNwZW5kZWQgPSBmYWxzZTsKLQkJdGhyZWFkLmZpcmVSZXN1bWVFdmVudChkZXRhaWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdXNwZW5kZWQoaW50IGRldGFpbCkgewotCQlzdXNwZW5kZWQgPSB0cnVlOwotCQl0aHJlYWQuZmlyZVN1c3BlbmRFdmVudChkZXRhaWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1c3BlbmQoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NVU1BFTkQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGJyZWFrcG9pbnRBZGRlZChJQnJlYWtwb2ludCBicmVha3BvaW50KSB7Ci0JCWlmIChzdXBwb3J0c0JyZWFrcG9pbnQoYnJlYWtwb2ludCkpIHsKLQkJCXRyeSB7Ci0JCQkJSUxpbmVCcmVha3BvaW50IGxiID0gKElMaW5lQnJlYWtwb2ludCkgYnJlYWtwb2ludDsKLQkJCQlpZiAoYnJlYWtwb2ludC5pc0VuYWJsZWQoKSkgewotCQkJCQl0cnkgewotCQkJCQkJSU1hcmtlciBtYXJrZXIgPSBsYi5nZXRNYXJrZXIoKTsKLQkJCQkJCWlmIChtYXJrZXIgIT0gbnVsbCkgewotCQkJCQkJCVVSTCBmaWxlID0gbWFya2VyLmdldFJlc291cmNlKCkuZ2V0TG9jYXRpb24oKQotCQkJCQkJCQkJLnRvRmlsZSgpLnRvVVJJKCkudG9VUkwoKTsKLQkJCQkJCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX0FERF9CUkVBS1BPSU5UCi0JCQkJCQkJCQkrICIgIiArIGZpbGUgKyAiICIgKyBsYi5nZXRMaW5lTnVtYmVyKCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQkJCX0KLQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBicmVha3BvaW50UmVtb3ZlZChJQnJlYWtwb2ludCBicmVha3BvaW50LCBJTWFya2VyRGVsdGEgZGVsdGEpIHsKLQkJaWYgKHN1cHBvcnRzQnJlYWtwb2ludChicmVha3BvaW50KSkgewotCQkJdHJ5IHsKLQkJCQlJTGluZUJyZWFrcG9pbnQgbGIgPSAoSUxpbmVCcmVha3BvaW50KSBicmVha3BvaW50OwotCQkJCUlNYXJrZXIgbWFya2VyID0gbGIuZ2V0TWFya2VyKCk7Ci0JCQkJaWYgKG1hcmtlciAhPSBudWxsKSB7Ci0JCQkJCVVSTCBmaWxlID0gbWFya2VyLmdldFJlc291cmNlKCkuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKQotCQkJCQkJCS50b1VSSSgpLnRvVVJMKCk7Ci0JCQkJCXNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQKLQkJCQkJCQkrICIgIiArIGZpbGUgKyAiICIgKyBsYi5nZXRMaW5lTnVtYmVyKCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBicmVha3BvaW50Q2hhbmdlZChJQnJlYWtwb2ludCBicmVha3BvaW50LCBJTWFya2VyRGVsdGEgZGVsdGEpIHsKLQkJaWYgKHN1cHBvcnRzQnJlYWtwb2ludChicmVha3BvaW50KSkgewotCQkJdHJ5IHsKLQkJCQlpZiAoYnJlYWtwb2ludC5pc0VuYWJsZWQoKSkgewotCQkJCQlicmVha3BvaW50QWRkZWQoYnJlYWtwb2ludCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYnJlYWtwb2ludFJlbW92ZWQoYnJlYWtwb2ludCwgbnVsbCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBjYW5EaXNjb25uZWN0KCkgewotCQkvLyBUT0RPIGltcGxlbWVudCBkaXNjb25uZWN0Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJLy8gVE9ETyBpbXBsZW1lbnQgZGlzY29ubmVjdAotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGlzRGlzY29ubmVjdGVkKCkgewotCQkvLyBUT0RPIGltcGxlbWVudCBkaXNjb25uZWN0Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1N0b3JhZ2VSZXRyaWV2YWwoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSU1lbW9yeUJsb2NrIGdldE1lbW9yeUJsb2NrKGxvbmcgc3RhcnRBZGRyZXNzLCBsb25nIGxlbmd0aCkKLQkJCXRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCByZWFkeSgpIHsKLQkJZmlyZUNyZWF0aW9uRXZlbnQoKTsKLQkJaW5zdGFsbERlZmVycmVkQnJlYWtwb2ludHMoKTsKLQkJdHJ5IHsKLQkJCXNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RBUlQpOwotCQl9IGNhdGNoIChEZWJ1Z0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW5zdGFsbCBicmVha3BvaW50cyB0aGF0IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgYnJlYWtwb2ludAotCSAqIG1hbmFnZXIuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGluc3RhbGxEZWZlcnJlZEJyZWFrcG9pbnRzKCkgewotCQlJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzID0gRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkuZ2V0QnJlYWtwb2ludHMoCi0JCQkJCQlJWFNMQ29uc3RhbnRzLklEX1hTTF9ERUJVR19NT0RFTCk7Ci0JCWZvciAoSUJyZWFrcG9pbnQgZWxlbWVudCA6IGJyZWFrcG9pbnRzKSB7Ci0JCQlicmVha3BvaW50QWRkZWQoZWxlbWVudCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVybWluYXRlZCgpIHsKLQkJc3VzcGVuZGVkID0gdHJ1ZTsKLQkJRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkucmVtb3ZlQnJlYWtwb2ludExpc3RlbmVyKHRoaXMpOwotCQl0aHJlYWRzID0gbmV3IElUaHJlYWRbMF07Ci0JCWZpcmVUZXJtaW5hdGVFdmVudCgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWVzIGluIHRoZSB0YXJnZXQuCi0JICovCi0JcHVibGljIElTdGFja0ZyYW1lW10gZ2V0U3RhY2tGcmFtZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzeW5jaHJvbml6ZWQgKFNUQUNLX0ZSQU1FU19MT0NLKSB7Ci0JCQlpZiAoc3RhbGUpIHsKLQkJCQlzdGFsZSA9IGZhbHNlOwotCQkJCVN0cmluZyBmcmFtZXNEYXRhID0gc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEFDSyk7Ci0JCQkJU3RyaW5nW10gZnJhbWVzID0gZnJhbWVzRGF0YS5zcGxpdCgiXFwkXFwkXFwkIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlJU3RhY2tGcmFtZVtdIHNmID0gbmV3IElTdGFja0ZyYW1lW2ZyYW1lcy5sZW5ndGhdOwotCQkJCUxpc3Q8SVN0YWNrRnJhbWU+IGN1cnJlbnRGcmFtZXMgPSBBcnJheXMKLQkJCQkJCS5hc0xpc3Qoc3RhY2tGcmFtZXNDYWNoZSk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJU3RyaW5nIGRhdGEgPSBmcmFtZXNbaV07Ci0JCQkJCVhTTFN0YWNrRnJhbWUgZnJhbWUgPSBuZXcgWFNMU3RhY2tGcmFtZSh0aHJlYWQsIGRhdGEsIGkpOwotCQkJCQlpbnQgaW5kZXg7Ci0JCQkJCWlmICgoaW5kZXggPSBjdXJyZW50RnJhbWVzLmluZGV4T2YoZnJhbWUpKSAhPSAtMSkgewotCQkJCQkJWFNMU3RhY2tGcmFtZSBjdXJyID0gKFhTTFN0YWNrRnJhbWUpIGN1cnJlbnRGcmFtZXMKLQkJCQkJCQkJLmdldChpbmRleCk7Ci0JCQkJCQljdXJyLnNldExpbmVOdW1iZXIoZnJhbWUuZ2V0TGluZU51bWJlcigpKTsKLQkJCQkJCWN1cnIuc2V0VmFyaWFibGVzKGZyYW1lLmdldFZhcmlhYmxlcygpKTsKLQkJCQkJCWZyYW1lID0gY3VycjsKLQkJCQkJfQotCQkJCQlzZltmcmFtZXMubGVuZ3RoIC0gaSAtIDFdID0gZnJhbWU7Ci0JCQkJfQotCQkJCXN0YWNrRnJhbWVzQ2FjaGUgPSBzZjsKLQkJCX0KLQkJCXJldHVybiBzdGFja0ZyYW1lc0NhY2hlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlc3NldFN0YWNrRnJhbWVzQ2FjaGUoKSB7Ci0JCXN0YWxlID0gdHJ1ZTsKLQkJc3luY2hyb25pemVkIChWQUxVRV9NQVBfTE9DSykgewotCQkJdmFsdWVNYXBDYWNoZS5jbGVhcigpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU2luZ2xlIHN0ZXAgdGhlIGludGVycHJldGVyLgotCSAqLwotCXB1YmxpYyB2b2lkIHN0ZXBPdmVyKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEVQX09WRVIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBJbnRvKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEVQX0lOVE8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBSZXR1cm4oKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NURVBfUkVUVVJOKTsKLQl9Ci0KLQlwdWJsaWMgWFNMVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IHZhcklkKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzeW5jaHJvbml6ZWQgKHZhcmlhYmxlTWFwQ2FjaGUpIHsKLQkJCVhTTFZhcmlhYmxlIHZhciA9IHZhcmlhYmxlTWFwQ2FjaGUuZ2V0KHZhcklkKTsKLQkJCWlmICh2YXIgPT0gbnVsbCkgewotCQkJCXZhciA9IG5ldyBYU0xWYXJpYWJsZSh0aGlzLCB2YXJJZCk7Ci0JCQkJU3RyaW5nIHJlcyA9IHNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfVkFSSUFCTEUKLQkJCQkJCSsgIiAiICsgdmFySWQpOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nW10gZGF0YSA9IHJlcy5zcGxpdCgiJiIpOyAvLyROT04tTkxTLTEkCi0JCQkJdmFyLnNldFNjb3BlKGRhdGFbMF0pOwotCQkJCXZhci5zZXROYW1lKGRhdGFbMV0pOwotCQkJCXZhcmlhYmxlTWFwQ2FjaGUucHV0KHZhcklkLCB2YXIpOwotCQkJfQotCQkJcmV0dXJuIHZhcjsKLQkJfQotCX0KLQotCXB1YmxpYyBJVmFsdWUgZ2V0VmFyaWFibGVWYWx1ZShYU0xWYXJpYWJsZSB2YXJpYWJsZSkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc3luY2hyb25pemVkIChWQUxVRV9NQVBfTE9DSykgewotCQkJWFNMVmFsdWUgdmFsdWUgPSB2YWx1ZU1hcENhY2hlLmdldCh2YXJpYWJsZSk7Ci0JCQlpZiAodmFsdWUgPT0gbnVsbCkgewotCQkJCWlmIChpc1N1c3BlbmRlZCgpKSB7Ci0JCQkJCVN0cmluZyByZXMgPSBzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1ZBTFVFCi0JCQkJCQkJKyAiICIgKyB2YXJpYWJsZS5nZXRJZCgpKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlTdHJpbmdbXSBkYXRhID0gcmVzLnNwbGl0KCImIik7IC8vJE5PTi1OTFMtMSQKLQkJCQkJU3RyaW5nIHR5cGUgPSBkYXRhWzBdOwotCQkJCQlTdHJpbmcgdGhldmFsOwotCQkJCQlpZiAoZGF0YS5sZW5ndGggPiAxKQotCQkJCQkJdGhldmFsID0gZGF0YVsxXTsKLQkJCQkJZWxzZQotCQkJCQkJdGhldmFsID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJdmFsdWUgPSBuZXcgWFNMVmFsdWUodGhpcywgdHlwZSwgdGhldmFsKTsKLQkJCQkJdmFsdWVNYXBDYWNoZS5wdXQodmFyaWFibGUsIHZhbHVlKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvLyBhbnl0aGluZyBhcyBsb25nIGFzIG5vdCBudWxsIQotCQkJCQl2YWx1ZSA9IG5ldyBYU0xWYWx1ZSh0aGlzLCAiRyIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHZhbHVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgc2VuZFJlcXVlc3QoU3RyaW5nIHJlcXVlc3QpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyByZXNwb25zZSA9IG51bGw7Ci0JCXN5bmNocm9uaXplZCAoV1JJVEVfTE9DSykgewotLy8JCQlpZiAoRGVidWcuZGVidWdMYXVuY2hlcikgewotLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCJSRVFVRVNUOiAiICsgcmVxdWVzdCk7Ci0vLwkJCX0KLQkJCXJlcXVlc3RXcml0ZXIucHJpbnRsbihyZXF1ZXN0KTsKLQkJCXJlcXVlc3RXcml0ZXIuZmx1c2goKTsKLQkJCXRyeSB7Ci0JCQkJLy8gd2FpdCBmb3IgcmVzcG9uc2UKLQkJCQlyZXNwb25zZSA9IHJlcXVlc3RSZWFkZXIucmVhZExpbmUoKTsKLS8vCQkJCWlmIChEZWJ1Zy5kZWJ1Z0xhdW5jaGVyKSB7Ci0vLwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJSRVNQT05TRTogIiArIHJlc3BvbnNlKTsKLS8vCQkJCX0KLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlhYm9ydChNZXNzYWdlcy5YU0xEZWJ1Z1RhcmdldF8xOSArIHJlcXVlc3QsIGUpOyAKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzcG9uc2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJyZWFrcG9pbnRIaXQoU3RyaW5nIGV2ZW50KSB7Ci0JCS8vIGRldGVybWluZSB3aGljaCBicmVha3BvaW50IHdhcyBoaXQsIGFuZCBzZXQgdGhlIHRocmVhZCdzIGJyZWFrcG9pbnQKLQkJaW50IGxhc3RTcGFjZSA9IGV2ZW50Lmxhc3RJbmRleE9mKCcgJyk7Ci0JCWlmIChsYXN0U3BhY2UgPiAwKSB7Ci0JCQlTdHJpbmcgbGluZSA9IGV2ZW50LnN1YnN0cmluZyhsYXN0U3BhY2UgKyAxKTsKLQkJCWludCBsaW5lTnVtYmVyID0gSW50ZWdlci5wYXJzZUludChsaW5lKTsKLQkJCUlCcmVha3BvaW50W10gYnJlYWtwb2ludHMgPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkJLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkuZ2V0QnJlYWtwb2ludHMoCi0JCQkJCQkJSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUwpOwotCQkJZm9yIChJQnJlYWtwb2ludCBicmVha3BvaW50IDogYnJlYWtwb2ludHMpIHsKLQkJCQlpZiAoc3VwcG9ydHNCcmVha3BvaW50KGJyZWFrcG9pbnQpKSB7Ci0JCQkJCWlmIChicmVha3BvaW50IGluc3RhbmNlb2YgSUxpbmVCcmVha3BvaW50KSB7Ci0JCQkJCQlJTGluZUJyZWFrcG9pbnQgbGluZUJyZWFrcG9pbnQgPSAoSUxpbmVCcmVha3BvaW50KSBicmVha3BvaW50OwotCQkJCQkJdHJ5IHsKLQkJCQkJCQlpZiAobGluZUJyZWFrcG9pbnQuZ2V0TGluZU51bWJlcigpID09IGxpbmVOdW1iZXIpIHsKLQkJCQkJCQkJdGhyZWFkCi0JCQkJCQkJCQkJLnNldEJyZWFrcG9pbnRzKG5ldyBJQnJlYWtwb2ludFtdIHsgYnJlYWtwb2ludCB9KTsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJfQotCQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJc3VzcGVuZGVkKERlYnVnRXZlbnQuQlJFQUtQT0lOVCk7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBFdmVudERpc3BhdGNoSm9iIGV4dGVuZHMgSm9iIHsKLQotCQlwdWJsaWMgRXZlbnREaXNwYXRjaEpvYigpIHsKLQkJCXN1cGVyKE1lc3NhZ2VzLlhTTERlYnVnVGFyZ2V0XzIwKTsgCi0JCQlzZXRTeXN0ZW0odHJ1ZSk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJU3RyaW5nIGV2ZW50ID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICghaXNUZXJtaW5hdGVkKCkgJiYgZXZlbnQgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWV2ZW50ID0gZXZlbnRSZWFkZXIucmVhZExpbmUoKTsKLQkJCQkJaWYgKGV2ZW50ICE9IG51bGwpIHsKLQkJCQkJCXRocmVhZC5zZXRCcmVha3BvaW50cyhudWxsKTsKLQkJCQkJCXRocmVhZC5zZXRTdGVwcGluZyhmYWxzZSk7Ci0JCQkJCQlpZiAoZXZlbnQuZXF1YWxzKCJyZWFkeSIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQl7Ci0JCQkJCQkJcmVhZHkoKTsKLQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuZXF1YWxzKCJzdG9wcGVkIikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCXsKLQkJCQkJCQl0cnkgewotCQkJCQkJCQl0ZXJtaW5hdGUoKTsKLQkJCQkJCQl9IGNhdGNoIChEZWJ1Z0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIGlmIChldmVudC5lcXVhbHMoInRlcm1pbmF0ZWQiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJewotCQkJCQkJCXRlcm1pbmF0ZWQoKTsKLQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuc3RhcnRzV2l0aCgicmVzdW1lZCIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQl7Ci0JCQkJCQkJaWYgKGV2ZW50LmVuZHNXaXRoKCJzdGVwIikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCXRocmVhZC5zZXRTdGVwcGluZyh0cnVlKTsKLQkJCQkJCQkJcmVzdW1lZChEZWJ1Z0V2ZW50LlNURVBfT1ZFUik7Ci0JCQkJCQkJfSBlbHNlIGlmIChldmVudC5lbmRzV2l0aCgiY2xpZW50IikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCXJlc3VtZWQoRGVidWdFdmVudC5DTElFTlRfUkVRVUVTVCk7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJZGVidWdFdmVudE1zZyhldmVudCk7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIGlmIChldmVudC5zdGFydHNXaXRoKCJzdXNwZW5kZWQiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJewotCQkJCQkJCS8vIGNsZWFyIGRvd24gdGhlIGZyYW1lcyBzbyB0aGF0IHRoZXkgYXJlIHJlLWZldGNoZWQKLQkJCQkJCQlyZXNzZXRTdGFja0ZyYW1lc0NhY2hlKCk7Ci0JCQkJCQkJaWYgKGV2ZW50LmVuZHNXaXRoKCJjbGllbnQiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJCXsKLQkJCQkJCQkJc3VzcGVuZGVkKERlYnVnRXZlbnQuQ0xJRU5UX1JFUVVFU1QpOwotCQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuZW5kc1dpdGgoInN0ZXAiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJCXsKLQkJCQkJCQkJc3VzcGVuZGVkKERlYnVnRXZlbnQuU1RFUF9FTkQpOwotCQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuaW5kZXhPZigiYnJlYWtwb2ludCIpID49IDApIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCWJyZWFrcG9pbnRIaXQoZXZlbnQpOwotCQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJCWRlYnVnRXZlbnRNc2coZXZlbnQpOwotCQkJCQkJCX0KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJZGVidWdFdmVudE1zZyhldmVudCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCXRlcm1pbmF0ZWQoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJfQotCi0JCXByaXZhdGUgdm9pZCBkZWJ1Z0V2ZW50TXNnKFN0cmluZyBldmVudCkgewotLy8JCQlpZiAoRGVidWcuZGVidWdMYXVuY2hlcikgewotLy8JCQkJIFN5c3RlbS5vdXQucHJpbnRsbigiRGlkIG5vdCB1bmRlcnN0YW5kIGV2ZW50OiIgKyBldmVudCk7Ci0vLwkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0ZTg2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGEyNTVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYnVpbGQueG1sCi1qYXZhQ29tcGlsZXIuLi5hcmdzCi10ZW1wLmZvbGRlcgotQGRvdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMjNhY2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmFjYzhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGh1IEphbiAwMyAyMjoyNDoyNSBFU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTc2MGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotI1RodSBKdW4gMTEgMDE6Mzc6NTQgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU3luY2hyb25pemVkT25Jbmhlcml0ZWRNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkV4ZW1wdEV4Y2VwdGlvbkFuZFRocm93YWJsZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmYzNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jV2VkIEp1bCAzMCAyMDo1Njo1NiBCU1QgMjAwOAotY29tcGlsZXJzLmYudW5yZXNvbHZlZC1mZWF0dXJlcz0xCi1jb21waWxlcnMuZi51bnJlc29sdmVkLXBsdWdpbnM9MQotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmRpc2NvdXJhZ2VkLWNsYXNzPTEKLWNvbXBpbGVycy5wLmludGVybmFsPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctYnVuZGxlLWNsYXNzcGF0aC1lbnRyaWVzPTAKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MQotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24taWRlbnRpZmllcj0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTEKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5zLmNyZWF0ZS1kb2NzPWZhbHNlCi1jb21waWxlcnMucy5kb2MtZm9sZGVyPWRvYwotY29tcGlsZXJzLnMub3Blbi10YWdzPTEKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NDM5ODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuTGF1bmNoaW5nUGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW07YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLm9zZ2kudXRpbDtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1DbGFzc1BhdGg6IC4KLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLAotIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNzgzNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmOTAyZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcKLUJ1bmRsZS1OYW1lLjAgPSBYU0wgVHJhbnNmb3JtIExhdW5jaGluZwotbGF1bmNoQ29uZmlndXJhdGlvblR5cGUubmFtZS4wID0gWFNMCi1zb3VyY2VMb2NhdG9yLm5hbWUuMCA9IFhTTFQgU291cmNlIExvb2t1cCBEaXJlY3RvcgotZXh0ZW5zaW9uLXBvaW50Lm5hbWUuMCA9IFhTTFQgUHJvY2Vzc29yIEludm9rZXIKLWV4dGVuc2lvbi1wb2ludC5uYW1lLjEgPSBYU0xUIFByb2Nlc3NvciBUeXBlCi1leHRlbnNpb24tcG9pbnQubmFtZS4yID0gWFNMVCBQcm9jZXNzb3IKLWV4dGVuc2lvbi1wb2ludC5uYW1lLjMgPSBYU0xUIERlYnVnZ2VyCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmIxZTZhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Ci08cGx1Z2luPgotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubGF1bmNoQ29uZmlndXJhdGlvblR5cGVzIj4KLQkJPGxhdW5jaENvbmZpZ3VyYXRpb25UeXBlCi0gICAgICAgICAgICBzb3VyY2VMb2NhdG9ySWQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnNvdXJjZUxvb2t1cERpcmVjdG9yIgotICAgICAgICAgICAgc291cmNlUGF0aENvbXB1dGVySWQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnNvdXJjZVBhdGhDb21wdXRlciIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5sYXVuY2hDb25maWd1cmF0aW9uVHlwZSIKLQkJCW5hbWU9IiVsYXVuY2hDb25maWd1cmF0aW9uVHlwZS5uYW1lLjAiIC8+Ci0JPC9leHRlbnNpb24+Ci0JCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2VMb2NhdG9ycyI+Ci0gICAgICA8c291cmNlTG9jYXRvcgotICAgICAgICAgICAgbmFtZT0iJXNvdXJjZUxvY2F0b3IubmFtZS4wIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlhTTFRTb3VyY2VMb29rdXBEaXJlY3RvciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5zb3VyY2VMb29rdXBEaXJlY3RvciI+Ci0gICAgICA8L3NvdXJjZUxvY2F0b3I+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuc291cmNlUGF0aENvbXB1dGVycyI+Ci0gICAgICA8c291cmNlUGF0aENvbXB1dGVyCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuWFNMVFNvdXJjZVBhdGhDb21wdXRlckRlbGVnYXRlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnNvdXJjZVBhdGhDb21wdXRlciI+Ci0gICAgICA8L3NvdXJjZVBhdGhDb21wdXRlcj4KLSAgIDwvZXh0ZW5zaW9uPgotCQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuYnJlYWtwb2ludHMiPgotICAgICAgPGJyZWFrcG9pbnQKLSAgICAgIAkJaWQ9InhzbExpbmVCcmVha3BvaW50IgotICAgICAgICAgICAgbWFya2VyVHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcueHNsTGluZUJyZWFrcG9pbnRNYXJrZXIiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMTGluZUJyZWFrcG9pbnQiPgotICAgICAgPC9icmVha3BvaW50PgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJ4c2xMaW5lQnJlYWtwb2ludE1hcmtlciIKLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5tYXJrZXJzIj4KLSAgICAgIDxzdXBlcgotICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5saW5lQnJlYWtwb2ludE1hcmtlciI+Ci0gICAgICA8L3N1cGVyPgotICAgICAgPHBlcnNpc3RlbnQKLSAgICAgICAgICAgIHZhbHVlPSJ0cnVlIj4KLSAgICAgIDwvcGVyc2lzdGVudD4KLSAgIDwvZXh0ZW5zaW9uPgotCQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9MYXVuY2hpbmdQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL0xhdW5jaGluZ1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGFiYjE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL0xhdW5jaGluZ1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBMYXVuY2hpbmdQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIExhdW5jaGluZ1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgTGF1bmNoaW5nUGx1Z2luKCkKLQl7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIExhdW5jaGluZ1BsdWdpbiBnZXREZWZhdWx0KCkKLQl7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhFeGNlcHRpb24gZSkKLQl7Ci0JCWdldERlZmF1bHQoKS5nZXRMb2coKS5sb2cobmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBQTFVHSU5fSUQsIDAsICIiLCBlKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKENvcmVFeGNlcHRpb24gZSkKLQl7Ci0JCWdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coZS5nZXRTdGF0dXMoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MmUzYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFN7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVXRpbHNfMDsgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgVXRpbHNfMTsKLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTExpbmVCcmVha3BvaW50XzA7IAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFN0YWNrRnJhbWVfNTsgICAgIAotCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQl9Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YjgwMTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci0KLXB1YmxpYyBjbGFzcyBVdGlscwotewotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZUxvY2F0aW9uKFN0cmluZyBidW5kbGVJZCwgU3RyaW5nIHBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgbG9jYXRpb24gPSBudWxsOwotCQl0cnkKLQkJewotCQkJVVJMIHVybCA9IEZpbGVMb2NhdG9yLmZpbmQoUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZUlkKSwgbmV3IFBhdGgocGF0aCksIG51bGwpOwotCQkJaWYgKHVybCAhPSBudWxsKQotCQkJewotCQkJCVVSTCBmaWxlVXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZVVybC5nZXRGaWxlKCkpOwotCQkJCWxvY2F0aW9uID0gZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5VdGlsc18wICsgcGF0aCArIE1lc3NhZ2VzLlV0aWxzXzEgKyBidW5kbGVJZCwgZSkpOwotCQl9IAotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGx1Z2luTG9jYXRpb24oU3RyaW5nIGJ1bmRsZUlkKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKCJwbGF0Zm9ybTovcGx1Z2luLyIrYnVuZGxlSWQpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAodXJsICE9IG51bGwpCi0JCQl7Ci0JCQkJVVJMIGZpbGVVcmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlVXJsLmdldEZpbGUoKSk7Ci0JCQkJbG9jYXRpb24gPSBmaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIE1lc3NhZ2VzLlV0aWxzXzAgKyBidW5kbGVJZCArIE1lc3NhZ2VzLlV0aWxzXzEgKyBidW5kbGVJZCwgZSkpOwotCQl9IAotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xQcm9wZXJ0eVRlc3Rlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMUHJvcGVydHlUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkZDZiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xQcm9wZXJ0eVRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLlByb3BlcnR5VGVzdGVyOwotCi1wdWJsaWMgY2xhc3MgWFNMUHJvcGVydHlUZXN0ZXIgZXh0ZW5kcyBQcm9wZXJ0eVRlc3RlcgotewotCXB1YmxpYyBib29sZWFuIHRlc3QoT2JqZWN0IGFyZzAsIFN0cmluZyBhcmcxLCBPYmplY3RbXSBhcmcyLCBPYmplY3QgYXJnMykKLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBEaXJlY3Rvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMVFNvdXJjZUxvb2t1cERpcmVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhM2U3M2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMVFNvdXJjZUxvb2t1cERpcmVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuc291cmNlbG9va3VwLkFic3RyYWN0U291cmNlTG9va3VwRGlyZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuSVNvdXJjZUxvb2t1cFBhcnRpY2lwYW50OwotCi1wdWJsaWMgY2xhc3MgWFNMVFNvdXJjZUxvb2t1cERpcmVjdG9yIGV4dGVuZHMgQWJzdHJhY3RTb3VyY2VMb29rdXBEaXJlY3RvcgotewotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYXJ0aWNpcGFudHMoKQotCXsKLQkJYWRkUGFydGljaXBhbnRzKG5ldyBJU291cmNlTG9va3VwUGFydGljaXBhbnRbXXsgbmV3IFhTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudCgpIH0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMVFNvdXJjZUxvb2t1cFBhcnRpY2lwYW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMjMyODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMVFNvdXJjZUxvb2t1cFBhcnRpY2lwYW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuc291cmNlbG9va3VwLkFic3RyYWN0U291cmNlTG9va3VwUGFydGljaXBhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMU3RhY2tGcmFtZTsKLQotLyoqCi0gKiBUcmFuc2xhdGUgYSBzdGFjayBmcmFtZSBpbnRvIGEgc291cmNlIGZpbGUgbmFtZQotICovCi1wdWJsaWMgY2xhc3MgWFNMVFNvdXJjZUxvb2t1cFBhcnRpY2lwYW50IGV4dGVuZHMgQWJzdHJhY3RTb3VyY2VMb29rdXBQYXJ0aWNpcGFudAotewotCXB1YmxpYyBTdHJpbmcgZ2V0U291cmNlTmFtZShPYmplY3Qgb2JqZWN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFhTTFN0YWNrRnJhbWUpCi0JCXsKLQkJCXJldHVybiAoKFhTTFN0YWNrRnJhbWUpIG9iamVjdCkuZ2V0U291cmNlTmFtZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMVFNvdXJjZVBhdGhDb21wdXRlckRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MDlhODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMVFNvdXJjZVBhdGhDb21wdXRlckRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5WYXJpYWJsZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5JU291cmNlQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuc291cmNlbG9va3VwLklTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5jb250YWluZXJzLkRpcmVjdG9yeVNvdXJjZUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5jb250YWluZXJzLkZvbGRlclNvdXJjZUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5jb250YWluZXJzLlByb2plY3RTb3VyY2VDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoUGlwZWxpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotcHVibGljIGNsYXNzIFhTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZSBpbXBsZW1lbnRzIElTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZQotewotCXB1YmxpYyBJU291cmNlQ29udGFpbmVyW10gY29tcHV0ZVNvdXJjZUNvbnRhaW5lcnMoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJTGlzdDxJU291cmNlQ29udGFpbmVyPiBjb250YWluZXJzID0gbmV3IEFycmF5TGlzdDxJU291cmNlQ29udGFpbmVyPigpOwotCi0JCVN0cmluZyBzb3VyY2VGaWxlRXhwciA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9JTlBVVF9GSUxFLCAoU3RyaW5nKSBudWxsKTsKLQkJSVBhdGggc291cmNlRmlsZSA9IGdldFN1YnN0aXR1dGVkUGF0aChzb3VyY2VGaWxlRXhwcik7Ci0JCUxhdW5jaFBpcGVsaW5lIHBpcGVsaW5lID0gaHlkcmF0ZVBpcGVsaW5lKGNvbmZpZ3VyYXRpb24pOwotCi0JCS8vIFRPRE8gaGF2ZSBzb21lIHdheSBvZiBrbm93aW5nIHdoZXRoZXIgaXQgaXMgYW4gSVJlc291cmNlIG9yIG5vdAotCQljb250YWluZXJzLmFkZChuZXcgRGlyZWN0b3J5U291cmNlQ29udGFpbmVyKHNvdXJjZUZpbGUsIGZhbHNlKSk7Ci0KLQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyID0gcGlwZWxpbmUuZ2V0VHJhbnNmb3JtRGVmcygpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJTGF1bmNoVHJhbnNmb3JtIHRyYW5zZm9ybSA9IChMYXVuY2hUcmFuc2Zvcm0pIGl0ZXIubmV4dCgpOwotCQkJSVBhdGggcGF0aCA9IHRyYW5zZm9ybS5nZXRQYXRoKCk7Ci0JCQlJU291cmNlQ29udGFpbmVyIHNvdXJjZUNvbnRhaW5lciA9IG51bGw7Ci0JCQlpZiAodHJhbnNmb3JtLmdldFBhdGhUeXBlKCkuZXF1YWxzKExhdW5jaFRyYW5zZm9ybS5SRVNPVVJDRV9UWVBFKSkKLQkJCXsKLQkJCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIocGF0aCk7Ci0JCQkJSUNvbnRhaW5lciBjb250YWluZXIgPSByZXNvdXJjZS5nZXRQYXJlbnQoKTsKLQkJCQlpZiAoY29udGFpbmVyLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuUFJPSkVDVCkKLQkJCQl7Ci0JCQkJCXNvdXJjZUNvbnRhaW5lciA9IG5ldyBQcm9qZWN0U291cmNlQ29udGFpbmVyKChJUHJvamVjdCkgY29udGFpbmVyLCBmYWxzZSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGNvbnRhaW5lci5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZPTERFUikKLQkJCQl7Ci0JCQkJCXNvdXJjZUNvbnRhaW5lciA9IG5ldyBGb2xkZXJTb3VyY2VDb250YWluZXIoY29udGFpbmVyLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCXNvdXJjZUNvbnRhaW5lciA9IG5ldyBEaXJlY3RvcnlTb3VyY2VDb250YWluZXIocGF0aCwgZmFsc2UpOwotCQkJfQotCQkJY29udGFpbmVycy5hZGQoc291cmNlQ29udGFpbmVyKTsKLQkJfQotCi0JCS8vIGlmIChzb3VyY2VDb250YWluZXIgPT0gbnVsbCkKLQkJLy8gewotCQkvLyBzb3VyY2VDb250YWluZXIgPSBuZXcgV29ya3NwYWNlU291cmNlQ29udGFpbmVyKCk7Ci0JCS8vIH0KLQotCQlyZXR1cm4gY29udGFpbmVycy50b0FycmF5KG5ldyBJU291cmNlQ29udGFpbmVyWzBdKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMYXVuY2hQaXBlbGluZSBoeWRyYXRlUGlwZWxpbmUoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUxhdW5jaFBpcGVsaW5lIHBpcGVsaW5lID0gbnVsbDsKLQkJU3RyaW5nIHMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfUElQRUxJTkUsIChTdHJpbmcpIG51bGwpOwotCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKQotCQl7Ci0JCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShzLmdldEJ5dGVzKCkpOwotCQkJcGlwZWxpbmUgPSBMYXVuY2hQaXBlbGluZS5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJfQotCQlyZXR1cm4gcGlwZWxpbmU7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVBhdGggZ2V0U3Vic3RpdHV0ZWRQYXRoKFN0cmluZyBwYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaWYgKHBhdGggIT0gbnVsbCkKLQkJewotCQkJcGF0aCA9IFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihwYXRoKTsKLQkJCXJldHVybiBuZXcgUGF0aChwYXRoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDgxNTdjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVV0aWxzXzA9RXJyb3IgZGV0ZXJtaW5pbmcgamFyIGZpbGUgbG9jYXRpb246IAotVXRpbHNfMT1cIGZyb20gYnVuZGxlOiAKLVhTTExpbmVCcmVha3BvaW50XzA9TGluZSBCcmVha3BvaW50OiAKLVhTTFN0YWNrRnJhbWVfNT1cIGxpbmU6IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL1hTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL1hTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMyMjZhNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbjsKLQotcHVibGljIGNsYXNzIFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lOUFVUX0ZJTEUgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX0lOUFVUX0ZJTEUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9VU0VfREVGQVVMVF9PVVRQVVRfRklMRSA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfT1VUUFVUX0ZPTERFUiA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfT1VUUFVUX0ZPTERFUiI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9PVVRQVVRfRklMRU5BTUUgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX09VVFBVVF9GSUxFTkFNRSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9MQVVOQ0hfQ09ORklHX1RZUEUgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5sYXVuY2hDb25maWd1cmF0aW9uVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1BJUEVMSU5FID0gTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9QSVBFTElORSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX09QRU5fRklMRSA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfT1BFTl9GSUxFIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0ZPUk1BVF9GSUxFID0gTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9GT1JNQVRfRklMRSI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9XT1JLSU5HX0RJUiA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfV09SS0lOR19ESVIiOyAvLyROT04tTkxTLTEkOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvWFNMVFJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL1hTTFRSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNjRjYmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvWFNMVFJ1bnRpbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBjbGVhbiB1cCBmaW5kIGJ1Z3MKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXMuVmFyaWFibGVzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbjsKLQotcHVibGljIGNsYXNzIFhTTFRSdW50aW1lIHsKLQlwcml2YXRlIHN0YXRpYyB2b2lkIHNhdmVQcmVmZXJlbmNlcygpIHsKLQkJTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcygpIHsKLQkJcmV0dXJuIExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgZGVmYXVsdCBPdXRwdXQgRmlsZSBmb3IgdGhlIGdpdmVuIGlucHV0IGZpbGUgc3RyaW5nLgotCSAqIAotCSAqIEByZXR1cm4gUmV0dXJucyBhbiBJUGF0aCBmb3IgdGhlIE91dHB1dCBGaWxlLgotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElQYXRoIGRlZmF1bHRPdXRwdXRGaWxlRm9ySW5wdXRGaWxlKFN0cmluZyBpbnB1dEZpbGVFeHByZXNzaW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZSA9IFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkKLQkJCQkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihpbnB1dEZpbGVFeHByZXNzaW9uKTsKLQkJSVBhdGggaW5wdXRGaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGUpOwotCQlpbnB1dEZpbGVQYXRoID0gaW5wdXRGaWxlUGF0aC5yZW1vdmVGaWxlRXh0ZW5zaW9uKCk7Ci0JCWlucHV0RmlsZVBhdGggPSBpbnB1dEZpbGVQYXRoLmFkZEZpbGVFeHRlbnNpb24oIm91dC54bWwiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gaW5wdXRGaWxlUGF0aDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9CYXNlTGF1bmNoSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvQmFzZUxhdW5jaEhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzJlYjZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9CYXNlTGF1bmNoSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuU2VydmVyU29ja2V0OwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTFRSdW50aW1lOwotCi0vKioKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIEJhc2VMYXVuY2hIZWxwZXIgewotCXByaXZhdGUgZmluYWwgVVJMIHNvdXJjZTsKLQlwcml2YXRlIGZpbmFsIEZpbGUgdGFyZ2V0OwotCXByb3RlY3RlZCBmaW5hbCBMYXVuY2hQaXBlbGluZSBwaXBlbGluZTsKLQlwcml2YXRlIGludCByZXF1ZXN0UG9ydCA9IC0xOwotCXByaXZhdGUgaW50IGV2ZW50UG9ydCA9IC0xOwotCXByaXZhdGUgaW50IGdlbmVyYXRlUG9ydCA9IC0xOwotCXByaXZhdGUgZmluYWwgYm9vbGVhbiBvcGVuRmlsZU9uQ29tcGxldGlvbjsKLQlwcml2YXRlIGZpbmFsIGJvb2xlYW4gZm9ybWF0RmlsZU9uQ29tcGxldGlvbjsKLQlwcml2YXRlIGZpbmFsIElQYXRoIHdvcmtpbmdEaXI7Ci0KLQlwdWJsaWMgQmFzZUxhdW5jaEhlbHBlcihJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQl3b3JraW5nRGlyID0gaHlkcmF0ZVdvcmtpbmdEaXIoY29uZmlndXJhdGlvbik7Ci0JCXNvdXJjZSA9IGh5ZHJhdGVTb3VyY2VGaWxlVVJMKGNvbmZpZ3VyYXRpb24pOwotCQl0YXJnZXQgPSBoeWRyYXRlT3V0cHV0RmlsZShjb25maWd1cmF0aW9uKTsKLQkJcGlwZWxpbmUgPSBoeWRyYXRlUGlwZWxpbmUoY29uZmlndXJhdGlvbik7Ci0JCW9wZW5GaWxlT25Db21wbGV0aW9uID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09QRU5fRklMRSwgdHJ1ZSk7Ci0JCWZvcm1hdEZpbGVPbkNvbXBsZXRpb24gPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfRk9STUFUX0ZJTEUsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFJlcXVlc3RQb3J0KCkgewotCQlpZiAocmVxdWVzdFBvcnQgPT0gLTEpCi0JCQlyZXF1ZXN0UG9ydCA9IGZpbmRGcmVlUG9ydCgpOwotCQlyZXR1cm4gcmVxdWVzdFBvcnQ7Ci0JfQotCi0JcHVibGljIGludCBnZXRFdmVudFBvcnQoKSB7Ci0JCWlmIChldmVudFBvcnQgPT0gLTEpCi0JCQlldmVudFBvcnQgPSBmaW5kRnJlZVBvcnQoKTsKLQkJcmV0dXJuIGV2ZW50UG9ydDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldEdlbmVyYXRlUG9ydCgpIHsKLQkJaWYgKGdlbmVyYXRlUG9ydCA9PSAtMSkKLQkJCWdlbmVyYXRlUG9ydCA9IGZpbmRGcmVlUG9ydCgpOwotCQlyZXR1cm4gZ2VuZXJhdGVQb3J0OwotCX0KLQotCXB1YmxpYyBMYXVuY2hQaXBlbGluZSBnZXRQaXBlbGluZSgpIHsKLQkJcmV0dXJuIHBpcGVsaW5lOwotCX0KLQotCXB1YmxpYyBVUkwgZ2V0U291cmNlKCkgewotCQlyZXR1cm4gc291cmNlOwotCX0KLQotCXB1YmxpYyBGaWxlIGdldFRhcmdldCgpIHsKLQkJcmV0dXJuIHRhcmdldDsKLQl9Ci0KLQlwdWJsaWMgSVBhdGggZ2V0V29ya2luZ0RpcigpIHsKLQkJcmV0dXJuIHdvcmtpbmdEaXI7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGF1bmNoUGlwZWxpbmUgaHlkcmF0ZVBpcGVsaW5lKAotCQkJSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlMYXVuY2hQaXBlbGluZSBwaXBlbGluZSA9IG51bGw7Ci0JCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BJUEVMSU5FLCAoU3RyaW5nKSBudWxsKTsKLQkJaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkgewotCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocwotCQkJCQkuZ2V0Qnl0ZXMoKSk7Ci0JCQlwaXBlbGluZSA9IExhdW5jaFBpcGVsaW5lLmZyb21YTUwoaW5wdXRTdHJlYW0pOwotCQl9Ci0JCXJldHVybiBwaXBlbGluZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBoeWRyYXRlU291cmNlRmlsZVVSTChJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJUGF0aCBzb3VyY2VGaWxlID0gaHlkcmF0ZVNvdXJjZUZpbGUoY29uZmlndXJhdGlvbik7Ci0JCXJldHVybiBwYXRoVG9VUkwoc291cmNlRmlsZSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVBhdGggaHlkcmF0ZVdvcmtpbmdEaXIoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGV4cHIgPSBjb25maWd1cmF0aW9uCi0JCQkJLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfV09SS0lOR19ESVIsCi0JCQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJcmV0dXJuIGdldFN1YnN0aXR1dGVkUGF0aChleHByKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJUGF0aCBoeWRyYXRlU291cmNlRmlsZShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgc291cmNlRmlsZUV4cHIgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwgKFN0cmluZykgbnVsbCk7Ci0JCXJldHVybiBnZXRTdWJzdGl0dXRlZFBhdGgoc291cmNlRmlsZUV4cHIpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgVVJMIHBhdGhUb1VSTChJUGF0aCBzb3VyY2VGaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkgewotCQkJdXJsID0gc291cmNlRmlsZS50b0ZpbGUoKS50b1VSSSgpLnRvVVJMKCk7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCUxhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIHNvdXJjZUZpbGUKLQkJCQkJCQkudG9TdHJpbmcoKSwgZSkpOwotCQl9Ci0JCXJldHVybiB1cmw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGh5ZHJhdGVPdXRwdXRGaWxlKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlQYXRoIG91dHB1dEZpbGUgPSBudWxsOwotCQlib29sZWFuIHVzZURlZmF1bHRPdXRwdXRGaWxlID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFLAotCQkJCXRydWUpOwotCQlpZiAoIXVzZURlZmF1bHRPdXRwdXRGaWxlKSB7Ci0JCQlTdHJpbmcgb3V0cHV0RmlsZU5hbWUgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GSUxFTkFNRSwKLQkJCQkJKFN0cmluZykgbnVsbCk7Ci0JCQlTdHJpbmcgb3V0cHV0Rm9sZGVyRXhwciA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX0ZPTERFUiwKLQkJCQkJKFN0cmluZykgbnVsbCk7Ci0JCQlvdXRwdXRGaWxlID0gZ2V0U3Vic3RpdHV0ZWRQYXRoKG91dHB1dEZvbGRlckV4cHIpLmFwcGVuZCgKLQkJCQkJb3V0cHV0RmlsZU5hbWUpOwotCQl9IGVsc2UgewotCQkJb3V0cHV0RmlsZSA9IFhTTFRSdW50aW1lCi0JCQkJCS5kZWZhdWx0T3V0cHV0RmlsZUZvcklucHV0RmlsZShjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwKLQkJCQkJCQkoU3RyaW5nKSBudWxsKSk7Ci0JCX0KLQkJcmV0dXJuIG91dHB1dEZpbGUudG9GaWxlKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVBhdGggZ2V0U3Vic3RpdHV0ZWRQYXRoKFN0cmluZyBwYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChwYXRoICE9IG51bGwpIHsKLQkJCXBhdGggPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpCi0JCQkJCS5wZXJmb3JtU3RyaW5nU3Vic3RpdHV0aW9uKHBhdGgpOwotCQkJcmV0dXJuIG5ldyBQYXRoKHBhdGgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBmcmVlIHBvcnQgbnVtYmVyIG9uIGxvY2FsaG9zdCwgb3IgLTEgaWYgdW5hYmxlIHRvIGZpbmQgYSBmcmVlCi0JICogcG9ydC4KLQkgKiAKLQkgKiBAcmV0dXJuIGEgZnJlZSBwb3J0IG51bWJlciBvbiBsb2NhbGhvc3QsIG9yIC0xIGlmIHVuYWJsZSB0byBmaW5kIGEgZnJlZQotCSAqICAgICAgICAgcG9ydAotCSAqLwotCXB1YmxpYyBzdGF0aWMgaW50IGZpbmRGcmVlUG9ydCgpIHsKLQkJU2VydmVyU29ja2V0IHNvY2tldCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlzb2NrZXQgPSBuZXcgU2VydmVyU29ja2V0KDApOwotCQkJcmV0dXJuIHNvY2tldC5nZXRMb2NhbFBvcnQoKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChzb2NrZXQgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCXNvY2tldC5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIC0xOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldE9wZW5GaWxlT25Db21wbGV0aW9uKCkgewotCQlyZXR1cm4gb3BlbkZpbGVPbkNvbXBsZXRpb247Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gZ2V0Rm9ybWF0RmlsZU9uQ29tcGxldGlvbigpIHsKLQkJcmV0dXJuIGZvcm1hdEZpbGVPbkNvbXBsZXRpb247Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoQXR0cmlidXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoQXR0cmlidXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZjFjOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaEF0dHJpYnV0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXMuVmFyaWFibGVzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgTGF1bmNoQXR0cmlidXRlCi17Ci0JcHVibGljIGZpbmFsIFN0cmluZyB1cmk7Ci0JcHVibGljIFN0cmluZyB0eXBlOwotCXB1YmxpYyBTdHJpbmcgdmFsdWU7Ci0KLQlwdWJsaWMgTGF1bmNoQXR0cmlidXRlKFN0cmluZyB1cmksIFN0cmluZyB0eXBlLCBTdHJpbmcgdmFsdWUpCi0JewotCQl0aGlzLnVyaSA9IHVyaTsKLQkJdGhpcy50eXBlID0gdHlwZTsKLQkJdGhpcy52YWx1ZSA9IHZhbHVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSkKLQl7Ci0JCXRoaXMudmFsdWUgPSB2YWx1ZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBnZXRSZXNvbHZlZFZhbHVlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24odmFsdWUpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBpbnQgaGFzaENvZGUoKQotCXsKLQkJcmV0dXJuIHVyaS5oYXNoQ29kZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKQotCXsKLQkJaWYgKG9iaiBpbnN0YW5jZW9mIExhdW5jaEF0dHJpYnV0ZSkKLQkJewotCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIG9iajsKLQkJCXJldHVybiBhdHQudXJpLmVxdWFscyh1cmkpOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaFBpcGVsaW5lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoUGlwZWxpbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1MzNkYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoUGlwZWxpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gY2xlYW4gdXAgZmluZCBidWdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5ET01FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIExhdW5jaFBpcGVsaW5lIHsKLQlwcml2YXRlIExpc3Q8TGF1bmNoVHJhbnNmb3JtPiB0cmFuc2Zvcm1EZWZzID0gbmV3IEFycmF5TGlzdDxMYXVuY2hUcmFuc2Zvcm0+KCk7Ci0JcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOwotCi0JcHVibGljIFByb3BlcnRpZXMgZ2V0T3V0cHV0UHJvcGVydGllcygpIHsKLQkJcmV0dXJuIG91dHB1dFByb3BlcnRpZXM7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkT3V0cHV0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotCQlvdXRwdXRQcm9wZXJ0aWVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0JfQotCi0JcHVibGljIExpc3Q8TGF1bmNoVHJhbnNmb3JtPiBnZXRUcmFuc2Zvcm1EZWZzKCkgewotCQlyZXR1cm4gdHJhbnNmb3JtRGVmczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUcmFuc2Zvcm1EZWZzKExpc3Q8TGF1bmNoVHJhbnNmb3JtPiB0cmFuc2Zvcm1zKSB7Ci0JCXRyYW5zZm9ybURlZnMgPSB0cmFuc2Zvcm1zOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFRyYW5zZm9ybURlZihMYXVuY2hUcmFuc2Zvcm0gdGRlZikgewotCQl0ZGVmLnNldFBpcGVsaW5lKHRoaXMpOwotCQl0cmFuc2Zvcm1EZWZzLmFkZCh0ZGVmKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVUcmFuc2Zvcm1EZWYoTGF1bmNoVHJhbnNmb3JtIHRkZWYpIHsKLQkJdHJhbnNmb3JtRGVmcy5yZW1vdmUodGRlZik7Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1hNTCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCByb290RWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUGlwZWxpbmUiKTsgLy8kTk9OLU5MUy0xJAotCQkJZG9jLmFwcGVuZENoaWxkKHJvb3RFbCk7Ci0KLQkJCUVsZW1lbnQgb3BFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJPdXRwdXRQcm9wZXJ0aWVzIik7IC8vJE5PTi1OTFMtMSQKLQkJCXJvb3RFbC5hcHBlbmRDaGlsZChvcEVsKTsKLQkJCWZvciAoT2JqZWN0IGVsZW1lbnQgOiBvdXRwdXRQcm9wZXJ0aWVzLmVudHJ5U2V0KCkpIHsKLQkJCQlNYXAuRW50cnkgZW50cnkgPSAoTWFwLkVudHJ5KSBlbGVtZW50OwotCQkJCUVsZW1lbnQgcHJvcEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlByb3BlcnR5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgKFN0cmluZykgZW50cnkuZ2V0S2V5KCkpOyAvLyROT04tTkxTLTEkCi0JCQkJcHJvcEVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAoU3RyaW5nKSBlbnRyeS5nZXRWYWx1ZSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJCW9wRWwuYXBwZW5kQ2hpbGQocHJvcEVsKTsKLQkJCX0KLQotCQkJZm9yIChJdGVyYXRvcjxMYXVuY2hUcmFuc2Zvcm0+IGl0ZXIgPSB0cmFuc2Zvcm1EZWZzLml0ZXJhdG9yKCk7IGl0ZXIKLQkJCQkJLmhhc05leHQoKTspIHsKLQkJCQlMYXVuY2hUcmFuc2Zvcm0gdGRlZiA9IGl0ZXIubmV4dCgpOwotCQkJCUVsZW1lbnQgdGRlZkVsID0gdGRlZi5hc1hNTChkb2MpOwotCQkJCXJvb3RFbC5hcHBlbmRDaGlsZCh0ZGVmRWwpOwotCQkJfQotCi0JCQl4bWwgPSBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCQl9IGNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQlMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBlLmdldE1lc3NhZ2UoKSwgZSkpOwotCQl9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgZS5nZXRNZXNzYWdlKCksIGUpKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQlMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBlLmdldE1lc3NhZ2UoKSwgZSkpOwotCQl9IGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCUxhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIGUuZ2V0TWVzc2FnZSgpLCBlKSk7Ci0JCX0KLQkJcmV0dXJuIHhtbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExhdW5jaFBpcGVsaW5lIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KGlucHV0U3RyZWFtKTsKLQotCQlMYXVuY2hQaXBlbGluZSBwZGVmID0gbmV3IExhdW5jaFBpcGVsaW5lKCk7Ci0KLQkJRWxlbWVudCByb290RWwgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJRWxlbWVudCBvcEVsID0gKEVsZW1lbnQpIHJvb3RFbAotCQkJCS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiT3V0cHV0UHJvcGVydGllcyIpLml0ZW0oMCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG9wRWwgIT0gbnVsbCkgewotCQkJTm9kZUxpc3QgcHJvcEVscyA9IG9wRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlByb3BlcnR5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcEVscy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJRWxlbWVudCBwcm9wRWwgPSAoRWxlbWVudCkgcHJvcEVscy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gcHJvcEVsLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nIHZhbHVlID0gcHJvcEVsLmdldEF0dHJpYnV0ZSgidmFsdWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJCXBkZWYuYWRkT3V0cHV0UHJvcGVydHkobmFtZSwgdmFsdWUpOwotCQkJfQotCQl9Ci0KLQkJTm9kZUxpc3QgdHJhbnNmb3JtRWxzID0gcm9vdEVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUcmFuc2Zvcm0iKTsgLy8kTk9OLU5MUy0xJAotCQlmb3IgKGludCBpID0gMDsgaSA8IHRyYW5zZm9ybUVscy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlFbGVtZW50IHRyYW5zZm9ybUVsID0gKEVsZW1lbnQpIHRyYW5zZm9ybUVscy5pdGVtKGkpOwotCQkJTGF1bmNoVHJhbnNmb3JtIHRkZWYgPSBMYXVuY2hUcmFuc2Zvcm0uZnJvbVhNTCh0cmFuc2Zvcm1FbCk7Ci0JCQlwZGVmLmFkZFRyYW5zZm9ybURlZih0ZGVmKTsKLQkJfQotCi0JCXJldHVybiBwZGVmOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hUcmFuc2Zvcm0uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hUcmFuc2Zvcm0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyNTI4YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoVHJhbnNmb3JtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgTGF1bmNoVHJhbnNmb3JtCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTT1VSQ0VfVFlQRSA9ICJyZXNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRFUk5BTF9UWVBFID0gImV4dGVybmFsIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc3R5bGVzaGVldDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBwYXRoVHlwZTsKLQlwcml2YXRlIFN0cmluZyByZXNvbHZlcjsKLQlwcml2YXRlIGZpbmFsIFNldDxMYXVuY2hBdHRyaWJ1dGU+IHBhcmFtZXRlcnMgPSBuZXcgSGFzaFNldDxMYXVuY2hBdHRyaWJ1dGU+KCk7Ci0JcHJpdmF0ZSBMYXVuY2hQaXBlbGluZSBwaXBlbGluZTsKLQotCS8qKgotCSAqIFRoZSBwYXRoIG1heSBiZSBhbiBJUmVzb3VyY2UgdG8gYSBmaWxlIGluIHRoZSB3b3Jrc3BhY2UsIG9yIGFuIElQYXRoIHRvIGEKLQkgKiBmaWxlIG91dHNpZGUgb2YgdGhlIHdvcmtzcGFjZSAtIGRlcGVuZGluZyBvbiB0aGUgcGF0aFR5cGUuIFRoZSBwYXRoCi0JICogc2hvdWxkIGJlIGNyZWF0ZWQgdXNpbmcgSVBhdGgudG9Qb3J0YWJsZVN0cmluZygpLiBUaGUgcGF0aCBtYXkgYWxzbwotCSAqIGNvbnRhaW4gdmFyaWFibGVzIGRlZmluZWQgYnkgdGhlIFZhcmlhYmxlUGx1Z2luLgotCSAqIAotCSAqIEBwYXJhbSBwYXRoCi0JICogQHBhcmFtIHBhdGhUeXBlCi0JICovCi0JcHVibGljIExhdW5jaFRyYW5zZm9ybShTdHJpbmcgcGF0aCwgU3RyaW5nIHBhdGhUeXBlKQotCXsKLQkJc3R5bGVzaGVldCA9IHBhdGg7Ci0JCXRoaXMucGF0aFR5cGUgPSBwYXRoVHlwZTsKLQl9Ci0KLQlwdWJsaWMgU2V0PExhdW5jaEF0dHJpYnV0ZT4gZ2V0UGFyYW1ldGVycygpCi0JewotCQlyZXR1cm4gcGFyYW1ldGVyczsKLQl9Ci0JCi0JcHVibGljIHZvaWQgYWRkUGFyYW1ldGVyKExhdW5jaEF0dHJpYnV0ZSBwYXJhbWV0ZXIpCi0JewotCQlwYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVzb2x2ZXIoKQotCXsKLQkJcmV0dXJuIHJlc29sdmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc29sdmVyKFN0cmluZyByZXNvbHZlcikKLQl7Ci0JCXRoaXMucmVzb2x2ZXIgPSByZXNvbHZlcjsKLQl9Ci0KLQlwdWJsaWMgSVBhdGggZ2V0UGF0aCgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgc3Vic3RpdHV0ZWRWYWx1ZSA9IFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihzdHlsZXNoZWV0KTsKLQkJcmV0dXJuIFBhdGguZnJvbVBvcnRhYmxlU3RyaW5nKHN1YnN0aXR1dGVkVmFsdWUpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UGF0aFR5cGUoKQotCXsKLQkJcmV0dXJuIHBhdGhUeXBlOwotCX0KLQotCS8qKgotCSAqIFRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtICh3aXRoIGFueSBzdHJpbmcKLQkgKiBzdWJzaXR1dGlvbnMgYWxyZWFkeSBtYWRlKS4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICovCi0JcHVibGljIElQYXRoIGdldExvY2F0aW9uKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlQYXRoIHBhcnRpYWxQYXRoID0gZ2V0UGF0aCgpOwotCQlJUGF0aCBmdWxsUGF0aCA9IG51bGw7Ci0JCWlmIChSRVNPVVJDRV9UWVBFLmVxdWFscyhwYXRoVHlwZSkpCi0JCXsKLQkJCUlGaWxlIGZpbGUgPSAoSUZpbGUpIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcihwYXJ0aWFsUGF0aCk7Ci0JCQlmdWxsUGF0aCA9IGZpbGUuZ2V0TG9jYXRpb24oKTsKLQkJfQotCQllbHNlIGlmIChFWFRFUk5BTF9UWVBFLmVxdWFscyhwYXRoVHlwZSkpCi0JCXsKLQkJCWZ1bGxQYXRoID0gcGFydGlhbFBhdGg7Ci0JCX0KLQkJcmV0dXJuIGZ1bGxQYXRoOwotCX0KLQotCXB1YmxpYyBFbGVtZW50IGFzWE1MKERvY3VtZW50IGRvYykKLQl7Ci0JCUVsZW1lbnQgdGRlZkVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlRyYW5zZm9ybSIpOyAvLyROT04tTkxTLTEkCi0JCXRkZWZFbC5zZXRBdHRyaWJ1dGUoInBhdGgiLCBzdHlsZXNoZWV0KTsgLy8kTk9OLU5MUy0xJAotCQl0ZGVmRWwuc2V0QXR0cmlidXRlKCJwYXRoVHlwZSIsIHBhdGhUeXBlKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAocmVzb2x2ZXIgIT0gbnVsbCkKLQkJCXRkZWZFbC5zZXRBdHRyaWJ1dGUoInVyaVJlc29sdmVyIiwgcmVzb2x2ZXIpOyAvLyROT04tTkxTLTEkCi0JCUVsZW1lbnQgcGFyYW1zRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUGFyYW1ldGVycyIpOyAvLyROT04tTkxTLTEkCi0JCXRkZWZFbC5hcHBlbmRDaGlsZChwYXJhbXNFbCk7Ci0JCWZvciAoSXRlcmF0b3I8TGF1bmNoQXR0cmlidXRlPiBpdGVyID0gcGFyYW1ldGVycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUxhdW5jaEF0dHJpYnV0ZSBwYXJhbSA9IGl0ZXIubmV4dCgpOwotCQkJRWxlbWVudCBwcm9wRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUGFyYW1ldGVyIik7IC8vJE5PTi1OTFMtMSQKLQkJCXByb3BFbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBwYXJhbS51cmkpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHBhcmFtLnZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCQkJcGFyYW1zRWwuYXBwZW5kQ2hpbGQocHJvcEVsKTsKLQkJfQotCQlyZXR1cm4gdGRlZkVsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGF1bmNoVHJhbnNmb3JtIGZyb21YTUwoRWxlbWVudCB0cmFuc2Zvcm1FbCkKLQl7Ci0JCVN0cmluZyBwYXRoID0gdHJhbnNmb3JtRWwuZ2V0QXR0cmlidXRlKCJwYXRoIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIHBhdGhUeXBlID0gdHJhbnNmb3JtRWwuZ2V0QXR0cmlidXRlKCJwYXRoVHlwZSIpOyAvLyROT04tTkxTLTEkCi0KLQkJTGF1bmNoVHJhbnNmb3JtIHRkZWYgPSBuZXcgTGF1bmNoVHJhbnNmb3JtKHBhdGgsIHBhdGhUeXBlKTsKLQotCQlTdHJpbmcgdXJpUmVzb2x2ZXIgPSB0cmFuc2Zvcm1FbC5nZXRBdHRyaWJ1dGUoInVyaVJlc29sdmVyIik7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZi5zZXRSZXNvbHZlcih1cmlSZXNvbHZlcik7Ci0KLQkJRWxlbWVudCBwYXJhbXNFbCA9IChFbGVtZW50KSB0cmFuc2Zvcm1FbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUGFyYW1ldGVycyIpLml0ZW0oMCk7IC8vJE5PTi1OTFMtMSQKLQkJTm9kZUxpc3QgcGFyYW1FbHMgPSBwYXJhbXNFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUGFyYW1ldGVyIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbUVscy5nZXRMZW5ndGgoKTsgaSsrKQotCQl7Ci0JCQlFbGVtZW50IHBhcmFtRWwgPSAoRWxlbWVudCkgcGFyYW1FbHMuaXRlbShpKTsKLQkJCVN0cmluZyBuYW1lID0gcGFyYW1FbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHR5cGUgPSBwYXJhbUVsLmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdmFsdWUgPSBwYXJhbUVsLmdldEF0dHJpYnV0ZSgidmFsdWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJdGRlZi5hZGRQYXJhbWV0ZXIobmV3IExhdW5jaEF0dHJpYnV0ZShuYW1lLCB0eXBlLCB2YWx1ZSkpOwotCQl9Ci0KLQkJcmV0dXJuIHRkZWY7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UGlwZWxpbmUoTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmUpCi0JewotCQl0aGlzLnBpcGVsaW5lID0gcGlwZWxpbmU7Ci0JfQotCi0JcHVibGljIExhdW5jaFBpcGVsaW5lIGdldFBpcGVsaW5lKCkKLQl7Ci0JCXJldHVybiBwaXBlbGluZTsKLQl9Ci0KLQkvKgotCSAqIHByaXZhdGUgRmlsZSBnZXRVUklSZXNvbHZlckRpcmVjdG9yeShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCSAqIHRocm93cyBDb3JlRXhjZXB0aW9uIHsgRmlsZSByZXNvbHZlckRpciA9IG51bGw7IFN0cmluZyBiYXNlVVJJVHlwZSA9Ci0JICogY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0JBU0VfVVJJX1RZUEUsCi0JICogWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5CQVNFX1VSSV9XT1JLSU5HX0RJUl9SRUxBVElWRSk7IGlmCi0JICogKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQkFTRV9VUklfQUJTT0xVVEUuZXF1YWxzKGJhc2VVUklUeXBlKSkgewotCSAqIFN0cmluZyB1cmlEaXIgPQotCSAqIGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9CQVNFX1VSSV9ESVJFQ1RPUlksCi0JICogKFN0cmluZyludWxsKTsgaWYgKHVyaURpciE9bnVsbCkgeyBTdHJpbmcgcGF0aEV4cHIgPQotCSAqIFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbih1cmlEaXIpOwotCSAqIFBhdGggcGF0aCA9IG5ldyBQYXRoKHBhdGhFeHByKTsgaWYgKHBhdGguaXNBYnNvbHV0ZSgpKSB7IEZpbGUgZGlyID0gbmV3Ci0JICogRmlsZShwYXRoLnRvT1NTdHJpbmcoKSk7IGlmIChkaXIuaXNEaXJlY3RvcnkoKSAmJiBkaXIuZXhpc3RzKCkpIHsgcmV0dXJuCi0JICogZGlyOyB9IC8vIFRoaXMgbWF5IGJlIGEgd29ya3NwYWNlIHJlbGF0aXZlIHBhdGggcmV0dXJuZWQgYnkgYSB2YXJpYWJsZS4gLy8KLQkgKiBIb3dldmVyIHZhcmlhYmxlIHBhdGhzIHN0YXJ0IHdpdGggYSBzbGFzaCBhbmQgdGh1cyBhcmUgdGhvdWdodCB0byAvLyBiZQotCSAqIGFic29sdXRlLCBzbyBmYWxsIHRocm91Z2ggdG8gYmVsb3cgfSBJUmVzb3VyY2UgcmVzID0KLQkgKiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIocGF0aCk7IGlmIChyZXMKLQkgKiBpbnN0YW5jZW9mIElDb250YWluZXIgJiYgcmVzLmV4aXN0cygpKSByZXR1cm4gcmVzLmdldExvY2F0aW9uKCkudG9GaWxlKCk7Ci0JICogYWJvcnQoIlVSSSBwYXRoIGlzIGludmFsaWQiLG51bGwsMCk7IH0gfSBlbHNlIGlmCi0JICogKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQkFTRV9VUklfU1RZTEVTSEVFVF9SRUxBVElWRS5lcXVhbHMoYmFzZVVSSVR5cGUpKSB7Ci0JICogcmVzb2x2ZXJEaXIgPSBnZXRTdHlsZXNoZWV0UmVsYXRpdmVVUklSZXNvbHZlcihjb25maWd1cmF0aW9uKTsgfSAvLyBubwotCSAqIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIG9mIHdvcmtpbmdfZGlyIHJlbGF0aXZlIC0gdGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IKLQkgKiBKQVhQIHNvIHJldHVybiBudWxsIHJldHVybiByZXNvbHZlckRpcjsgfQotCSAqIAotCSAqIHByaXZhdGUgRmlsZSBnZXRTdHlsZXNoZWV0UmVsYXRpdmVVUklSZXNvbHZlcihJTGF1bmNoQ29uZmlndXJhdGlvbgotCSAqIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsgTGlzdCBzdHlsZXNoZWV0cyA9Ci0JICogY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1NUWUxFU0hFRVRTX0xJU1QsKExpc3QpbnVsbCk7Ci0JICogaWYgKHN0eWxlc2hlZXRzID09IG51bGwgfHwgc3R5bGVzaGVldHMuc2l6ZSgpID09IDApIGFib3J0KCJObyBzdHlsZXNoZWV0cwotCSAqIGRlZmluZWQgZm9yIHRoaXMgbGF1bmNoIGNvbmZpZ3VyYXRpb24iLCBudWxsLCAwKTsgZWxzZSB7IFN0cmluZyBzaGVldCA9Ci0JICogKFN0cmluZylzdHlsZXNoZWV0cy5nZXQoMCk7IFN0cmluZyBwYXRoRXhwciA9Ci0JICogVmFyaWFibGVzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKS5wZXJmb3JtU3RyaW5nU3Vic3RpdHV0aW9uKHNoZWV0KTsKLQkgKiBQYXRoIHBhdGggPSBuZXcgUGF0aChwYXRoRXhwcik7IGlmIChwYXRoLmlzQWJzb2x1dGUoKSkgeyBGaWxlIGZpbGUgPSBuZXcKLQkgKiBGaWxlKHBhdGgudG9PU1N0cmluZygpKTsgaWYgKGZpbGUuZXhpc3RzKCkpIHsgRmlsZSBkaXIgPQotCSAqIGZpbGUuZ2V0UGFyZW50RmlsZSgpOyByZXR1cm4gZGlyOyB9IC8vIFRoaXMgbWF5IGJlIGEgd29ya3NwYWNlIHJlbGF0aXZlCi0JICogcGF0aCByZXR1cm5lZCBieSBhIHZhcmlhYmxlLiAvLyBIb3dldmVyIHZhcmlhYmxlIHBhdGhzIHN0YXJ0IHdpdGggYSBzbGFzaAotCSAqIGFuZCB0aHVzIGFyZSB0aG91Z2h0IHRvIC8vIGJlIGFic29sdXRlIElSZXNvdXJjZSByZXMgPQotCSAqIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZmluZE1lbWJlcihwYXRoKTsgSUNvbnRhaW5lcgotCSAqIHBhcmVudCA9IHJlcy5nZXRQYXJlbnQoKTsgaWYgKHBhcmVudC5leGlzdHMoKSkgcmV0dXJuCi0JICogcGFyZW50LmdldExvY2F0aW9uKCkudG9GaWxlKCk7IGFib3J0KCJTdHlsZXNoZWV0IHBhdGggaXMKLQkgKiBpbnZhbGlkIixudWxsLDApOyB9IGVsc2UgeyBJUmVzb3VyY2UgcmVzID0KLQkgKiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIocGF0aCk7IElDb250YWluZXIKLQkgKiBwYXJlbnQgPSByZXMuZ2V0UGFyZW50KCk7IGlmIChwYXJlbnQuZXhpc3RzKCkpIHJldHVybgotCSAqIHBhcmVudC5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOyBhYm9ydCgiU3R5bGVzaGVldCBwYXRoIGlzCi0JICogaW52YWxpZCIsbnVsbCwwKTsgfSB9IHJldHVybiBudWxsOyB9Ci0JICovCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvUHJlZmVyZW5jZVV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9QcmVmZXJlbmNlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGVjMGQ2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9QcmVmZXJlbmNlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBQcmVmZXJlbmNlVXRpbAotewotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZUNvcmVFeGNlcHRpb24oVGhyb3dhYmxlIGUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIGUuZ2V0TWVzc2FnZSgpLCBlKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBnZXREb2N1bWVudCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IGRmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQlEb2N1bWVudCBkb2MgPSBkb2NCdWlsZGVyLm5ld0RvY3VtZW50KCk7Ci0JCXJldHVybiBkb2M7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplRG9jdW1lbnQoRG9jdW1lbnQgZG9jKSB0aHJvd3MgSU9FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQotCQlUcmFuc2Zvcm1lckZhY3RvcnkgZmFjdG9yeSA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IGZhY3RvcnkubmV3VHJhbnNmb3JtZXIoKTsKLQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5NRVRIT0QsICJ4bWwiKTsgIC8vJE5PTi1OTFMtMSQKLQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsgIC8vJE5PTi1OTFMtMSQKLQotCQlET01Tb3VyY2Ugc291cmNlID0gbmV3IERPTVNvdXJjZShkb2MpOwotCQlTdHJlYW1SZXN1bHQgb3V0cHV0VGFyZ2V0ID0gbmV3IFN0cmVhbVJlc3VsdChzKTsKLQkJdHJhbnNmb3JtZXIudHJhbnNmb3JtKHNvdXJjZSwgb3V0cHV0VGFyZ2V0KTsKLQotCQlyZXR1cm4gcy50b1N0cmluZygiVVRGOCIpOyAJCQkgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBzdGF0aWMgRWxlbWVudFtdIGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQsIFN0cmluZyBuYW1lKQotCXsKLQkJTGlzdDxFbGVtZW50PiBjaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8RWxlbWVudD4oKTsKLQkJTm9kZUxpc3QgbGlzdCA9IHBhcmVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBsZW5ndGggPSBsaXN0LmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotCQl7Ci0JCQlOb2RlIG5vZGUgPSBsaXN0Lml0ZW0oaSk7Ci0JCQlzaG9ydCB0eXBlID0gbm9kZS5nZXROb2RlVHlwZSgpOwotCQkJaWYgKHR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQl7Ci0JCQkJRWxlbWVudCBwcm9jZXNzb3JFbGVtZW50ID0gKEVsZW1lbnQpIG5vZGU7Ci0JCQkJaWYgKHByb2Nlc3NvckVsZW1lbnQuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMobmFtZSkpCi0JCQkJewotCQkJCQljaGlsZHJlbi5hZGQocHJvY2Vzc29yRWxlbWVudCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBjaGlsZHJlbi50b0FycmF5KG5ldyBFbGVtZW50WzBdKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXROb2RlVGV4dChOb2RlIG5vZGUpCi0JewotCQlzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLQkJewotCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKLQkJCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotCQkJCXsKLQkJCQkJTm9kZSBjaGlsZCA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLQkJCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpCi0JCQkJCXsKLQkJCQkJCXNiLmFwcGVuZChjaGlsZC5nZXROb2RlVmFsdWUoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JCQljYXNlIE5vZGUuVEVYVF9OT0RFOgotCQkJY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFOgotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gbm9kZS5nZXROb2RlVmFsdWUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTdHJlYW0gc3RyZWFtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCURvY3VtZW50QnVpbGRlciBwYXJzZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCQlwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBEZWZhdWx0SGFuZGxlcigpKTsKLQkJCWRvYyA9IHBhcnNlci5wYXJzZShuZXcgSW5wdXRTb3VyY2Uoc3RyZWFtKSk7Ci0JCX0KLQkJY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlQcmVmZXJlbmNlVXRpbC5jcmVhdGVDb3JlRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlQcmVmZXJlbmNlVXRpbC5jcmVhdGVDb3JlRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVByZWZlcmVuY2VVdGlsLmNyZWF0ZUNvcmVFeGNlcHRpb24oZSk7Ci0JCX0KLQkJY2F0Y2ggKEZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkKLQkJewotCQkJUHJlZmVyZW5jZVV0aWwuY3JlYXRlQ29yZUV4Y2VwdGlvbihlKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCXRyeQotCQkJewotCQkJCXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJUHJlZmVyZW5jZVV0aWwuY3JlYXRlQ29yZUV4Y2VwdGlvbihlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZG9jOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZhNDdkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9JWFNMQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotcHVibGljIGludGVyZmFjZSBJWFNMQ29uc3RhbnRzCi17Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9YU0xfREVCVUdfTU9ERUwgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMRGVidWdNb2RlbCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQVJLRVJfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcueHNsTGluZUJyZWFrcG9pbnRNYXJrZXIiOyAvLyROT04tTkxTLTEkCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xEZWJ1Z1RhcmdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvSVhTTERlYnVnVGFyZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOWU1NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvSVhTTERlYnVnVGFyZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklTdGFja0ZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhbHVlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0xEZWJ1Z1RhcmdldCBleHRlbmRzIElEZWJ1Z1RhcmdldAotewotCVhTTFZhcmlhYmxlIGdldFZhcmlhYmxlKGludCB2YXJJZCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uOwotCi0JSVN0YWNrRnJhbWVbXSBnZXRTdGFja0ZyYW1lcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbjsKLQotCXZvaWQgc3RlcEludG8oKSB0aHJvd3MgRGVidWdFeGNlcHRpb247Ci0KLQl2b2lkIHN0ZXBPdmVyKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uOwotCi0Jdm9pZCBzdGVwUmV0dXJuKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uOwotCi0JSVZhbHVlIGdldFZhcmlhYmxlVmFsdWUoWFNMVmFyaWFibGUgdmFyaWFibGUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbjsJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9Ob2RlTGlzdFZhcmlhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9Ob2RlTGlzdFZhcmlhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODdhYjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvTm9kZUxpc3RWYXJpYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA4IFNUQVIgYW5kIG90aGVycy4KLSAqQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICphcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKkNvbnRyaWJ1dG9yczoKLSAqICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjE0MjM1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhcmlhYmxlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogTm9kZUxpc3RWYXJpYWJsZSByZXByZXNlbnRzIGEgWFNMIE5vZGVzZXQuICBUaGlzIGlzIHR5cGljYWxseSBhIGdyb3VwIG9mIG5vZGVzIHRoYXQKLSAqIG1hdGNoZWQgYSBwYXJ0aWN1bGFyIFhQYXRoIGV4cHJlc3Npb24sIGFuZCBhcmUgc3RvcmVkIGluIGFuIFhTTFQgdmFyaWFibGUuCi0gKiAKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIE5vZGVMaXN0VmFyaWFibGUgZXh0ZW5kcyBYU0xEZWJ1Z0VsZW1lbnQgaW1wbGVtZW50cyBJVmFyaWFibGUgewotCQotCXByaXZhdGUgTm9kZSBub2RlID0gbnVsbDsKLQotCXByaXZhdGUgSURlYnVnVGFyZ2V0IGRlYnVnVGFyZ2V0OwotCQotCXB1YmxpYyBOb2RlTGlzdFZhcmlhYmxlKElEZWJ1Z1RhcmdldCB0YXJnZXQsIE5vZGUgbm9kZUxpc3ROb2RlKSB7Ci0JCXN1cGVyKHRhcmdldCk7Ci0JCW5vZGUgPSBub2RlTGlzdE5vZGU7Ci0JCWRlYnVnVGFyZ2V0ID0gdGFyZ2V0OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJU3RyaW5nIG5vZGVOYW1lID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG5vZGUuZ2V0UHJlZml4KCkgIT0gbnVsbCkgewotCQkJbm9kZU5hbWUgPSBub2RlTmFtZSArIG5vZGUuZ2V0UHJlZml4KCkgKyAiOiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlpZiAobm9kZS5nZXROb2RlTmFtZSgpICE9IG51bGwpIHsKLQkJCW5vZGVOYW1lID0gbm9kZU5hbWUgKyBub2RlLmdldE5vZGVOYW1lKCk7Ci0JCX0KLQkJcmV0dXJuIG5vZGVOYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlVHlwZU5hbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJVmFsdWUgZ2V0VmFsdWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlJVmFsdWUgdmFsdWUgPSBuZXcgWFNMVmFsdWUoZGVidWdUYXJnZXQsICJzdHJpbmciLCBub2RlKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzVmFsdWVDaGFuZ2VkKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHN1cHBvcnRzVmFsdWVNb2RpZmljYXRpb24oKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHZlcmlmeVZhbHVlKFN0cmluZyBleHByZXNzaW9uKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB2ZXJpZnlWYWx1ZShJVmFsdWUgdmFsdWUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBleHByZXNzaW9uKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbHVlKElWYWx1ZSB2YWx1ZSkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkKLQl9Ci0JCi0JcHVibGljIE5vZGUgZ2V0Tm9kZSgpIHsKLQkJcmV0dXJuIG5vZGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xEZWJ1Z0VsZW1lbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTERlYnVnRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWIyZTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTERlYnVnRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuRGVidWdFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURpc2Nvbm5lY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVGVybWluYXRlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNMRGVidWdFbGVtZW50IGV4dGVuZHMgRGVidWdFbGVtZW50IGltcGxlbWVudHMgSURpc2Nvbm5lY3QKLXsKLQlwdWJsaWMgWFNMRGVidWdFbGVtZW50KElEZWJ1Z1RhcmdldCB0YXJnZXQpCi0JewotCQlzdXBlcih0YXJnZXQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TW9kZWxJZGVudGlmaWVyKCkKLQl7Ci0JCXJldHVybiBJWFNMQ29uc3RhbnRzLklEX1hTTF9ERUJVR19NT0RFTDsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJaWYgKGFkYXB0ZXIgPT0gSVRlcm1pbmF0ZS5jbGFzcykgewotCQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCk7Ci0JCX0KLQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoYWRhcHRlcik7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGNhbkRpc2Nvbm5lY3QoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCkuY2FuRGlzY29ubmVjdCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXREZWJ1Z1RhcmdldCgpLmRpc2Nvbm5lY3QoKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNEaXNjb25uZWN0ZWQoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCkuaXNEaXNjb25uZWN0ZWQoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xMaW5lQnJlYWtwb2ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMTGluZUJyZWFrcG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFjNjkzNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xMaW5lQnJlYWtwb2ludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBCam9ybiBGcmVlbWFuLUJlbnNvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLkxpbmVCcmVha3BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLk1lc3NhZ2VzOwotCi1wdWJsaWMgY2xhc3MgWFNMTGluZUJyZWFrcG9pbnQgZXh0ZW5kcyBMaW5lQnJlYWtwb2ludAotewotCXByaXZhdGUgaW50IGxpbmVOdW1iZXI7Ci0KLQlwdWJsaWMgWFNMTGluZUJyZWFrcG9pbnQoKQotCXsKLQl9Ci0KLQlwdWJsaWMgWFNMTGluZUJyZWFrcG9pbnQoZmluYWwgSVJlc291cmNlIHJlc291cmNlLCBmaW5hbCBpbnQgbGluZU51bWJlciwgZmluYWwgaW50IGNoYXJTdGFydCwgZmluYWwgaW50IGNoYXJFbmQpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQl0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkKLQkJewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkJCXsKLQkJCQlJTWFya2VyIG1hcmtlciA9IHJlc291cmNlLmNyZWF0ZU1hcmtlcihJWFNMQ29uc3RhbnRzLk1BUktFUl9JRCk7Ci0JCQkJc2V0TWFya2VyKG1hcmtlcik7Ci0JCQkJbWFya2VyLnNldEF0dHJpYnV0ZShJQnJlYWtwb2ludC5JRCwgZ2V0TW9kZWxJZGVudGlmaWVyKCkpOwotCQkJCW1hcmtlci5zZXRBdHRyaWJ1dGUoSUJyZWFrcG9pbnQuRU5BQkxFRCwgQm9vbGVhbi5UUlVFKTsKLQkJCQltYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuTUVTU0FHRSwgTWVzc2FnZXMuWFNMTGluZUJyZWFrcG9pbnRfMCArIHJlc291cmNlLmdldE5hbWUoKSArICIgW2xpbmU6ICIgKyBsaW5lTnVtYmVyICsgIl0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIAotCi0JCQkJbWFya2VyLnNldEF0dHJpYnV0ZShJTWFya2VyLkxJTkVfTlVNQkVSLCBsaW5lTnVtYmVyKTsKLQkJCQltYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuQ0hBUl9TVEFSVCwgSW50ZWdlci52YWx1ZU9mKGNoYXJTdGFydCkpOwotCQkJCW1hcmtlci5zZXRBdHRyaWJ1dGUoSU1hcmtlci5DSEFSX0VORCwgSW50ZWdlci52YWx1ZU9mKGNoYXJFbmQpKTsKLQotCQkJCXJlZ2lzdGVyKHRydWUpOwotCQkJfQotCQl9OwotCQlydW4oZ2V0TWFya2VyUnVsZShyZXNvdXJjZSksIHJ1bm5hYmxlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaW50IGxpbmUgPSBzdXBlci5nZXRMaW5lTnVtYmVyKCk7Ci0JCXJldHVybiBsaW5lID09IC0xID8gbGluZU51bWJlciA6IGxpbmU7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgcmVnaXN0ZXIoYm9vbGVhbiByZWdpc3RlcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCURlYnVnUGx1Z2luIHBsdWdpbiA9IERlYnVnUGx1Z2luLmdldERlZmF1bHQoKTsKLQkJaWYgKHBsdWdpbiAhPSBudWxsICYmIHJlZ2lzdGVyKQotCQl7Ci0JCQlwbHVnaW4uZ2V0QnJlYWtwb2ludE1hbmFnZXIoKS5hZGRCcmVha3BvaW50KHRoaXMpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJc2V0UmVnaXN0ZXJlZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1vZGVsSWRlbnRpZmllcigpCi0JewotCQlyZXR1cm4gSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMU3RhY2tGcmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMU3RhY2tGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzI2MDBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFN0YWNrRnJhbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVJlZ2lzdGVyR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JU3RhY2tGcmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklUaHJlYWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVmFyaWFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLk1lc3NhZ2VzOwotCi0vKioKLSAqIFhTTCBzdGFjayBmcmFtZS4KLSAqLwotcHVibGljIGNsYXNzIFhTTFN0YWNrRnJhbWUgZXh0ZW5kcyBYU0xEZWJ1Z0VsZW1lbnQgaW1wbGVtZW50cyBJU3RhY2tGcmFtZQotewotCXByaXZhdGUgZmluYWwgWFNMVGhyZWFkIHhzbFRocmVhZDsKLQlwcml2YXRlIGludCBpZDsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgaW50IGxpbmVOdW1iZXI7Ci0JcHJpdmF0ZSBTdHJpbmcgeHNsRmlsZU5hbWU7Ci0JcHJpdmF0ZSBJVmFyaWFibGVbXSB2YXJpYWJsZXM7Ci0KLQlwdWJsaWMgWFNMU3RhY2tGcmFtZShYU0xUaHJlYWQgdGhyZWFkLCBTdHJpbmcgZGF0YSwgaW50IGluZGV4KQotCXsKLQkJc3VwZXIodGhyZWFkLmdldERlYnVnVGFyZ2V0KCkpOwotCQl0aGlzLnhzbFRocmVhZCA9IHRocmVhZDsKLQkJaW5pdChkYXRhLChJWFNMRGVidWdUYXJnZXQpIHRocmVhZC5nZXREZWJ1Z1RhcmdldCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdChTdHJpbmcgZGF0YSxJWFNMRGVidWdUYXJnZXQgZGVidWdUYXJnZXQpCi0JewotCi0JCVN0cmluZ1tdIHN0cmluZ3MgPSBkYXRhLnNwbGl0KCJcXHwiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgZmlsZU5hbWUgPSBzdHJpbmdzWzBdOwotCQl0cnkKLQkJewotCQkJVVJMIHVybCA9IG5ldyBVUkwoZmlsZU5hbWUpOwotCQkJUGF0aCBwID0gbmV3IFBhdGgodXJsLmdldEZpbGUoKSk7Ci0JCQl4c2xGaWxlTmFtZSA9IChuZXcgUGF0aChmaWxlTmFtZSkpLmxhc3RTZWdtZW50KCk7Ci0KLQkJCVN0cmluZyBpZFN0cmluZyA9IHN0cmluZ3NbMV07Ci0JCQlpZCA9IEludGVnZXIucGFyc2VJbnQoaWRTdHJpbmcpOwotCQkJU3RyaW5nIHBjID0gc3RyaW5nc1syXTsKLQkJCWxpbmVOdW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50KHBjKTsKLQkJCVN0cmluZyBzYWZlbmFtZSA9IHN0cmluZ3NbM107Ci0KLQkJCWludCB0aGVJbmRleDsKLQkJCXdoaWxlICgodGhlSW5kZXggPSBzYWZlbmFtZS5pbmRleE9mKCIlQF9QSVBFX0AlIikpICE9IC0xKSAvLyROT04tTkxTLTEkCi0JCQl7Ci0JCQkJc2FmZW5hbWUgPSBzYWZlbmFtZS5zdWJzdHJpbmcoMCwgdGhlSW5kZXgpICsgInwiICsgc2FmZW5hbWUuc3Vic3RyaW5nKHRoZUluZGV4ICsgIiVAX1BJUEVfQCUiLmxlbmd0aCgpLCBzYWZlbmFtZS5sZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCi0JCQluYW1lID0gcC5sYXN0U2VnbWVudCgpICsgIiAiICsgc2FmZW5hbWU7IC8vJE5PTi1OTFMtMSQKLQkJCQotCQkJdmFyaWFibGVzID0gbmV3IFhTTFZhcmlhYmxlW3N0cmluZ3MubGVuZ3RoLTRdOwotCQkJZm9yIChpbnQgaT0wO2k8dmFyaWFibGVzLmxlbmd0aDtpKyspCi0JCQl7Ci0JCQkJaW50IHZhcklkID0gSW50ZWdlci5wYXJzZUludChzdHJpbmdzW2krNF0pOwotCQkJCXRyeQotCQkJCXsKLQkJCQkJWFNMVmFyaWFibGUgdmFyID0gZGVidWdUYXJnZXQuZ2V0VmFyaWFibGUodmFySWQpOwotCQkJCQl2YXJpYWJsZXNbaV0gPSB2YXI7Ci0JCQkJfQotCQkJCWNhdGNoIChEZWJ1Z0V4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHVibGljIElUaHJlYWQgZ2V0VGhyZWFkKCkKLQl7Ci0JCXJldHVybiB4c2xUaHJlYWQ7Ci0JfQotCi0JcHVibGljIElWYXJpYWJsZVtdIGdldFZhcmlhYmxlcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIHZhcmlhYmxlczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNWYXJpYWJsZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiB2YXJpYWJsZXMubGVuZ3RoID4gMDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsaW5lTnVtYmVyOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0Q2hhclN0YXJ0KCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcHVibGljIGludCBnZXRDaGFyRW5kKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbmFtZSArIE1lc3NhZ2VzLlhTTFN0YWNrRnJhbWVfNSArIGxpbmVOdW1iZXI7IAotCX0KLQotCXB1YmxpYyBJUmVnaXN0ZXJHcm91cFtdIGdldFJlZ2lzdGVyR3JvdXBzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNSZWdpc3Rlckdyb3VwcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBJbnRvKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5jYW5TdGVwSW50bygpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBPdmVyKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5jYW5TdGVwT3ZlcigpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBSZXR1cm4oKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmNhblN0ZXBSZXR1cm4oKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1N0ZXBwaW5nKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5pc1N0ZXBwaW5nKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RlcEludG8oKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldFRocmVhZCgpLnN0ZXBJbnRvKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RlcE92ZXIoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldFRocmVhZCgpLnN0ZXBPdmVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RlcFJldHVybigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0VGhyZWFkKCkuc3RlcFJldHVybigpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblJlc3VtZSgpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuY2FuUmVzdW1lKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3VzcGVuZCgpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuY2FuU3VzcGVuZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzU3VzcGVuZGVkKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5pc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlc3VtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0VGhyZWFkKCkucmVzdW1lKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3VzcGVuZCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0VGhyZWFkKCkuc3VzcGVuZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblRlcm1pbmF0ZSgpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuY2FuVGVybWluYXRlKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNUZXJtaW5hdGVkKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5pc1Rlcm1pbmF0ZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXJtaW5hdGUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldFRocmVhZCgpLnRlcm1pbmF0ZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHRoaXMgc3RhY2sgZnJhbWUgaXMgYXNzb2NpYXRlZCB3aXRoLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U291cmNlTmFtZSgpCi0JewotCQlyZXR1cm4geHNsRmlsZU5hbWU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0JewotCQlpZiAob2JqIGluc3RhbmNlb2YgWFNMU3RhY2tGcmFtZSkKLQkJewotCQkJWFNMU3RhY2tGcmFtZSBzZiA9IChYU0xTdGFja0ZyYW1lKSBvYmo7Ci0JCQlyZXR1cm4gc2YuaWQgPT0gaWQ7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBpbnQgaGFzaENvZGUoKQotCXsKLQkJcmV0dXJuIGdldFNvdXJjZU5hbWUoKS5oYXNoQ29kZSgpICsgaWQ7Ci0JfQotCi0JcHJvdGVjdGVkIGludCBnZXRJZGVudGlmaWVyKCkKLQl7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lTnVtYmVyKQotCXsKLQkJdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRWYXJpYWJsZXMoSVZhcmlhYmxlW10gdmFyaWFibGVzKQotCXsKLQkJdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVGhyZWFkLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xUaHJlYWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyZjE2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xUaHJlYWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklTdGFja0ZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVRocmVhZDsKLQotcHVibGljIGNsYXNzIFhTTFRocmVhZCBleHRlbmRzIFhTTERlYnVnRWxlbWVudCBpbXBsZW1lbnRzIElUaHJlYWQKLXsKLQotCS8qKgotCSAqIEJyZWFrcG9pbnRzIHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZCBhdCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lLgotCSAqLwotCXByaXZhdGUgSUJyZWFrcG9pbnRbXSBmQnJlYWtwb2ludHM7Ci0KLQkvKioKLQkgKiBXaGV0aGVyIHRoaXMgdGhyZWFkIGlzIHN0ZXBwaW5nCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGZTdGVwcGluZyA9IGZhbHNlOwotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyB0aHJlYWQgZm9yIHRoZSBnaXZlbiB0YXJnZXQKLQkgKi8KLQlwdWJsaWMgWFNMVGhyZWFkKElEZWJ1Z1RhcmdldCB0YXJnZXQpCi0JewotCQlzdXBlcih0YXJnZXQpOwotCX0KLQotCXB1YmxpYyBJU3RhY2tGcmFtZVtdIGdldFN0YWNrRnJhbWVzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlpZiAoaXNTdXNwZW5kZWQoKSkKLQkJewotCQkJcmV0dXJuICgoSVhTTERlYnVnVGFyZ2V0KSBnZXREZWJ1Z1RhcmdldCgpKS5nZXRTdGFja0ZyYW1lcygpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcmV0dXJuIG5ldyBJU3RhY2tGcmFtZVswXTsKLQkJfQotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc1N0YWNrRnJhbWVzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gaXNTdXNwZW5kZWQoKTsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFByaW9yaXR5KCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwdWJsaWMgSVN0YWNrRnJhbWUgZ2V0VG9wU3RhY2tGcmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJSVN0YWNrRnJhbWVbXSBmcmFtZXMgPSBnZXRTdGFja0ZyYW1lcygpOwotCQlpZiAoZnJhbWVzLmxlbmd0aCA+IDApCi0JCXsKLQkJCXJldHVybiBmcmFtZXNbMF07Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gIlRocmVhZFsxXSI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSUJyZWFrcG9pbnRbXSBnZXRCcmVha3BvaW50cygpCi0JewotCQlpZiAoZkJyZWFrcG9pbnRzID09IG51bGwpCi0JCXsKLQkJCXJldHVybiBuZXcgSUJyZWFrcG9pbnRbMF07Ci0JCX0KLQkJcmV0dXJuIGZCcmVha3BvaW50czsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSBicmVha3BvaW50cyB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQgYXQsIG9yIDxjb2RlPm51bGw8L2NvZGU+Ci0JICogaWYgbm9uZS4KLQkgKiAKLQkgKiBAcGFyYW0gYnJlYWtwb2ludHMKLQkgKiAgICAgICAgICAgIHRoZSBicmVha3BvaW50cyB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQgYXQsIG9yCi0JICogICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJyZWFrcG9pbnRzKElCcmVha3BvaW50W10gYnJlYWtwb2ludHMpCi0JewotCQlmQnJlYWtwb2ludHMgPSBicmVha3BvaW50czsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5SZXN1bWUoKQotCXsKLQkJcmV0dXJuIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3VzcGVuZCgpCi0JewotCQlyZXR1cm4gIWlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNTdXNwZW5kZWQoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCkuaXNTdXNwZW5kZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXN1bWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldERlYnVnVGFyZ2V0KCkucmVzdW1lKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3VzcGVuZCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0RGVidWdUYXJnZXQoKS5zdXNwZW5kKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3RlcEludG8oKQotCXsKLQkJcmV0dXJuIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3RlcE92ZXIoKQotCXsKLQkJcmV0dXJuIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3RlcFJldHVybigpCi0JewotCQlyZXR1cm4gaXNTdXNwZW5kZWQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1N0ZXBwaW5nKCkKLQl7Ci0JCXJldHVybiBmU3RlcHBpbmc7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RlcEludG8oKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCSgoSVhTTERlYnVnVGFyZ2V0KSBnZXREZWJ1Z1RhcmdldCgpKS5zdGVwSW50bygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBPdmVyKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQkoKElYU0xEZWJ1Z1RhcmdldCkgZ2V0RGVidWdUYXJnZXQoKSkuc3RlcE92ZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwUmV0dXJuKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQkoKElYU0xEZWJ1Z1RhcmdldCkgZ2V0RGVidWdUYXJnZXQoKSkuc3RlcFJldHVybigpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblRlcm1pbmF0ZSgpCi0JewotCQlyZXR1cm4gIWlzVGVybWluYXRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzVGVybWluYXRlZCgpCi0JewotCQlyZXR1cm4gZ2V0RGVidWdUYXJnZXQoKS5pc1Rlcm1pbmF0ZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXJtaW5hdGUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldERlYnVnVGFyZ2V0KCkudGVybWluYXRlKCk7Ci0JfQotCi0JLyoqCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFN0ZXBwaW5nKGJvb2xlYW4gc3RlcHBpbmcpCi0JewotCQlmU3RlcHBpbmcgPSBzdGVwcGluZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xWYWx1ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFsdWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwN2YwYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xWYWx1ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjE0MjM1IC0gTm9kZSBMaXN0IGV4cGFuc2lvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhcmlhYmxlOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgWFNMVmFsdWUgZXh0ZW5kcyBYU0xEZWJ1Z0VsZW1lbnQgaW1wbGVtZW50cyBJVmFsdWUKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERVNFVCA9ICJub2Rlc2V0IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9OT0RFU0VUID0gIjxFTVBUWSBOT0RFU0VUPiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIFN0cmluZyBmVmFsdWU7Ci0JcHJpdmF0ZSBTdHJpbmcgdHlwZTsKLQlwcml2YXRlIGJvb2xlYW4gaGFzVmFyaWFibGVzOwotCXByaXZhdGUgTm9kZSBhY3R1YWxOb2RlOwotCi0JLyoqCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBYU0xWYWx1ZShJRGVidWdUYXJnZXQgdGFyZ2V0LCBTdHJpbmcgdHlwZSwgTm9kZSBub2RlKSB7Ci0JCXN1cGVyKHRhcmdldCk7Ci0JCWFjdHVhbE5vZGUgPSBub2RlOwotCQlTdHJpbmcgdmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlpZiAobm9kZS5nZXROb2RlVmFsdWUoKSAhPSBudWxsKSB7Ci0JCQl2YWx1ZSA9IG5vZGUuZ2V0Tm9kZVZhbHVlKCk7Ci0JCX0KLQkJaW5pdCh0YXJnZXQsIHR5cGUsIHZhbHVlKTsKLQl9Ci0JcHVibGljIFhTTFZhbHVlKElEZWJ1Z1RhcmdldCB0YXJnZXQsIFN0cmluZyB0eXBlLCBTdHJpbmcgdmFsdWUpCi0JewotCQlzdXBlcih0YXJnZXQpOwotCQlpbml0KHRhcmdldCwgdHlwZSwgdmFsdWUpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgaW5pdChJRGVidWdUYXJnZXQgdGFyZ2V0LCBTdHJpbmcgdHlwZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCXRoaXMudHlwZSA9IHR5cGU7Ci0JCWZWYWx1ZSA9IHZhbHVlOwotCX0KLQkKLQotCi0JcHVibGljIFN0cmluZyBnZXRSZWZlcmVuY2VUeXBlTmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIHR5cGU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZVN0cmluZygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJaWYgKCJzdHJpbmciLmVxdWFscyh0eXBlKSkgLy8kTk9OLU5MUy0xJAotCQkJcmV0dXJuICInIitmVmFsdWUrIiciOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmV0dXJuIGZWYWx1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0FsbG9jYXRlZCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIElWYXJpYWJsZVtdIGdldFZhcmlhYmxlcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJTGlzdDxJVmFyaWFibGU+IHZhcmlhYmxlTGlzdCA9IG5ldyBBcnJheUxpc3Q8SVZhcmlhYmxlPigpOwotCQlpZiAoYWN0dWFsTm9kZSAhPSBudWxsKSB7Ci0JCQlpZiAoYWN0dWFsTm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHsKLQkJCQlnZXRBdHRyaWJ1dGVzKHZhcmlhYmxlTGlzdCwgYWN0dWFsTm9kZSk7Ci0JCQl9Ci0JCQl2YXJpYWJsZUxpc3QuYWRkQWxsKGdldE5vZGVMaXN0VmFyaWFibGVzKGFjdHVhbE5vZGUuZ2V0Q2hpbGROb2RlcygpKSk7Ci0JCX0KLQkJaWYgKHR5cGUuZXF1YWxzKE5PREVTRVQpICYmICEoZlZhbHVlLmVxdWFscyhFTVBUWV9OT0RFU0VUKSkpIHsgCi0JCQljcmVhdGVOb2RlU2V0VmFyaWFibGVzKHZhcmlhYmxlTGlzdCk7Ci0JCX0KLQkJSVZhcmlhYmxlW10gdmFyaWFibGVzID0gbmV3IElWYXJpYWJsZVt2YXJpYWJsZUxpc3Quc2l6ZSgpXTsKLQkJdmFyaWFibGVMaXN0LnRvQXJyYXkodmFyaWFibGVzKTsKLQkJcmV0dXJuIHZhcmlhYmxlczsKLQl9Ci0JcHJpdmF0ZSB2b2lkIGNyZWF0ZU5vZGVTZXRWYXJpYWJsZXMoTGlzdDxJVmFyaWFibGU+IHZhcmlhYmxlTGlzdCkgewotCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGJ1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlOb2RlTGlzdCBub2RlTGlzdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGJ1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkJU3RyaW5nIG5vZGVTZXQgPSAiPG5vZGVzZXQ+IiArIGZWYWx1ZSArICI8L25vZGVzZXQ+IjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlJbnB1dFN0cmVhbSBpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShub2RlU2V0LmdldEJ5dGVzKCkpOwotCQkJRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZShpcyk7Ci0JCQlOb2RlIGZpcnN0Q2hpbGQgPSBkb2MuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJbm9kZUxpc3QgPSBmaXJzdENoaWxkLmdldENoaWxkTm9kZXMoKTsKLQkJCXZhcmlhYmxlTGlzdC5hZGRBbGwoZ2V0Tm9kZUxpc3RWYXJpYWJsZXMobm9kZUxpc3QpKTsKLQkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQlwcml2YXRlIExpc3Q8SVZhcmlhYmxlPiBnZXROb2RlTGlzdFZhcmlhYmxlcyhOb2RlTGlzdCBub2RlTGlzdCkgewotCQlMaXN0PElWYXJpYWJsZT4gdmFyaWFibGVMaXN0ID0gbmV3IEFycmF5TGlzdDxJVmFyaWFibGU+KCk7Ci0JCWlmIChub2RlTGlzdCAhPSBudWxsKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIG5vZGUgPSBub2RlTGlzdC5pdGVtKGkpOwotCQkJCUlWYXJpYWJsZSB2YXJpYWJsZSA9IG5ldyBOb2RlTGlzdFZhcmlhYmxlKGdldERlYnVnVGFyZ2V0KCksIG5vZGUpOwotCQkJCXZhcmlhYmxlTGlzdC5hZGQodmFyaWFibGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiB2YXJpYWJsZUxpc3Q7Ci0JfQotCXByaXZhdGUgdm9pZCBnZXRBdHRyaWJ1dGVzKExpc3Q8SVZhcmlhYmxlPiB2YXJpYWJsZUxpc3QsIE5vZGUgbm9kZSkgewotCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlmb3IgKGludCBpdGVtID0gMDsgaXRlbSA8IG5vZGVNYXAuZ2V0TGVuZ3RoKCk7IGl0ZW0rKykgewotCQkJQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cikgbm9kZU1hcC5pdGVtKGl0ZW0pOwotCQkJSVZhcmlhYmxlIHZhcmlhYmxlID0gbmV3IE5vZGVMaXN0VmFyaWFibGUoZ2V0RGVidWdUYXJnZXQoKSwgYXR0cmlidXRlKTsKLQkJCXZhcmlhYmxlTGlzdC5hZGQodmFyaWFibGUpOwotCQl9Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzVmFyaWFibGVzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQloYXNWYXJpYWJsZXMgPSBmYWxzZTsKLQkJaWYgKGFjdHVhbE5vZGUgIT0gbnVsbCkgewotCQkJaGFzVmFyaWFibGVzID0gYWN0dWFsTm9kZS5oYXNDaGlsZE5vZGVzKCk7Ci0JCX0gZWxzZSAJaWYgKHR5cGUuZXF1YWxzKE5PREVTRVQpKSB7IAotCQkJaGFzVmFyaWFibGVzID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWhhc1ZhcmlhYmxlcyA9IGZhbHNlOwotCQl9Ci0JCWlmIChmVmFsdWUuZXF1YWxzKEVNUFRZX05PREVTRVQpKSB7Ci0JCQloYXNWYXJpYWJsZXMgPSBmYWxzZTsKLQkJfQotCQkKLQkJcmV0dXJuIGhhc1ZhcmlhYmxlczsgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFyaWFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFZhcmlhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOGQwOTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFyaWFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYXJpYWJsZTsKLQotcHVibGljIGNsYXNzIFhTTFZhcmlhYmxlIGV4dGVuZHMgWFNMRGVidWdFbGVtZW50IGltcGxlbWVudHMgSVZhcmlhYmxlCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfU0NPUEUgPSAiTCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUVU5ORUxfU0NPUEUgPSAiVCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHTE9CQUxfU0NPUEUgPSAiRyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgZmluYWwgaW50IGlkOwotCXByaXZhdGUgU3RyaW5nIGZOYW1lOwotCXByaXZhdGUgU3RyaW5nIHNjb3BlOwotCi0JcHVibGljIFhTTFZhcmlhYmxlKElEZWJ1Z1RhcmdldCB0YXJnZXQsIGludCBpZCkKLQl7Ci0JCXN1cGVyKHRhcmdldCk7Ci0JCXRoaXMuaWQgPSBpZDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldElkKCkKLQl7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQlwdWJsaWMgSVZhbHVlIGdldFZhbHVlKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gKChJWFNMRGVidWdUYXJnZXQpIGdldERlYnVnVGFyZ2V0KCkpLmdldFZhcmlhYmxlVmFsdWUodGhpcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0JewotCQl0aGlzLmZOYW1lID0gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBmTmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZVR5cGVOYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlpZiAoR0xPQkFMX1NDT1BFLmVxdWFscyhzY29wZSkpCi0JCQlyZXR1cm4gImdsb2JhbCI7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuICJsb2NhbCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNWYWx1ZUNoYW5nZWQoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgZXhwcmVzc2lvbikgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbHVlKElWYWx1ZSB2YWx1ZSkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCX0KLQotCXB1YmxpYyBib29sZWFuIHN1cHBvcnRzVmFsdWVNb2RpZmljYXRpb24oKQotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHZlcmlmeVZhbHVlKFN0cmluZyBleHByZXNzaW9uKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB2ZXJpZnlWYWx1ZShJVmFsdWUgdmFsdWUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRTY29wZShTdHJpbmcgc2NvcGUpCi0JewotCQl0aGlzLnNjb3BlID0gc2NvcGU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTY29wZSgpCi0JewotCQlyZXR1cm4gc2NvcGU7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUxNWExYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLWRlYnVnZ2VyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYTY1ODQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYTlmMzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNUdWUgRmViIDEwIDA1OjI0OjU2IEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzODQwNDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbjtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9TYXhvbkF0dHJpYnV0ZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9TYXhvbkF0dHJpYnV0ZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY0YWIwZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vU2F4b25BdHRyaWJ1dGVzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotQUxMT1dfRVhURVJOQUxfRlVOQ1RJT05TPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9hbGxvdy1leHRlcm5hbC1mdW5jdGlvbnMKLUFMTE9XX0VYVEVSTkFMX0ZVTkNUSU9OUy5UWVBFPWJvb2xlYW4KLUFMTE9XX0VYVEVSTkFMX0ZVTkNUSU9OUy5ERVNDPXRydWUgaWYgdGhlIHN0eWxlc2hlZXQgYWxsb3dzIGV4dGVybmFsIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQuIERlZmF1bHQgaXMgdHJ1ZS4gVGhlIHNldHRpbmcgZmFsc2UgaXMgcmVjb21tZW5kZWQgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdW50cnVzdGVkIHN0eWxlc2hlZXRzIG1heSBiZSBleGVjdXRlZC4gU2V0dGluZyB0aGlzIHZhbHVlIHRvIGZhbHNlICBhbHNvIGRpc2FibGVzIHVzZXItZGVmaW5lZCBleHRlbnNpb24gZWxlbWVudHMsIHRvZ2V0aGVyIHdpdGggdGhlIHdyaXRpbmcgb2YgbXVsdGlwbGUgb3V0cHV0IGZpbGVzLCBhbGwgb2Ygd2hpY2ggY2Fycnkgc2ltaWxhciBzZWN1cml0eSByaXNrcy4KLQotVFJBQ0VfRVhURVJOQUxfRlVOQ1RJT05TPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS90cmFjZS1leHRlcm5hbC1mdW5jdGlvbnMKLVRSQUNFX0VYVEVSTkFMX0ZVTkNUSU9OUy5UWVBFPWJvb2xlYW4KLVRSQUNFX0VYVEVSTkFMX0ZVTkNUSU9OUy5ERVNDPXRydWUgaWYgdGhlIHRyYWNpbmcgb2YgY2FsbHMgdG8gZXh0ZXJuYWwgSmF2YSBtZXRob2RzIGlzIHJlcXVpcmVkLiBEZWZhdWx0IGlzIGZhbHNlLiBUaGlzIHN3aXRjaCBpcyB1c2VmdWwgd2hlbiBhbmFseXppbmcgd2h5IFNheG9uIGZhaWxzIHRvIGZpbmQgYSBKYXZhIG1ldGhvZCB0byBtYXRjaCBhbiBleHRlbnNpb24gZnVuY3Rpb24gY2FsbCBpbiB0aGUgc3R5bGVzaGVldCwgb3Igd2h5IGl0IGNob29zZXMgb25lIG1ldGhvZCBvdmVyIGFub3RoZXIgd2hlbiBzZXZlcmFsIGFyZSBhdmFpbGFibGUuIFRoZSB0cmFjZSBvdXRwdXQgaXMgc2VudCB0byBTeXN0ZW0uZXJyLgotCi1USU1JTkc9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3RpbWluZwotVElNSU5HLlRZUEU9Ym9vbGVhbgotVElNSU5HLkRFU0M9dHJ1ZSBpZiBiYXNpYyB0aW1pbmcgaW5mb3JtYXRpb24gaXMgdG8gYmUgb3V0cHV0IHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQgc3RyZWFtLgotCi1UUkVFX01PREVMPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS90cmVlTW9kZWwKLVRSRUVfTU9ERUwuVFlQRT1pbnQKLVRSRUVfTU9ERUwuREVTQz1CdWlsZGVyLlNUQU5EQVJEX1RSRUUgb3IgQnVpbGRlci5USU5ZX1RSRUUuIFNlbGVjdHMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNheG9uIHRyZWUgbW9kZWwuIFRoZSBkZWZhdWx0IGlzIEJ1aWxkZXIuVElOWV9UUkVFLgotCi1UUkFDRV9MSVNURU5FUj1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvdHJhY2VMaXN0ZW5lcgotVFJBQ0VfTElTVEVORVIuVFlQRT1vYmplY3QKLVRSQUNFX0xJU1RFTkVSLkRFU0M9YW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIG5ldC5zZi5zYXhvbi50cmFjZS5UcmFjZUxpc3RlbmVyLiBUaGlzIG9iamVjdCB3aWxsIGJlIG5vdGlmaWVkIG9mIHNpZ25pZmljYW50IGV2ZW50cyBvY2N1cnJpbmcgZHVyaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbiwgZm9yIHRyYWNpbmcgb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotCi1MSU5FX05VTUJFUklORz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvbGluZW51bWJlcmluZwotTElORV9OVU1CRVJJTkcuVFlQRT1ib29sZWFuCi1MSU5FX05VTUJFUklORy5ERVNDPWluZGljYXRlcyB3aGV0aGVyIGxpbmUgbnVtYmVycyBhcmUgdG8gYmUgbWFpbnRhaW5lZCBmb3IgdGhlIHNvdXJjZSBkb2N1bWVudC4gVGhpcyB3aWxsIG5vdCBiZSBwb3NzaWJsZSBpZiB0aGUgc291cmNlIGRvY3VtZW50IGlzIHN1cHBsaWVkIGFzIGEgRE9NLiBUaGUgbGluZSBudW1iZXJzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHRyYWNpbmcgaW50ZXJmYWNlLCBhbmQgYWxzbyB2aWEgdGhlIHNheG9uOmxpbmUtbnVtYmVyKCkgZXh0ZW5zaW9uIGZ1bmN0aW9uLgotCi1SRUNPVkVSWV9QT0xJQ1k9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3JlY292ZXJ5UG9saWN5Ci1SRUNPVkVSWV9QT0xJQ1kuVFlQRT1pbnQKLVJFQ09WRVJZX1BPTElDWS5ERVNDPUFuIEludGVnZXIuIEluZGljYXRlcyBob3cgZHluYW1pYyBlcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQuIE9uZSBvZiB0aGUgdmFsdWVzIChkZWZpbmVkIGFzIGNvbnN0YW50cyBpbiB0aGUgQ29udHJvbGxlciBjbGFzcykgUkVDT1ZFUl9TSUxFTlRMWSwgUkVDT1ZFUl9XSVRIX1dBUk5JTkdTLCBvciBET19OT1RfUkVDT1ZFUikuCi0KLU1FU1NBR0VfRU1JVFRFUl9DTEFTUz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvbWVzc2FnZUVtaXR0ZXJDbGFzcwotTUVTU0FHRV9FTUlUVEVSX0NMQVNTLlRZUEU9Y2xhc3MKLU1FU1NBR0VfRU1JVFRFUl9DTEFTUy5ERVNDPVRoZSBmdWxsIG5hbWUgb2YgYSBzYXhvbiBlbWl0dGVyIGNsYXNzLiB0aGF0IGltcGxlbWVudHMgdGhlIG5ldC5zZi5zYXhvbi5vdXRwdXQuRW1pdHRlciBpbnRlcmZhY2U7IHRoZSBjbGFzcyB3aWxsIGJlIHVzZWQgdG8gZm9ybWF0IHRoZSBvdXRwdXQgb2YgdGhlIHhzbDptZXNzYWdlIGluc3RydWN0aW9uLgotCi1TT1VSQ0VfUEFSU0VSX0NMQVNTPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9zb3VyY2VQYXJzZXJDbGFzcwotU09VUkNFX1BBUlNFUl9DTEFTUy5UWVBFPWNsYXNzCi1TT1VSQ0VfUEFSU0VSX0NMQVNTLkRFU0M9VGhlIGZ1bGwgbmFtZSBvZiBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgb3JnLnhtbC5zYXguWE1MUmVhZGVyIGludGVyZmFjZTsgdGhlIGNsYXNzIHdpbGwgYmUgdXNlZCB0byBwYXJzZSBzb3VyY2UgZG9jdW1lbnRzICh0aGF0IGlzLCB0aGUgcHJpbmNpcGFsIHNvdXJjZSBkb2N1bWVudCBwbHVzIGFueSBzZWNvbmRhcnkgc291cmNlIGRvY3VtZW50cyByZWFkIHVzaW5nIHRoZSBkb2N1bWVudCgpIGZ1bmN0aW9uKQotCi1TVFlMRV9QQVJTRVJfQ0xBU1M9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3N0eWxlUGFyc2VyQ2xhc3MKLVNUWUxFX1BBUlNFUl9DTEFTUy5UWVBFPWNsYXNzCi1TVFlMRV9QQVJTRVJfQ0xBU1MuREVTQz1UaGUgZnVsbCBuYW1lIG9mIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBvcmcueG1sLnNheC5YTUxSZWFkZXIgaW50ZXJmYWNlOyB0aGUgY2xhc3Mgd2lsbCBiZSB1c2VkIHRvIHBhcnNlIHN0eWxlc2hlZXQgZG9jdW1lbnRzICh0aGF0IGlzLCB0aGUgcHJpbmNpcGFsIHN0eWxlc2hlZXQgbW9kdWxlIHBsdXMgYW55IHNlY29uZGFyeSBzb3VyY2UgZG9jdW1lbnRzIHJlYWQgdXNpbmcgeHNsOmluY2x1ZGUgb3IgeHNsOmltcG9ydCkKLQotT1VUUFVUX1VSSV9SRVNPTFZFUj1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvb3V0cHV0VVJJUmVzb2x2ZXIKLU9VVFBVVF9VUklfUkVTT0xWRVIuVFlQRT1vYmplY3QKLU9VVFBVVF9VUklfUkVTT0xWRVIuREVTQz1BbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgbmV0LnNmLnNheG9uLk91dHB1dFVSSVJlc29sdmVyOyB0aGlzIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gcmVzb2x2ZSBVUklzIG9mIHNlY29uZGFyeSByZXN1bHQgZG9jdW1lbnRzIHNwZWNpZmllZCBpbiB0aGUgaHJlZiBhdHRyaWJ1dGUgb2YgdGhlIHhzbDpyZXN1bHQtZG9jdW1lbnQgIGluc3RydWN0aW9uCi0KLURURF9WQUxJREFUSU9OPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS92YWxpZGF0aW9uCi1EVERfVkFMSURBVElPTi5UWVBFPWJvb2xlYW4KLURURF9WQUxJREFUSU9OLkRFU0M9SW5kaWNhdGVzIHdoZXRoZXIgdGhlIFhNTCBwYXJzZXIgc2hvdWxkIGJlIGFza2VkIHRvIHZhbGlkYXRlIHNvdXJjZSBkb2N1bWVudHMgYWdhaW5zdCB0aGVpciBEVEQuIFRoaXMgYXBwbGllcyB0byB0aGUgaW5pdGlhbCBzb3VyY2UgZG9jdW1lbnQgYW5kIGFueSBzb3VyY2UgZG9jdW1lbnRzIHJlYWQgdXNpbmcgdGhlIGRvY3VtZW50KCkgZnVuY3Rpb24sIHVubGVzcyBoYW5kbGVkIGJ5IGEgdXNlci13cml0dGVuIFVSSVJlc29sdmVyLgotCi1WQUxJREFUSU9OX1dBUk5JTkdTPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS92YWxpZGF0aW9uLXdhcm5pbmdzCi1WQUxJREFUSU9OX1dBUk5JTkdTLlRZUEU9Ym9vbGVhbgotVkFMSURBVElPTl9XQVJOSU5HUy5ERVNDPVRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHZhbGlkYXRpb24gZXJyb3JzIGluIHJlc3VsdCBkb2N1bWVudHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgZmF0YWwuIEJ5IGRlZmF1bHQgdGhleSBhcmUgZmF0YWw7IHdpdGggdGhpcyBvcHRpb24gc2V0LCB0aGV5IGFyZSB0cmVhdGVkIGFzIHdhcm5pbmdzLgotCi1TQ0hFTUFfVkFMSURBVElPTj1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvc2NoZW1hLXZhbGlkYXRpb24KLVNDSEVNQV9WQUxJREFUSU9OLlRZUEU9Ym9vbGVhbgotU0NIRU1BX1ZBTElEQVRJT04uREVTQz1UaGlzIGRldGVybWluZXMgd2hldGhlciBzb3VyY2UgZG9jdW1lbnRzIHNob3VsZCBiZSBwYXJzZWQgd2l0aCBzY2hlbWEtdmFsaWRhdGlvbiBlbmFibGVkLgotCi1WRVJTSU9OX1dBUk5JTkc9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3ZlcnNpb24td2FybmluZwotVkVSU0lPTl9XQVJOSU5HLlRZUEU9Ym9vbGVhbgotVkVSU0lPTl9XQVJOSU5HLkRFU0M9VGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgYSB3YXJuaW5nIHNob3VsZCBiZSBvdXRwdXQgd2hlbiBydW5uaW5nIGFuIFhTTFQgMi4wIHByb2Nlc3NvciBhZ2FpbnN0IGFuIFhTTFQgMS4wIHN0eWxlc2hlZXQuIFRoZSBYU0xUIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhpcyB0byBiZSBkb25lIGJ5IGRlZmF1bHQuCi0KLU5BTUVfUE9PTD1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvbmFtZVBvb2wKLU5BTUVfUE9PTC5UWVBFPW9iamVjdAotTkFNRV9QT09MLkRFU0M9QSBpbnN0YW5jZSBvZiBjbGFzcyBuZXQuc2Yuc2F4b24ub20uTmFtZVBvb2wuIEluZGljYXRlcyB0aGF0IHRoZSBzdXBwbGllZCBOYW1lUG9vbCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IChydW4tdGltZSkgTmFtZVBvb2wgYnkgYWxsIHN0eWxlc2hlZXRzIGNvbXBpbGVkICh1c2luZyBuZXdUZW1wbGF0ZXMoKSkgYWZ0ZXIgdGhpcyBjYWxsIG9uIHNldEF0dHJpYnV0ZS4gTm9ybWFsbHkgYSBzaW5nbGUgc3lzdGVtLWFsbG9jYXRlZCBOYW1lUG9vbCBpcyB1c2VkIGZvciBhbGwgc3R5bGVzaGVldHMgY29tcGlsZWQgd2hpbGUgdGhlIEphdmEgVk0gcmVtYWlucyBsb2FkZWQ7IHRoaXMgYXR0cmlidXRlIGFsbG93cyB1c2VyIGNvbnRyb2wgb3ZlciB0aGUgYWxsb2NhdGlvbiBvZiBOYW1lUG9vbHMuIE5vdGUgdGhhdCBzb3VyY2UgdHJlZXMgdXNlZCBhcyBpbnB1dCB0byBhIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYnVpbHQgdXNpbmcgdGhlIHNhbWUgTmFtZVBvb2wgdGhhdCBpcyB1c2VkIHdoZW4gdGhlIHN0eWxlc2hlZXQgaXMgY29tcGlsZWQ6IHRoaXMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSBpZiB0aGUgaW5wdXQgdG8gYSB0cmFuc2Zvcm1hdGlvbiBpcyBzdXBwbGllZCBhcyBhIFNBWFNvdXJjZSBvciBTdHJlYW1Tb3VyY2UgYnV0IGl0IGlzIHVuZGVyIHVzZXIgY29udHJvbCBpZiB5b3UgYnVpbGQgdGhlIHNvdXJjZSB0cmVlIHlvdXJzZWxmLgotCi1SRUNPR05JWkVfVVJJX1FVRVJZX1BBUkFNRVRFUlM9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3JlY29nbml6ZS11cmktcXVlcnktcGFyYW1ldGVycwotUkVDT0dOSVpFX1VSSV9RVUVSWV9QQVJBTUVURVJTLlRZUEU9Ym9vbGVhbgotUkVDT0dOSVpFX1VSSV9RVUVSWV9QQVJBTUVURVJTLkRFU0M9ZGV0ZXJtaW5lcyB3aGV0aGVyIHF1ZXJ5IHBhcmFtZXRlcnMgKHRoaW5ncyBhZnRlciAiPyIpXG5cCi0gaW4gYSBVUkkgcGFzc2VkIHRvIHRoZSBkb2N1bWVudCgpIG9yIGRvYygpIGZ1bmN0aW9uIGFyZSBzcGVjaWFsbHkgcmVjb2duaXplZCBieSB0aGUgc3lzdGVtIGRlZmF1bHQgVVJJUmVzb2x2ZXIuXG5cCi0gQWxsb3dlZCBwYXJhbWV0ZXJzIGluY2x1ZGUsIGZvciBleGFtcGxlIHZhbGlkYXRpb249c3RyaWN0IHRvIHBlcmZvcm0gc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBzdHJpcC1zcGFjZT15ZXNcblwKLSB0byBwZXJmb3JtIHN0cmlwcGluZyBvZiBhbGwgd2hpdGVzcGFjZS1vbmx5IHRleHQgbm9kZXMKLQotQ09MTEFUSU9OX1VSSV9SRVNPTFZFUj1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvY29sbGF0aW9uLXVyaS1yZXNvbHZlcgotQ09MTEFUSU9OX1VSSV9SRVNPTFZFUi5UWVBFPW9iamVjdAotQ09MTEFUSU9OX1VSSV9SRVNPTFZFUi5ERVNDPUEgbmV0LnNmLnNheG9uLnNvcnQuQ29sbGF0aW9uVVJJUmVzb2x2ZXIgdXNlZCB0byByZXNvbHZlIGNvbGxhdGlvbiBVUklzIHVzZWQgaW4gc3R5bGVzaGVldHMgY29tcGlsZWQgb3IgZXhlY3V0ZWQgdW5kZXIgdGhlXG5cCi0gY29udHJvbCBvZiB0aGlzIFRyYW5zZm9ybWVyRmFjdG9yeQotIAotQ09MTEVDVElPTl9VUklfUkVTT0xWRVI9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL2NvbGxlY3Rpb24tdXJpLXJlc29sdmVyCi1DT0xMRUNUSU9OX1VSSV9SRVNPTFZFUi5UWVBFPW9iamVjdAotQ09MTEVDVElPTl9VUklfUkVTT0xWRVIuREVTQz1BIG5ldC5zZi5zYXhvbi5zb3J0LkNvbGxlY3Rpb25VUklSZXNvbHZlciB1c2VkIHRvIHJlc29sdmUgY29sbGVjdGlvbiBVUklzIHVzZWQgaW4gY2FsbHMgb2YgdGhlIGNvbGxlY3Rpb24oKSBmdW5jdGlvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9TYXhvbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9TYXhvbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk3OTA3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vU2F4b25PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotSU5ERU5UX1NQQUNFUz17aHR0cDovL3NheG9uLnNmLm5ldC99aW5kZW50LXNwYWNlcwotSU5ERU5UX1NQQUNFUy5ERVNDPShpbnRlZ2VyIHZhbHVlKS5EZWZpbmVzIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHVzZWQgZm9yIGluZGVudGF0aW9uIG9mIG91dHB1dAotCi1VTkRFQ0xBUkVfTkFNRVNQQUNFUz17aHR0cDovL3NheG9uLnNmLm5ldC99dW5kZWNsYXJlLW5hbWVzcGFjZXMKLVVOREVDTEFSRV9OQU1FU1BBQ0VTLkRFU0M9aW5jbHVkZS1jb250ZW50LXR5cGUgPSAieWVzIiB8ICJubyIuIFRoaXMgYXR0cmlidXRlIGlzIGRlZmluZWQgaW4gWFNMVCAyLjAuIEluZGljYXRlcyBYTUwgMS4xIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXJlIHRvIGJlIG91dHB1dC4KLQotQ0hBUkFDVEVSX1JFUFJFU0VOVEFUSU9OPXtodHRwOi8vc2F4b24uc2YubmV0L31jaGFyYWN0ZXItcmVwcmVzZW50YXRpb24KLUNIQVJBQ1RFUl9SRVBSRVNFTlRBVElPTi5ERVNDPShyZXAxWztyZXAyXSkuIEluZGljYXRlcyB0aGUgcHJlZmVycmVkIHdheSBvZiByZXByZXNlbnRpbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gSFRNTCBhbmQgWE1MIG91dHB1dC4gcmVwMSBpcyBmb3IgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMTI4LTI1NiwgcmVwMiBmb3IgdGhvc2UgYWJvdmUgMjU2LgotCi1ORVhUX0lOX0NIQUlOPXtodHRwOi8vc2F4b24uc2YubmV0L31uZXh0LWluLWNoYWluCi1ORVhUX0lOX0NIQUlOLkRFU0M9KHVyaSkuIEluZGljYXRlcyB0aGF0IHRoZSBvdXRwdXQgaXMgdG8gYmUgcGlwZWQgaW50byBhbm90aGVyIFhTTFQgc3R5bGVzaGVldCB0byBwZXJmb3JtIGFub3RoZXIgdHJhbnNmb3JtYXRpb24uIFRoZSBhdXhpbGlhcnkgcHJvcGVydHkgTkVYVF9JTl9DSEFJTl9CQVNFX1VSSSByZWNvcmRzIHRoZSBiYXNlIFVSSSBvZiB0aGUgc3R5bGVzaGVldCBlbGVtZW50IHdoZXJlIHRoaXMgYXR0cmlidXRlIHdhcyBmb3VuZC4KLQotVFlQRV9JTkZPUk1BVElPTj17aHR0cDovL3NheG9uLnNmLm5ldC99dHlwZS1pbmZvcm1hdGlvbgotVFlQRV9JTkZPUk1BVElPTi5ERVNDPShub25lfHByZXNlcnZlfHN0cmljdHxsYXgpLiBJbmRpY2F0ZXMgdGhlIHZhbHVlIG9mIHRoZSB0eXBlLWluZm9ybWF0aW9uIGF0dHJpYnV0ZTogIm5vbmUiLCAicHJlc2VydmUiLCAic3RyaWN0IiwgImxheCIKLQotUkVRVUlSRV9XRUxMX0ZPUk1FRD17aHR0cDovL3NheG9uLnNmLm5ldC99cmVxdWlyZS13ZWxsLWZvcm1lZAotUkVRVUlSRV9XRUxMX0ZPUk1FRC5ERVNDPSh5ZXN8bm8pLiBJbmRpY2F0ZXMgd2hldGhlciBhIHVzZXItc3VwcGxpZWQgQ29udGVudEhhbmRsZXIgcmVxdWlyZXMgdGhlIHN0cmVhbSBvZiBTQVggZXZlbnRzIHRvIGJlIHdlbGwtZm9ybWVkICh0aGF0IGlzLCB0byBoYXZlIGEgc2luZ2xlIGVsZW1lbnQgbm9kZSBhbmQgbm8gdGV4dCBub2RlcyBhcyBjaGlsZHJlbiBvZiB0aGUgcm9vdCkuIFRoZSBkZWZhdWx0IGlzICJubyIuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ0ZGRlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotc291cmNlLi4gPSBzcmMtZGVidWdnZXIvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIFNheG9uQXR0cmlidXRlcy5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIFNheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmIzY2Q3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbgotQnVuZGxlLU5hbWUuMCA9IFhTTCBTYXhvbiBTdXBwb3J0Ci1wcm9jZXNzb3JUeXBlLmxhYmVsLjAgPSBTYXhvbiAoWFNMVCAyLjApCi1wcm9jZXNzb3JUeXBlLmxhYmVsLjEgPSBTYXhvbiAoWFNMVCAxLjApCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotdHJhbnNmb3JtZXJGYWN0b3J5U2F4b242ID0gU2F4b24gNgotdHJhbnNmb3JtZXJTYXhvblhTTFQyID0gU2F4b24gNwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJlMGE4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Ci08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZSI+Ci0gICAgICA8cHJvY2Vzc29yVHlwZQotICAgICAgICAgICAgYXR0cmlidXRlUHJvcGVydGllcz0iU2F4b25BdHRyaWJ1dGVzLnByb3BlcnRpZXMiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbl8xXzAucHJvY2Vzc29yVHlwZSIKLSAgICAgICAgICAgIGxhYmVsPSIlcHJvY2Vzc29yVHlwZS5sYWJlbC4xIgotICAgICAgICAgICAgb3V0cHV0UHJvcGVydGllcz0iU2F4b25PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMiPgotICAgICAgICAgPHRyYW5zZm9ybWVyRmFjdG9yeQotICAgICAgICAgICAgICAgZmFjdG9yeUNsYXNzPSJjb20uaWNsLnNheG9uLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiCi0gICAgICAgICAgICAgICBuYW1lPSIldHJhbnNmb3JtZXJGYWN0b3J5U2F4b242Ij4KLSAgICAgICAgIDwvdHJhbnNmb3JtZXJGYWN0b3J5PgotICAgICAgPC9wcm9jZXNzb3JUeXBlPgotICAgICAgPHByb2Nlc3NvclR5cGUKLSAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXM9IlNheG9uQXR0cmlidXRlcy5wcm9wZXJ0aWVzIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuc2F4b24ucHJvY2Vzc29yVHlwZSIKLSAgICAgICAgICAgIGxhYmVsPSIlcHJvY2Vzc29yVHlwZS5sYWJlbC4wIgotICAgICAgICAgICAgb3V0cHV0UHJvcGVydGllcz0iU2F4b25PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMiPgotICAgICAgICAgPHRyYW5zZm9ybWVyRmFjdG9yeQotICAgICAgICAgICAgICAgZmFjdG9yeUNsYXNzPSJuZXQuc2Yuc2F4b24uVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIKLSAgICAgICAgICAgICAgIG5hbWU9IiV0cmFuc2Zvcm1lclNheG9uWFNMVDIiPgotICAgICAgICAgPC90cmFuc2Zvcm1lckZhY3Rvcnk+Ci0gICAgICA8L3Byb2Nlc3NvclR5cGU+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vc3JjLWRlYnVnZ2VyL1JFQURNRS50eHQgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vc3JjLWRlYnVnZ2VyL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNjNhNTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3NyYy1kZWJ1Z2dlci9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotSnVzdCBhIHBsYWNlaG9sZGVyIHRvIGVuc3VyZSBzcmMgZm9sZGVyIGFwcGVhcnMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk2YjJmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvYXBhY2hlL3hwYXRoLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC9zc2UvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NjJkN2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpLy5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc5MmZiYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLnNldHRpbmdzLy5hcGlfZmlsdGVycworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPGNvbXBvbmVudCBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aSIgdmVyc2lvbj0iMiI+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL3Byb3Zpc2lvbmFsL2NvbnRlbnRhc3Npc3QvQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwiPgotICAgICAgICA8ZmlsdGVyIGlkPSI1NzY3MjA5MDkiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYxZWQxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotI0ZyaSBBcHIgMTAgMTk6NTE6MTUgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkV4ZW1wdEV4Y2VwdGlvbkFuZFRocm93YWJsZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxY2ExNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jVHVlIFNlcCAyMiAwMjoyMjoxOCBHTVQgMjAwOQotY29tcGlsZXJzLmYudW5yZXNvbHZlZC1mZWF0dXJlcz0xCi1jb21waWxlcnMuZi51bnJlc29sdmVkLXBsdWdpbnM9MQotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0xCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmRpc2NvdXJhZ2VkLWNsYXNzPTEKLWNvbXBpbGVycy5wLmludGVybmFsPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubWlzc2luZy12ZXJzaW9uLWV4cG9ydC1wYWNrYWdlPTIKLWNvbXBpbGVycy5wLm1pc3NpbmctdmVyc2lvbi1pbXBvcnQtcGFja2FnZT0yCi1jb21waWxlcnMucC5taXNzaW5nLXZlcnNpb24tcmVxdWlyZS1idW5kbGU9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTEKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MQotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTEKLWNvbXBpbGVycy5wLnVua25vd24taWRlbnRpZmllcj0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTEKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5zLmNyZWF0ZS1kb2NzPWZhbHNlCi1jb21waWxlcnMucy5kb2MtZm9sZGVyPWRvYwotY29tcGlsZXJzLnMub3Blbi10YWdzPTEKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMGMzOTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4xLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuY29uc29sZTtidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcudWk7YnVuZGxlLXZlcnNpb249IlszLjMuMTAwLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmFwYWNoZS54YWxhbjtidW5kbGUtdmVyc2lvbj0iWzIuNy4xLDIuOC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC40MDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZTtidW5kbGUtdmVyc2lvbj0iMS4wLjAiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuMS4xMDMsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmZvcm1zO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjEwMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gY29tLmlibS5pY3U7YnVuZGxlLXZlcnNpb249IjMuOC4xIgotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmhhbmRsZXJzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3Q7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnJlZ2lzdHJ5O3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzZDQ5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZW1wbGF0ZXMvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgeHNsZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHNjaGVtYS8KLXNyYy5pbmNsdWRlcyA9IHNjaGVtYS8sXAotICAgICAgICAgICAgICAgc3JjLyxcCi0gICAgICAgICAgICAgICB4c2xmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVtcGxhdGVzLyxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvWFNERmlsZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9YU0RGaWxlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzMWNlOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9YU0RGaWxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2FscGhhYl9zb3J0X2NvLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2FscGhhYl9zb3J0X2NvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxMWNjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9hbHBoYWJfc29ydF9jby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9hbmNlc3Rvci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9hbmNlc3Rvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5N2RiODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvYW5jZXN0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvZGlyZWN0aW9uYWwuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvZGlyZWN0aW9uYWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzkwYmMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2RpcmVjdGlvbmFsLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2ZhbWlseS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9mYW1pbHkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTE3ZjNlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2ZhbWlseS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9maWVsZF9kZWZhdWx0X29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9maWVsZF9kZWZhdWx0X29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MjlkM2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvZmllbGRfZGVmYXVsdF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvZnVuY3Rpb24uZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvZnVuY3Rpb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODFmZDY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2Z1bmN0aW9uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2hpZXJhcmNoeS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9oaWVyYXJjaHkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzdkY2E4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL2hpZXJhcmNoeS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9pbXBvcnQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvaW1wb3J0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU0NGNlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9pbXBvcnQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvaW1wb3J0cy5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9pbXBvcnRzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE5NDcwMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9pbXBvcnRzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL21vZGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvbW9kZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YTFlYTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvbW9kZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9uZXdfeG1sLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL25ld194bWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGZiNjJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL25ld194bWwuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvbmV3ZHRkX3dpei5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9uZXdkdGRfd2l6LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBiMWE3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9uZXdkdGRfd2l6LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL29wZXJhdGlvbi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9vcGVyYXRpb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTVkOWUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL29wZXJhdGlvbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC9vdmVyX2NvLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL292ZXJfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzg3NjdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL292ZXJfY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvcGFja2FnZV9vYmouZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvcGFja2FnZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzFjMjhkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL3BhY2thZ2Vfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL3RlbXBsYXRlLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL3RlbXBsYXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIxMjg2OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC90ZW1wbGF0ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC90ZW1wbGF0ZW5hbWVkX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC90ZW1wbGF0ZW5hbWVkX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMjQ3MDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvdGVtcGxhdGVuYW1lZF9vYmouZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvdmFyaWFibGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwvdmFyaWFibGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmQ4M2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL3ZhcmlhYmxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL3hzbGF0dHJpYnV0ZS1zZXQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwveHNsYXR0cmlidXRlLXNldC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZTZlYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwveHNsYXR0cmlidXRlLXNldC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC94c2x0X2ZpbGUuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwveHNsdF9maWxlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIwZWI0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvaWNvbnMvZnVsbC94c2x0X2ZpbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwveHNsdF9sYXVuY2guZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL2ljb25zL2Z1bGwveHNsdF9sYXVuY2guZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmUxNWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9pY29ucy9mdWxsL3hzbHRfbGF1bmNoLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcxZTcyNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBPcmFuZ2V2b2x0ICh3d3cub3Jhbmdldm9sdC5jb20pCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIExhcnMgR2Vyc21hbm4gKHd3dy5vcmFuZ2V2b2x0LmNvbSkgLSBYU0wgVUkgc3VwcG9ydAotIyAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTUxMjYsIDIxMzg1MwotIyAgICAgCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotcGx1Z2luTmFtZT1YU0wgRWRpdG9yIGFuZCBWYWxpZGF0aW9uCi1wYWdlLm5hbWUuMCA9IFhTTAotCi1lZGl0b3JOYW1lID0gWFNMIEVkaXRvcgotd2l6YXJkTmFtZVhTTCA9IFhTTAotd2l6YXJkRGVzY3JpcHRpb25YU0wgPSBDcmVhdGUgYSBuZXcgWFNMIFN0eWxlc2hlZXQKLWNvbnRleHRUeXBlTmV3WFNMID0gTmV3IFhTTAotcGFnZU5hbWVUZW1wbGF0ZXMgPSBUZW1wbGF0ZXMKLXBhZ2VOYW1lVmFsaWRhdGlvbiA9IFZhbGlkYXRpb24KLWNvbW1hbmRPcGVuU2VsZWN0aW9uID0gT3BlbiBTZWxlY3Rpb24KLWNvbW1hbmRUb29sdGlwT3BlblNlbGVjdGlvbiA9IE9wZW4gU2VsZWN0aW9uCi1jb21tYW5kVG9vbHRpcE5ld1hNTEZpbGUgPSBOZXcgWE1MIEZpbGUKLWNvbW1hbmRUb29sdGlwTmV3RFRERmlsZSA9IE5ldyBEVEQgRmlsZQotY29tbWFuZFRvb2x0aXBOZXdYU0RGaWxlID0gTmV3IFhNTCBTY2hlbWEgRmlsZQotY29tbWFuZFRvb2x0aXBOZXdYU0xGaWxlID0gTmV3IFhTTCBGaWxlCi12aWV3TmFtZVN0eWxlc2hlZXQgPSBTdHlsZXNoZWV0IE1vZGVsCi1wYWdlU3ludGF4Q29sb3JpbmcgPSBTeW50YXggQ29sb3JpbmcKLVhTTF9Qcm9wZXJ0eV92YWxpZGF0aW9uID0gWFNMVCBWYWxpZGF0aW9uCi0KLXNwZWNpZmljYXRpb24ubGFiZWwuMCA9IE92ZXJyaWRlCi1YU0xDb250ZW50QXNzaXN0RXh0ZW5zaW9uID0gWFNMIENvbnRlbnQgQXNzaXN0YW5jZQotY29udGV4dFR5cGVYU0xUYWcgPSBYU0wgVGFnCi1jb250ZXh0VHlwZVhTTEF0dHIgPSBYU0wgQXR0cmlidXRlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDA0YjE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Ci08cGx1Z2luPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iY29udGVudEFzc2lzdFByb2Nlc3NvciIgbmFtZT0iJVhTTENvbnRlbnRBc3Npc3RFeHRlbnNpb24iIHNjaGVtYT0iL3NjaGVtYS9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmV4c2QiLz4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgotCQk8ZWRpdG9yIG5hbWU9IiVlZGl0b3JOYW1lIiAKLQkJCWljb249IiRubCQvaWNvbnMvZnVsbC94c2x0X2ZpbGUuZ2lmIgotCQkJY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWJsZXRyZWUuU291cmNlUGFnZUFjdGlvbkNvbnRyaWJ1dG9yIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEVkaXRvciIKLQkJCWRlZmF1bHQ9InRydWUiCi0JCQlleHRlbnNpb25zPSJ4c2wseHNsdCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLlhTTEVkaXRvciI+Ci0JCQk8Y29udGVudFR5cGVCaW5kaW5nIGNvbnRlbnRUeXBlSWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiIC8+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotCQotICAgIDwhLS0gRWRpdG9yIGFjdGlvbnNldHMgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0UGFydEFzc29jaWF0aW9ucyI+Ci0JCTxhY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uIj4KLQkJCTxwYXJ0IGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLlhTTEVkaXRvciIgLz4KLQkJPC9hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24+Ci0JCTxhY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24gdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLnVpLk5hdmlnYXRlQWN0aW9uU2V0Ij4KLQkJCTxwYXJ0IGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLlhTTEVkaXRvciIgLz4KLQkJPC9hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmVkaXRvckNvbmZpZ3VyYXRpb24iPgotCQk8c291cmNlVmlld2VyQ29uZmlndXJhdGlvbgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIj4KLQkJPC9zb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uPgotCQk8Y29udGVudE91dGxpbmVDb25maWd1cmF0aW9uCi0gICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiIKLSAgICAgICAgdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIj4KLQkJPC9jb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24+Ci0JCTxxdWlja091dGxpbmVDb25maWd1cmF0aW9uCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5xdWlja291dGxpbmUuWE1MUXVpY2tPdXRsaW5lQ29uZmlndXJhdGlvbiIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCwgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZSwgb3JnLmVjbGlwc2Uud3N0LmNvcmUueHNsc291cmNlIiAvPgotCSAgICA8ZG91YmxlQ2xpY2tTdHJhdGVneQotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljay5YU0xEb3VibGVDbGlja1N0cmF0ZWd5IgotICAgICAgICAgICB0YXJnZXQ9Im9yZy5lY2xpcHNlLndzdC54c2wuWFNMX1hQQVRIIj4KLQkgICAgPC9kb3VibGVDbGlja1N0cmF0ZWd5PgotCQk8cHJvdmlzaW9uYWxEZWZpbml0aW9uCi0JCQl0eXBlPSJhY3RpdmVjb250ZXh0cyIKLQkJCXZhbHVlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sLCBvcmcuZWNsaXBzZS53c3QueG1sLm5hdmlnYXRpb24sIG9yZy5lY2xpcHNlLndzdC54bWwuY2xlYW51cCwgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb21tZW50cywgb3JnLmVjbGlwc2Uud3N0LnhtbC5zZWxlY3Rpb24sIG9yZy5lY2xpcHNlLndzdC54bWwuZGVwZW5kZW5jaWVzLCBvcmcuZWNsaXBzZS53c3QueG1sLmdyYW1tYXIsIG9yZy5lY2xpcHNlLndzdC54bWwuZXhwYW5kLCBvcmcuZWNsaXBzZS53c3QueG1sLm9jY3VycmVuY2VzIgotICAgICAgICAJdGFyZ2V0PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIiAvPgotICAgICAgICA8cHJvdmlzaW9uYWxEZWZpbml0aW9uCi0gICAgICAgICAgICB0eXBlPSJwcmVmZXJlbmNlcGFnZXMiCi0gICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcmVmZXJlbmNlcy5CYXNlUHJlZmVyZW5jZVBhZ2UsIG9yZy5lY2xpcHNlLndzdC54c2wudWkudGVtcGxhdGUucHJlZmVyZW5jZVBhZ2UsIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJlZmVyZW5jZXMuVmFsaWRhdGlvbiwgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFByZWZlcmVuY2VQYWdlLCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLlhQYXRoIgotICAgICAgICAgICAgdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIi8+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+Ci0JCTx3aXphcmQgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5YTUxDYXRlZ29yeSIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZCIKLQkJCWZpbmFsUGVyc3BlY3RpdmU9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucGVyc3BlY3RpdmUiIAotCQkJaWNvbj0iJG5sJC9pY29ucy9mdWxsL3hzbHRfZmlsZS5naWYiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1N0eWxlc2hlZXRXaXphcmQiCi0JCQluYW1lPSIld2l6YXJkTmFtZVhTTCIgCi0JCQlwcmVmZXJyZWRQZXJzcGVjdGl2ZXM9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucGVyc3BlY3RpdmUiPgotCQkJPGRlc2NyaXB0aW9uPiV3aXphcmREZXNjcmlwdGlvblhTTDwvZGVzY3JpcHRpb24+Ci0JCQk8c2VsZWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiPgotCQkJPC9zZWxlY3Rpb24+Ci0JCTwvd2l6YXJkPgotCTwvZXh0ZW5zaW9uPgotCQotCTwhLS0gWFNMIHRlbXBsYXRlcyAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnRlbXBsYXRlcyI+Ci0JCTxjb250ZXh0VHlwZQotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYU0wiCi0JCQlpZD0ieHNsX25ldyIgbmFtZT0iJWNvbnRleHRUeXBlTmV3WFNMIj4KLQkJPC9jb250ZXh0VHlwZT4KLQkJPGNvbnRleHRUeXBlCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhTTCIKLQkJCWlkPSJ4c2xfdGFnIiBuYW1lPSIlY29udGV4dFR5cGVYU0xUYWciPgotCQk8L2NvbnRleHRUeXBlPgotCQk8Y29udGV4dFR5cGUKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMIgotCQkJaWQ9InhzbF9hdHRyIiBuYW1lPSIlY29udGV4dFR5cGVYU0xBdHRyIj4KLQkJPC9jb250ZXh0VHlwZT4KLQkJCi0JCTxpbmNsdWRlIGZpbGU9InRlbXBsYXRlcy9maWxlX3RlbXBsYXRlcy54bWwiIC8+Ci0JPC9leHRlbnNpb24+Ci0KLSA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZUV4dGVuc2lvbnMiPgotCTxwZXJzcGVjdGl2ZUV4dGVuc2lvbiB0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wZXJzcGVjdGl2ZSI+Ci0JCTxuZXdXaXphcmRTaG9ydGN1dCBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1N0eWxlc2hlZXRXaXphcmQiLz4KLQk8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgotIDwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0JCTxwYWdlIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnByZWZlcmVuY2VzLnhtbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1haW5QcmVmZXJlbmNlUGFnZSIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByZWZlcmVuY2VzLkJhc2VQcmVmZXJlbmNlUGFnZSIgCi0JCQluYW1lPSIlcGFnZS5uYW1lLjAiIC8+Ci0JCTxwYWdlIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByZWZlcmVuY2VzLkJhc2VQcmVmZXJlbmNlUGFnZSIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS50ZW1wbGF0ZS5wcmVmZXJlbmNlUGFnZSIgCi0JCQluYW1lPSIlcGFnZU5hbWVUZW1wbGF0ZXMiPgotCQk8L3BhZ2U+Ci0KLQkJPHBhZ2UgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJlZmVyZW5jZXMuQmFzZVByZWZlcmVuY2VQYWdlIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJlZmVyZW5jZXMuVmFsaWRhdGlvbiIgCi0JCQluYW1lPSIlcGFnZU5hbWVWYWxpZGF0aW9uIj4KLQkJPC9wYWdlPgotCQk8cGFnZSBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcmVmZXJlbmNlcy5CYXNlUHJlZmVyZW5jZVBhZ2UiCi0JCSAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xTeW50YXhDb2xvcmluZ1BhZ2UiCi0JCSAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcmVmZXJlbmNlcy5TeW50YXhDb2xvcmluZyIKLQkJICAgIG5hbWU9IiVwYWdlU3ludGF4Q29sb3JpbmciLz4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnNvdXJjZXZhbGlkYXRpb24iPgotCQk8dmFsaWRhdG9yIHNjb3BlPSJ0b3RhbCIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTCI+Ci0JCQk8Y29udGVudFR5cGVJZGVudGlmaWVyIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIj4KLQkJCQk8cGFydGl0aW9uVHlwZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS5TVF9ERUZBVUxUIi8+Ci0JCQkJPHBhcnRpdGlvblR5cGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuWE1MX0RFRkFVTFQiLz4KLQkJCQk8cGFydGl0aW9uVHlwZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5YU0xfWFBBVEgiLz4KLQkJCTwvY29udGVudFR5cGVJZGVudGlmaWVyPgotCQk8L3ZhbGlkYXRvcj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuc291cmNldmFsaWRhdGlvbiI+Ci0JCTx2YWxpZGF0b3Igc2NvcGU9InBhcnRpYWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTE1hcmt1cFZhbGlkYXRvciIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRvci5tYXJrdXB2YWxpZGF0b3IiPgotCQkJPGNvbnRlbnRUeXBlSWRlbnRpZmllciBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSI+Ci0JCQkJPHBhcnRpdGlvblR5cGUgaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UuU1RfREVGQVVMVCIgLz4KLQkJCQk8cGFydGl0aW9uVHlwZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5YTUxfREVGQVVMVCIgLz4KLQkJCQk8cGFydGl0aW9uVHlwZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5YU0xfWFBBVEgiIC8+Ci0JCQk8L2NvbnRlbnRUeXBlSWRlbnRpZmllcj4KLQkJPC92YWxpZGF0b3I+Ci0JPC9leHRlbnNpb24+Ci0JCi0gIDxleHRlbnNpb24KLSAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzIj4KLSAgICAgPGhhbmRsZXIKLSAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnMuT3BlbkRlY2xhcmF0aW9uSGFuZGxlciIKLSAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLm9wZW4uZmlsZS5mcm9tLnNvdXJjZSI+Ci0gICAgIDwvaGFuZGxlcj4KLSAgPC9leHRlbnNpb24+Ci0gIDxleHRlbnNpb24KLSAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4KLSAgICAgPG1lbnVDb250cmlidXRpb24KLSAgICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IuRWRpdG9yQ29udGV4dD9iZWZvcmU9YWRkaXRpb25zIj4KLSAgICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLm9wZW4uZmlsZS5mcm9tLnNvdXJjZSIKLSAgICAgICAgICAgICAgaWQ9Im9wZW5TZWxlY3Rpb24iCi0gICAgICAgICAgICAgIGxhYmVsPSIlY29tbWFuZE9wZW5TZWxlY3Rpb24iCi0gICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgotICAgICAgICAgICAgICB0b29sdGlwPSIlY29tbWFuZFRvb2x0aXBPcGVuU2VsZWN0aW9uIj4KLSAgICAgICAgICAgPHZpc2libGVXaGVuCi0gICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPgotICAgICAgICAgICA8L3Zpc2libGVXaGVuPgotICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KLSAgPC9leHRlbnNpb24+Ci0gIDxleHRlbnNpb24KLSAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KLSAgICAgPHZpZXcKLSAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC54bWwiCi0gICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuU3R5bGVzaGVldE1vZGVsVmlldyIKLSAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9oaWVyYXJjaHkuZ2lmIgotICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS52aWV3Lm91dGxpbmUiCi0gICAgICAgICAgIG5hbWU9IiV2aWV3TmFtZVN0eWxlc2hlZXQiCi0gICAgICAgICAgIHJlc3RvcmFibGU9InRydWUiPgotICAgICA8L3ZpZXc+Ci0gIDwvZXh0ZW5zaW9uPgotICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgkJCi0JCTxmYWN0b3J5IAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5IiAKLSAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdCI+Ci0gICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJvcmcuZWNsaXBzZS51aS5tb2RlbC5JV29ya2JlbmNoQWRhcHRlciIvPgotCQk8L2ZhY3Rvcnk+Ci0gICA8L2V4dGVuc2lvbj4gICAgIAkKLSAgIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMuYW5ub3RhdGlvblR5cGVzIj4KLQkJPHR5cGUKLQkJCW5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wudWkub3ZlcnJpZGUiPgotCQk8L3R5cGU+Ci0JPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy5tYXJrZXJBbm5vdGF0aW9uU3BlY2lmaWNhdGlvbiI+Ci0JICA8c3BlY2lmaWNhdGlvbgotICAgICAgICAgICAgYW5ub3RhdGlvblR5cGU9Im9yZy5lY2xpcHNlLndzdC54c2wudWkub3ZlcnJpZGUiCi0gICAgICAgICAgICBsYWJlbD0iJXNwZWNpZmljYXRpb24ubGFiZWwuMCIKLSAgICAgICAgICAgIGljb249IiRubCQvaWNvbnMvZnVsbC9vdmVyX2NvLmdpZiIKLQkJCWFubm90YXRpb25JbWFnZVByb3ZpZGVyID0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyIgotICAgICAgICAgICAgdGV4dFByZWZlcmVuY2VLZXk9Im92ZXJyaWRlSW5kaWNhdG9yIgotICAgICAgICAgICAgdGV4dFByZWZlcmVuY2VWYWx1ZT0iZmFsc2UiCi0gICAgICAgICAgICBoaWdobGlnaHRQcmVmZXJlbmNlS2V5PSJvdmVycmlkZUluZGljYXRvckhpZ2hsaWdodGluZyIKLSAgICAgICAgICAgIGhpZ2hsaWdodFByZWZlcmVuY2VWYWx1ZT0iZmFsc2UiCi0gICAgICAgICAgICBjb250cmlidXRlc1RvSGVhZGVyPSJmYWxzZSIKLSAgICAgICAgICAgIG92ZXJ2aWV3UnVsZXJQcmVmZXJlbmNlS2V5PSJvdmVycmlkZUluZGljYXRvckluT3ZlcnZpZXdSdWxlciIKLSAgICAgICAgICAgIG92ZXJ2aWV3UnVsZXJQcmVmZXJlbmNlVmFsdWU9ImZhbHNlIgotICAgICAgICAgICAgdmVydGljYWxSdWxlclByZWZlcmVuY2VLZXk9Im92ZXJyaWRlSW5kaWNhdG9ySW5WZXJ0aWNhbFJ1bGVyIgotICAgICAgICAgICAgdmVydGljYWxSdWxlclByZWZlcmVuY2VWYWx1ZT0idHJ1ZSIKLSAgICAgICAgICAgIGNvbG9yUHJlZmVyZW5jZUtleT0ib3ZlcnJpZGVJbmRpY2F0b3JDb2xvciIKLSAgICAgICAgICAgIGNvbG9yUHJlZmVyZW5jZVZhbHVlPSIxODAsMjA3LDIwNSIKLSAgICAgICAgICAgIHByZXNlbnRhdGlvbkxheWVyPSIzIgotICAgICAgICAgICAgc2hvd0luTmV4dFByZXZEcm9wZG93blRvb2xiYXJBY3Rpb25LZXk9InNob3dvdmVycmlkZUluZGljYXRvckluTmV4dFByZXZEcm9wZG93blRvb2xiYXJBY3Rpb24iCi0gICAgICAgICAgICBzaG93SW5OZXh0UHJldkRyb3Bkb3duVG9vbGJhckFjdGlvbj0iZmFsc2UiCi0gICAgICAgICAgICBpc0dvVG9OZXh0TmF2aWdhdGlvblRhcmdldEtleT0iaXNPdmVycmlkZUluZGljYXRvckdvVG9OZXh0TmF2aWdhdGlvblRhcmdldCIKLQkgICAgICAgIGlzR29Ub05leHROYXZpZ2F0aW9uVGFyZ2V0PSJmYWxzZSIKLSAgICAgICAgICAgIGlzR29Ub1ByZXZpb3VzTmF2aWdhdGlvblRhcmdldEtleT0iaXNPdmVycmlkZUluZGljYXRvckdvVG9QcmV2aW91c05hdmlnYXRpb25UYXJnZXQiCi0JICAgICAgICBpc0dvVG9QcmV2aW91c05hdmlnYXRpb25UYXJnZXQ9ImZhbHNlIgotICAgICAgICAgICAgdGV4dFN0eWxlUHJlZmVyZW5jZUtleT0ib3ZlcnJpZGVJbmRpY2F0b3JUZXh0U3R5bGUiCi0gICAgICAgICAgICB0ZXh0U3R5bGVQcmVmZXJlbmNlVmFsdWU9IlNRVUlHR0xFUyI+Ci0JICA8L3NwZWNpZmljYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KLQkJPGluaXRpYWxpemVyCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplciIgLz4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcm9wZXJ0eVBhZ2VzIj4KLQkJPHBhZ2UKLQkJCW5hbWU9IiVYU0xfUHJvcGVydHlfdmFsaWRhdGlvbiIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZSIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3BlcnR5UGFnZS5wcm9qZWN0LnZhbGlkYXRpb24iCi0JCQljYXRlZ29yeT0iVmFsaWRhdGlvblByb3BlcnRpZXNQYWdlIj4KLS0JCQk8ZW5hYmxlZFdoZW4+Ci0JCQkJPGFkYXB0IHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ij4KLQkJCQkJCi0JCQkJPC9hZGFwdD4KLQkJCTwvZW5hYmxlZFdoZW4+Ci0JCTwvcGFnZT4JCQotCTwvZXh0ZW5zaW9uPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KLSAgICA8aW5pdGlhbGl6ZXIKLSAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPgotICAgIDwvaW5pdGlhbGl6ZXI+Ci0gPC9leHRlbnNpb24+Ci0JCi0gICA8IS0tIGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkucXVpY2tGaXhQcm9jZXNzb3IiPgotICAgICAgPHF1aWNrRml4UHJvY2Vzc29yCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5PdmVycmlkZVF1aWNrQXNzaXN0IgotICAgICAgICAgICAgcHJvYmxlbVR5cGU9Im9yZy5lY2xpcHNlLndzdC54c2wudWkub3ZlcnJpZGUiPgotICAgICAgPC9xdWlja0ZpeFByb2Nlc3Nvcj4KLSAgIDwvZXh0ZW5zaW9uIC0tPgotCQotIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4KLQk8bWVudUNvbnRyaWJ1dGlvbiBsb2NhdGlvblVSST0idG9vbGJhcjpvcmcuZWNsaXBzZS53c3QueG1sLnVpLnBlcnNwZWN0aXZlLk5ld0ZpbGVUb29sQmFyIj4KLSAgICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmQiCi0gICAgICAgICAgICAgIGljb249IiRubCQvaWNvbnMvZnVsbC94c2x0X2ZpbGUuZ2lmIgotICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5uZXdYU0xGaWxlIgotICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKLSAgICAgICAgICAgICAgdG9vbHRpcD0iJWNvbW1hbmRUb29sdGlwTmV3WFNMRmlsZSI+Ci0gICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJuZXdXaXphcmRJZCIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdTdHlsZXNoZWV0V2l6YXJkIi8+Ci0gICAgICAgICAgPHZpc2libGVXaGVuIGNoZWNrRW5hYmxlZD0iZmFsc2UiPgotCQkJPHdpdGggdmFyaWFibGU9ImFjdGl2ZVdvcmtiZW5jaFdpbmRvdy5hY3RpdmVQZXJzcGVjdGl2ZSI+Ci0JCQkJPGVxdWFscyB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5wZXJzcGVjdGl2ZSIvPgotCQkJPC93aXRoPgotICAgICAgICAgICA8L3Zpc2libGVXaGVuPiAgICAgICAgIAotICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KLSAgPC9leHRlbnNpb24+Ci0KLSA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IubmF2aWdhdG9yQ29udGVudCIgPgotCTxjb21tb25XaXphcmQgdHlwZT0ibmV3IiB3aXphcmRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1N0eWxlc2hlZXRXaXphcmQiICBtZW51R3JvdXBJZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5uZXcubWVudUdyb3VwIj4KLQkJPGVuYWJsZW1lbnQ+Ci0JCQk8aW5zdGFuY2VvZiB2YWx1ZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIi8+Ci0JCQk8d2l0aCB2YXJpYWJsZT0iYWN0aXZlV29ya2JlbmNoV2luZG93LmFjdGl2ZVBlcnNwZWN0aXZlIj4KLQkJCSAgIDxlcXVhbHMgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudWkucGVyc3BlY3RpdmUiLz4KLQkJCTwvd2l0aD4KLQkJPC9lbmFibGVtZW50PgotCTwvY29tbW9uV2l6YXJkPgotIDwvZXh0ZW5zaW9uPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5jb250ZW50QXNzaXN0UHJvY2Vzc29yIj4KLSAgICA8cHJvY2Vzc29yCi0gICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YTUxDb250ZW50QXNzaXN0UHJvY2Vzc29yIi8+Ci0gICAgPHByb2Nlc3NvcgotICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yIi8+Ci0gICAgPHByb2Nlc3NvcgotICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciIvPgotIDwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuYWRhcHRlckZhY3RvcnlEZXNjcmlwdGlvbiI+Ci0JCTxhZGFwdGVyRmFjdG9yeURlc2NyaXB0aW9uCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMIj4KLQkJCTxjb250ZW50VHlwZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSIgLz4KLQkJPC9hZGFwdGVyRmFjdG9yeURlc2NyaXB0aW9uPgotCTwvZXh0ZW5zaW9uPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zZW1hbnRpY0hpZ2hsaWdodGluZyI+Ci0gICAgPGhpZ2hsaWdodGluZwotICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZyIKLSAgICAgICAgICB0YXJnZXQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwsIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiCi0gICAgICAgICAgc3R5bGVTdHJpbmdLZXk9InhzbHRhZ05hbWUiPgotICAgIDwvaGlnaGxpZ2h0aW5nPgotIDwvZXh0ZW5zaW9uPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zZW1hbnRpY0hpZ2hsaWdodGluZyI+Ci0gICAgPGhpZ2hsaWdodGluZwotICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmciCi0gICAgICAgICAgdGFyZ2V0PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sLCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIgotICAgICAgICAgIHN0eWxlU3RyaW5nS2V5PSJ4c2x0YWdBdHRyaWJ1dGVOYW1lIj4KLSAgICA8L2hpZ2hsaWdodGluZz4KLSA8L2V4dGVuc2lvbj4KLTxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zZW1hbnRpY0hpZ2hsaWdodGluZyI+Ci0gICAgPGhpZ2hsaWdodGluZwotICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nIgotICAgICAgICAgIHRhcmdldD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCwgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSIKLSAgICAgICAgICBzdHlsZVN0cmluZ0tleT0ieHNsdGFnQXR0cmlidXRlVmFsdWUiPgotICAgIDwvaGlnaGxpZ2h0aW5nPgotIDwvZXh0ZW5zaW9uPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zZW1hbnRpY0hpZ2hsaWdodGluZyI+Ci0gICAgPGhpZ2hsaWdodGluZwotICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRhZ0RlbGltc1NlbWFudGljSGlnaGxpZ2h0aW5nIgotICAgICAgICAgIHRhcmdldD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCwgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSIKLSAgICAgICAgICBzdHlsZVN0cmluZ0tleT0ieHNsdGFnQm9yZGVyIj4KLSAgICA8L2hpZ2hsaWdodGluZz4KLSA8L2V4dGVuc2lvbj4KLSAgCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zY2hlbWEvY29udGVudEFzc2lzdFByb2Nlc3Nvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NjaGVtYS9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZGRhZjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NjaGVtYS9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpIiBpZD0iY29udGVudEFzc2lzdFByb2Nlc3NvciIgbmFtZT0iWFNMIENvbnRlbnQgQXNzaXN0YW5jZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBYU0wgQ29udGVudCBBc2lzc3RhbmNlIHByb2Nlc3NvciBleHRlbnNpb24gcG9pbnQsIGFsbG93cyBmb3IgdGhlIGNvbnRyaWJ1dGlvbiBvZiBhZG9wdGVyIGRlZmluZWQgWFNMIHByb2Nlc3NvciBleHRlbnNpb25zLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KLSAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icHJvY2Vzc29yIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHVuaXF1ZSBJRCBmb3IgdGhpcyBleHRlbnNpb24gcG9pbnQKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbiBwb2ludCBuYW1lCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icHJvY2Vzc29yIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBQcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgY29udGVudCBhc3Npc3RhbnQgcHJvY2Vzc29yLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAxLjEKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O3AmZ3Q7JmFtcDtsdDtleHRlbnNpb24KLSAgICAgICBwb2ludD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnVpLmNvbnRlbnRBc3Npc3RQcm9jZXNzb3ImcXVvdDsmZ3Q7Jmx0Oy9wJmd0OwotJmx0O3AmZ3Q7JmFtcDsjMTYwOyZhbXA7IzE2MDsmYW1wOyMxNjA7JmFtcDtsdDtwcm9jZXNzb3IKLSAgICAgICAgICBjbGFzcz0mcXVvdDtvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWE1MQ29udGVudEFzc2lzdFByb2Nlc3NvciZxdW90OyZndDsmbHQ7L3AmZ3Q7Ci0mbHQ7cCZndDsmYW1wOyMxNjA7JmFtcDsjMTYwOyZhbXA7IzE2MDsmYW1wO2x0Oy9wcm9jZXNzb3ImZ3Q7Jmx0Oy9wJmd0OwotJmx0O3AmZ3Q7JmFtcDtsdDsvZXh0ZW5zaW9uJmd0OyZsdDsvcCZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmVjNzRkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5vQ29udGVudEFzc2lzdGFuY2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMU3ludGF4Q29sb3JpbmdQYWdlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHhzbHRTdHlsZURvY3VtZW50OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1haW5QcmVmZXJlbmNlUGFnZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBOZXdYU0xTZWxlY3RUZW1wbGF0ZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBOZXdYU0xUZW1wbGF0ZURlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5ld1hTTFVzZVRlbXBsYXRlQnV0dG9uVGV4dDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBOZXdYU0xMaW5rUHJlZmVyZW5jZVBhZ2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTmV3WFNMQ29sdW1uVGVtcGxhdGVOYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5ld1hTTENvbHVtblRlbXBsYXRlRGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTmV3WFNMVGVtcGxhdGVQcmV2aWV3VGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTmV3WFNMRmlsZVBhZ2VUaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBOZXdYU0xGaWxlUGFnZURlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5ld1hTTEZpbGVQYWdlV2luZG93VGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTmV3WFNMRmlsZVdpemFyZEV4dGVuc2lvbkVycm9yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5ld1hTTEZpbGVBbHJlYWRFeGlzdHNFcnJvcjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBWZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyUGFnZURlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZU1iVGV4dDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VXb3Jrc3BhY2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlUHJvamVjdDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VKb2I7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRXJyb3JMZXZlbFRleHQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgV2FybmluZ0xldmVsVGV4dDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJZ25vcmVMZXZlbFRleHQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlVGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlRGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlSW1wb3J0SW5jbHVkZUxhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2lyY3VsYXJSZWZlcmVuY2VzTGFiZWw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdGlvblByZWZlcmVuY2VOYW1lZFRlbXBsYXRlc0xhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVGVtcGxhdGVDb25mbGljdHNMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUR1cGxpY2F0ZVBhcmFtZXRlckxhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtZXRlckF0dHJpYnV0ZUxhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW1ldGVyRW1wdHlBdHRyaWJ1dGVMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUNhbGxUZW1wbGF0ZXNMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZWRUZW1wbGF0ZXNMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbXRlcnNMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhMYWJlbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVhQYXRoU3ludGF4TGFiZWw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNNc2dFcnJvcjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTEVkaXRvck92ZXJyaWRlVGVtcGxhdGVNb2RlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZUZpbGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVmFsaWRhdGlvblBhZ2VTZXZlcml0eUxldmVsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE9wZW47Ci0JCi0JCi0Jc3RhdGljIHsKLQkgICBOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZGM1MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1JHX0VDTElQU0VfV1NUX1hTTFRfVEVNUExBVEVTX1hTTF9CQVNJQyA9ICJvcmcuZWNsaXBzZS53c3QueHNsdC50ZW1wbGF0ZXMueHNsX2Jhc2ljIjsgLy8kTk9OLU5MUy0xJAotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCi0JewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgRGVmYXVsdFNjb3BlKCkuZ2V0Tm9kZShYU0xVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCQlub2RlLnB1dChYU0xVSUNvbnN0YW50cy5ORVdfRklMRV9URU1QTEFURV9OQU1FLCBPUkdfRUNMSVBTRV9XU1RfWFNMVF9URU1QTEFURVNfWFNMX0JBU0lDKTsgLy8gZGVmYXVsdCB0byB0aGUgYmFzaWMgc3R5bGVzaGVldAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJhOTE2OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjEzODQ5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gSW50YWxpbyAtIGdlbmVyYWwgY2xlYW4gdXAgb2YgdW51c2VkIGltcG9ydHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JU291cmNlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuQWJzdHJhY3REZWNvcmF0ZWRUZXh0RWRpdG9yUHJlZmVyZW5jZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsgLy8gaW1wb3J0Ci0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuTm9SZWdpb25Db250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LklYU0xQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEh5cGVybGlua0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXJGb3JYU0w7Ci0KLS8qKgotICogU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMIGltcGxlbWVudHMgY29udGVudCBhc3Npc3RhbmNlIGZvcgotICogYXR0cmlidXRlcyBhbmQgb3RoZXIgWFBhdGggcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMIGV4dGVuZHMKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIHsKLQotCXByaXZhdGUgU3RyaW5nW10gZkNvbmZpZ3VyZWRDb250ZW50VHlwZXM7Ci0JcHJpdmF0ZSBMaW5lU3R5bGVQcm92aWRlciBmTGluZVN0eWxlUHJvdmlkZXJGb3JYU0w7Ci0vLwlwcml2YXRlIExpbmVTdHlsZVByb3ZpZGVyIGZMaW5lU3R5bGVQcm92aWRlckZvclhNTDsKLQotCS8qKgotCSAqIENvbmZpZ3VyYXRpb24gZm9yIFhTTCBDb250ZW50IFR5cGVzCi0JICovCi0JcHVibGljIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHByb2Nlc3NvcnMgZm9yIHRoZSBjdXJyZW50IGNvbnRlbnQgdHlwZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXSBnZXRDb250ZW50QXNzaXN0UHJvY2Vzc29ycygKLQkJCUlTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyLCBTdHJpbmcgcGFydGl0aW9uVHlwZSkgewotCQlJQ29udGVudEFzc2lzdFByb2Nlc3NvcltdIHByb2Nlc3NvcnMgPSBudWxsOwotCi0JCWlmICgocGFydGl0aW9uVHlwZS5lcXVhbHMoSVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OKSkKLQkJCQl8fCAocGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKQotCQkJCXx8IChwYXJ0aXRpb25UeXBlLmVxdWFscyhJWFNMUGFydGl0aW9ucy5YU0xfWFBBVEgpKSkgewotCQkJCXByb2Nlc3NvcnMgPSBDb250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeS5jcmVhdGVQcm9jZXNzb3JzKCk7CQkKLQkJfSBlbHNlIGlmIChwYXJ0aXRpb25UeXBlLmVxdWFscyhJU3RydWN0dXJlZFBhcnRpdGlvbnMuVU5LTk9XTl9QQVJUSVRJT04pKSB7Ci0JCQlwcm9jZXNzb3JzID0gbmV3IElDb250ZW50QXNzaXN0UHJvY2Vzc29yW10geyBuZXcgTm9SZWdpb25Db250ZW50QXNzaXN0UHJvY2Vzc29yKCkgfTsKLQkJfQotCQlyZXR1cm4gcHJvY2Vzc29yczsKLQl9Ci0KLQkvKioKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnRleHQuVGV4dFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24jZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXIpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIElIeXBlcmxpbmtEZXRlY3RvcltdIGdldEh5cGVybGlua0RldGVjdG9ycyhJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcikgewotCQlpZiAoc291cmNlVmlld2VyID09IG51bGwKLQkJCQl8fCAhZlByZWZlcmVuY2VTdG9yZQotCQkJCQkJLmdldEJvb2xlYW4oQWJzdHJhY3REZWNvcmF0ZWRUZXh0RWRpdG9yUHJlZmVyZW5jZUNvbnN0YW50cy5FRElUT1JfSFlQRVJMSU5LU19FTkFCTEVEKSkKLQkJCXJldHVybiBudWxsOwotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBzdXBlckRldGVjdG9ycyA9IHN1cGVyCi0JCQkJLmdldEh5cGVybGlua0RldGVjdG9ycyhzb3VyY2VWaWV3ZXIpOwotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBhbGxEZXRlY3RvcnMgPSBuZXcgSUh5cGVybGlua0RldGVjdG9yW3N1cGVyRGV0ZWN0b3JzLmxlbmd0aCArIDFdOwotCQlhbGxEZXRlY3RvcnNbMF0gPSBuZXcgWFNMSHlwZXJsaW5rRGV0ZWN0b3IoKTsKLQkJU3lzdGVtLmFycmF5Y29weShzdXBlckRldGVjdG9ycywgMCwgYWxsRGV0ZWN0b3JzLCAxLAotCQkJCXN1cGVyRGV0ZWN0b3JzLmxlbmd0aCk7Ci0JCXJldHVybiBhbGxEZXRlY3RvcnM7Ci0JfQotCi0JLyoqCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwjZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JU291cmNlVmlld2VyKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmdbXSBnZXRDb25maWd1cmVkQ29udGVudFR5cGVzKElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKSB7Ci0JCWlmIChmQ29uZmlndXJlZENvbnRlbnRUeXBlcyA9PSBudWxsKSB7Ci0JCQlTdHJpbmdbXSB4c2xUeXBlcyA9IFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wKLQkJCQkJLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKTsKLQkJCWZDb25maWd1cmVkQ29udGVudFR5cGVzID0gbmV3IFN0cmluZ1t4c2xUeXBlcy5sZW5ndGggKyAyXTsKLQkJCWZDb25maWd1cmVkQ29udGVudFR5cGVzWzBdID0gSVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OOwotCQkJZkNvbmZpZ3VyZWRDb250ZW50VHlwZXNbMV0gPSBJU3RydWN0dXJlZFBhcnRpdGlvbnMuVU5LTk9XTl9QQVJUSVRJT047Ci0JCQlpbnQgaW5kZXggPSAwOwotCQkJU3lzdGVtLmFycmF5Y29weSh4c2xUeXBlcywgMCwgZkNvbmZpZ3VyZWRDb250ZW50VHlwZXMsIGluZGV4ICs9IDIsCi0JCQkJCXhzbFR5cGVzLmxlbmd0aCk7Ci0JCX0KLQkJcmV0dXJuIGZDb25maWd1cmVkQ29udGVudFR5cGVzOwotCX0KLQotLy8JQE92ZXJyaWRlCi0vLwlwdWJsaWMgTGluZVN0eWxlUHJvdmlkZXJbXSBnZXRMaW5lU3R5bGVQcm92aWRlcnMoCi0vLwkJCUlTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyLCBTdHJpbmcgcGFydGl0aW9uVHlwZSkgewotLy8JCUxpbmVTdHlsZVByb3ZpZGVyW10gcHJvdmlkZXJzID0gbnVsbDsKLS8vICAgICAgICBpZiAoaXNYTUxQYXJ0aXRpb24ocGFydGl0aW9uVHlwZSkpIHsKLS8vICAgIAkJcHJvdmlkZXJzID0gbmV3IExpbmVTdHlsZVByb3ZpZGVyW10ge2dldExpbmVTdHlsZVByb3ZpZGVyRm9yWFNMKCl9OwotLy8JCX0KLS8vCQlyZXR1cm4gcHJvdmlkZXJzOwotLy8JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzWE1MUGFydGl0aW9uKFN0cmluZyBwYXJ0aXRpb25UeXBlKSB7Ci0JCXJldHVybiBwYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkKLQkJCQl8fCBwYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfQ0RBVEEpCi0JCQkJfHwgcGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0NPTU1FTlQpCi0JCQkJfHwgcGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFQ0xBUkFUSU9OKQotCQkJCXx8IHBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9QSSkKLQkJCQl8fCBwYXJ0aXRpb25UeXBlLmVxdWFscyhJWFNMUGFydGl0aW9ucy5YU0xfWFBBVEgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgTGluZVN0eWxlUHJvdmlkZXIgZ2V0TGluZVN0eWxlUHJvdmlkZXJGb3JYU0woKSB7Ci0JCWlmIChmTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wgPT0gbnVsbCkgewotCQkJZkxpbmVTdHlsZVByb3ZpZGVyRm9yWFNMID0gbmV3IExpbmVTdHlsZVByb3ZpZGVyRm9yWFNMKCk7Ci0JCX0KLQkJcmV0dXJuIGZMaW5lU3R5bGVQcm92aWRlckZvclhTTDsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvWFNMVUlDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9YU0xVSUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmNhZTUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9YU0xVSUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDsKLQotcHVibGljIGNsYXNzIFhTTFVJQ29uc3RhbnRzCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVNUExBVEVfQ09OVEVYVF9YU0xfTkVXID0gInhzbF9uZXciOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXX0ZJTEVfVEVNUExBVEVfTkFNRSA9ICJORVdfRklMRV9URU1QTEFURV9OQU1FIjsgLy8kTk9OLU5MUy0xJAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL1hTTFVJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvWFNMVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyNmEwNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvWFNMVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLkNvbnRleHRUeXBlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMucGVyc2lzdGVuY2UuVGVtcGxhdGVTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLnRleHQudGVtcGxhdGVzLkNvbnRyaWJ1dGlvbkNvbnRleHRUeXBlUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZWRpdG9ycy50ZXh0LnRlbXBsYXRlcy5Db250cmlidXRpb25UZW1wbGF0ZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYU0w7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFhTTFVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0JCi0JLyoqCi0JICogVGhlIHRlbXBsYXRlIHN0b3JlIGZvciB0aGUgeHNsIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIFRlbXBsYXRlU3RvcmUgZlRlbXBsYXRlU3RvcmU7Ci0KLQkKLSAgICAvL3ByaXZhdGUgU2NvcGVkUHJlZmVyZW5jZVN0b3JlIHByZWZlcmVuY2VTdG9yZTsKLSAgICAKLQkvKioKLQkgKiBUaGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB0aGUgeG1sIGVkaXRvci4KLQkgKi8KLQlwcml2YXRlIENvbnRyaWJ1dGlvbkNvbnRleHRUeXBlUmVnaXN0cnkgZkNvbnRleHRUeXBlUmVnaXN0cnk7Ci0JCi0JLyoqCi0JICogVGhlIHBsdWdpbiBpZCBmb3IgdGhpcyBwbHVnaW4uCi0JICovCi0Jc3RhdGljIGZpbmFsIHB1YmxpYyBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wudWkiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgWFNMVUlQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIFhTTFVJUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNMVUlQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKEV4Y2VwdGlvbiBlKQotCXsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFBMVUdJTl9JRCwgMCwgIiIsIGUpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coQ29yZUV4Y2VwdGlvbiBlKQotCXsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhlLmdldFN0YXR1cygpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBzdG9yZSBmb3IgdGhlIHhzbCB0ZW1wbGF0ZXMuCi0JICogCi0JICogQHJldHVybiB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4c2wgdGVtcGxhdGVzCi0JICovCi0JcHVibGljIFRlbXBsYXRlU3RvcmUgZ2V0VGVtcGxhdGVTdG9yZSgpCi0JewotCQlpZiAoZlRlbXBsYXRlU3RvcmUgPT0gbnVsbCkKLQkJewotCQkJZlRlbXBsYXRlU3RvcmUgPSBuZXcgQ29udHJpYnV0aW9uVGVtcGxhdGVTdG9yZShnZXRUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSgpLCBnZXRQcmVmZXJlbmNlU3RvcmUoKSwgIm9yZy5lY2xpcHNlLndzdC54c2wudWkuY3VzdG9tX3RlbXBsYXRlcyIpOyAvLyROT04tTkxTLTEkCi0JCQl0cnkKLQkJCXsKLQkJCQlmVGVtcGxhdGVTdG9yZS5sb2FkKCk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlsb2coZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZUZW1wbGF0ZVN0b3JlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGNvbnRleHQgdHlwZSByZWdpc3RyeSBmb3IgdGhlIHhzbCBwbHVnaW4uCi0JICogCi0JICogQHJldHVybiB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB0aGUgeHNsIHBsdWdpbgotCSAqLwotCXB1YmxpYyBDb250ZXh0VHlwZVJlZ2lzdHJ5IGdldFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCkKLQl7Ci0JCWlmIChmQ29udGV4dFR5cGVSZWdpc3RyeSA9PSBudWxsKQotCQl7Ci0JCQlDb250cmlidXRpb25Db250ZXh0VHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbmV3IENvbnRyaWJ1dGlvbkNvbnRleHRUeXBlUmVnaXN0cnkoKTsKLQkJCXJlZ2lzdHJ5LmFkZENvbnRleHRUeXBlKFRlbXBsYXRlQ29udGV4dFR5cGVYU0wuWFNMX05FVyk7Ci0JCQlyZWdpc3RyeS5hZGRDb250ZXh0VHlwZShUZW1wbGF0ZUNvbnRleHRUeXBlWFNMLlhTTF9UQUcpOwotCQkJcmVnaXN0cnkuYWRkQ29udGV4dFR5cGUoVGVtcGxhdGVDb250ZXh0VHlwZVhTTC5YU0xfQVRUUik7Ci0JCQlmQ29udGV4dFR5cGVSZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQl9Ci0JCXJldHVybiBmQ29udGV4dFR5cGVSZWdpc3RyeTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShYU0xVSVBsdWdpbi5QTFVHSU5fSUQpOwotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOyAvLyROT04tTkxTLTEkCi0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQkvL1VSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9hY3Rpb25zL05ld0RUREZpbGVXaXphcmREZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2FjdGlvbnMvTmV3RFRERmlsZVdpemFyZERlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MTkyNDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2FjdGlvbnMvTmV3RFRERmlsZVdpemFyZERlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBOZXdEVERGaWxlV2l6YXJkRGVsZWdhdGUgaW1wbGVtZW50cyBJV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFREX1VJX0lOVEVSTkFMX1dJWkFSRF9ORVdfRFREX1dJWkFSRF9JRCA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLndpemFyZC5OZXdEVERXaXphcmQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBOZXdXaXphcmRBY3Rpb24gb3BlbkFjdGlvbjsKLQlwcml2YXRlIElTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoV2luZG93IHdpbmRvdykKLQl7Ci0JCXRoaXMub3BlbkFjdGlvbiA9IG5ldyBOZXdXaXphcmRBY3Rpb24oRFREX1VJX0lOVEVSTkFMX1dJWkFSRF9ORVdfRFREX1dJWkFSRF9JRCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKQotCXsKLQkJb3BlbkFjdGlvbi5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLQkJb3BlbkFjdGlvbi5ydW4oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvYWN0aW9ucy9OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvYWN0aW9ucy9OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNTIzNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2FjdGlvbnMvTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXU0RMX1VJX0lEID0gIm9yZy5lY2xpcHNlLndzdC53c2RsLnVpIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgTmV3V2l6YXJkQWN0aW9uIG9wZW5BY3Rpb247Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpCi0JewotCQl0aGlzLm9wZW5BY3Rpb24gPSBuZXcgTmV3V2l6YXJkQWN0aW9uKFdTRExfVUlfSUQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLQl7Ci0JCW9wZW5BY3Rpb24uc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0JCW9wZW5BY3Rpb24ucnVuKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2FjdGlvbnMvTmV3V2l6YXJkQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvYWN0aW9ucy9OZXdXaXphcmRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQyYzJhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvYWN0aW9ucy9OZXdXaXphcmRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuSVdpemFyZERlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIE5ld1dpemFyZEFjdGlvbiBleHRlbmRzIEFjdGlvbgotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSVpJTkdfV0laQVJEX1dJRFRIID0gNTAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSVpJTkdfV0laQVJEX0hFSUdIVCA9IDUwMDsKLQotCXByaXZhdGUgSVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0JcHJpdmF0ZSBTdHJpbmcgaWQ7Ci0JCi0JcHVibGljIE5ld1dpemFyZEFjdGlvbihTdHJpbmcgaWQpCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCUlXaXphcmREZXNjcmlwdG9yIGRlc2MgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldE5ld1dpemFyZFJlZ2lzdHJ5KCkuZmluZFdpemFyZChpZCk7Ci0JCWlmIChkZXNjID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCXRyeQotCQl7Ci0JCQlTaGVsbCBzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCUlXb3JrYmVuY2hXaXphcmQgd2l6YXJkID0gZGVzYy5jcmVhdGVXaXphcmQoKTsKLQotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3NlbCA9IG51bGw7Ci0JCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pCi0JCQl7Ci0JCQkJc3NlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCXNzZWwgPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigpOwotCQkJfQotCQkJd2l6YXJkLmluaXQoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKSwgc3NlbCk7Ci0KLQkJCVdpemFyZERpYWxvZyBkaWFsb2cgPSBuZXcgV2l6YXJkRGlhbG9nKHNoZWxsLCB3aXphcmQpOwotCQkJZGlhbG9nLmNyZWF0ZSgpOwotCQkJZGlhbG9nLmdldFNoZWxsKCkuc2V0U2l6ZShNYXRoLm1heChTSVpJTkdfV0laQVJEX1dJRFRILCBkaWFsb2cuZ2V0U2hlbGwoKS5nZXRTaXplKCkueCksIFNJWklOR19XSVpBUkRfSEVJR0hUKTsKLQkJCS8vIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZGlhbG9nLmdldFNoZWxsKCksSVdvcmtiZW5jaEhlbHBDb250ZXh0SWRzLk5FV19XSVpBUkQpOwotCQkJZGlhbG9nLm9wZW4oKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvYWN0aW9ucy9OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9hY3Rpb25zL05ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjA3OTFmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9hY3Rpb25zL05ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotCi1wdWJsaWMgY2xhc3MgTmV3WE1MRmlsZVdpemFyZERlbGVnYXRlIGltcGxlbWVudHMgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9VSV9JTlRFUk5BTF9XSVpBUkRTX05FV19YTUxfV0laQVJEX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYTUxXaXphcmQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBOZXdXaXphcmRBY3Rpb24gb3BlbkFjdGlvbjsKLQlwcml2YXRlIElTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoV2luZG93IHdpbmRvdykKLQl7Ci0JCXRoaXMub3BlbkFjdGlvbiA9IG5ldyBOZXdXaXphcmRBY3Rpb24oWE1MX1VJX0lOVEVSTkFMX1dJWkFSRFNfTkVXX1hNTF9XSVpBUkRfSUQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikKLQl7Ci0JCW9wZW5BY3Rpb24uc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0JCW9wZW5BY3Rpb24ucnVuKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2FjdGlvbnMvTmV3WFNERmlsZVdpemFyZERlbGVnYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvYWN0aW9ucy9OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcwN2IyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvYWN0aW9ucy9OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZTsKLQotcHVibGljIGNsYXNzIE5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0RfVUlfSU5URVJOQUxfV0laQVJEU19ORVdfWFNEX1dJWkFSRF9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNEV2l6YXJkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgTmV3V2l6YXJkQWN0aW9uIG9wZW5BY3Rpb247Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQotCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpCi0JewotCQl0aGlzLm9wZW5BY3Rpb24gPSBuZXcgTmV3V2l6YXJkQWN0aW9uKFhTRF9VSV9JTlRFUk5BTF9XSVpBUkRTX05FV19YU0RfV0laQVJEX0lEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0JewotCQlvcGVuQWN0aW9uLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotCQlvcGVuQWN0aW9uLnJ1bigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9hY3Rpb25zL05ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2FjdGlvbnMvTmV3WFNMRmlsZVdpemFyZERlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YzljNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2FjdGlvbnMvTmV3WFNMRmlsZVdpemFyZERlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7Ci0KLXB1YmxpYyBjbGFzcyBOZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUgaW1wbGVtZW50cyBJV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1JHX0VDTElQU0VfV1NUX1hTTF9VSV9JTlRFUk5BTF9XSVpBUkRTX05FV19TVFlMRVNIRUVUX1dJWkFSRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3U3R5bGVzaGVldFdpemFyZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIE5ld1dpemFyZEFjdGlvbiBvcGVuQWN0aW9uOwotCXByaXZhdGUgSVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KQotCXsKLQkJdGhpcy5vcGVuQWN0aW9uID0gbmV3IE5ld1dpemFyZEFjdGlvbihPUkdfRUNMSVBTRV9XU1RfWFNMX1VJX0lOVEVSTkFMX1dJWkFSRFNfTkVXX1NUWUxFU0hFRVRfV0laQVJEKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pCi0JewotCQlvcGVuQWN0aW9uLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwotCQlvcGVuQWN0aW9uLnJ1bigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0F0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0F0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM1NDEyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9BdHRyaWJ1dGVDb250ZW50QXNzaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI5NDA3OSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIGF0dHJpYnV0ZXMgdGhhdCBjb250YWluIHRoZSAieyIgY2hhcmFjdGVyIGF0dHJpYnV0ZS4KLSAqICAKLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlQ29udGVudEFzc2lzdCBleHRlbmRzIFNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHRoZSBYU0wgY29udGVudCBhc3Npc3RhbmNlIGZvciB0aGUgdGVzdCBhdHRyaWJ1dGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKiBAcGFyYW0gZG9jdW1lbnRSZWdpb24KLQkgKiBAcGFyYW0gY29tcGxldGlvblJlZ2lvbgotCSAqIEBwYXJhbSBiZWdpbgotCSAqIEBwYXJhbSBsZW5ndGgKLQkgKiBAcGFyYW0gZmlsdGVyCi0JICogQHBhcmFtIHRleHRWaWV3ZXIKLQkgKi8KLQlwdWJsaWMgQXR0cmlidXRlQ29udGVudEFzc2lzdChOb2RlIG5vZGUsIAotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiwKLQkJCUlUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24sIGludCBiZWdpbiwgaW50IGxlbmd0aCwgU3RyaW5nIGZpbHRlciwKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIpIHsKLQkJc3VwZXIobm9kZSwgZG9jdW1lbnRSZWdpb24sIGNvbXBsZXRpb25SZWdpb24sIGJlZ2luLCBsZW5ndGgsIGZpbHRlciwKLQkJCQl0ZXh0Vmlld2VyKTsKLQl9Ci0JCi0JLyoqIAotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0I2dldENvbXBsZXRpb25Qcm9wb3NhbHMoKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0Q29tcGxldGlvblByb3Bvc2FscygpIHsKLQkJCQkKLQkJaW50IG9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQkKLQkJSURPTUF0dHIgYXR0ck5vZGUgPSBnZXRBdHRyaWJ1dGVBdE9mZnNldChvZmZzZXQpOwotCSAgICAKLQkgICAgaWYgKGF0dHJOb2RlID09IG51bGwgfHwgIW1hdGNoU3RyaW5nLmNvbnRhaW5zKCJ7IikpIHsgLy8kTk9OLU5MUy0xJAotCSAgICAJcmV0dXJuIGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkgICAgfQotCSAgICAKLQkJYWRqdXN0WFBhdGhTdGFydChhdHRyTm9kZS5nZXRMb2NhbE5hbWUoKSk7Ci0JCW9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQkKLQkJbWF0Y2hTdHJpbmcgPSBleHRyYWN0WFBhdGhNYXRjaFN0cmluZyhhdHRyTm9kZSwgZ2V0UmVnaW9uKCksIGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpKTsKLQkJCi0JICAgIGFkZFNlbGVjdFByb3Bvc2FscygoRWxlbWVudClnZXROb2RlKCkuZ2V0UGFyZW50Tm9kZSgpLCBvZmZzZXQpOwotCi0JCXJldHVybiBnZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzKCk7Ci0gICAgfQotCi0JcHJpdmF0ZSBJRE9NQXR0ciBnZXRBdHRyaWJ1dGVBdE9mZnNldChpbnQgb2Zmc2V0KSB7Ci0JCU5vZGUgbm9kZSA9IGdldE5vZGUoKTsKLQkJaWYgKG5vZGUgPT0gbnVsbCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJSURPTUF0dHIgYXR0ck5vZGUgPSBudWxsOwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTWFwLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCUlET01BdHRyIHRtcEF0dHIgPSAoSURPTUF0dHIpIG5vZGVNYXAuaXRlbShpKTsKLQkJCWludCBzdGFydCA9IHRtcEF0dHIuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCWludCBlbmQgPSB0bXBBdHRyLmdldEVuZE9mZnNldCgpOwotCQkJaWYgKHN0YXJ0IDw9IG9mZnNldCB8fAotCQkJCWVuZCAgPiBvZmZzZXQpIHsKLQkJCQlhdHRyTm9kZSA9IHRtcEF0dHI7Ci0JCQkJYnJlYWs7Ci0JCQl9CQotCQl9Ci0JCXJldHVybiBhdHRyTm9kZTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEzYjFjZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKkNvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgaW4gVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDM1NzUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIENhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RhbmNlIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBmb3IKLSAqIDx4c2w6Y2FsbC13aXRoPiB0ZW1wbGF0ZXMuICAgSXQgd2lsbCBwcm92aWRlIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlCi0gKiBuYW1lZCB0ZW1wbGF0ZXMuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3QgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NT0RFID0gIm1vZGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTkFNRSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogQHBhcmFtIG5vZGUKLQkgKiBAcGFyYW0gcGFyZW50Ci0JICogQHBhcmFtIGRvY3VtZW50UmVnaW9uCi0JICogQHBhcmFtIGNvbXBsZXRpb25SZWdpb24KLQkgKiBAcGFyYW0gYmVnaW4KLQkgKiBAcGFyYW0gbGVuZ3RoCi0JICogQHBhcmFtIGZpbHRlcgotCSAqIEBwYXJhbSB0ZXh0Vmlld2VyCi0JICovCi0JcHVibGljIENhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0KE5vZGUgbm9kZSwgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiwKLQkJCUlUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24sIGludCBiZWdpbiwgaW50IGxlbmd0aCwgU3RyaW5nIGZpbHRlciwKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIpIHsKLQkJc3VwZXIobm9kZSwgZG9jdW1lbnRSZWdpb24sIGNvbXBsZXRpb25SZWdpb24sIGJlZ2luLCBsZW5ndGgsCi0JCQkJZmlsdGVyLCB0ZXh0Vmlld2VyKTsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0JfQotCQotCS8qKiAKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFJlcXVlc3QjZ2V0Q29tcGxldGlvblByb3Bvc2FscygpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKCkgewotCQlwcm9wb3NhbHMuY2xlYXIoKTsKLQkJCi0JCUlGaWxlIGVkaXRvckZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZ2V0TG9jYXRpb24oKSkpOwotCQkKLQkJU3R5bGVzaGVldE1vZGVsIG1vZGVsID0gWFNMQ29yZS5nZXRJbnN0YW5jZSgpLmdldFN0eWxlc2hlZXQoZWRpdG9yRmlsZSk7Ci0KLQkJTGlzdDxUZW1wbGF0ZT4gdGVtcGxhdGVzID0gbW9kZWwuZ2V0VGVtcGxhdGVzKCk7Ci0JCQotCQlmb3IgKFRlbXBsYXRlIHRlbXBsYXRlIDogdGVtcGxhdGVzKSB7Ci0JCQlYU0xBdHRyaWJ1dGUgYXR0cmlidXRlID0gdGVtcGxhdGUuZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSk7Ci0JCQlpZiAoYXR0cmlidXRlICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgcHJvcG9zYWxJbmZvID0gZ2V0QWRkaXRpb25hbEluZm8odGVtcGxhdGUpOwotCQkJCUN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IG5ldyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwoCi0JCQkJCQlhdHRyaWJ1dGUuZ2V0VmFsdWUoKSwgZ2V0U3RhcnRPZmZzZXQoKSArIDEsIDAsCi0JCQkJCQlhdHRyaWJ1dGUuZ2V0VmFsdWUoKS5sZW5ndGgoKSwgWFNMUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCQkJLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoCi0JCQkJCQkJCQkJWFNMUGx1Z2luSW1hZ2VzLklNR19URU1QTEFURSksIGF0dHJpYnV0ZQotCQkJCQkJCQkuZ2V0VmFsdWUoKSwgbnVsbCwgcHJvcG9zYWxJbmZvLCAwKTsKLQkJCQlhZGRQcm9wb3NhbChwcm9wb3NhbCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBZGRpdGlvbmFsSW5mbyhUZW1wbGF0ZSB0ZW1wbGF0ZSkgewotCQlYU0xBdHRyaWJ1dGUgbmFtZUF0dHJpYnV0ZSA9IHRlbXBsYXRlLmdldEF0dHJpYnV0ZShBVFRSX05BTUUpOwotCQkKLQkJU3RyaW5nIHByb3Bvc2FsSW5mbyA9IE1lc3NhZ2VzLkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWUgKyBuYW1lQXR0cmlidXRlLmdldFZhbHVlKCkgKwotCQkgICAgICAgICAgICAgICAgICAgICAgIlxyXG4iICsgTWVzc2FnZXMuQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZUZpbGUgKyB0ZW1wbGF0ZS5nZXRTdHlsZXNoZWV0KCkuZ2V0RmlsZSgpLmdldE5hbWUoKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJcmV0dXJuIHByb3Bvc2FsSW5mbzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTkyMTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW47Ci0KLS8qKgotICogQSBmYWN0b3J5IGNsYXNzIHRoYXQgcmVhZHMgYW4gZWNsaXBzZSBleHRlbnNpb24gcG9pbnQgZm9yIENvbnRlbnQgQXNzaXN0Ci0gKiBQcm9jZXNzb3JzLgotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBDb250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeSB7Ci0JcHJpdmF0ZSBzdGF0aWMgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXSBwcm9jZXNzb3JzID0gbnVsbDsKLQkKLQkvKioKLQkgKiBDcmVhdGVzIHRoZSBuZWNlc3NhcnkgQ29udGVudCBBc3Npc3QgUHJvY2Vzc29ycyB0aGF0IGhhdmUgYmVlbgotCSAqIENvbnRyaWJ1dGVkIHRvIHRoZSBYU0wgRWRpdG9yIGNvbmZpZ3VyYXRpb24uCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXSBjcmVhdGVQcm9jZXNzb3JzKCkgewotCQlJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSBnZXRFeHRlbnNpb25Qb2ludCgpOwotCQlpZiAocG9pbnQgPT0gbnVsbCkgewotCQkJcmV0dXJuIHByb2Nlc3NvcnM7Ci0JCX0KLQkJZ2V0UHJvY2Vzc29ycyhwb2ludCk7Ci0JCXJldHVybiBwcm9jZXNzb3JzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0UHJvY2Vzc29ycyhJRXh0ZW5zaW9uUG9pbnQgcG9pbnQpIHsKLQkJQXJyYXlMaXN0PE9iamVjdD4gZXByb2Nlc3NvcnMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY29uZmlnRWxlbXMgPSBwb2ludC5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKLQkJCi0JCWZvciAoSUNvbmZpZ3VyYXRpb25FbGVtZW50IHByb2Nlc3NvciA6IGNvbmZpZ0VsZW1zKSB7Ci0JCQl0cnkgewotCQkJCWZpbmFsIE9iamVjdCBvID0gcHJvY2Vzc29yLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7IC8vJE5PTi1OTFMtMSQKLQkJCQllcHJvY2Vzc29ycy5hZGQobyk7Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGV4KSB7Ci0JCQkJCi0JCQl9Ci0JCX0KLQkJaWYgKCFlcHJvY2Vzc29ycy5pc0VtcHR5KCkpIHsKLQkJCXByb2Nlc3NvcnMgPSBuZXcgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbZXByb2Nlc3NvcnMuc2l6ZSgpXTsKLQkJCWVwcm9jZXNzb3JzLnRvQXJyYXkocHJvY2Vzc29ycyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJRXh0ZW5zaW9uUG9pbnQgZ2V0RXh0ZW5zaW9uUG9pbnQoKSB7Ci0JCUlFeHRlbnNpb25SZWdpc3RyeSBwbHVnaW5SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCUlFeHRlbnNpb25Qb2ludCBwb2ludCA9IHBsdWdpblJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFhTTFVJUGx1Z2luLlBMVUdJTl9JRCwgImNvbnRlbnRBc3Npc3RQcm9jZXNzb3IiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gcG9pbnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTM1M2IzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0V4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIzMDEzNiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5OYW1lc3BhY2VJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NQXR0cjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgeHNsIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUKLSAqIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIGF0dHJpYnV0ZS4gIFRoaXMgd2lsbCBwcm92aWRlIGEgbGlzdCAKLSAqIG9mIGFsbCBrbm93biByZXN1bHQgcHJlZml4ZXMgdGhhdCBhcmVuJ3QgY3VycmVudGx5IGluIHRoZSBhdHRyaWJ1dGUKLSAqIGxpc3QuICBUaGlzIGxpc3QgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdC4gICBUaGUgWFNMIHByZWZpeCBpcwotICogZXhjbHVkZWQuCi0gKiAKLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNpbmNlIDEuMAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0IGV4dGVuZHMgQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdCB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYQ0xVREVfUkVTVUxUX1BSRUZJWEVTID0gImV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUID0gIiNhbGwiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFERElUSU9OQUxfSU5GTyA9IE1lc3NhZ2VzLkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3Q7Ci0JcHJvdGVjdGVkIFN0cmluZ1tdIHRva2VucyA9IG51bGw7Ci0KLQkvKioKLQkgKiBAcGFyYW0gbm9kZQotCSAqIEBwYXJhbSBkb2N1bWVudFJlZ2lvbgotCSAqIEBwYXJhbSBjb21wbGV0aW9uUmVnaW9uCi0JICogQHBhcmFtIGJlZ2luCi0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBmaWx0ZXIKLQkgKiBAcGFyYW0gdGV4dFZpZXdlcgotCSAqLwotCXB1YmxpYyBFeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXN1cGVyKG5vZGUsIGRvY3VtZW50UmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBiZWdpbiwgbGVuZ3RoLCBmaWx0ZXIsIHRleHRWaWV3ZXIpOwotCX0KLQkKLQkvKiogCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RSZXF1ZXN0I2dldENvbXBsZXRpb25Qcm9wb3NhbHMoKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0Q29tcGxldGlvblByb3Bvc2FscygpIHsKLQkJIHByb3Bvc2Fscy5jbGVhcigpOwotCQkgCi0JCSBJRE9NQXR0ciBhdHRyTm9kZSA9IChJRE9NQXR0cikoKElET01FbGVtZW50KWdldE5vZGUoKSkuZ2V0QXR0cmlidXRlTm9kZShFWENMVURFX1JFU1VMVF9QUkVGSVhFUyk7Ci0JCSBTdHJpbmcgZXhjbHVkZVJlc3VsdFByZWZpeGVzID0gYXR0ck5vZGUuZ2V0VmFsdWUoKTsKLQkJIGludCBvZmZzZXQgPSBnZXRDdXJzb3JQb3NpdGlvbigpOwotCQkgCi0JCSBpZiAoZXhjbHVkZVJlc3VsdFByZWZpeGVzID09IG51bGwgfHwgZXhjbHVkZVJlc3VsdFByZWZpeGVzLmVxdWFscyhERUZBVUxUKSkgewotCQkJIHJldHVybiBnZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzKCk7Ci0JCSB9Ci0JCSAKLQkJIHRva2VucyA9IGV4Y2x1ZGVSZXN1bHRQcmVmaXhlcy5zcGxpdCgiXFxzIik7IC8vJE5PTi1OTFMtMSQKLQkJIGlmICh0b2tlbnNbMF0uZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsID0gbmV3IEN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCgKLQkJCQkJCURFRkFVTFQsIG9mZnNldCwgMCwgREVGQVVMVC5sZW5ndGgoKSwKLQkJCQkJCVhTTFBsdWdpbkltYWdlSGVscGVyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoWFNMUGx1Z2luSW1hZ2VzLklNR19QUkVGSVgpLAotCQkJCQkJREVGQVVMVCwgbnVsbCwgbnVsbCwgMCk7Ci0JCQkgYWRkUHJvcG9zYWwocHJvcG9zYWwpOwotCQkgfQotCQkgQ29sbGVjdGlvbjxOYW1lc3BhY2VJbmZvPiBuYW1lc3BhY2VzID0gdGhpcy5nZXROYW1lc3BhY2VzKChJRE9NRWxlbWVudClub2RlKTsKLQkJIGZvciAoTmFtZXNwYWNlSW5mbyBuYW1lc3BhY2UgOiBuYW1lc3BhY2VzKSB7Ci0JCQkgCi0JCQkgaWYgKGluY2x1ZGVQcmVmaXgobmFtZXNwYWNlKSkgeyAKLQkJCQkgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsID0gbmV3IEN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCgKLQkJCQkJCQluYW1lc3BhY2UucHJlZml4LCBvZmZzZXQsIDAsIG5hbWVzcGFjZS5wcmVmaXgubGVuZ3RoKCksCi0JCQkJCQkJWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShYU0xQbHVnaW5JbWFnZXMuSU1HX1BSRUZJWCksCi0JCQkJCQkJbmFtZXNwYWNlLnByZWZpeCwgbnVsbCwgbmFtZXNwYWNlLnVyaSwgMCk7Ci0JCQkJIGFkZFByb3Bvc2FsKHByb3Bvc2FsKTsKLQkJCSB9Ci0JCSB9Ci0JCSAKLQkJcmV0dXJuIGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpbmNsdWRlUHJlZml4KE5hbWVzcGFjZUluZm8gbmFtZXNwYWNlKSB7Ci0JCXJldHVybiAhcHJlZml4RXhpc3RzKG5hbWVzcGFjZS5wcmVmaXgpICYmICFuYW1lc3BhY2UucHJlZml4LmVxdWFscygiIikgJiYgIW5hbWVzcGFjZS51cmkuZXF1YWxzKFhTTENvcmUuWFNMX05BTUVTUEFDRV9VUkkpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCQotCXByb3RlY3RlZCBib29sZWFuIHByZWZpeEV4aXN0cyhTdHJpbmcgcHJlZml4KSB7Ci0JCWlmICh0b2tlbnMgPT0gbnVsbCB8fCB0b2tlbnMubGVuZ3RoID09IDApIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB0b2tlbnMubGVuZ3RoOyBjbnQrKykgewotCQkJaWYgKHByZWZpeC5lcXVhbHModG9rZW5zW2NudF0pKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1NlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1NlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjZWU4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDAxNzAgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBidWcgMjU5NTc1IC0gZml4ZWQgcmVwbGFjZW1lbnQgaXNzdWUgYW5kIFhQYXRoIHRva2VuaXplcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiBhZGp1c3RlciBmb3IgbWF0Y2hTdHJpbmcuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnIDI4MTQyMCAtIGZpeGVkIHZhcmlhYmxlIHJlcGxhY2VtZW50IG9mZnNldHMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhQYXRoVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgdGhlIFhTTCBzZWxlY3QgYXR0cmlidXRlLgotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIFNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0IHsKLQotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVF9BVFRSSUJVVEUgPSAic2VsZWN0IjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX0dMT0JBTF9WQVJJQUJMRVMgPSAiL3hzbDpzdHlsZXNoZWV0L3hzbDp2YXJpYWJsZSI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFJldHJpZXZlIGFsbCBnbG9iYWwgcGFyYW1ldGVycyBpbiB0aGUgc3R5bGVzaGVldC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfR0xPQkFMX1BBUkFNUyA9ICIveHNsOnN0eWxlc2hlZXQveHNsOnBhcmFtIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogTGltaXQgc2VsZWN0aW9uIG9mIHZhcmlhYmxlcyB0byB0aG9zZSB0aGF0IGFyZSBpbiB0aGUgbG9jYWwgc2NvcGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX0xPQ0FMX1ZBUklBQkxFUyA9ICJhbmNlc3Rvcjo6eHNsOnRlbXBsYXRlL2Rlc2NlbmRhbnQ6OnhzbDp2YXJpYWJsZSI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIExpbWl0IHNlbGVjdGlvbiBvZiBwYXJhbXMgdG8gdGhvc2UgdGhhdCBhcmUgaW4gdGhlIGxvY2FsIHNjb3BlLgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9MT0NBTF9QQVJBTVMgPSAiYW5jZXN0b3I6OnhzbDp0ZW1wbGF0ZS9kZXNjZW5kYW50Ojp4c2w6cGFyYW0iOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFhQYXRoVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yIGZUZW1wbGF0ZVByb2Nlc3NvciA9IG51bGw7Ci0JcHJpdmF0ZSBMaXN0PFN0cmluZz4gZlRlbXBsYXRlQ29udGV4dHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gWFBBVEhfTE9DSyA9IG5ldyBieXRlWzBdOwotCi0JLyoqCi0JICogSGFuZGxlcyBDb250ZW50IEFzc2lzdGFuY2UgcmVxdWVzdHMgZm9yIFNlbGVjdCBBdHRyaWJ1dGVzLiBUaGlzIGlzIGNhbGxlZAotCSAqIGFuIGluc3RhbnRpYXRlZCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIGNvbXB1dGVQcm9wb3NhbHMgbWV0aG9kIGZyb20gdGhlCi0JICogWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci4gSXQgd2lsbCBjYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSBwcm9wb3NhbHMgdGhhdAotCSAqIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBYU0wgc2VsZWN0IGF0dHJpYnV0ZS4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZQotCSAqIEBwYXJhbSBkb2N1bWVudFJlZ2lvbgotCSAqIEBwYXJhbSBjb21wbGV0aW9uUmVnaW9uCi0JICogQHBhcmFtIGJlZ2luCi0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBmaWx0ZXIKLQkgKiBAcGFyYW0gdGV4dFZpZXdlcgotCSAqLwotCXB1YmxpYyBTZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXN1cGVyKG5vZGUsIGRvY3VtZW50UmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBiZWdpbiwgbGVuZ3RoLCBmaWx0ZXIsCi0JCQkJdGV4dFZpZXdlcik7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCS8qKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0UmVxdWVzdCNnZXRDb21wbGV0aW9uUHJvcG9zYWxzKCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IGdldENvbXBsZXRpb25Qcm9wb3NhbHMoKSB7Ci0JCXByb3Bvc2Fscy5jbGVhcigpOwotCi0JCWFkanVzdFhQYXRoU3RhcnQoU0VMRUNUX0FUVFJJQlVURSk7Ci0KLQkJaW50IG9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IGdldEF0dHJpYnV0ZShTRUxFQ1RfQVRUUklCVVRFKTsKLQotCQl0aGlzLm1hdGNoU3RyaW5nID0gZXh0cmFjdFhQYXRoTWF0Y2hTdHJpbmcoYXR0ck5vZGUsIGdldFJlZ2lvbigpLAotCQkJCWdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpKTsKLQotCQlhZGRTZWxlY3RQcm9wb3NhbHMoKEVsZW1lbnQpIGdldE5vZGUoKS5nZXRQYXJlbnROb2RlKCksIG9mZnNldCk7Ci0KLQkJcmV0dXJuIGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSURPTUF0dHIgZ2V0QXR0cmlidXRlKFN0cmluZyBhdHRyTmFtZSkgewotCQlyZXR1cm4gKElET01BdHRyKSAoKElET01FbGVtZW50KSBnZXROb2RlKCkpLmdldEF0dHJpYnV0ZU5vZGUoYXR0ck5hbWUpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbmVlZHMgdG8gc2V0dXAgdGhlIGNvbnRlbnQgYXNzaXN0YW5jZSBjb3JyZWN0bHkuIEhlcmUgaXMgd2hhdCBuZWVkcwotCSAqIHRvIGhhcHBlbjogMS4gQWRqdXN0IHRoZSBtYXRjaFN0cmluZyAoVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQKLQkgKiBlYXJsaWVyKSAyLiBHZXQgdGhlIGN1cnJlbnQgdG9rZW5zIG9mZnNldCBwb3NpdGlvbi4udGhpcyB3aWxsIGJlIHRoZQotCSAqIHN0YXJ0aW5nIG9mZnNldC4gMy4gR2V0IHRoZSByZXBsYWNlbWVudCBsZW5ndGguLi50aGlzIGlzIHRoZSBkaWZmZXJlbmNlCi0JICogYmV0d2VlbiB0aGUgdG9rZW4gb2Zmc2V0IGFuZCB0aGUgbmV4dCB0b2tlbiBvciBlbmQgb2YgdGhlIHN0cmluZwotCSAqIAotCSAqIEBwYXJhbSBhdHRyTmFtZQotCSAqICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byB1c2UgYXMgdGhlIHN0YXJ0aW5nIG5vZGUuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgYWRqdXN0WFBhdGhTdGFydChTdHJpbmcgYXR0ck5hbWUpIHsKLQkJSURPTUVsZW1lbnQgZWxlbSA9IChJRE9NRWxlbWVudCkgZ2V0Tm9kZSgpOwotCQlJRE9NQXR0ciB4cGF0aE5vZGUgPSAoSURPTUF0dHIpIGVsZW0uZ2V0QXR0cmlidXRlTm9kZShhdHRyTmFtZSk7Ci0JCWlmICh4cGF0aE5vZGUgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJU3RyaW5nIHhwYXRoU3RyaW5nID0geHBhdGhOb2RlLmdldFZhbHVlKCk7Ci0JCWlmICh4cGF0aFN0cmluZy5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc3RhcnRPZmZzZXQgPSB4cGF0aE5vZGUuZ2V0VmFsdWVSZWdpb25TdGFydE9mZnNldCgpOwotCi0JCXJlcGxhY2VtZW50TGVuZ3RoID0gZ2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uKCkgLSBzdGFydE9mZnNldDsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGV4dHJhY3RYUGF0aE1hdGNoU3RyaW5nKElET01BdHRyIG5vZGUsCi0JCQlJVGV4dFJlZ2lvbiBhUmVnaW9uLCBpbnQgb2Zmc2V0KSB7Ci0JCWlmIChub2RlID09IG51bGwgfHwgbm9kZS5nZXRWYWx1ZSgpLmxlbmd0aCgpID09IDApCi0JCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQotCQlpZiAobWF0Y2hTdHJpbmcubGVuZ3RoKCkgPCAxKSB7Ci0JCQlyZXR1cm4gbWF0Y2hTdHJpbmc7Ci0JCX0KLQotCQlpbnQgY29sdW1uID0gb2Zmc2V0IC0gbm9kZS5nZXRWYWx1ZVJlZ2lvblN0YXJ0T2Zmc2V0KCkgLSAxOwotCQlTdHJpbmcgbm9kZVZhbHVlID0gbm9kZS5nZXRWYWx1ZSgpOwotCi0JCWludCBzZXBlcmF0b3JQb3MgPSBnZXRYUGF0aFNlcGVyYXRvclBvcyhjb2x1bW4sIG5vZGVWYWx1ZSk7Ci0KLQkJaWYgKHNlcGVyYXRvclBvcyA+PSBjb2x1bW4pIHsKLQkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJcmV0dXJuIG5vZGUuZ2V0VmFsdWUoKS5zdWJzdHJpbmcoc2VwZXJhdG9yUG9zLCBjb2x1bW4pOwotCX0KLQotCXByb3RlY3RlZCBpbnQgZ2V0WFBhdGhTZXBlcmF0b3JQb3MoaW50IGNvbHVtbiwgU3RyaW5nIG5vZGVWYWx1ZSkgewotCQljaGFyW10ga2V5VG9rZW5zID0geyAneycsICcvJywgJ1snLCAnXScsICcoJywgJyknLCAnLCcsICcgJywgfTsKLQotCQlpbnQgc2VwZXJhdG9yUG9zID0gMDsKLQotCQlTdHJpbmcgcG90ZW50aWFsTWF0Y2hTdHJpbmcgPSBub2RlVmFsdWUuc3Vic3RyaW5nKDAsIGNvbHVtbik7Ci0KLQkJZm9yIChpbnQgY250ID0gMDsgY250IDwga2V5VG9rZW5zLmxlbmd0aDsgY250KyspIHsKLQkJCWludCBrZXlQb3MgPSBwb3RlbnRpYWxNYXRjaFN0cmluZy5sYXN0SW5kZXhPZihrZXlUb2tlbnNbY250XSk7Ci0JCQlpZiAoa2V5UG9zID49IDAgJiYga2V5UG9zIDw9IGNvbHVtbiAtIDEpIHsKLQkJCQlzZXBlcmF0b3JQb3MgPSBrZXlQb3MgKyAxOwotCQkJfQotCQl9Ci0KLQkJaW50IGF4aXNQb3MgPSBub2RlVmFsdWUuaW5kZXhPZigiOjoiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoYXhpc1BvcyA+IHNlcGVyYXRvclBvcyAmJiBheGlzUG9zIDw9IGNvbHVtbiAtIDEpIHsKLQkJCXNlcGVyYXRvclBvcyA9IGF4aXNQb3MgKyAxOwotCQl9Ci0JCXJldHVybiBzZXBlcmF0b3JQb3M7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYWRkU2VsZWN0UHJvcG9zYWxzKEVsZW1lbnQgcm9vdEVsZW1lbnQsIGludCBvZmZzZXQpIHsKLQkJYWRkQ29udGVudE1vZGVsUHJvcG9zYWxzKG9mZnNldCk7Ci0JCWFkZEdsb2JhbFByb3Bvc2Fscyhyb290RWxlbWVudCwgb2Zmc2V0IC0gZ2V0TWF0Y2hTdHJpbmcoKS5sZW5ndGgoKSk7Ci0JCWFkZExvY2FsUHJvcG9zYWxzKGdldE5vZGUoKSwgb2Zmc2V0IC0gZ2V0TWF0Y2hTdHJpbmcoKS5sZW5ndGgoKSk7Ci0JCWFkZFRlbXBsYXRlcyhUZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguQVhJUywgb2Zmc2V0KTsKLQkJYWRkVGVtcGxhdGVzKFRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aC5YUEFUSCwgb2Zmc2V0KTsKLQkJYWRkVGVtcGxhdGVzKFRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aC5DVVNUT00sIG9mZnNldCk7Ci0JCWFkZFRlbXBsYXRlcyhUZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguT1BFUkFUT1IsIG9mZnNldCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZENvbnRlbnRNb2RlbFByb3Bvc2FscyhpbnQgb2Zmc2V0KSB7Ci0JCUFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0IHhwYXRoWE1McHJvcG9zYWxzID0gbmV3IFhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3QoCi0JCQkJbm9kZSwgZG9jdW1lbnRSZWdpb24sIGdldFJlZ2lvbigpLCBvZmZzZXQKLQkJCQkJCS0gZ2V0TWF0Y2hTdHJpbmcoKS5sZW5ndGgoKSwgZ2V0UmVwbGFjZW1lbnRMZW5ndGgoKSwKLQkJCQlnZXRNYXRjaFN0cmluZygpLCB0ZXh0Vmlld2VyKTsKLQkJQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IHhtbFByb3Bvc2FscyA9IHhwYXRoWE1McHJvcG9zYWxzCi0JCQkJLmdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkJcHJvcG9zYWxzLmFkZEFsbCh4bWxQcm9wb3NhbHMpOwotCX0KLQotCS8qKgotCSAqIEFkZHMgWFBhdGggcmVsYXRlZCB0ZW1wbGF0ZXMgdG8gdGhlIGxpc3Qgb2YgcHJvcG9zYWxzCi0JICogCi0JICogQHBhcmFtIGNvbnRlbnRBc3Npc3RSZXF1ZXN0Ci0JICogQHBhcmFtIGNvbnRleHQKLQkgKiBAcGFyYW0gc3RhcnRPZmZzZXQKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBhZGRUZW1wbGF0ZXMoU3RyaW5nIGNvbnRleHQsIGludCBzdGFydE9mZnNldCkgewotCQlpZiAoZlRlbXBsYXRlQ29udGV4dHMuY29udGFpbnMoY29udGV4dCkKLQkJCQl8fCBnZXRUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IoKSA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJWFBhdGhUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IgcHJvY2Vzc29yID0gZ2V0VGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yKCk7Ci0KLQkJZlRlbXBsYXRlQ29udGV4dHMuYWRkKGNvbnRleHQpOwotCi0JCXByb2Nlc3Nvci5zZXRDb250ZXh0VHlwZShjb250ZXh0KTsKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2FscygKLQkJCQl0ZXh0Vmlld2VyLCBzdGFydE9mZnNldCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcG9zYWxzLmxlbmd0aDsgKytpKSB7Ci0JCQlJQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsID0gcHJvcG9zYWxzW2ldOwotCQkJaWYgKG1hdGNoU3RyaW5nLmxlbmd0aCgpID4gMCkgewotCQkJCWlmIChwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkuc3RhcnRzV2l0aChtYXRjaFN0cmluZykpIHsKLQkJCQkJYWRkUHJvcG9zYWwocHJvcG9zYWxzW2ldKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWFkZFByb3Bvc2FsKHByb3Bvc2Fsc1tpXSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkTG9jYWxQcm9wb3NhbHMoTm9kZSB4cGF0aG5vZGUsIGludCBvZmZzZXQpIHsKLQkJYWRkVmFyaWFibGVzUHJvcG9zYWxzKFhQQVRIX0xPQ0FMX1ZBUklBQkxFUywgeHBhdGhub2RlLCBvZmZzZXQpOwotCQlhZGRWYXJpYWJsZXNQcm9wb3NhbHMoWFBBVEhfTE9DQUxfUEFSQU1TLCB4cGF0aG5vZGUsIG9mZnNldCApOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRHbG9iYWxQcm9wb3NhbHMoTm9kZSB4cGF0aG5vZGUsIGludCBvZmZzZXQpIHsKLQkJYWRkVmFyaWFibGVzUHJvcG9zYWxzKFhQQVRIX0dMT0JBTF9WQVJJQUJMRVMsIHhwYXRobm9kZSwgb2Zmc2V0ICk7Ci0JCWFkZFZhcmlhYmxlc1Byb3Bvc2FscyhYUEFUSF9HTE9CQUxfUEFSQU1TLCB4cGF0aG5vZGUsIG9mZnNldCk7Ci0JfQotCi0JLyoqCi0JICogQWRkcyBQYXJhbWV0ZXIgYW5kIFZhcmlhYmxlcyBhcyBwcm9wb3NhbHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgc2VsZWN0ZWQKLQkgKiBiYXNlZCBvbiB0aGUgWFBhdGggc3RhdGVtZW50IHRoYXQgaXMgc2VudCB0byBpdCBhbmQgdGhlIGlucHV0IE5vZGUKLQkgKiBwYXNzZWQuIEl0IHVzZXMgYSBjdXN0b20gY29tcG9zZXIgdG8gWFNMIFZhcmlhYmxlIHByb3Bvc2FsLgotCSAqIAotCSAqIEBwYXJhbSB4cGF0aAotCSAqIEBwYXJhbSB4cGF0aG5vZGUKLQkgKiBAcGFyYW0gY29udGVudEFzc2lzdFJlcXVlc3QKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGFkZFZhcmlhYmxlc1Byb3Bvc2FscyhTdHJpbmcgeHBhdGgsIE5vZGUgeHBhdGhub2RlLCBpbnQgb2Zmc2V0KSB7Ci0JCXN5bmNocm9uaXplZCAoWFBBVEhfTE9DSykgewotCQkJdHJ5IHsKLQkJCQlOb2RlTGlzdCBub2RlcyA9IFhTTFRYUGF0aEhlbHBlci5zZWxlY3ROb2RlTGlzdCh4cGF0aG5vZGUsCi0JCQkJCQl4cGF0aCk7Ci0JCQkJaWYgKCFoYXNOb2Rlcyhub2RlcykpIHsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCQkKLQkJCQlpbnQgc3RhcnRMZW5ndGggPSBnZXRDdXJzb3JQb3NpdGlvbigpIC0gb2Zmc2V0OwotCi0JCQkJZm9yIChpbnQgbm9kZWNudCA9IDA7IG5vZGVjbnQgPCBub2Rlcy5nZXRMZW5ndGgoKTsgbm9kZWNudCsrKSB7Ci0JCQkJCU5vZGUgbm9kZSA9IG5vZGVzLml0ZW0obm9kZWNudCk7Ci0KLQkJCQkJU3RyaW5nIHZhcmlhYmxlTmFtZSA9ICIkIiArIG5vZGUuZ2V0QXR0cmlidXRlcygpLmdldE5hbWVkSXRlbSgibmFtZSIpLmdldE5vZGVWYWx1ZSgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQkJCi0JCQkJCUN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IG5ldyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwoCi0JCQkJCQkJdmFyaWFibGVOYW1lLCBvZmZzZXQsIDAsIHN0YXJ0TGVuZ3RoCi0JCQkJCQkJCQkrIHZhcmlhYmxlTmFtZS5sZW5ndGgoKSwKLQkJCQkJCQlYU0xQbHVnaW5JbWFnZUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldEltYWdlKAotCQkJCQkJCQkJWFNMUGx1Z2luSW1hZ2VzLklNR19WQVJJQUJMRVMpLAotCQkJCQkJCXZhcmlhYmxlTmFtZSwgbnVsbCwgbnVsbCwgMCk7Ci0KLQkJCQkJaWYgKG1hdGNoU3RyaW5nLmxlbmd0aCgpID4gMCkgewotCQkJCQkJaWYgKHByb3Bvc2FsLmdldERpc3BsYXlTdHJpbmcoKS5zdGFydHNXaXRoKAotCQkJCQkJCQltYXRjaFN0cmluZykpIHsKLQkJCQkJCQlhZGRQcm9wb3NhbChwcm9wb3NhbCk7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlhZGRQcm9wb3NhbChwcm9wb3NhbCk7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJWFNMVUlQbHVnaW4ubG9nKGV4KTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgWFBhdGhUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IgZ2V0VGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yKCkgewotCQlpZiAoZlRlbXBsYXRlUHJvY2Vzc29yID09IG51bGwpIHsKLQkJCWZUZW1wbGF0ZVByb2Nlc3NvciA9IG5ldyBYUGF0aFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvcigpOwotCQl9Ci0JCXJldHVybiBmVGVtcGxhdGVQcm9jZXNzb3I7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvVGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvVGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWMxZmYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1RlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0MzU3OCAgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0IHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBwcm9wb3NhbHMgZm9yCi0gKiA8eHNsOnRlbXBsYXRlcz4gd2l0aCBhIG1vZGUgYXR0cmlidXRlLiAgIEl0IGxvb2tzIGF0IGFsbCB0aGUgbW9kZXMgZGVmaW5lZAotICogd2l0aGluIHRoZSB4c2wgbW9kZWwsIGFuZCBwdWxscyBvdXQgYW55IG1vZGVzIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQuCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX0FUVFJJQlVURSA9ICJtb2RlIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIHRoZSBUZW1wbGF0ZU1vZGUgQ29udGVudCBBc3Npc3RhbmNlIGNsYXNzLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogQHBhcmFtIHBhcmVudAotCSAqIEBwYXJhbSBkb2N1bWVudFJlZ2lvbgotCSAqIEBwYXJhbSBjb21wbGV0aW9uUmVnaW9uCi0JICogQHBhcmFtIGJlZ2luCi0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBmaWx0ZXIKLQkgKiBAcGFyYW0gdGV4dFZpZXdlcgotCSAqLwotCXB1YmxpYyBUZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXN1cGVyKG5vZGUsIGRvY3VtZW50UmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBiZWdpbiwgbGVuZ3RoLAotCQkJCWZpbHRlciwgdGV4dFZpZXdlcik7Ci0JfQotCi0JLyoqCi0JICogVGhlIG1haW4gbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wb3NhbHMuIFJldHVybnMgdGhlIGF2YWlsYWJsZQotCSAqIG1vZGVzIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQgaW4gdGhlIHtAbGluayBTdHlsZXNoZWV0TW9kZWx9LiAgSWYgbm8gcHJvcG9zYWxzCi0JICogYXJlIGZvdW5kIGl0IHJldHVybnMgYSBOVUxMIHZhbHVlLgotCSAqIEByZXR1cm4gSUNvbXBsZXRpb25Qcm9wc2FsW10gCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFJlcXVlc3QjZ2V0Q29tcGxldGlvblByb3Bvc2FscygpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKCkgewotCQlwcm9wb3NhbHMuY2xlYXIoKTsKLQkJCi0JCVN0eWxlc2hlZXRNb2RlbCBtb2RlbCA9IGdldFN0eWxlc2hlZXRNb2RlbCgpOwotCi0JCWFkZE1vZGVQcm9wb3NhbHMobW9kZWwpOwotCQlyZXR1cm4gZ2V0QWxsQ29tcGxldGlvblByb3Bvc2FscygpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBtb2RlbAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGFkZE1vZGVQcm9wb3NhbHMoU3R5bGVzaGVldE1vZGVsIG1vZGVsKSB7Ci0JCUxpc3Q8VGVtcGxhdGU+IHRlbXBsYXRlcyA9IG1vZGVsLmdldFRlbXBsYXRlcygpOwotCQlBcnJheUxpc3Q8U3RyaW5nPiBtb2RlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQkKLQkJZm9yIChUZW1wbGF0ZSB0ZW1wbGF0ZSA6IHRlbXBsYXRlcykgewotCQkJWFNMQXR0cmlidXRlIGF0dHJpYnV0ZSA9IHRlbXBsYXRlLmdldEF0dHJpYnV0ZShNT0RFX0FUVFJJQlVURSk7Ci0JCQlJRE9NTm9kZSB4bWxOb2RlID0gKElET01Ob2RlKW5vZGU7Ci0KLQkJCWlmIChhdHRyaWJ1dGUgIT0gbnVsbCAmJiB4bWxOb2RlLmdldFN0YXJ0T2Zmc2V0KCkgIT0gdGVtcGxhdGUuZ2V0T2Zmc2V0KCkpIHsKLQkJCQlDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBuZXcgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsKAotCQkJCQkJYXR0cmlidXRlLmdldFZhbHVlKCksIGdldFN0YXJ0T2Zmc2V0KCkgKyAxLCAwLAotCQkJCQkJYXR0cmlidXRlLmdldFZhbHVlKCkubGVuZ3RoKCksIFhTTFBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJCS5nZXRJbnN0YW5jZSgpLmdldEltYWdlKAotCQkJCQkJCQkJCVhTTFBsdWdpbkltYWdlcy5JTUdfTU9ERSksIGF0dHJpYnV0ZQotCQkJCQkJCQkuZ2V0VmFsdWUoKSwgbnVsbCwgbnVsbCwgMCk7Ci0JCQkJaWYgKG1vZGVzLmluZGV4T2YoYXR0cmlidXRlLmdldFZhbHVlKCkpID09IC0xKSB7Ci0JCQkJCXByb3Bvc2Fscy5hZGQocHJvcG9zYWwpOwotCQkJCQltb2Rlcy5hZGQoYXR0cmlidXRlLmdldFZhbHVlKCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQltb2Rlcy5jbGVhcigpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWNlY2E1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1RlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIGJ1ZyAyNDM1NzcgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkNhbGxUZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogUHJvdmlkZXMgY29udGVudCBhc3Npc3RhbmNlIGZvciBYU0xUIE5hbWVkIFRlbXBsYXRlcy4gICBJdCBwcm92aWRlcyBhIGxpc3QKLSAqIG9mIGF2YWlsYWJsZSBjYWxsLXRlbXBsYXRlIG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdXNlZCB3aXRoIGluIHRoZQotICogc3R5bGVzaGVldC4KLSAqIAotICogQGF1dGhvciBEYXZpZCBDYXJ2ZXIKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QgZXh0ZW5kcyBBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgWFNMVCBOYW1lZCBUZW1wbGF0ZXMuICBXaWxsIHByb3ZpZGUgYSBsaXN0Ci0JICogb2YgcHJvcG9zYWxzIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgbmFtZWQtdGVtcGxhdGVzIGlmIGFueSBhcmUgZGVmaW5lZCBpbgotCSAqIHRoZSBYU0wgU3R5bGVzaGVldCBtb2RlbC4gICBPbmx5IHByb3ZpZGVzIGEgbGlzdCBvZiBuYW1lZCB0ZW1wbGF0ZXMgdGhhdCBoYXZlbid0IGFscmVhZHkKLQkgKiBiZWVuIGFkZGVkIGFzIGEgcHJvcG9zYWwuICBEb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgaXQncyBhbHJlYWR5IGlzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgc3R5bGVzaGVldC4KLQkgKiBAcGFyYW0gbm9kZQotCSAqIEBwYXJhbSBkb2N1bWVudFJlZ2lvbgotCSAqIEBwYXJhbSBjb21wbGV0aW9uUmVnaW9uCi0JICogQHBhcmFtIGJlZ2luCi0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBmaWx0ZXIKLQkgKiBAcGFyYW0gdGV4dFZpZXdlcgotCSAqLwotCXB1YmxpYyBUZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXN1cGVyKG5vZGUsIGRvY3VtZW50UmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBiZWdpbiwgbGVuZ3RoLCBmaWx0ZXIsIHRleHRWaWV3ZXIpOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0I2dldENvbXBsZXRpb25Qcm9wb3NhbHMoKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0Q29tcGxldGlvblByb3Bvc2FscygpIHsKLQkJcHJvcG9zYWxzLmNsZWFyKCk7Ci0JCQotCQlTdHlsZXNoZWV0TW9kZWwgbW9kZWwgPSBnZXRTdHlsZXNoZWV0TW9kZWwoKTsKLQkJTGlzdDxDYWxsVGVtcGxhdGU+IHRlbXBsYXRlcyA9IG1vZGVsLmdldENhbGxUZW1wbGF0ZXMoKTsKLQkJCi0JCWZvciAoQ2FsbFRlbXBsYXRlIHRlbXBsYXRlIDogdGVtcGxhdGVzKSB7Ci0JCQlDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBjcmVhdGVQcm9wb3NhbCh0ZW1wbGF0ZSk7Ci0JCQlhZGRVbmlxdWVQcm9wb3NhbChwcm9wb3NhbCk7Ci0JCX0KLQkJCi0JCXJldHVybiBnZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFVuaXF1ZVByb3Bvc2FsKEN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCkgewotCQlpZiAocHJvcG9zYWxzLmxhc3RJbmRleE9mKHByb3Bvc2FsKSA9PSAtMSkgewotCQkJaWYgKG1hdGNoU3RyaW5nLmxlbmd0aCgpID4gMCkgewotCQkJCWlmIChwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkuc3RhcnRzV2l0aChtYXRjaFN0cmluZykpIHsKLQkJCQkJYWRkUHJvcG9zYWwocHJvcG9zYWwpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJYWRkUHJvcG9zYWwocHJvcG9zYWwpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgY3JlYXRlUHJvcG9zYWwoQ2FsbFRlbXBsYXRlIHRlbXBsYXRlKSB7Ci0JCUN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IG5ldyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwoCi0JCQkJdGVtcGxhdGUuZ2V0QXR0cmlidXRlVmFsdWUoQVRUUl9OQU1FKSwgZ2V0U3RhcnRPZmZzZXQoKSArIDEsIDAsCi0JCQkJdGVtcGxhdGUuZ2V0QXR0cmlidXRlVmFsdWUoQVRUUl9OQU1FKS5sZW5ndGgoKSwgWFNMUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCS5nZXRJbnN0YW5jZSgpLmdldEltYWdlKAotCQkJCQkJCQlYU0xQbHVnaW5JbWFnZXMuSU1HX1RFTVBMQVRFKSwgdGVtcGxhdGUKLQkJCQkJCS5nZXRBdHRyaWJ1dGVWYWx1ZShBVFRSX05BTUUpLCBudWxsLCBudWxsLCAwKTsKLQkJcmV0dXJuIHByb3Bvc2FsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvVGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1Rlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTI5NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvVGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKkNvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICphcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKkNvbnRyaWJ1dG9yczoKLSAqICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQwMTcwIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUF0dHI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgdGhlIHhzbCA8ZW1waGFzaXM+dGVzdDwvZW1waGFpcz4gYXR0cmlidXRlLgotICogIAotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdCBleHRlbmRzIFNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QgewotCi0JcHJpdmF0ZSBTdHJpbmcgQVRUUl9URVNUID0gInRlc3QiOyAgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciB0aGUgWFNMIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgdGhlIHRlc3QgYXR0cmlidXRlLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogQHBhcmFtIGRvY3VtZW50UmVnaW9uCi0JICogQHBhcmFtIGNvbXBsZXRpb25SZWdpb24KLQkgKiBAcGFyYW0gYmVnaW4KLQkgKiBAcGFyYW0gbGVuZ3RoCi0JICogQHBhcmFtIGZpbHRlcgotCSAqIEBwYXJhbSB0ZXh0Vmlld2VyCi0JICovCi0JcHVibGljIFRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0KE5vZGUgbm9kZSwgCi0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uLAotCQkJSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbiwgaW50IGJlZ2luLCBpbnQgbGVuZ3RoLCBTdHJpbmcgZmlsdGVyLAotCQkJSVRleHRWaWV3ZXIgdGV4dFZpZXdlcikgewotCQlzdXBlcihub2RlLCBkb2N1bWVudFJlZ2lvbiwgY29tcGxldGlvblJlZ2lvbiwgYmVnaW4sIGxlbmd0aCwgZmlsdGVyLAotCQkJCXRleHRWaWV3ZXIpOwotCX0KLQkKLQkvKiogCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QjZ2V0Q29tcGxldGlvblByb3Bvc2FscygpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKCkgewotCQkKLQkJYWRqdXN0WFBhdGhTdGFydChBVFRSX1RFU1QpOwotCQkKLQkJaW50IG9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IChJRE9NQXR0cikoKElET01FbGVtZW50KWdldE5vZGUoKSkuZ2V0QXR0cmlidXRlTm9kZShBVFRSX1RFU1QpOwotCQkKLQkJbWF0Y2hTdHJpbmcgPSBleHRyYWN0WFBhdGhNYXRjaFN0cmluZyhhdHRyTm9kZSwgZ2V0UmVnaW9uKCksIGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpKTsKLQkJCi0JICAgIGFkZFNlbGVjdFByb3Bvc2FscygoRWxlbWVudClnZXROb2RlKCkuZ2V0UGFyZW50Tm9kZSgpLCBvZmZzZXQpOwotCi0JCXJldHVybiBnZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzKCk7Ci0gICAgfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjNmZDMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hQYXRoRWxlbWVudENvbnRlbnRBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NDk3OCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZyAyNTk1NzUgLSByZXBsYWNlcyB0ZXh0IGlmIE1hdGNoU3RyaW5nIGhhcyBhIGxlbmd0aCB3aXRoIFhNTCBDb250ZW50IE1vZGVsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bvc2Fscy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgWE1MIEVsZW1lbnQgcHJvcG9zYWxzIHdpdGhpbiBYUGF0aCByZWxhdGVkIGl0ZW1zIGxpa2UKLSAqIHNlbGVjdCwgdGVzdCwgYW5kIG1hdGNoIGF0dHJpYnV0ZXMuICBUaGlzIHdpbGwgbGV2ZXJhZ2UgYW4gQ29udGVudE1vZGVsIHRoYXQKLSAqIGhhcyBiZWVuIGxvYWRlZCBhbmQgdHJ5IHRvIHByb3ZpZGUgYWxsIGF2YWlsYWJsZSBYTUwgZWxlbWVudHMgdGhhdCBjb3VsZCBiZSB1c2VkLgotICogSXQgc2hvdWxkIGJlIGVuaGFuY2VkIHRvIGtub3cgdGhlIGVsZW1lbnRzIHRvIGJlIHVzZWQgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbQotICogdGhlIFhQYXRoLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdCBleHRlbmRzCi0JCUFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0IHsKLQotCS8qKgotCSAqIEBwYXJhbSBub2RlCi0JICogQHBhcmFtIHBhcmVudAotCSAqIEBwYXJhbSBkb2N1bWVudFJlZ2lvbgotCSAqIEBwYXJhbSBjb21wbGV0aW9uUmVnaW9uCi0JICogQHBhcmFtIGJlZ2luCi0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBmaWx0ZXIKLQkgKiBAcGFyYW0gdGV4dFZpZXdlcgotCSAqLwotCXB1YmxpYyBYUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXN1cGVyKG5vZGUsIGRvY3VtZW50UmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBiZWdpbiwgbGVuZ3RoLAotCQkJCWZpbHRlciwgdGV4dFZpZXdlcik7Ci0JfQotCi0JLyoqCi0JICogUHJvdmlkZXMgYSBsaXN0IG9mIHBvc3NpYmxlIHByb3Bvc2FscyBmb3IgdGhlIFhNTCBFbGVtZW50cyB3aXRoaW4gdGhlIGN1cnJlbnQKLQkgKiBzY29wZS4gIFRoaXMgbGV2ZXJhZ2VzIHRoZSBDb250ZW50TW9kZWwgdGhhdCB3YXMgbG9hZGVkIGJ5IHRoZSBYTUwgQ2F0YWxvZywgCi0JICogQ3VzdG9tIFJlc29sdmVyLCBvciB0aGUgaW5mZXJyZWQgZ3JhbW1hci4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IGdldENvbXBsZXRpb25Qcm9wb3NhbHMoKSB7Ci0JCUlET01Eb2N1bWVudCBkb21Eb2N1bWVudCA9IChJRE9NRG9jdW1lbnQpIG5vZGUuZ2V0T3duZXJEb2N1bWVudCgpOwotCQkKLQkJZ2V0WFBhdGhYTUxFbGVtZW50UHJvcG9zYWxzKGRvbURvY3VtZW50KTsKLQkJCi0JCQotCQlyZXR1cm4gZ2V0QWxsQ29tcGxldGlvblByb3Bvc2FscygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBnZXRYUGF0aFhNTEVsZW1lbnRQcm9wb3NhbHMoSURPTURvY3VtZW50IGRvbURvY3VtZW50KSB7Ci0JCXRyeSB7Ci0JCQlOb2RlIGFuY2VzdG9yTm9kZSA9IFhTTFRYUGF0aEhlbHBlci5zZWxlY3RTaW5nbGVOb2RlKGdldE5vZGUoKSwKLQkJCQkJWFBBVEhfRklSU1RfWFNMQU5DRVNUT1JfTk9ERSk7Ci0JCQkKLQkJCUl0ZXJhdG9yPENNTm9kZT4gY21Ob2RlSXQgPSBnZXRBdmFpbGFibGVDb250ZW50Tm9kZXMoZG9tRG9jdW1lbnQsCi0JCQkJCWFuY2VzdG9yTm9kZSwgTW9kZWxRdWVyeS5JTkNMVURFX0NISUxEX05PREVTKTsKLQkJCQotCQkJY3JlYXRlWFBhdGhYTUxQcm9wb3NhbHMoYW5jZXN0b3JOb2RlLCBjbU5vZGVJdCk7Ci0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlYU0xVSVBsdWdpbi5sb2coZXgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVhQYXRoWE1MUHJvcG9zYWxzKE5vZGUgYW5jZXN0b3JOb2RlLAotCQkJSXRlcmF0b3I8Q01Ob2RlPiBjbU5vZGVJdCkgewotCQl3aGlsZSAoY21Ob2RlSXQuaGFzTmV4dCgpKSB7Ci0JCQlDTU5vZGUgY21Ob2RlID0gY21Ob2RlSXQubmV4dCgpOwotCQkJU3RyaW5nIHByb3Bvc2VkVGV4dCA9IGdldFJlcXVpcmVkTmFtZShhbmNlc3Rvck5vZGUsIGNtTm9kZSk7Ci0JCQlpZiAoIShwcm9wb3NlZFRleHQuY29udGFpbnMoInhzbDoiKSB8fCBwcm9wb3NlZFRleHQuY29udGFpbnMoInhzbHQ6IikpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCWludCBvZmZzZXQgPSBnZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb24oKTsKLQkJCQlJbWFnZSBpbWFnZSA9IGdldENNTm9kZUltYWdlKGNtTm9kZSk7Ci0JCQkJaW50IHN0YXJ0TGVuZ3RoID0gZ2V0Q3Vyc29yUG9zaXRpb24oKSAtIG9mZnNldDsKLQkJCQlTdHJpbmcgYWRkaXRpb25hbEluZm8gPSBnZXRJbmZvUHJvdmlkZXIoKS5nZXRJbmZvKGNtTm9kZSk7Ci0JCQkJCi0JCQkJaWYgKG1hdGNoU3RyaW5nLmxlbmd0aCgpID4gMCkgewotCQkJCQlpZiAocHJvcG9zZWRUZXh0LnN0YXJ0c1dpdGgobWF0Y2hTdHJpbmcpKSB7Ci0JCQkJCQlDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBjcmVhdGVQcm9wb3NhbCgKLQkJCQkJCQkJcHJvcG9zZWRUZXh0LCBhZGRpdGlvbmFsSW5mbywgb2Zmc2V0LCBpbWFnZSwgc3RhcnRMZW5ndGgpOwotCQkJCQkJYWRkUHJvcG9zYWwocHJvcG9zYWwpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsID0gY3JlYXRlUHJvcG9zYWwoCi0JCQkJCQkJcHJvcG9zZWRUZXh0LCBhZGRpdGlvbmFsSW5mbywgb2Zmc2V0LCBpbWFnZSwgc3RhcnRMZW5ndGgpOwotCQkJCQlhZGRQcm9wb3NhbChwcm9wb3NhbCk7Ci0JCQkJfQkJCQkJCi0JCQl9Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzZWM5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjEzODQ5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMzA5NTggLSByZWZhY3RvcmVkIHRvIGZpeCBidWcgd2l0aCBnZXR0aW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRE9NIERvY3VtZW50IGZvciB0aGUgY3VycmVudCBlZGl0b3IKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI0MDE3MCAtIHJlZmFjdG9yZWQgY29kZSB0byBoZWxwIHdpdGggbmFycm93aW5nIG9mCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzIGFuZCBlYXNpZXIgbWFpbnRlbmFuY2UuCi0gKiAgICAgRGF2aWQgQ2FydmVyIChJbnRhbGlvKSAtIGJ1ZyAyODk0OTggLSBBZGRlZCBhZGRpdGlvbmFsIGNvbnRleHQgdHlwZXMuICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZXh0SW5mb3JtYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotLyoqCi0gKiBUaGUgWFNMIENvbnRlbnQgQXNzaXN0IFByb2Nlc3NvciBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHZhcmlvdXMKLSAqIGF0dHJpYnV0ZXMgdmFsdWVzIHdpdGhpbiB0aGUgWFNMIEVkaXRvci4gVGhpcyBpbmNsdWRlcyBzdXBwb3J0IGZvciB4cGF0aHMgb24KLSAqIHNlbGVjdCBzdGF0ZW1lbnRzIGFzIHdlbGwgYXMgb24gdGVzdCBhbmQgbWF0Y2ggYXR0cmlidXRlcy4KLSAqIAotICogQGF1dGhvciBEYXZpZCBDYXJ2ZXIKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgZXh0ZW5kcyBBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgaW1wbGVtZW50cyBJQ29udGVudEFzc2lzdFByb2Nlc3NvciB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGF0dHJpYnV0ZVhwYXRoID0gInsiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiB4c2xQcm9wb3NhbHM7Ci0JcHJpdmF0ZSBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gYWRkaXRpb25hbFByb3Bvc2FsczsKLQlwcml2YXRlIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBhdHRyaWJ1dGVQcm9wb3NhbHM7Ci0JcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBuYW1lc3BhY2VzOwotCS8qKgotCSAqIFByb3ZpZGVzIGFuIFhTTCBDb250ZW50IEFzc2lzdCBQcm9jZXNzb3IgY2xhc3MgdGhhdCBpcyBYU0wgYXdhcmUgYW5kIFhNTAotCSAqIGF3YXJlLgotCSAqLwotCXB1YmxpYyBYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yKCkgewotCQlzdXBlcigpOwotCQl4c2xQcm9wb3NhbHMgPSBuZXcgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+KCk7Ci0JCWFkZGl0aW9uYWxQcm9wb3NhbHMgPSBuZXcgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+KCk7Ci0JCW5hbWVzcGFjZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJbmFtZXNwYWNlcy5hZGQoWFNMQ29yZS5YU0xfTkFNRVNQQUNFX1VSSSk7Ci0JfQotCi0JLyoqCi0JICogQ09OVEVOVCBBU1NJU1QgU1RBUlRTIEhFUkUKLQkgKiAKLQkgKiBSZXR1cm4gYSBsaXN0IG9mIHByb3Bvc2VkIGNvZGUgY29tcGxldGlvbnMgYmFzZWQgb24gdGhlIHNwZWNpZmllZAotCSAqIGxvY2F0aW9uIHdpdGhpbiB0aGUgZG9jdW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBjdXJzb3IKLQkgKiBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQtZWRpdG9yIGNvbnRyb2wuCi0JICogCi0JICogQHBhcmFtIHRleHRWaWV3ZXIKLQkgKiBAcGFyYW0gZG9jdW1lbnRQb3NpdGlvbgotCSAqICAgICAgICAgICAgLSB0aGUgY3Vyc29yIGxvY2F0aW9uIHdpdGhpbiB0aGUgZG9jdW1lbnQKLQkgKiAKLQkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIElDb21wbGV0aW9uUHJvcG9zYWwKLQkgKi8KLQlwdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIGNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzKAotCQkJSVRleHRWaWV3ZXIgdGV4dFZpZXdlciwgaW50IGRvY3VtZW50UG9zaXRpb24pIHsKLQkJaW5pdGlhbGl6ZVByb3Bvc2FsVmFyaWFibGVzKHRleHRWaWV3ZXIsIGRvY3VtZW50UG9zaXRpb24pOwotCQkKLQkJCi0KLQkJYWRkaXRpb25hbFByb3Bvc2FscyA9IGdldEFkZGl0aW9uYWxYU0xFbGVtZW50UHJvcG9zYWxzKCk7Ci0KLQkJeHNsUHJvcG9zYWxzID0gZ2V0WFNMTmFtZXNwYWNlUHJvcG9zYWxzKCk7Ci0JCQotCQlhdHRyaWJ1dGVQcm9wb3NhbHMgPSBnZXRBdHRyaWJ1dGVQcm9wb3NhbHMoKTsKLQotCQlBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gcHJvcG9zYWxMaXN0ID0gbmV3IEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPigpOwotCQlwcm9wb3NhbExpc3QuYWRkQWxsKGFkZGl0aW9uYWxQcm9wb3NhbHMpOwotCQlwcm9wb3NhbExpc3QuYWRkQWxsKHhzbFByb3Bvc2Fscyk7Ci0JCXByb3Bvc2FsTGlzdC5hZGRBbGwoYXR0cmlidXRlUHJvcG9zYWxzKTsKLQotCQlJQ29tcGxldGlvblByb3Bvc2FsW10gY29tYmluZWRQcm9wb3NhbHMgPSBjb21iaW5lUHJvcG9zYWxzKHByb3Bvc2FsTGlzdCk7Ci0KLQkJaWYgKGNvbWJpbmVkUHJvcG9zYWxzID09IG51bGwgfHwgY29tYmluZWRQcm9wb3NhbHMubGVuZ3RoID09IDApIHsKLQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5Ob0NvbnRlbnRBc3Npc3RhbmNlKTsKLQkJfQotCi0JCXJldHVybiBjb21iaW5lZFByb3Bvc2FsczsKLQl9Ci0KLQlwcml2YXRlIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBnZXRYU0xOYW1lc3BhY2VQcm9wb3NhbHMoKSB7Ci0JCWlmIChYU0xDb3JlLmlzWFNMTmFtZXNwYWNlKHhtbE5vZGUpKSB7Ci0JCQlYU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkgcmVxdWVzdEZhY3RvcnkgPSBuZXcgWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5KAotCQkJCQl0ZXh0Vmlld2VyLCBjdXJzb3JQb3NpdGlvbiwgeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJCWNvbXBsZXRpb25SZWdpb24sIG1hdGNoU3RyaW5nKTsKLQotCQkJSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QgY29udGVudEFzc2lzdFJlcXVlc3QgPSByZXF1ZXN0RmFjdG9yeQotCQkJCQkuZ2V0Q29udGVudEFzc2lzdFJlcXVlc3QoKTsKLQkJCXhzbFByb3Bvc2FscyA9IGNvbnRlbnRBc3Npc3RSZXF1ZXN0LmdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkJfQotCQlyZXR1cm4geHNsUHJvcG9zYWxzOwotCX0KLQotCXByaXZhdGUgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IGdldEFkZGl0aW9uYWxYU0xFbGVtZW50UHJvcG9zYWxzKCkgewotCQlpZiAoIVhTTENvcmUuaXNYU0xOYW1lc3BhY2UoeG1sTm9kZSkpIHsKLQkJCWFkZGl0aW9uYWxQcm9wb3NhbHMgPSBuZXcgWFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0KHhtbE5vZGUsCi0JCQkJCXNkUmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBjdXJzb3JQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsCi0JCQkJCXRleHRWaWV3ZXIpLmdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkJfQotCQlyZXR1cm4gYWRkaXRpb25hbFByb3Bvc2FsczsKLQl9Ci0JCi0JcHJpdmF0ZSBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0QXR0cmlidXRlUHJvcG9zYWxzKCkgewotCQlhdHRyaWJ1dGVQcm9wb3NhbHMgPSBuZXcgQXR0cmlidXRlQ29udGVudEFzc2lzdCh4bWxOb2RlLAotCQkJCXNkUmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBjdXJzb3JQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsIHRleHRWaWV3ZXIpLmdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkJcmV0dXJuIGF0dHJpYnV0ZVByb3Bvc2FsczsKLQl9Ci0KLQlwcml2YXRlIElDb21wbGV0aW9uUHJvcG9zYWxbXSBjb21iaW5lUHJvcG9zYWxzKAotCQkJQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IHByb3Bvc2FsTGlzdCkgewotCQlJQ29tcGxldGlvblByb3Bvc2FsW10gY29tYmluZWRQcm9wb3NhbHMgPSBuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwcm9wb3NhbExpc3QKLQkJCQkuc2l6ZSgpXTsKLQkJcHJvcG9zYWxMaXN0LnRvQXJyYXkoY29tYmluZWRQcm9wb3NhbHMpOwotCQlyZXR1cm4gY29tYmluZWRQcm9wb3NhbHM7Ci0JfQotCi0JLyoqCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yI2NvbXB1dGVDb250ZXh0SW5mb3JtYXRpb24ob3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlciwKLQkgKiAgICAgIGludCkKLQkgKi8KLQlwdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvbltdIGNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb24oSVRleHRWaWV3ZXIgdmlld2VyLAotCQkJaW50IG9mZnNldCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IjZ2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzKCkKLQkgKi8KLQlwdWJsaWMgY2hhcltdIGdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yI2dldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvcigpCi0JICovCi0JcHVibGljIElDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IgZ2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1heGltdW1WZXJzaW9uKCkgewotCQlyZXR1cm4gIjIuMCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1pbmltdW1WZXJzaW9uKCkgewotCQlyZXR1cm4gIjEuMCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgQXJyYXlMaXN0PFN0cmluZz4gZ2V0TmFtZXNwYWNlcygpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gYXNzaXN0YW5jZU9uQXR0cmlidXRlKElET01Ob2RlIG5vZGUsIElUZXh0UmVnaW9uIGFSZWdpb24pIHsKLQkJTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTWFwLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCUlET01BdHRyIGF0dHJOb2RlID0gKElET01BdHRyKSBub2RlTWFwLml0ZW0oaSk7Ci0JCQlpZiAoYXR0ck5vZGUuZ2V0VmFsdWVSZWdpb24oKSAhPSBudWxsICYmCi0JCQkJYXR0ck5vZGUuZ2V0VmFsdWVSZWdpb24oKS5nZXRTdGFydCgpID09IGFSZWdpb24uZ2V0U3RhcnQoKSkgewotCQkJCWlmIChhdHRyTm9kZS5nZXRWYWx1ZSgpLmNvbnRhaW5zKGF0dHJpYnV0ZVhwYXRoKSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0JCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMDYxYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NQXR0cjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Lk51bGxDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogQSBGYWN0b3J5IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBDb250ZW50IEFzc2lzdCBSZXF1ZXN0IGNsYXNzIGlzIG5lZWRlZCBhbmQKLSAqIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNsYXNzLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5IHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TRUxFQ1QgPSAic2VsZWN0IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1RFU1QgPSAidGVzdCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NQVRDSCA9ICJtYXRjaCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9FWENMVURFX1JFU1VMVF9QUkVGSVhFUyA9ICJleGNsdWRlLXJlc3VsdC1wcmVmaXhlcyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9NT0RFID0gIm1vZGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fVEVNUExBVEUgPSAidGVtcGxhdGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQVBQTFlURU1QTEFURVMgPSAiYXBwbHktdGVtcGxhdGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNX0FQUExZX0lNUE9SVFMgPSAiYXBwbHktaW1wb3J0cyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9IUkVGID0gImhyZWYiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fQ0FMTFRFTVBMQVRFID0gImNhbGwtdGVtcGxhdGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTkFNRSA9ICJuYW1lIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcjsKLQlwcml2YXRlIGludCBkb2N1bWVudFBvc2l0aW9uOwotCXByaXZhdGUgSURPTU5vZGUgeG1sTm9kZTsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2RSZWdpb247Ci0JcHJpdmF0ZSBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uOwotCXByaXZhdGUgU3RyaW5nIG1hdGNoU3RyaW5nOwotCQotCi0JLyoqCi0JICogQHBhcmFtIHRleHRWaWV3ZXIKLQkgKiBAcGFyYW0gZG9jdW1lbnRQb3NpdGlvbgotCSAqIEBwYXJhbSB4bWxOb2RlCi0JICogQHBhcmFtIHNkUmVnaW9uCi0JICogQHBhcmFtIGNvbXBsZXRpb25SZWdpb24KLQkgKiBAcGFyYW0gbWF0Y2hTdHJpbmcKLQkgKi8KLQlwdWJsaWMgWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5KElUZXh0Vmlld2VyIHRleHRWaWV3ZXIsIGludCBkb2N1bWVudFBvc2l0aW9uLCBJRE9NTm9kZSB4bWxOb2RlLAotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzZFJlZ2lvbiwgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbiwKLQkJCVN0cmluZyBtYXRjaFN0cmluZykgewotCQl0aGlzLnRleHRWaWV3ZXIgPSB0ZXh0Vmlld2VyOwotCQl0aGlzLmRvY3VtZW50UG9zaXRpb24gPSBkb2N1bWVudFBvc2l0aW9uOwotCQl0aGlzLnhtbE5vZGUgPSB4bWxOb2RlOwotCQl0aGlzLnNkUmVnaW9uID0gc2RSZWdpb247Ci0JCXRoaXMuY29tcGxldGlvblJlZ2lvbiA9IGNvbXBsZXRpb25SZWdpb247Ci0JCXRoaXMubWF0Y2hTdHJpbmcgPSBtYXRjaFN0cmluZzsKLQl9Ci0JLyoqCi0JICogR2V0IHRoZSBhcHByb3ByaWF0ZSBjb250ZW50IGFzc2lzdCByZXF1ZXN0IGNsYXNzIGZvciB0aGUgWFNMIHJlcXVlc3QuCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBnZXRDb250ZW50QXNzaXN0UmVxdWVzdCgpIHsKLQkJTmFtZWROb2RlTWFwIG5vZGVNYXAgPSB4bWxOb2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJSURPTUVsZW1lbnQgZWxlbWVudCA9IChJRE9NRWxlbWVudCkgeG1sTm9kZTsKLQkJSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QgcHJvcG9zYWwgPSBjb21tb25BdHRyaWJ1dGVQcm9wb3NhbHMobm9kZU1hcCk7Ci0JCQotCQlpZiAocHJvcG9zYWwgaW5zdGFuY2VvZiBOdWxsQ29udGVudEFzc2lzdFJlcXVlc3QpIHsKLQkJCWlmIChpc0VsZW1lbnRQcm9wb3NhbChlbGVtZW50KSkgewotCQkJCXByb3Bvc2FsID0gZ2V0RWxlbWVudFByb3Bvc2Fscyhub2RlTWFwLCBlbGVtZW50KTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBwcm9wb3NhbDsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudFByb3Bvc2FsKElET01FbGVtZW50IGVsZW1lbnQpIHsKLQkJU3RyaW5nIGxvY2FsTmFtZSA9IGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0JCXJldHVybiBsb2NhbE5hbWUuZXF1YWxzKEVMRU1fVEVNUExBVEUpIHx8Ci0JCSAgICAgICBsb2NhbE5hbWUuZXF1YWxzKEVMRU1fQVBQTFlURU1QTEFURVMpIHx8Ci0JCSAgICAgICBsb2NhbE5hbWUuZXF1YWxzKEVMRU1fQ0FMTFRFTVBMQVRFKTsKLQl9Ci0JCi0KLQlwcml2YXRlIElDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0IGdldEVsZW1lbnRQcm9wb3NhbHMoTmFtZWROb2RlTWFwIG5vZGVNYXAsIElET01FbGVtZW50IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKEVMRU1fVEVNUExBVEUpKSB7Ci0JCQlyZXR1cm4gZ2V0VGVtcGxhdGVQcm9wb3NhbHMobm9kZU1hcCk7Ci0JCX0KLQotCQlpZiAoZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoRUxFTV9BUFBMWVRFTVBMQVRFUykKLQkJCQl8fCBlbGVtZW50LmdldExvY2FsTmFtZSgpLmVxdWFscyhFTEVNX0FQUExZX0lNUE9SVFMpKSB7Ci0JCQlpZiAoaGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uKEFUVFJfTU9ERSwgbm9kZU1hcCwgY29tcGxldGlvblJlZ2lvbikpIHsKLQkJCQlyZXR1cm4gbmV3IFRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QoeG1sTm9kZSwKLQkJCQkJCXNkUmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBkb2N1bWVudFBvc2l0aW9uLCAwLAotCQkJCQkJbWF0Y2hTdHJpbmcsIHRleHRWaWV3ZXIpOwotCQkJfQotCi0JCX0KLQotCQlpZiAoZWxlbWVudC5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoRUxFTV9DQUxMVEVNUExBVEUpKSB7Ci0JCQlpZiAoaGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uKEFUVFJfTkFNRSwgbm9kZU1hcCwgY29tcGxldGlvblJlZ2lvbikpIHsKLQkJCQlyZXR1cm4gbmV3IENhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0KHhtbE5vZGUsIHNkUmVnaW9uLAotCQkJCQkJY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsCi0JCQkJCQl0ZXh0Vmlld2VyKTsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG5ldyBOdWxsQ29udGVudEFzc2lzdFJlcXVlc3QoeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsIHRleHRWaWV3ZXIpOwkJCi0JCQotCX0KLQkKLQlwcml2YXRlIElDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0IGdldFRlbXBsYXRlUHJvcG9zYWxzKE5hbWVkTm9kZU1hcCBub2RlTWFwKSB7Ci0JCWlmIChoYXNBdHRyaWJ1dGVBdFRleHRSZWdpb24oQVRUUl9NT0RFLCBub2RlTWFwLCBjb21wbGV0aW9uUmVnaW9uKSkgewotCQkJcmV0dXJuIG5ldyBUZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0KHhtbE5vZGUsCi0JCQkJCXNkUmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBkb2N1bWVudFBvc2l0aW9uLCAwLAotCQkJCQltYXRjaFN0cmluZywgdGV4dFZpZXdlcik7Ci0JCX0KLQkJCi0JCWlmIChoYXNBdHRyaWJ1dGVBdFRleHRSZWdpb24oQVRUUl9OQU1FLCBub2RlTWFwLCBjb21wbGV0aW9uUmVnaW9uKSkgewotCQkJcmV0dXJuIG5ldyBUZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0KCB4bWxOb2RlLAotCQkJCQlzZFJlZ2lvbiwgY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwKLQkJCQkJbWF0Y2hTdHJpbmcsIHRleHRWaWV3ZXIpOyAgICAgICAgCi0JCX0KLQkJCi0JCXJldHVybiBuZXcgTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0KHhtbE5vZGUsIHNkUmVnaW9uLAotCQkJCWNvbXBsZXRpb25SZWdpb24sIGRvY3VtZW50UG9zaXRpb24sIDAsIG1hdGNoU3RyaW5nLCB0ZXh0Vmlld2VyKTsJCQotCQkKLQl9Ci0JCi0JcHJpdmF0ZSBJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBjb21tb25BdHRyaWJ1dGVQcm9wb3NhbHMoCi0JCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCkgewotCQlpZiAoaGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uKEFUVFJfU0VMRUNULCBub2RlTWFwLAotCQkJCWNvbXBsZXRpb25SZWdpb24pKSB7Ci0JCQlyZXR1cm4gbmV3IFNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QoeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJCWNvbXBsZXRpb25SZWdpb24sIGRvY3VtZW50UG9zaXRpb24sIDAsIG1hdGNoU3RyaW5nLAotCQkJCQl0ZXh0Vmlld2VyKTsKLQkJfQotCi0vLwkJaWYgKGhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbihBVFRSX01BVENILCBub2RlTWFwLCBjb21wbGV0aW9uUmVnaW9uKSkgewotLy8JCQlyZXR1cm4gbmV3IFNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QoeG1sTm9kZSwgc2RSZWdpb24sCi0vLwkJCQkJY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsCi0vLwkJCQkJdGV4dFZpZXdlcik7Ci0vLwkJfQotCi0JCWlmIChoYXNBdHRyaWJ1dGVBdFRleHRSZWdpb24oQVRUUl9URVNULCBub2RlTWFwLCBjb21wbGV0aW9uUmVnaW9uKSkgewotCQkJcmV0dXJuIG5ldyBUZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdCh4bWxOb2RlLCBzZFJlZ2lvbiwKLQkJCQkJY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsCi0JCQkJCXRleHRWaWV3ZXIpOwotCQl9Ci0KLQkJaWYgKGhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbihBVFRSX0VYQ0xVREVfUkVTVUxUX1BSRUZJWEVTLAotCQkJCW5vZGVNYXAsIGNvbXBsZXRpb25SZWdpb24pKSB7Ci0JCQlyZXR1cm4gbmV3IEV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QoeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJCWNvbXBsZXRpb25SZWdpb24sIGRvY3VtZW50UG9zaXRpb24sIDAsIG1hdGNoU3RyaW5nLAotCQkJCQl0ZXh0Vmlld2VyKTsKLQkJfQotCi0JCWlmIChoYXNBdHRyaWJ1dGVBdFRleHRSZWdpb24oQVRUUl9IUkVGLCBub2RlTWFwLCBjb21wbGV0aW9uUmVnaW9uKSkgewotCQkJcmV0dXJuIG5ldyBIcmVmQ29udGVudEFzc2lzdFJlcXVlc3QoeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJCWNvbXBsZXRpb25SZWdpb24sIGRvY3VtZW50UG9zaXRpb24sIDAsIG1hdGNoU3RyaW5nLAotCQkJCQl0ZXh0Vmlld2VyKTsKLQkJfQotCi0KLQkJcmV0dXJuIG5ldyBOdWxsQ29udGVudEFzc2lzdFJlcXVlc3QoeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsIHRleHRWaWV3ZXIpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbihTdHJpbmcgYXR0ck5hbWUsCi0JCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCwgSVRleHRSZWdpb24gYVJlZ2lvbikgewotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IChJRE9NQXR0cikgbm9kZU1hcC5nZXROYW1lZEl0ZW0oYXR0ck5hbWUpOwotCQlyZXR1cm4gYXR0ck5vZGUgIT0gbnVsbCAmJiBhdHRyTm9kZS5nZXRWYWx1ZVJlZ2lvbigpICE9IG51bGwKLQkJCQkmJiBhdHRyTm9kZS5nZXRWYWx1ZVJlZ2lvbigpLmdldFN0YXJ0KCkgPT0gYVJlZ2lvbi5nZXRTdGFydCgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNDZlYmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDQ5NzggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBidWcgMjYzODQzIC0gRml4IG51bGwgcG9pbnRlciBleGNlcHRpb24gb24gcmVnaW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsLlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLSAKLQotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBwcm9wb3NhbHMgb3V0c2lkZSBvZiB0aGUgWFNMIG5hbWVzcGFjZS4gIE5vcm1hbAotICogWE1MIGVkaXRvciBjb250ZW50IGFzc2lzdGFuY2Ugb25seSBwcm92aWRlcyBwcm9wb3NhbHMgZm9yIGl0ZW1zIHdpdGhpbiB0aGUgc2FtZSBuYW1lc3BhY2UKLSAqIG9yIGlmIGFuIGVsZW1lbnQgaGFzIGNoaWxkcmVuIGVsZW1lbnRzLiAgIFRoaXMgY2xhc3MgZXh0ZW5kcyB0aGlzIGZ1bmN0aW9uYWxpdHkgYnkgY2hlY2tpbmcKLSAqIGZvciB0aGUgZmlyc3QgWFNMIGFuY2VzdG9yIGFuZCB1c2VzIHRoYXQgdG8gZGV0ZXJtaW5lIHdoYXQgcHJvcG9zYWxzIHNob3VsZCBiZQotICogcHJvdmlkZWQgaW4gdGhlIHdheSBvZiB4c2wgZWxlbWVudHMuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QgZXh0ZW5kcwotCQlBYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdCB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gbm9kZQotCSAqIEBwYXJhbSBwYXJlbnQKLQkgKiBAcGFyYW0gZG9jdW1lbnRSZWdpb24KLQkgKiBAcGFyYW0gY29tcGxldGlvblJlZ2lvbgotCSAqIEBwYXJhbSBiZWdpbgotCSAqIEBwYXJhbSBsZW5ndGgKLQkgKiBAcGFyYW0gZmlsdGVyCi0JICogQHBhcmFtIHRleHRWaWV3ZXIKLQkgKi8KLQlwdWJsaWMgWFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXN1cGVyKG5vZGUsIGRvY3VtZW50UmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBiZWdpbiwgbGVuZ3RoLAotCQkJCWZpbHRlciwgdGV4dFZpZXdlcik7Ci0JCWNvbnRlbnRNb2RlbCA9IG5ldyBYU0xDb250ZW50TW9kZWxHZW5lcmF0b3IoKTsKLQl9Ci0KLQotCS8qKgotCSAqIENhbGN1bGF0ZSBwcm9wb3NhbHMgZm9yIG9wZW4gY29udGVudCByZWdpb25zLgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNvbXB1dGVUYWdPcGVuUHJvcG9zYWxzKCkgewotCi0JCWlmIChyZXBsYWNlbWVudEJlZ2luUG9zaXRpb24gPT0gZG9jdW1lbnRSZWdpb24uZ2V0U3RhcnRPZmZzZXQocmVnaW9uKSkgewotCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJCS8vIGF0IHRoZSBzdGFydCBvZiBhbiBleGlzdGluZyB0YWcsIHJpZ2h0IGJlZm9yZSB0aGUgJzwnCi0JCQkJY29tcHV0ZVRhZ05hbWVQcm9wb3NhbHMoKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8vIHdpdGhpbiB0aGUgd2hpdGUgc3BhY2UKLQkJCUlUZXh0UmVnaW9uIG5hbWUgPSBnZXROYW1lUmVnaW9uKCgoSURPTU5vZGUpIG5vZGUpCi0JCQkJCS5nZXRTdGFydFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKTsKLQkJCWlmICgobmFtZSAhPSBudWxsKQotCQkJCQkmJiAoKGRvY3VtZW50UmVnaW9uLmdldFN0YXJ0T2Zmc2V0KG5hbWUpIDw9IHJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbikgJiYgKGRvY3VtZW50UmVnaW9uCi0JCQkJCQkJLmdldEVuZE9mZnNldChuYW1lKSA+PSByZXBsYWNlbWVudEJlZ2luUG9zaXRpb24pKSkgewotCQkJCS8vIHJlcGxhY2UgdGhlIGV4aXN0aW5nIG5hbWUKLQkJCQlyZXBsYWNlbWVudEJlZ2luUG9zaXRpb24gPSBkb2N1bWVudFJlZ2lvbi5nZXRTdGFydE9mZnNldChuYW1lKTsKLQkJCQlyZXBsYWNlbWVudExlbmd0aCA9IG5hbWUuZ2V0VGV4dExlbmd0aCgpOwotCQkJfSBlbHNlIHsKLQkJCQkvLyBpbnNlcnQgYSB2YWxpZCBuZXcgbmFtZSwgb3IgcG9zc2libHkgYW4gZW5kIHRhZwotCQkJCS8vIGFkZEVuZFRhZ1Byb3Bvc2Fscyhjb250ZW50QXNzaXN0UmVxdWVzdCk7Ci0JCQkJc2V0UmVwbGFjZW1lbnRMZW5ndGgoMCk7Ci0JCQl9Ci0JCQlhZGRUYWdOYW1lUHJvcG9zYWxzKGdldEVsZW1lbnRQb3NpdGlvbihub2RlKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBQcm92aWRlcyBhIGxpc3Qgb2YgcG9zc2libGUgcHJvcG9zYWxzIGZvciB0aGUgWFNMIEVsZW1lbnRzIHdpdGhpbiB0aGUgY3VycmVudAotCSAqIHNjb3BlLgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0Q29tcGxldGlvblByb3Bvc2FscygpIHsKLQkJaWYgKHJlZ2lvbiA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbmV3IEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPigpOwotCQl9Ci0JCQotCQlpZiAocmVnaW9uLmdldFR5cGUoKSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTikgewotCQkJY29tcHV0ZVRhZ09wZW5Qcm9wb3NhbHMoKTsKLQkJfSBlbHNlIGlmIChyZWdpb24uZ2V0VHlwZSgpID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FKSB7Ci0JCQljb21wdXRlVGFnTmFtZVByb3Bvc2FscygpOwotCQl9Ci0JCXJldHVybiBnZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzKCk7Ci0JfQotCQotCQotCS8qKgotCSAqIENhbGN1bGF0ZXMgdGhlIHByb3Bvc2FscyBmb3IgdGhlIFhNTCBUYWcgTmFtZSBSZWdpb24uCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY29tcHV0ZVRhZ05hbWVQcm9wb3NhbHMoKSB7Ci0JCS8vIGNvbXBsZXRpbmcgdGhlICpmaXJzdCogdGFnIGluICI8dGFnbmFtZTEgfDx0YWduYW1lMiIKLQkJCi0JCS8vIElnbm9yZSBhdHRyaWJ1dGVzCi0JCWlmIChpbkF0dHJpYnV0ZVJlZ2lvbigpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCWFkZFRhZ05hbWVQcm9wb3NhbHModGhpcy5nZXRFbGVtZW50UG9zaXRpb24obm9kZSkpOwotCQkvLyBhZGRFbmRUYWdOYW1lUHJvcG9zYWxzKCk7Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3Nvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRhODZmMzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIEJhc2VkIG9uIFhNTFRlbXBsYXRlQ29tcGxldGlvbmF0UHJvcG9zYWwKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gYnVnIDI4OTQ5OCAtIEFkZGVkIGFkZGl0aW9uYWwgY29udGV4dCB0eXBlcy4gICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5Db250ZXh0VHlwZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZVByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLnBlcnNpc3RlbmNlLlRlbXBsYXRlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5SZXBsYWNlTmFtZVRlbXBsYXRlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzOwotCi0KLS8qKgotICogQ29tcGxldGlvbiBwcm9jZXNzb3IgZm9yIFhNTCBUZW1wbGF0ZXMuIE1vc3Qgb2YgdGhlIHdvcmsgaXMgYWxyZWFkeSBkb25lIGJ5Ci0gKiB0aGUgWE1MIENvbnRlbnQgQXNzaXN0IHByb2Nlc3Nvciwgc28gYnkgdGhlIHRpbWUgdGhlCi0gKiBYTUxUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IgaXMgYXNrZWQgZm9yIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscywgdGhlCi0gKiBYTUwgY29udGVudCBhc3Npc3QgcHJvY2Vzc29yIGhhcyBhbHJlYWR5IHNldCB0aGUgY29udGV4dCB0eXBlIGZvcgotICogdGVtcGxhdGVzLgotICovCi1jbGFzcyBYU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFByb3Bvc2FsQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3IsIFNlcmlhbGl6YWJsZSB7Ci0JCQotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSA0Njc4MDYxNzI2MzkzODcyMDgzTDsKLQotCQlwdWJsaWMgaW50IGNvbXBhcmUoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKLQkJCXJldHVybiAoKFRlbXBsYXRlUHJvcG9zYWwpIG8yKS5nZXRSZWxldmFuY2UoKSAtICgoVGVtcGxhdGVQcm9wb3NhbCkgbzEpLmdldFJlbGV2YW5jZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29tcGFyYXRvciBmZ1Byb3Bvc2FsQ29tcGFyYXRvciA9IG5ldyBQcm9wb3NhbENvbXBhcmF0b3IoKTsKLQlwcml2YXRlIFN0cmluZyBmQ29udGV4dFR5cGVJZCA9IG51bGw7Ci0KLQkvKgotCSAqIENvcGllZCBmcm9tIHN1cGVyIGNsYXNzIGV4Y2VwdCBpbnN0ZWFkIG9mIGNhbGxpbmcgY3JlYXRlQ29udGV4dCh2aWV3ZXIsCi0JICogcmVnaW9uKSBjYWxsIGNyZWF0ZUNvbnRleHQodmlld2VyLCByZWdpb24sIG9mZnNldCkgaW5zdGVhZAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW10gY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMoSVRleHRWaWV3ZXIgdmlld2VyLCBpbnQgb2Zmc2V0KSB7Ci0KLQkJSVRleHRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElUZXh0U2VsZWN0aW9uKSB2aWV3ZXIuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5nZXRTZWxlY3Rpb24oKTsKLQotCQkvLyBhZGp1c3Qgb2Zmc2V0IHRvIGVuZCBvZiBub3JtYWxpemVkIHNlbGVjdGlvbgotCQlpZiAoc2VsZWN0aW9uLmdldE9mZnNldCgpID09IG9mZnNldCkgewotCQkJb2Zmc2V0ID0gc2VsZWN0aW9uLmdldE9mZnNldCgpICsgc2VsZWN0aW9uLmdldExlbmd0aCgpOwotCQl9Ci0KLQkJU3RyaW5nIHByZWZpeCA9IGV4dHJhY3RQcmVmaXgodmlld2VyLCBvZmZzZXQpOwotCQlSZWdpb24gcmVnaW9uID0gbmV3IFJlZ2lvbihvZmZzZXQgLSBwcmVmaXgubGVuZ3RoKCksIHByZWZpeC5sZW5ndGgoKSk7Ci0JCVRlbXBsYXRlQ29udGV4dCBjb250ZXh0ID0gY3JlYXRlQ29udGV4dCh2aWV3ZXIsIHJlZ2lvbiwgb2Zmc2V0KTsKLQkJaWYgKGNvbnRleHQgPT0gbnVsbCkgewotCQkJcmV0dXJuIG5ldyBJQ29tcGxldGlvblByb3Bvc2FsWzBdOwotCQl9Ci0KLQkJLy8gbmFtZSBvZiB0aGUgc2VsZWN0aW9uIHZhcmlhYmxlcyB7bGluZSwgd29yZH1fc2VsZWN0aW9uCi0JCWNvbnRleHQuc2V0VmFyaWFibGUoInNlbGVjdGlvbiIsIHNlbGVjdGlvbi5nZXRUZXh0KCkpOyAvLyROT04tTkxTLTEkCi0KLQkJVGVtcGxhdGVbXSB0ZW1wbGF0ZXMgPSBnZXRUZW1wbGF0ZXMoY29udGV4dC5nZXRDb250ZXh0VHlwZSgpLmdldElkKCkpOwotCi0JCUxpc3QgbWF0Y2hlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZW1wbGF0ZXMubGVuZ3RoOyBpKyspIHsKLQkJCVRlbXBsYXRlIHRlbXBsYXRlID0gdGVtcGxhdGVzW2ldOwotCQkJdHJ5IHsKLQkJCQljb250ZXh0LmdldENvbnRleHRUeXBlKCkudmFsaWRhdGUodGVtcGxhdGUuZ2V0UGF0dGVybigpKTsKLQkJCX0KLQkJCWNhdGNoIChUZW1wbGF0ZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAodGVtcGxhdGUubWF0Y2hlcyhwcmVmaXgsIGNvbnRleHQuZ2V0Q29udGV4dFR5cGUoKS5nZXRJZCgpKSkgewotCQkJCW1hdGNoZXMuYWRkKGNyZWF0ZVByb3Bvc2FsKHRlbXBsYXRlLCBjb250ZXh0LCAoSVJlZ2lvbikgcmVnaW9uLCBnZXRSZWxldmFuY2UodGVtcGxhdGUsIHByZWZpeCkpKTsKLQkJCX0KLQkJfQotCi0JCUNvbGxlY3Rpb25zLnNvcnQobWF0Y2hlcywgZmdQcm9wb3NhbENvbXBhcmF0b3IpOwotCi0JCXJldHVybiAoSUNvbXBsZXRpb25Qcm9wb3NhbFtdKSBtYXRjaGVzLnRvQXJyYXkobmV3IElDb21wbGV0aW9uUHJvcG9zYWxbbWF0Y2hlcy5zaXplKCldKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgY29uY3JldGUgdGVtcGxhdGUgY29udGV4dCBmb3IgdGhlIGdpdmVuIHJlZ2lvbiBpbiB0aGUKLQkgKiBkb2N1bWVudC4gVGhpcyBpbnZvbHZlcyBmaW5kaW5nIG91dCB3aGljaCBjb250ZXh0IHR5cGUgaXMgdmFsaWQgYXQgdGhlCi0JICogZ2l2ZW4gbG9jYXRpb24sIGFuZCB0aGVuIGNyZWF0aW5nIGEgY29udGV4dCBvZiB0aGlzIHR5cGUuIFRoZSBkZWZhdWx0Ci0JICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBhIDxjb2RlPlNtYXJ0UmVwbGFjZVRlbXBsYXRlQ29udGV4dDwvY29kZT4gZm9yCi0JICogdGhlIGNvbnRleHQgdHlwZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24uIFRoaXMgdGFrZXMgdGhlIG9mZnNldCBhdCB3aGljaAotCSAqIGNvbnRlbnQgYXNzaXN0IHdhcyBpbnZva2VkIGludG8gY29uc2lkZXJhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICB0aGUgdmlld2VyIGZvciB3aGljaCB0aGUgY29udGV4dCBpcyBjcmVhdGVkCi0JICogQHBhcmFtIHJlZ2lvbgotCSAqICAgICAgICAgICAgdGhlIHJlZ2lvbiBpbnRvIDxjb2RlPmRvY3VtZW50PC9jb2RlPiBmb3Igd2hpY2ggdGhlCi0JICogICAgICAgICAgICBjb250ZXh0IGlzIGNyZWF0ZWQKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogICAgICAgICAgICB0aGUgb3JpZ2luYWwgb2Zmc2V0IHdoZXJlIGNvbnRlbnQgYXNzaXN0IHdhcyBpbnZva2VkCi0JICogQHJldHVybiBhIHRlbXBsYXRlIGNvbnRleHQgdGhhdCBjYW4gaGFuZGxlIHRlbXBsYXRlIGluc2VydGlvbiBhdCB0aGUKLQkgKiAgICAgICAgIGdpdmVuIGxvY2F0aW9uLCBvciA8Y29kZT5udWxsPC9jb2RlPgotCSAqLwotCXByaXZhdGUgVGVtcGxhdGVDb250ZXh0IGNyZWF0ZUNvbnRleHQoSVRleHRWaWV3ZXIgdmlld2VyLCBJUmVnaW9uIHJlZ2lvbiwgaW50IG9mZnNldCkgewotCQkvLyBwcmV0dHkgbXVjaCBzYW1lIGNvZGUgYXMgc3VwZXIuY3JlYXRlQ29udGV4dCBleGNlcHQgY3JlYXRlCi0JCS8vIFNtYXJ0UmVwbGFjZVRlbXBsYXRlQ29udGV4dAotCQlUZW1wbGF0ZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlID0gZ2V0Q29udGV4dFR5cGUodmlld2VyLCByZWdpb24pOwotCQlpZiAoY29udGV4dFR5cGUgIT0gbnVsbCkgewotCQkJSURvY3VtZW50IGRvY3VtZW50ID0gdmlld2VyLmdldERvY3VtZW50KCk7Ci0JCQlyZXR1cm4gbmV3IFJlcGxhY2VOYW1lVGVtcGxhdGVDb250ZXh0KGNvbnRleHRUeXBlLCBkb2N1bWVudCwgcmVnaW9uLmdldE9mZnNldCgpLCByZWdpb24uZ2V0TGVuZ3RoKCksIG9mZnNldCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElDb21wbGV0aW9uUHJvcG9zYWwgY3JlYXRlUHJvcG9zYWwoVGVtcGxhdGUgdGVtcGxhdGUsIFRlbXBsYXRlQ29udGV4dCBjb250ZXh0LCBJUmVnaW9uIHJlZ2lvbiwgaW50IHJlbGV2YW5jZSkgewotCQlyZXR1cm4gbmV3IEN1c3RvbVRlbXBsYXRlUHJvcG9zYWwodGVtcGxhdGUsIGNvbnRleHQsIHJlZ2lvbiwgZ2V0SW1hZ2UodGVtcGxhdGUpLCByZWxldmFuY2UpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUZW1wbGF0ZUNvbnRleHRUeXBlIGdldENvbnRleHRUeXBlKElUZXh0Vmlld2VyIHZpZXdlciwgSVJlZ2lvbiByZWdpb24pIHsKLQkJVGVtcGxhdGVDb250ZXh0VHlwZSB0eXBlID0gbnVsbDsKLQotCQlDb250ZXh0VHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0VGVtcGxhdGVDb250ZXh0UmVnaXN0cnkoKTsKLQkJaWYgKHJlZ2lzdHJ5ICE9IG51bGwpIHsKLQkJCXR5cGUgPSByZWdpc3RyeS5nZXRDb250ZXh0VHlwZShmQ29udGV4dFR5cGVJZCk7Ci0JCX0KLQotCQlyZXR1cm4gdHlwZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSW1hZ2UgZ2V0SW1hZ2UoVGVtcGxhdGUgdGVtcGxhdGUpIHsKLQkJLy8ganVzdCByZXR1cm4gdGhlIHNhbWUgaW1hZ2UgZm9yIG5vdwotCQlyZXR1cm4gWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShYU0xQbHVnaW5JbWFnZXMuSU1HX1hQQVRIX0ZVTkNUSU9OKTsKLQl9Ci0KLQlwcml2YXRlIENvbnRleHRUeXBlUmVnaXN0cnkgZ2V0VGVtcGxhdGVDb250ZXh0UmVnaXN0cnkoKSB7Ci0JCXJldHVybiBYU0xVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0VGVtcGxhdGVDb250ZXh0UmVnaXN0cnkoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgVGVtcGxhdGVbXSBnZXRUZW1wbGF0ZXMoU3RyaW5nIGNvbnRleHRUeXBlSWQpIHsKLQkJVGVtcGxhdGUgdGVtcGxhdGVzW10gPSBudWxsOwotCi0JCVRlbXBsYXRlU3RvcmUgc3RvcmUgPSBnZXRUZW1wbGF0ZVN0b3JlKCk7Ci0JCWlmIChzdG9yZSAhPSBudWxsKSB7Ci0JCQl0ZW1wbGF0ZXMgPSBzdG9yZS5nZXRUZW1wbGF0ZXMoY29udGV4dFR5cGVJZCk7Ci0JCX0KLQotCQlyZXR1cm4gdGVtcGxhdGVzOwotCX0KLQotCXByaXZhdGUgVGVtcGxhdGVTdG9yZSBnZXRUZW1wbGF0ZVN0b3JlKCkgewotCQlyZXR1cm4gWFNMVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFRlbXBsYXRlU3RvcmUoKTsKLQl9Ci0KLQl2b2lkIHNldENvbnRleHRUeXBlKFN0cmluZyBjb250ZXh0VHlwZUlkKSB7Ci0JCWZDb250ZXh0VHlwZUlkID0gY29udGV4dFR5cGVJZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjAxMGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L1hTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJbnRhbGlvIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gYnVnIDI4OTQ5OCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGV4dEluZm9ybWF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYU0w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjsKLQotcHVibGljIGNsYXNzIFhTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3NvciBleHRlbmRzCi0JCUFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciBpbXBsZW1lbnRzIElDb250ZW50QXNzaXN0UHJvY2Vzc29yIHsKLQotCXB1YmxpYyBYU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IoKSB7Ci0JCQotCX0KLQotCXB1YmxpYyBBcnJheUxpc3Q8U3RyaW5nPiBnZXROYW1lc3BhY2VzKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1pbmltdW1WZXJzaW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1heGltdW1WZXJzaW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIGNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzKElUZXh0Vmlld2VyIHZpZXdlciwKLQkJCWludCBvZmZzZXQpIHsKLQkJTGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBwcm9wb3NhbHMgPSBuZXcgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+KCk7Ci0JCVhTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciB0ZW1wbGF0ZXMgPSBuZXcgWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yKCk7Ci0JCQotCQlpZiAodmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGVuZ3RoKCkgPT0gMCkgewotCQkJdGVtcGxhdGVzLnNldENvbnRleHRUeXBlKFRlbXBsYXRlQ29udGV4dFR5cGVYU0wuWFNMX05FVyk7Ci0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gbmV3RmlsZVRlbXBsYXRlcyA9IHRlbXBsYXRlcy5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIG9mZnNldCk7Ci0JCQlpZiAobmV3RmlsZVRlbXBsYXRlcyAhPSBudWxsICYmIG5ld0ZpbGVUZW1wbGF0ZXMubGVuZ3RoID4gMCkgewotCQkJCXByb3Bvc2Fscy5hZGRBbGwoQXJyYXlzLmFzTGlzdChuZXdGaWxlVGVtcGxhdGVzKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXRlbXBsYXRlcy5zZXRDb250ZXh0VHlwZShUZW1wbGF0ZUNvbnRleHRUeXBlWFNMLlhTTF9UQUcpOwotCQlJQ29tcGxldGlvblByb3Bvc2FsW10geHNsdGFncHJvcG9zYWxzID0gdGVtcGxhdGVzLmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzKHZpZXdlciwgb2Zmc2V0KTsKLQkJaWYgKHhzbHRhZ3Byb3Bvc2FscyAhPSBudWxsICYmIHhzbHRhZ3Byb3Bvc2Fscy5sZW5ndGggPiAwKSB7Ci0JCQlwcm9wb3NhbHMuYWRkQWxsKEFycmF5cy5hc0xpc3QoeHNsdGFncHJvcG9zYWxzKSk7Ci0JCX0KLQotCQl0ZW1wbGF0ZXMuc2V0Q29udGV4dFR5cGUoVGVtcGxhdGVDb250ZXh0VHlwZVhTTC5YU0xfQVRUUik7Ci0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXSB4c2xhdHRycHJvcG9zYWxzID0gdGVtcGxhdGVzLmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzKHZpZXdlciwgb2Zmc2V0KTsKLQkJaWYgKHhzbGF0dHJwcm9wb3NhbHMgIT0gbnVsbCAmJiB4c2xhdHRycHJvcG9zYWxzLmxlbmd0aCA+IDApIHsKLQkJCXByb3Bvc2Fscy5hZGRBbGwoQXJyYXlzLmFzTGlzdCh4c2xhdHRycHJvcG9zYWxzKSk7Ci0JCX0KLQkJCi0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBhbGxQcm9wb3NhbHMgPSBuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwcm9wb3NhbHMuc2l6ZSgpXTsKLQkJaWYgKHByb3Bvc2Fscy5zaXplKCkgPiAwKSB7Ci0JCQlwcm9wb3NhbHMudG9BcnJheShhbGxQcm9wb3NhbHMpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIGFsbFByb3Bvc2FsczsKLQl9Ci0KLQlwdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvbltdIGNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb24oSVRleHRWaWV3ZXIgdmlld2VyLAotCQkJaW50IG9mZnNldCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgY2hhcltdIGdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycygpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvciBnZXRDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IoKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9jb250ZW50bW9kZWwvWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9jb250ZW50bW9kZWwvWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDdmM2U2M2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvY29udGVudG1vZGVsL1hTTENvbnRlbnRNb2RlbEdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NDk3OCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbgotICogICAgICAgICAgIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuY29udGVudGFzc2l0LlhNTENvbnRlbnRNb2RlbEdlbmVyYXRvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0Q29udGVudE1vZGVsR2VuZXJhdG9yOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLQotLyoqCi0gKiBUaGlzIHByb3ZpZGVzIHRoZSBDb250ZW50TW9kZWwgYmFzZWQgb2ZmIHRoZSBYU0wgeG1sIHNjaGVtYSBncmFtbWFycyBhbmQgb3RoZXIKLSAqIGdyYW1tYXJzIHByb3ZpZGVkIGJ5IHRoZSB4bWwgZWRpdG9yLgotICogCi0gKiBAc2luY2UgMS4xCi0gKgotICovCi1wdWJsaWMgY2xhc3MgWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RDb250ZW50TW9kZWxHZW5lcmF0b3IgewotCi0KLQkvKioKLQkgKiBYU0xDb250ZW50TW9kZWxHZW5lcmF0b3IgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKiAKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RDb250ZW50TW9kZWxHZW5lcmF0b3IjZ2VuZXJhdGVBdHRyaWJ1dGUob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uLCBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGdlbmVyYXRlQXR0cmlidXRlKENNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wsIFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKLQkJaWYgKChhdHRyRGVjbCA9PSBudWxsKSB8fCAoYnVmZmVyID09IG51bGwpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaW50IHVzYWdlID0gYXR0ckRlY2wuZ2V0VXNhZ2UoKTsKLQkJaWYgKHVzYWdlID09IENNQXR0cmlidXRlRGVjbGFyYXRpb24uUkVRVUlSRUQpIHsKLQkJCWJ1ZmZlci5hcHBlbmQoIiAiKTsgLy8kTk9OLU5MUy0xJAotCQkJZ2VuZXJhdGVSZXF1aXJlZEF0dHJpYnV0ZShudWxsLCBhdHRyRGVjbCwgYnVmZmVyKTsgLy8gdG9kbyBwYXNzCi0JCQkvLyBvd25lck5vZGUgYXMKLQkJCS8vIDFzdCBwYXJhbQotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBnZW5lcmF0ZUVuZFRhZyhTdHJpbmcgdGFnTmFtZSwgTm9kZSBwYXJlbnROb2RlLCBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCwgU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewotCQlpZiAoZWxlbWVudERlY2wgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChlbGVtZW50RGVjbC5nZXRDb250ZW50VHlwZSgpICE9IENNRWxlbWVudERlY2xhcmF0aW9uLkVNUFRZKSB7Ci0JCQlidWZmZXIuYXBwZW5kKCI8LyIgKyB0YWdOYW1lICsgIj4iKTsvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gb3duZXJOb2RlCi0JICogQHBhcmFtIGF0dHJEZWNsCi0JICogQHBhcmFtIGJ1ZmZlcgotCSAqLwotCXB1YmxpYyB2b2lkIGdlbmVyYXRlUmVxdWlyZWRBdHRyaWJ1dGUoTm9kZSBvd25lck5vZGUsIENNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wsIFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKLQkJaWYgKChhdHRyRGVjbCA9PSBudWxsKSB8fCAoYnVmZmVyID09IG51bGwpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvLyBhdHRyaWJ1dGUgbmFtZQotCQlTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGdldFJlcXVpcmVkTmFtZShvd25lck5vZGUsIGF0dHJEZWNsKTsKLQkJQ01EYXRhVHlwZSBhdHRyVHlwZSA9IGF0dHJEZWNsLmdldEF0dHJUeXBlKCk7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBudWxsOwotCQkvLyA9IHNpZ24KLQkJYnVmZmVyLmFwcGVuZChhdHRyaWJ1dGVOYW1lICsgIj0iKTsgLy8kTk9OLU5MUy0xJAotCQkvLyBhdHRyaWJ1dGUgdmFsdWUKLQkJaWYgKGF0dHJUeXBlICE9IG51bGwpIHsKLQkJCS8vIGluc2VydCBhbnkgdmFsdWUgdGhhdCBpcyBpbXBsaWVkCi0JCQlpZiAoKGF0dHJUeXBlLmdldEltcGxpZWRWYWx1ZUtpbmQoKSAhPSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfTk9ORSkgJiYgKGF0dHJUeXBlLmdldEltcGxpZWRWYWx1ZSgpICE9IG51bGwpKSB7Ci0JCQkJZGVmYXVsdFZhbHVlID0gYXR0clR5cGUuZ2V0SW1wbGllZFZhbHVlKCk7Ci0JCQl9Ci0JCQkvLyBvdGhlcndpc2UsIGlmIGFuIGVudW1lcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgZXhpc3RzLCB1c2UgdGhlCi0JCQkvLyBmaXJzdCB2YWx1ZQotCQkJZWxzZSBpZiAoKGF0dHJUeXBlLmdldEVudW1lcmF0ZWRWYWx1ZXMoKSAhPSBudWxsKSAmJiAoYXR0clR5cGUuZ2V0RW51bWVyYXRlZFZhbHVlcygpLmxlbmd0aCA+IDApKSB7Ci0JCQkJZGVmYXVsdFZhbHVlID0gYXR0clR5cGUuZ2V0RW51bWVyYXRlZFZhbHVlcygpWzBdOwotCQkJfQotCQl9Ci0JCQotCQljaGFyIGF0dHJRdW90ZSA9ICdcIic7Ci0JCS8vIEZvdW5kIGEgZG91YmxlIHF1b3RlLCB3cmFwIHRoZSBhdHRyaWJ1dGUgaW4gc2luZ2xlIHF1b3RlcwotCQlpZihkZWZhdWx0VmFsdWUgIT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUuaW5kZXhPZihhdHRyUXVvdGUpID49IDApIHsKLQkJCWF0dHJRdW90ZSA9ICdcJyc7Ci0JCX0KLQkJCi0JCWJ1ZmZlci5hcHBlbmQoYXR0clF1b3RlKTsKLQkJYnVmZmVyLmFwcGVuZCgoKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSA/IGRlZmF1bHRWYWx1ZSA6ICIiKSk7IC8vJE5PTi1OTFMtMSQKLQkJYnVmZmVyLmFwcGVuZChhdHRyUXVvdGUpOwotCQlyZXR1cm47Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZ2VuZXJhdGVTdGFydFRhZyhTdHJpbmcgdGFnTmFtZSwgTm9kZSBwYXJlbnROb2RlLCBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCwgU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewotCQlpZiAoKGVsZW1lbnREZWNsID09IG51bGwpIHx8IChidWZmZXIgPT0gbnVsbCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQlidWZmZXIuYXBwZW5kKCI8IiArIHRhZ05hbWUpOy8vJE5PTi1OTFMtMSQKLQkJZ2VuZXJhdGVBdHRyaWJ1dGVzKGVsZW1lbnREZWNsLCBidWZmZXIpOwotCQlidWZmZXIuYXBwZW5kKGdldFN0YXJ0VGFnQ2xvc2UocGFyZW50Tm9kZSwgZWxlbWVudERlY2wpKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qKiAKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RDb250ZW50TW9kZWxHZW5lcmF0b3IjZ2V0TWluaW1hbFN0YXJ0VGFnTGVuZ3RoKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb24pCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBnZXRNaW5pbWFsU3RhcnRUYWdMZW5ndGgoTm9kZSBub2RlLCBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCkgewotCQlpZiAoZWxlbWVudERlY2wgPT0gbnVsbCkgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKHJlcXVpcmVzQXR0cmlidXRlcyhlbGVtZW50RGVjbCkpIHsKLQkJCXJldHVybiBnZXRSZXF1aXJlZE5hbWUobm9kZSwgZWxlbWVudERlY2wpLmxlbmd0aCgpICsgMjsgLy8gPCArCi0JCQkvLyBuYW1lICsKLQkJCS8vIHNwYWNlCi0JCX0KLQkJZWxzZSB7Ci0JCQlyZXR1cm4gMSArIGdldFJlcXVpcmVkTmFtZShub2RlLCBlbGVtZW50RGVjbCkubGVuZ3RoKCkgKyBnZXRTdGFydFRhZ0Nsb3NlKG5vZGUsIGVsZW1lbnREZWNsKS5sZW5ndGgoKTsgLy8gPCArCi0JCQkvLyBuYW1lCi0JCQkvLyArCi0JCQkvLyBhcHByb3ByaWF0ZQotCQkJLy8gY2xvc2UKLQkJfQotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0T3RoZXJDbG9zZShOb2RlIG5vdEFUYWdOb2RlKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKiAKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RDb250ZW50TW9kZWxHZW5lcmF0b3IjZ2V0U3RhcnRUYWdDbG9zZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhcnRUYWdDbG9zZShOb2RlIHBhcmVudE5vZGUsIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsKSB7Ci0JCVN0cmluZyBvdGhlciA9IGdldE90aGVyQ2xvc2UocGFyZW50Tm9kZSk7Ci0JCWlmIChvdGhlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gb3RoZXI7Ci0JCX0KLQkJaWYgKGVsZW1lbnREZWNsID09IG51bGwpIHsKLQkJCXJldHVybiAiPiI7Ly8kTk9OLU5MUy0xJAotCQl9Ci0JCWlmIChlbGVtZW50RGVjbC5nZXRDb250ZW50VHlwZSgpID09IENNRWxlbWVudERlY2xhcmF0aW9uLkVNUFRZKSB7Ci0JCQlyZXR1cm4gIi8+IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiAiPiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9ocmVmL0hyZWZDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvaHJlZi9IcmVmQ29udGVudEFzc2lzdFJlcXVlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlNDgxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9ocmVmL0hyZWZDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiA8cD5UaGlzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBwcm9wb3NhbHMgZm9yIGhyZWYgYXR0cmlidXRlcyB3aXRoIGEgbW9kZSBhdHRyaWJ1dGUuPC9wPgotICogPHA+Q29udGVudCBhc3Npc3RhbmNlIGlzIHJlc3RyaWN0ZWQgdG8gZmlsZXMgd2l0aCB0aGUgWFNMIGNvbnRlbnQgdHlwZSB0aGF0IGFyZSBpbiB0aGUgc2FtZSBwcm9qZWN0IGFzIHRoZSBmaWxlIGN1cnJlbnRseSAKLSAqIGJlaW5nIGVkaXRlZC4gVGhpcyBpcyBiZWNhdXNlIHByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2UgY2FuIGhhdmUgY29tcGxldGVseSBkaWZmZXJlbnQgcGh5c2ljYWwgZmlsZSBsb2NhdGlvbnMsIGxlYWRpbmcgdG8gCi0gKiBjb25mdXNpb24gaW4gcmVsYXRpdmUgZmlsZSBwYXRocyBhY3Jvc3MgcHJvamVjdHMuIFNpbWlsYXJseSwgbm8gY29udGVudCBhc3Npc3RhbmNlIGlzIGdpdmVuIGZvciBmaWxlcyBleHRlcm5hbCB0byB0aGUgd29ya3NwYWNlLiAKLSAqIFN1Y2ggZmlsZXMgc2hvdWxkIGJlIGFzc2lnbmVkIGFuIGFic29sdXRlICdmaWxlOi8vLycgVVJMLjwvcD4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0IGV4dGVuZHMgQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdAotewotCXByaXZhdGUgTGlzdDxJUGF0aD4gcGF0aExpc3QgPSBuZXcgQXJyYXlMaXN0PElQYXRoPigpOwotCi0JcHJpdmF0ZSBmaW5hbCBjbGFzcyBYU0xGaWxlUmVzb3VyY2VWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlVmlzaXRvcgotCXsKLQkJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcHJlY2VkaW5nVGV4dDsKLQkJcHJpdmF0ZSBmaW5hbCBJRmlsZSBlZGl0b3JGaWxlOwotCi0JCXByaXZhdGUgWFNMRmlsZVJlc291cmNlVmlzaXRvcihJRmlsZSBlZGl0b3JGaWxlLCBTdHJpbmcgcHJlY2VkaW5nVGV4dCkKLQkJewotCQkJdGhpcy5wcmVjZWRpbmdUZXh0ID0gcHJlY2VkaW5nVGV4dDsKLQkJCXRoaXMuZWRpdG9yRmlsZSA9IGVkaXRvckZpbGU7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2UgcmVzb3VyY2UpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JCXsKLQkJCWlmIChyZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0JCQl7Ci0JCQkJSUZpbGUgZmlsZSA9IChJRmlsZSlyZXNvdXJjZTsKLQkJCQlpZiAoWFNMQ29yZS5pc1hTTEZpbGUoZmlsZSkgJiYgIWZpbGUuZXF1YWxzKGVkaXRvckZpbGUpKQotCQkJCXsKLQkJCQkJSVBhdGggcGF0aCA9IGdldFJlbGF0aXZlUGF0aChlZGl0b3JGaWxlLCBmaWxlKTsKLQkJCQkJaWYgKHBhdGgudG9TdHJpbmcoKS5zdGFydHNXaXRoKHByZWNlZGluZ1RleHQpKQotCQkJCQl7Ci0JCQkJCQlwYXRoTGlzdC5hZGQocGF0aCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBjcmVhdGluZyB0aGUgSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0IGNsYXNzLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogQHBhcmFtIHBhcmVudAotCSAqIEBwYXJhbSBkb2N1bWVudFJlZ2lvbgotCSAqIEBwYXJhbSBjb21wbGV0aW9uUmVnaW9uCi0JICogQHBhcmFtIGJlZ2luCi0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBmaWx0ZXIKLQkgKiBAcGFyYW0gdGV4dFZpZXdlcgotCSAqLwotCXB1YmxpYyBIcmVmQ29udGVudEFzc2lzdFJlcXVlc3QoTm9kZSBub2RlLCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uLCBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpCi0JewotCQlzdXBlcihub2RlLCBkb2N1bWVudFJlZ2lvbiwgY29tcGxldGlvblJlZ2lvbiwgYmVnaW4sIGxlbmd0aCwgZmlsdGVyLCB0ZXh0Vmlld2VyKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbWFpbiBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIHByb3Bvc2Fscy4gUmV0dXJucyByZWxhdGl2ZSBwYXRocyB0byBmaWxlcyBpbiB0aGUgY3VycmVudCBwcm9qZWN0LgotCSAqIAotCSAqIEByZXR1cm4gSUNvbXBsZXRpb25Qcm9wb3NhbFtdIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RSZXF1ZXN0I2dldENvbXBsZXRpb25Qcm9wb3NhbHMoKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0Q29tcGxldGlvblByb3Bvc2FscygpCi0JewotCQlwYXRoTGlzdC5jbGVhcigpOwotCQlwcm9wb3NhbHMuY2xlYXIoKTsKLQkJCi0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgdGV4dCA9IGdldFRleHQoKTsKLQkJCVN0cmluZyBwcmVjZWRpbmdUZXh0OwotCQkJCi0JCQlpbnQgbGVuZ3RoID0gZ2V0Q3Vyc29yUG9zaXRpb24oKS1nZXRTdGFydE9mZnNldCgpOwotCQkJaWYgKGxlbmd0aCA+IDAgJiYgdGV4dC5sZW5ndGgoKSA+IGxlbmd0aCArIDEpCi0JCQkJcHJlY2VkaW5nVGV4dCA9IHRleHQuc3Vic3RyaW5nKDEsbGVuZ3RoKTsKLQkJCWVsc2UKLQkJCQlwcmVjZWRpbmdUZXh0ID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCUlGaWxlIGVkaXRvckZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZ2V0TG9jYXRpb24oKSkpOwotCQkJZWRpdG9yRmlsZS5nZXRQcm9qZWN0KCkuYWNjZXB0KG5ldyBYU0xGaWxlUmVzb3VyY2VWaXNpdG9yKGVkaXRvckZpbGUscHJlY2VkaW5nVGV4dCkpOwotCi0JCQlDb2xsZWN0aW9ucy5zb3J0KHBhdGhMaXN0LG5ldyBQYXRoQ29tcGFyYXRvcigpKTsKLQkJCWZvciAoSVBhdGggcGF0aCA6IHBhdGhMaXN0KQotCQkJewotCQkJCVN0cmluZyBwYXRoU3RyaW5nID0gcGF0aC50b1N0cmluZygpOwotCQkJCUN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IG5ldyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwoCi0JCQkJCQlwYXRoU3RyaW5nLAotCQkJCQkJZ2V0U3RhcnRPZmZzZXQoKSArIDEsCi0JCQkJCQl0ZXh0Lmxlbmd0aCgpLTIsCi0JCQkJCQlwYXRoU3RyaW5nLmxlbmd0aCgpLAotCQkJCQkJWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZShYU0xQbHVnaW5JbWFnZXMuSU1HX1hTTF9GSUxFKSwKLQkJCQkJCXBhdGhTdHJpbmcsCi0JCQkJCQludWxsLCAKLQkJCQkJCW51bGwsIAotCQkJCQkJMCwKLQkJCQkJCXRydWUKLQkJCQkJKTsKLQkJCQlwcm9wb3NhbHMuYWRkKHByb3Bvc2FsKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQotCQlyZXR1cm4gcHJvcG9zYWxzOwotCX0KLQkKLQkvKioKLQkgKiBEbyBub3Qgd2lzaCB0byBzb3J0IHRoZSBwcm9wb3NhbHMgLSB0aGV5IGFyZSBhbHJlYWR5IHNvcnRlZAotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNhbWUgbGlzdCwgaW4gdGhlIHNhbWUgb3JkZXIKLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBzb3J0UHJvcG9zYWxzKExpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gcHJvcG9zYWxzSW4pIHsKLQkJcmV0dXJuIHByb3Bvc2Fsc0luOwotCX0KLQotCXByaXZhdGUgSVBhdGggZ2V0UmVsYXRpdmVQYXRoKElGaWxlIHJlbGF0aXZlVG8sIElGaWxlIGZpbGUpCi0JewotCQlJUGF0aCBmaWxlUGF0aCA9IGZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJSVBhdGggcmVsYXRpdmVUb1BhdGggPSByZWxhdGl2ZVRvLmdldEZ1bGxQYXRoKCk7Ci0JCQotCQlJUGF0aCByZWxQYXRoOwotCQlpZiAoZmlsZVBhdGguc2VnbWVudENvdW50KCkgPiByZWxhdGl2ZVRvUGF0aC5zZWdtZW50Q291bnQoKSkKLQkJewotCQkJcmVsUGF0aCA9IGZpbGVQYXRoLnJlbW92ZUZpcnN0U2VnbWVudHMoZmlsZVBhdGgubWF0Y2hpbmdGaXJzdFNlZ21lbnRzKHJlbGF0aXZlVG9QYXRoKSk7Ci0JCX0KLQkJZWxzZSBpZiAoZmlsZVBhdGguc2VnbWVudENvdW50KCkgPCByZWxhdGl2ZVRvUGF0aC5zZWdtZW50Q291bnQoKSkKLQkJewotCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGl2ZVRvUGF0aC5zZWdtZW50Q291bnQoKSAtIGZpbGVQYXRoLnNlZ21lbnRDb3VudCgpOyBpKyspCi0JCQl7Ci0JCQkJc2IuYXBwZW5kKCIuLi8iKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJc2IuYXBwZW5kKGZpbGUuZ2V0TmFtZSgpKTsKLQkJCXJlbFBhdGggPSBuZXcgUGF0aChzYi50b1N0cmluZygpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJlbFBhdGggPSBuZXcgUGF0aChmaWxlLmdldE5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIHJlbFBhdGg7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvaHJlZi9QYXRoQ29tcGFyYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvaHJlZi9QYXRoQ29tcGFyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2RkNTdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L2hyZWYvUGF0aENvbXBhcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWY7Ci0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLQotZmluYWwgY2xhc3MgUGF0aENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yPElQYXRoPiwgU2VyaWFsaXphYmxlCi17Ci0JLyoqCi0JICogCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTQ0MDExNzk1ODExOTMxMTEyODBMOwotCi0JcHVibGljIGludCBjb21wYXJlKElQYXRoIG8xLCBJUGF0aCBvMikKLQl7Ci0JCWludCBjb3VudENvbXAgPSBvMS5zZWdtZW50Q291bnQoKSAtIG8yLnNlZ21lbnRDb3VudCgpOwotCQlpZiAoY291bnRDb21wICE9IDApCi0JCQlyZXR1cm4gY291bnRDb21wOwotCQkKLQkJZm9yKGludCBpPTA7aTxvMS5zZWdtZW50Q291bnQoKTtpKyspCi0JCXsKLQkJCVN0cmluZyBzZWcxID0gbzEuc2VnbWVudChpKTsKLQkJCVN0cmluZyBzZWcyID0gbzIuc2VnbWVudChpKTsKLQkJCWlmICghc2VnMS5lcXVhbHMoc2VnMikpCi0JCQl7Ci0JCQkJaWYgKHNlZzEuZXF1YWxzKCIuLiIpKSAvLyROT04tTkxTLTEkCi0JCQkJCXJldHVybiAxOwotCQkJCWlmIChzZWcyLmVxdWFscygiLi4iKSkgLy8kTk9OLU5MUy0xJAotCQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBvMS50b1N0cmluZygpLmNvbXBhcmVUbyhvMi50b1N0cmluZygpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL0F0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudG91dGxpbmUvQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4MzczMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudG91dGxpbmUvQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmJhc2ljLkNNTmFtZWROb2RlTWFwSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIgZXh0ZW5kcyBKRmFjZU5vZGVMYWJlbFByb3ZpZGVyIHsKLQlib29sZWFuIGZTaG93QXR0cmlidXRlcyA9IGZhbHNlOwotCXN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9OQU1FID0gIm5hbWUiOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lEID0gImlkIjsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBBdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlcihib29sZWFuIHNob3dBdHRyaWJ1dGVzKSB7Ci0JCWZTaG93QXR0cmlidXRlcyA9IHNob3dBdHRyaWJ1dGVzOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgbykgewotCQlTdHJpbmdCdWZmZXIgdGV4dCA9IG51bGw7Ci0JCWlmIChvIGluc3RhbmNlb2YgTm9kZSkgewotCQkJTm9kZSBub2RlID0gKE5vZGUpIG87Ci0JCQlpZiAoKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgJiYgZlNob3dBdHRyaWJ1dGVzKSB7Ci0JCQkJdGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIuZ2V0VGV4dChvKSk7Ci0JCQkJLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTg4NDQ0Ci0JCQkJaWYgKG5vZGUuaGFzQXR0cmlidXRlcygpKSB7Ci0JCQkJCUVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQkJCQlOb2RlIGlkVHlwZWRBdHRyaWJ1dGUgPSBudWxsOwotCQkJCQlOb2RlIHJlcXVpcmVkQXR0cmlidXRlID0gbnVsbDsKLQkJCQkJYm9vbGVhbiBoYXNJZCA9IGZhbHNlOwotCQkJCQlib29sZWFuIGhhc05hbWUgPSBmYWxzZTsKLQkJCQkJTm9kZSBzaG93bkF0dHJpYnV0ZSA9IG51bGw7Ci0KLQkJCQkJLy8gdHJ5IHRvIGdldCBjb250ZW50IG1vZGVsIGVsZW1lbnQKLQkJCQkJLy8gZGVjbGFyYXRpb24KLQkJCQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBudWxsOwotCQkJCQlNb2RlbFF1ZXJ5IG1xID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JCQkJCWlmIChtcSAhPSBudWxsKSB7Ci0JCQkJCQllbGVtZW50RGVjbCA9IG1xLmdldENNRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJCS8vIGZpbmQgYW4gYXR0cmlidXRlIG9mIHR5cGUgKG9yIGp1c3QgbmFtZWQpCi0JCQkJCS8vIElECi0JCQkJCWlmIChlbGVtZW50RGVjbCAhPSBudWxsKSB7Ci0JCQkJCQlpbnQgaSA9IDA7Ci0JCQkJCQl3aGlsZSAoKGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpKSAmJiAoaWRUeXBlZEF0dHJpYnV0ZSA9PSBudWxsKSkgewotCQkJCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQkJCQlTdHJpbmcgYXR0ck5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJCQkJQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlRGVjbGFyYXRpb25NYXAgPSBlbGVtZW50RGVjbC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQkJCQkJCi0JCQkJCQkJQ01OYW1lZE5vZGVNYXBJbXBsIGFsbEF0dHJpYnV0ZXMgPSBuZXcgQ01OYW1lZE5vZGVNYXBJbXBsKGF0dHJpYnV0ZURlY2xhcmF0aW9uTWFwKTsKLQkJCQkJCQlMaXN0IG5vZGVzID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShub2RlLmdldE93bmVyRG9jdW1lbnQoKSkuZ2V0QXZhaWxhYmxlQ29udGVudChlbGVtZW50LCBlbGVtZW50RGVjbCwgTW9kZWxRdWVyeS5JTkNMVURFX0FUVFJJQlVURVMpOwotCQkJCQkJCWZvciAoaW50IGsgPSAwOyBrIDwgbm9kZXMuc2l6ZSgpOyBrKyspIHsKLQkJCQkJCQkJQ01Ob2RlIGNtbm9kZSA9IChDTU5vZGUpIG5vZGVzLmdldChrKTsKLQkJCQkJCQkJaWYgKGNtbm9kZS5nZXROb2RlVHlwZSgpID09IENNTm9kZS5BVFRSSUJVVEVfREVDTEFSQVRJT04pIHsKLQkJCQkJCQkJCWFsbEF0dHJpYnV0ZXMucHV0KGNtbm9kZSk7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQkJYXR0cmlidXRlRGVjbGFyYXRpb25NYXAgPSBhbGxBdHRyaWJ1dGVzOwotCi0JCQkJCQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbCA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVEZWNsYXJhdGlvbk1hcC5nZXROYW1lZEl0ZW0oYXR0ck5hbWUpOwotCQkJCQkJCWlmIChhdHRyRGVjbCAhPSBudWxsKSB7Ci0JCQkJCQkJCWlmICgoYXR0ckRlY2wuZ2V0QXR0clR5cGUoKSAhPSBudWxsKSAmJiAoQ01EYXRhVHlwZS5JRC5lcXVhbHMoYXR0ckRlY2wuZ2V0QXR0clR5cGUoKS5nZXREYXRhVHlwZU5hbWUoKSkpKSB7Ci0JCQkJCQkJCQlpZFR5cGVkQXR0cmlidXRlID0gYXR0cjsKLQkJCQkJCQkJfQotCQkJCQkJCQllbHNlIGlmICgoYXR0ckRlY2wuZ2V0VXNhZ2UoKSA9PSBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uLlJFUVVJUkVEKSAmJiAocmVxdWlyZWRBdHRyaWJ1dGUgPT0gbnVsbCkpIHsKLQkJCQkJCQkJCS8vIGFzIGEgYmFja3VwLCBrZWVwIHRhYnMgb24KLQkJCQkJCQkJCS8vIGFueSByZXF1aXJlZAotCQkJCQkJCQkJLy8gYXR0cmlidXRlcwotCQkJCQkJCQkJcmVxdWlyZWRBdHRyaWJ1dGUgPSBhdHRyOwotCQkJCQkJCQl9Ci0JCQkJCQkJCWVsc2UgewotCQkJCQkJCQkJaGFzSWQgPSBoYXNJZCB8fCBhdHRyTmFtZS5lcXVhbHMoQVRUUl9JRCk7Ci0JCQkJCQkJCQloYXNOYW1lID0gaGFzTmFtZSB8fCBhdHRyTmFtZS5lcXVhbHMoQVRUUl9OQU1FKTsKLQkJCQkJCQkJfQotCQkJCQkJCX0KLQkJCQkJCQkrK2k7Ci0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQkvKgotCQkJCQkgKiBJZiBubyBzdWl0YWJsZSBhdHRyaWJ1dGUgd2FzIGZvdW5kLCB0cnkgdXNpbmcgYQotCQkJCQkgKiByZXF1aXJlZCBhdHRyaWJ1dGUsIGlmIG5vbmUsIHRoZW4gcHJlZmVyICJpZCIgb3IKLQkJCQkJICogIm5hbWUiLCBvdGhlcndpc2UganVzdCB1c2UgZmlyc3QgYXR0cmlidXRlCi0JCQkJCSAqLwotCQkJCQlpZiAoaWRUeXBlZEF0dHJpYnV0ZSAhPSBudWxsKSB7Ci0JCQkJCQlzaG93bkF0dHJpYnV0ZSA9IGlkVHlwZWRBdHRyaWJ1dGU7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocmVxdWlyZWRBdHRyaWJ1dGUgIT0gbnVsbCkgewotCQkJCQkJc2hvd25BdHRyaWJ1dGUgPSByZXF1aXJlZEF0dHJpYnV0ZTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChoYXNJZCkgewotCQkJCQkJc2hvd25BdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShBVFRSX0lEKTsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChoYXNOYW1lKSB7Ci0JCQkJCQlzaG93bkF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKEFUVFJfTkFNRSk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNob3duQXR0cmlidXRlID09IG51bGwpIHsKLQkJCQkJCXNob3duQXR0cmlidXRlID0gYXR0cmlidXRlcy5pdGVtKDApOwotCQkJCQl9Ci0KLQkJCQkJLy8gZGlzcGxheSB0aGUgYXR0cmlidXRlIGFuZCB2YWx1ZSAod2l0aG91dCBxdW90ZXMpCi0JCQkJCVN0cmluZyBhdHRyaWJ1dGVOYW1lID0gc2hvd25BdHRyaWJ1dGUuZ2V0Tm9kZU5hbWUoKTsKLQkJCQkJaWYgKChhdHRyaWJ1dGVOYW1lICE9IG51bGwpICYmIChhdHRyaWJ1dGVOYW1lLmxlbmd0aCgpID4gMCkpIHsKLQkJCQkJCXRleHQuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCXRleHQuYXBwZW5kKGF0dHJpYnV0ZU5hbWUpOwotCQkJCQkJU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gc2hvd25BdHRyaWJ1dGUuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJCQlpZiAoKGF0dHJpYnV0ZVZhbHVlICE9IG51bGwpICYmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGgoKSA+IDApKSB7Ci0JCQkJCQkJdGV4dC5hcHBlbmQoIj0iKTsgLy8kTk9OLU5MUy0xJAotCQkJCQkJCXRleHQuYXBwZW5kKFN0cmluZ1V0aWxzLnN0cmlwKGF0dHJpYnV0ZVZhbHVlKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJCi0vLwkJCQkJaWYgKFhTTENvcmUuWFNMX05BTUVTUEFDRV9VUkkuZXF1YWxzKG5vZGUuZ2V0TmFtZXNwYWNlVVJJKCkpKSB7Ci0vLwkJCQkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbm9kZTsKLS8vCQkJCQkJQXR0ciBhdHRyID0gZWwuZ2V0QXR0cmlidXRlTm9kZSgibW9kZSIpOyAvLyROT04tTkxTLTEkCi0vLwkJCQkJCWlmIChhdHRyICE9IG51bGwpIHsKLS8vCQkJCQkJCXRleHQuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLS8vCQkJCQkJCXRleHQuYXBwZW5kKGF0dHIuZ2V0TmFtZSgpKTsKLS8vCQkJCQkJCXRleHQuYXBwZW5kKCI9Iik7IC8vJE5PTi1OTFMtMSQKLS8vCQkJCQkJCXRleHQuYXBwZW5kKFN0cmluZ1V0aWxzLnN0cmlwKGF0dHIuZ2V0Tm9kZVZhbHVlKCkpKTsKLS8vCQkJCQkJfQotLy8JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQl0ZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci5nZXRUZXh0KG8pKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCXJldHVybiBzdXBlci50b1N0cmluZygpOwotCQl9Ci0JCXJldHVybiB0ZXh0LnRvU3RyaW5nKCk7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsTGFiZWxQcm92aWRlciNnZXRUb29sVGlwVGV4dChqYXZhLmxhbmcuT2JqZWN0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQlzd2l0Y2ggKCgoTm9kZSkgZWxlbWVudCkuZ2V0Tm9kZVR5cGUoKSkgewotCQkJCWNhc2UgTm9kZS5DT01NRU5UX05PREUgOgotCQkJCWNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05PREUgOgotCQkJCWNhc2UgTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgOgotCQkJCWNhc2UgTm9kZS5URVhUX05PREUgOiB7Ci0JCQkJCVN0cmluZyBub2RlVmFsdWUgPSAoKE5vZGUpIGVsZW1lbnQpLmdldE5vZGVWYWx1ZSgpLnRyaW0oKTsKLQkJCQkJcmV0dXJuIHByZXBhcmVUZXh0KG5vZGVWYWx1ZSk7Ci0JCQkJfQotCQkJCWNhc2UgTm9kZS5FTEVNRU5UX05PREUgOiB7Ci0JCQkJCS8vIHNob3cgdGhlIHByZWNlZGluZyBjb21tZW50J3MgdG9vbHRpcCBpbmZvcm1hdGlvbgotCQkJCQlOb2RlIHByZXZpb3VzID0gKChOb2RlKSBlbGVtZW50KS5nZXRQcmV2aW91c1NpYmxpbmcoKTsKLQkJCQkJRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIGVsZW1lbnQ7Ci0JCQkJCWlmIChYU0xDb3JlLmlzWFNMTmFtZXNwYWNlKChOb2RlKWVsZW1lbnQpKSB7Ci0JCQkJCQlpZiAoZWxlbS5oYXNBdHRyaWJ1dGUoIm1vZGUiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCQkJcmV0dXJuICJNb2RlOiAiICsgZWxlbS5nZXRBdHRyaWJ1dGUoIm1vZGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJaWYgKHByZXZpb3VzICE9IG51bGwgJiYgcHJldmlvdXMuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkKLQkJCQkJCXByZXZpb3VzID0gcHJldmlvdXMuZ2V0UHJldmlvdXNTaWJsaW5nKCk7Ci0JCQkJCWlmIChwcmV2aW91cyAhPSBudWxsICYmIHByZXZpb3VzLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5DT01NRU5UX05PREUpCi0JCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQocHJldmlvdXMpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gc3VwZXIuZ2V0VG9vbFRpcFRleHQoZWxlbWVudCk7Ci0JfQotCi0JLyoqCi0JICogUmVtb3ZlIGxlYWRpbmcgaW5kZW50YXRpb24gZnJvbSBlYWNoIGxpbmUgaW4gdGhlIGdpdmUgc3RyaW5nLgotCSAqIEBwYXJhbSB0ZXh0Ci0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIHByZXBhcmVUZXh0KFN0cmluZyB0ZXh0KSB7Ci0JCVN0cmluZ0J1ZmZlciBub2RlVGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyBpKyspIHsKLQkJCWNoYXIgYyA9IHRleHQuY2hhckF0KGkpOwotCQkJaWYgKGMgIT0gJ1xyJyAmJiBjICE9ICdcbicpIHsKLQkJCQlub2RlVGV4dC5hcHBlbmQoYyk7Ci0JCQl9Ci0JCQllbHNlIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7Ci0JCQkJbm9kZVRleHQuYXBwZW5kKCdcbicpOwotCQkJCXdoaWxlIChDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpICYmIGkgPCB0ZXh0Lmxlbmd0aCgpKSB7Ci0JCQkJCWkrKzsKLQkJCQkJYyA9IHRleHQuY2hhckF0KGkpOwotCQkJCX0KLQkJCQlub2RlVGV4dC5hcHBlbmQoYyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5vZGVUZXh0LnRvU3RyaW5nKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNob3dBdHRyaWJ1dGVzKGJvb2xlYW4gZlNob3dBdHRyaWJ1dGVzKSB7Ci0JCXRoaXMuZlNob3dBdHRyaWJ1dGVzID0gZlNob3dBdHRyaWJ1dGVzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9KRmFjZU5vZGVBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudG91dGxpbmUvSkZhY2VOb2RlQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjZDg5YWFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9KRmFjZU5vZGVBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBiYXNlZCB3b3JrIG9uIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuIEpGYWNlTm9kZUFkYXB0ZXIgCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5JSkZhY2VOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmVkaXRvci5DTUltYWdlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmVkaXRvci5YTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmVkaXRvci5YTUxFZGl0b3JQbHVnaW5JbWFnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZXM7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEFkYXB0cyBhIERPTSBub2RlIHRvIGEgSkZhY2Ugdmlld2VyLgotICovCi1wdWJsaWMgY2xhc3MgSkZhY2VOb2RlQWRhcHRlciBpbXBsZW1lbnRzIElKRmFjZU5vZGVBZGFwdGVyIHsKLQotCWZpbmFsIHN0YXRpYyBDbGFzcyBBREFQVEVSX0tFWSA9IElKRmFjZU5vZGVBZGFwdGVyLmNsYXNzOwotCi0JSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkgZkFkYXB0ZXJGYWN0b3J5OwotCVJlZnJlc2hTdHJ1Y3R1cmVKb2IgZlJlZnJlc2hKb2IgPSBudWxsOwotCi0JcHVibGljIEpGYWNlTm9kZUFkYXB0ZXIoSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5mQWRhcHRlckZhY3RvcnkgPSBhZGFwdGVyRmFjdG9yeTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSW1hZ2VEZXNjcmlwdG9yIGdldFhTTEltYWdlKEVsZW1lbnQgbm9kZSkgewotCQlTdHJpbmcgbmFtZSA9IG5vZGUuZ2V0TG9jYWxOYW1lKCk7Ci0JCWlmIChuYW1lLmVxdWFscygiaW1wb3J0IikgfHwgbmFtZS5lcXVhbHMoImluY2x1ZGUiKSkgeyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQkJCXJldHVybiBYU0xQbHVnaW5JbWFnZUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldEltYWdlRGVzY3JpcHRvcihYU0xQbHVnaW5JbWFnZXMuSU1HX0VMTV9JTVBPUlRfSU5DTFVERSk7Ci0JCX0KLQkJaWYgKG5hbWUuZXF1YWxzKCJ0ZW1wbGF0ZSIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChub2RlLmhhc0F0dHJpYnV0ZSgibmFtZSIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQlyZXR1cm4gWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZURlc2NyaXB0b3IoWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fVEVNUExBVEVfTkFNRSk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBYU0xQbHVnaW5JbWFnZUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldEltYWdlRGVzY3JpcHRvcihYU0xQbHVnaW5JbWFnZXMuSU1HX0VMTV9URU1QTEFURSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWlmIChuYW1lLmVxdWFscygidmFyaWFibGUiKSB8fCBuYW1lLmVxdWFscygicGFyYW0iKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCXJldHVybiBYU0xQbHVnaW5JbWFnZUhlbHBlci5nZXRJbnN0YW5jZSgpLmdldEltYWdlRGVzY3JpcHRvcihYU0xQbHVnaW5JbWFnZXMuSU1HX0VMTV9WQVJJQUJMRSk7Ci0JCX0KLQkJCi0JCWlmIChuYW1lLmVxdWFscygiZnVuY3Rpb24iKSkgeyAvLyROT04tTkxTLTEkCi0JCQlyZXR1cm4gWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZURlc2NyaXB0b3IoWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fRlVOQ1RJT04pOwotCQl9Ci0JCQotCQlyZXR1cm4gWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZURlc2NyaXB0b3IoWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fU1RZTEVTSEVUKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIEltYWdlIGNyZWF0ZUltYWdlKE9iamVjdCBvYmplY3QpIHsKLQkJSW1hZ2UgaW1hZ2UgPSBudWxsOwotCQlOb2RlIG5vZGUgPSAoTm9kZSkgb2JqZWN0OwotCQlzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkgewotCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERSA6IHsKLQkJCQlpZiAoWFNMQ29yZS5YU0xfTkFNRVNQQUNFX1VSSS5lcXVhbHMobm9kZS5nZXROYW1lc3BhY2VVUkkoKSkpIHsKLQkJCQkJRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIG5vZGU7Ci0JCQkJCUltYWdlRGVzY3JpcHRvciBpbWdEZXNjID0gZ2V0WFNMSW1hZ2UoZWxlbSk7IAotCQkJCQlpZiAoaW1nRGVzYyA9PSBudWxsKSB7Ci0JCQkJCQlpbWFnZSA9IGNyZWF0ZVhNTEltYWdlRGVzY3JpcHRvcihYTUxFZGl0b3JQbHVnaW5JbWFnZXMuSU1HX09CSl9FTEVNRU5UKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWltYWdlID0gaW1nRGVzYy5jcmVhdGVJbWFnZSgpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaW1hZ2UgPSBjcmVhdGVYTUxJbWFnZURlc2NyaXB0b3IoWE1MRWRpdG9yUGx1Z2luSW1hZ2VzLklNR19PQkpfRUxFTUVOVCk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFIDogewotCQkJCWltYWdlID0gY3JlYXRlWE1MSW1hZ2VEZXNjcmlwdG9yKFhNTEVkaXRvclBsdWdpbkltYWdlcy5JTUdfT0JKX0FUVFJJQlVURSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIE5vZGUuVEVYVF9OT0RFIDogeyAvLyBhY3R1YWxseSwgVEVYVCBzaG91bGQgbmV2ZXIgYmUgc2VlbiBpbgotCQkJCS8vIHRoZSB0cmVlCi0JCQkJaW1hZ2UgPSBjcmVhdGVYTUxJbWFnZURlc2NyaXB0b3IoWE1MRWRpdG9yUGx1Z2luSW1hZ2VzLklNR19PQkpfVFhURVhUKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05PREUgOiB7Ci0JCQkJaW1hZ2UgPSBjcmVhdGVYTUxJbWFnZURlc2NyaXB0b3IoWE1MRWRpdG9yUGx1Z2luSW1hZ2VzLklNR19PQkpfQ0RBVEFTRUNUSU9OKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgTm9kZS5FTlRJVFlfUkVGRVJFTkNFX05PREUgOgotCQkJY2FzZSBOb2RlLkVOVElUWV9OT0RFIDogewotCQkJCWltYWdlID0gY3JlYXRlWE1MSW1hZ2VEZXNjcmlwdG9yKFhNTEVkaXRvclBsdWdpbkltYWdlcy5JTUdfT0JKX0VOVElUWSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFIDogewotCQkJCWltYWdlID0gY3JlYXRlWE1MSW1hZ2VEZXNjcmlwdG9yKFhNTEVkaXRvclBsdWdpbkltYWdlcy5JTUdfT0JKX1BST0NFU1NJTkdJTlNUUlVDVElPTik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvLyBTaG91bGQgbmV2ZXIgc2VlIENPTU1FTlQgTk9ERXMuCi0JCQljYXNlIE5vZGUuQ09NTUVOVF9OT0RFIDogewotCQkJCWltYWdlID0gY3JlYXRlWE1MSW1hZ2VEZXNjcmlwdG9yKFhNTEVkaXRvclBsdWdpbkltYWdlcy5JTUdfT0JKX0NPTU1FTlQpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERSA6IHsKLQkJCQlpbWFnZSA9IGNyZWF0ZVhNTEltYWdlRGVzY3JpcHRvcihYTUxFZGl0b3JQbHVnaW5JbWFnZXMuSU1HX09CSl9ET0NUWVBFKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgTm9kZS5OT1RBVElPTl9OT0RFIDogewotCQkJCWltYWdlID0gY3JlYXRlWE1MSW1hZ2VEZXNjcmlwdG9yKFhNTEVkaXRvclBsdWdpbkltYWdlcy5JTUdfT0JKX05PVEFUSU9OKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRlZmF1bHQgOiB7Ci0JCQkJaW1hZ2UgPSBjcmVhdGVYTUxJbWFnZURlc2NyaXB0b3IoWE1MRWRpdG9yUGx1Z2luSW1hZ2VzLklNR19PQkpfVFhURVhUKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW1hZ2U7Ci0JfQotCi0JcHJvdGVjdGVkIEltYWdlIGNyZWF0ZVhNTEltYWdlRGVzY3JpcHRvcihTdHJpbmcgaW1hZ2VSZXNvdXJjZU5hbWUpIHsKLQkJcmV0dXJuIFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLmdldEluc3RhbmNlKCkuZ2V0SW1hZ2UoaW1hZ2VSZXNvdXJjZU5hbWUpOwotCX0KLQotCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7Ci0KLQkJQXJyYXlMaXN0IHYgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQlOb2RlIG5vZGUgPSAoTm9kZSkgb2JqZWN0OwotCQkJZm9yIChOb2RlIGNoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkgewotCQkJCU5vZGUgbiA9IGNoaWxkOwotCQkJCWlmIChuLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5URVhUX05PREUgJiYgbi5nZXROb2RlVHlwZSgpICE9IE5vZGUuQ09NTUVOVF9OT0RFKSB7Ci0JCQkJCXYuYWRkKG4pOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdi50b0FycmF5KCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBlbnVtZXJhdGlvbiB3aXRoIHRoZSBlbGVtZW50cyBiZWxvbmdpbmcgdG8gdGhlIHBhc3NlZAotCSAqIGVsZW1lbnQuIFRoZXNlIGFyZSB0aGUgdG9wIGxldmVsIGl0ZW1zIGluIGEgbGlzdCwgdHJlZSwgdGFibGUsIGV0Yy4uLgotCSAqIEBwYXJhbSBub2RlIAotCSAqIEByZXR1cm4gCi0JICovCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBub2RlKSB7Ci0JCXJldHVybiBnZXRDaGlsZHJlbihub2RlKTsKLQl9Ci0KLQkvKioKLQkgKiBGZXRjaGVzIHRoZSBsYWJlbCBpbWFnZSBzcGVjaWZpYyB0byB0aGlzIG9iamVjdCBpbnN0YW5jZS4KLQkgKiBAcGFyYW0gbm9kZSBET00gTm9kZQotCSAqIEByZXR1cm4gSW1hZ2UgZm9yIHRoZSBsYWJlbC4KLQkgKi8KLQlwdWJsaWMgSW1hZ2UgZ2V0TGFiZWxJbWFnZShPYmplY3Qgbm9kZSkgewotCQlJbWFnZSBpbWFnZSA9IG51bGw7Ci0JCWlmIChub2RlIGluc3RhbmNlb2YgTm9kZSkgewotCQkJLy8gY2hlY2sgZm9yIGFuIGltYWdlIGZyb20gdGhlIGNvbnRlbnQgbW9kZWwKLQkJCWltYWdlID0gQ01JbWFnZVV0aWwuZ2V0SW1hZ2UoQ01JbWFnZVV0aWwuZ2V0RGVjbGFyYXRpb24oKE5vZGUpIG5vZGUpKTsKLQkJCWlmIChpbWFnZSA9PSBudWxsKSB7Ci0JCQkJLyoKLQkJCQkgKiBDcmVhdGUvZ2V0IGltYWdlIGJhc2VkIG9uIE5vZGUgdHlwZS4gSW1hZ2VzIGFyZSBjYWNoZWQKLQkJCQkgKiB0cmFuc3BhcmVudGx5IGluIHRoaXMgY2xhc3MsIHN1YmNsYXNzZXMgbXVzdCBkbyB0aGlzIGZvcgotCQkJCSAqIHRoZW1zZWx2ZXMgaWYgdGhleSdyZSBnb2luZyB0byByZXR1cm4gdGhlaXIgb3duIHJlc3VsdHMuCi0JCQkJICovCi0JCQkJaW1hZ2UgPSBjcmVhdGVJbWFnZShub2RlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW1hZ2U7Ci0JfQotCi0JLyoqCi0JICogRmV0Y2hlcyB0aGUgbGFiZWwgdGV4dCBzcGVjaWZpYyB0byB0aGlzIG9iamVjdCBpbnN0YW5jZS4KLQkgKiBAcmV0dXJuIE5vZGUgTmFtZSBmb3IgdGhlIExhYmVsCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYWJlbFRleHQoT2JqZWN0IG5vZGUpIHsKLQkJcmV0dXJuIGdldE5vZGVOYW1lKG5vZGUpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldE5vZGVOYW1lKE9iamVjdCBvYmplY3QpIHsKLQkJU3RyaW5nQnVmZmVyIG5vZGVOYW1lID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpZiAoIShvYmplY3QgaW5zdGFuY2VvZiBOb2RlKSkgewotCQkJcmV0dXJuIG5vZGVOYW1lLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCU5vZGUgbm9kZSA9IChOb2RlKSBvYmplY3Q7Ci0JCWlmIChub2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCW5vZGVOYW1lLmFwcGVuZChub2RlLmdldE5vZGVOYW1lKCkpOwotCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERSkgewotCQkJCW5vZGVOYW1lLmluc2VydCgwLCAiRE9DVFlQRToiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJcmV0dXJuIG5vZGVOYW1lLnRvU3RyaW5nKCk7Ci0JCX0KLQkJCi0JCWlmIChYU0xDb3JlLlhTTF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhub2RlLmdldE5hbWVzcGFjZVVSSSgpKSkgewotCQkJRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIG5vZGU7Ci0JCQlub2RlTmFtZS5hcHBlbmQoZWxlbS5nZXRMb2NhbE5hbWUoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlub2RlTmFtZS5hcHBlbmQobm9kZS5nZXROb2RlTmFtZSgpKTsKLQkJfQotCQlyZXR1cm4gbm9kZU5hbWUudG9TdHJpbmcoKTsKLQl9Ci0KLQotCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHsKLQkJCU5vZGUgbm9kZSA9IChOb2RlKSBvYmplY3Q7Ci0JCQlyZXR1cm4gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgUmVmcmVzaFN0cnVjdHVyZUpvYiBnZXRSZWZyZXNoSm9iKCkgewotCQlpZiAoZlJlZnJlc2hKb2IgPT0gbnVsbCkgewotCQkJZlJlZnJlc2hKb2IgPSBuZXcgUmVmcmVzaFN0cnVjdHVyZUpvYigpOwotCQl9Ci0JCXJldHVybiBmUmVmcmVzaEpvYjsKLQl9Ci0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKLQkJTm9kZSBub2RlID0gKE5vZGUpIG9iamVjdDsKLQkJZm9yIChOb2RlIGNoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkgewotCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5URVhUX05PREUpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogQWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotCSAqIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCWlmICh0eXBlID09IG51bGwpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHlwZS5lcXVhbHMoQURBUFRFUl9LRVkpOwotCX0KLQotCS8qKgotCSAqIENhbGxlZCBieSB0aGUgb2JqZWN0IGJlaW5nIGFkYXB0ZXIgKHRoZSBub3RpZmllcikgd2hlbiBzb21ldGhpbmcgaGFzCi0JICogY2hhbmdlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJLy8gZnV0dXJlX1RPRE86IHRoZSAndWlqb2JzJyB1c2VkIGluIHRoaXMgbWV0aG9kIHdlcmUgYWRkZWQgdG8gc29sdmUKLQkJLy8gdGhyZWFkaW5nIHByb2JsZW1zIHdoZW4gdGhlIGRvbQotCQkvLyBpcyB1cGRhdGVkIGluIHRoZSBiYWNrZ3JvdW5kIHdoaWxlIHRoZSBlZGl0b3IgaXMgb3Blbi4gVGhleSBtYXkgYmUKLQkJLy8gYSBiaXQgb3ZlcmtpbGwgYW5kIG5vdCB0aGF0IHVzZWZ1bC4KLQkJLy8gKFRoYXQgaXMsIG1heSBiZSBiZSB3b3J0aHkgb2Ygam9iIG1hbmFnZXIgbWFuYWdlbWVudCkuIElmIHRoZXkgYXJlCi0JCS8vIGZvdW5kIHRvIGJlIGltcG9ydGFudCBlbm91Z2ggdG8gbGVhdmUgaW4sCi0JCS8vIHRoZXJlJ3MgcHJvYmFibHkgc29tZSBvcHRpbWl6YXRpb24gdGhhdCBjYW4gYmUgZG9uZS4KLQkJaWYgKG5vdGlmaWVyIGluc3RhbmNlb2YgTm9kZSkgewotCQkJQ29sbGVjdGlvbiBsaXN0ZW5lcnMgPSBmQWRhcHRlckZhY3RvcnkuZ2V0TGlzdGVuZXJzKCk7Ci0JCQlJdGVyYXRvciBpdGVyYXRvciA9IGxpc3RlbmVycy5pdGVyYXRvcigpOwotCi0JCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJT2JqZWN0IGxpc3RlbmVyID0gaXRlcmF0b3IubmV4dCgpOwotCQkJCWlmICgobGlzdGVuZXIgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVmlld2VyKSAmJiAoKGV2ZW50VHlwZSA9PSBJTm9kZU5vdGlmaWVyLlNUUlVDVFVSRV9DSEFOR0VEKSB8fCAoZXZlbnRUeXBlID09IElOb2RlTm90aWZpZXIuQ09OVEVOVF9DSEFOR0VEKSB8fCAoZXZlbnRUeXBlID09IElOb2RlTm90aWZpZXIuQ0hBTkdFKSkpIHsKLQotCQkJCQlTdHJ1Y3R1cmVkVmlld2VyIHN0cnVjdHVyZWRWaWV3ZXIgPSAoU3RydWN0dXJlZFZpZXdlcikgbGlzdGVuZXI7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsKSB7Ci0JCQkJCQlnZXRSZWZyZXNoSm9iKCkucmVmcmVzaChzdHJ1Y3R1cmVkVmlld2VyLCAoTm9kZSkgbm90aWZpZXIpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL0pGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudG91dGxpbmUvSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzVlMTkyMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudG91dGxpbmUvSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBiYXNlZCBvbiB3b3JrIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLnVpCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5BYnN0cmFjdEFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuQXNzZXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSUpGYWNlTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5JSkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5DTURvY3VtZW50TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuQ01Eb2N1bWVudENhY2hlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuWE1MVUlNZXNzYWdlczsKLQotCi0vKioKLSAqIEFuIGFkYXB0ZXIgZmFjdG9yeSB0byBjcmVhdGUgSkZhY2VOb2RlQWRhcHRlcnMuIFVzZSB0aGlzIGFkYXB0ZXIgZmFjdG9yeQotICogd2l0aCBhIEpGYWNlQWRhcHRlckNvbnRlbnRQcm92aWRlciB0byBkaXNwbGF5IERPTSBub2RlcyBpbiBhIHRyZWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBKRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0QWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBJSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkgewotCXB1YmxpYyBjbGFzcyBDTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbCBpbXBsZW1lbnRzIENNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXIgewotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVVBEQVRFX0RFTEFZID0gMjAwOwotCi0JCXB1YmxpYyB2b2lkIGNhY2hlQ2xlYXJlZChDTURvY3VtZW50Q2FjaGUgY2FjaGUpIHsKLQkJCS8vIG5vdGhpbmcgdG8gZG8KLQkJfQotCi0JCXB1YmxpYyB2b2lkIGNhY2hlVXBkYXRlZChDTURvY3VtZW50Q2FjaGUgY2FjaGUsIGZpbmFsIFN0cmluZyB1cmksIGludCBvbGRTdGF0dXMsIGludCBuZXdTdGF0dXMsIENNRG9jdW1lbnQgY21Eb2N1bWVudCkgewotCQkJaWYgKChuZXdTdGF0dXMgPT0gQ01Eb2N1bWVudENhY2hlLlNUQVRVU19MT0FERUQpIHx8IChuZXdTdGF0dXMgPT0gQ01Eb2N1bWVudENhY2hlLlNUQVRVU19FUlJPUikpIHsKLQkJCQlyZWZyZXNoVmlld2VycygpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKENNRG9jdW1lbnRNYW5hZ2VyIGNtRG9jdW1lbnRNYW5hZ2VyLCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7Ci0JCQlpZiAoY21Eb2N1bWVudE1hbmFnZXIuZ2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FVVE9fTE9BRCkpIHsKLQkJCQlyZWZyZXNoVmlld2VycygpOwotCQkJfQotCQl9Ci0KLQkJcHJpdmF0ZSB2b2lkIHJlZnJlc2hWaWV3ZXJzKCkgewotCQkJT2JqZWN0W10gbGlzdGVuZXJzID0gZ2V0TGlzdGVuZXJzKCkudG9BcnJheSgpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAobGlzdGVuZXJzW2ldIGluc3RhbmNlb2YgU3RydWN0dXJlZFZpZXdlcikgewotCQkJCQlmaW5hbCBTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlciA9IChTdHJ1Y3R1cmVkVmlld2VyKSBsaXN0ZW5lcnNbaV07Ci0JCQkJCUpvYiByZWZyZXNoID0gbmV3IFVJSm9iKFhNTFVJTWVzc2FnZXMucmVmcmVzaG91dGxpbmVfMCkgewotCQkJCQkJQE92ZXJyaWRlCi0JCQkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCQkJCUNvbnRyb2wgcmVmcmVzaENvbnRyb2wgPSB2aWV3ZXIuZ2V0Q29udHJvbCgpOwotCQkJCQkJCWlmICgocmVmcmVzaENvbnRyb2wgIT0gbnVsbCkgJiYgIXJlZnJlc2hDb250cm9sLmlzRGlzcG9zZWQoKSkgewotCQkJCQkJCQl2aWV3ZXIucmVmcmVzaCh0cnVlKTsKLQkJCQkJCQl9Ci0JCQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQkJCQl9Ci0JCQkJCX07Ci0JCQkJCXJlZnJlc2guc2V0U3lzdGVtKHRydWUpOwotCQkJCQlyZWZyZXNoLnNldFByaW9yaXR5KEpvYi5TSE9SVCk7Ci0JCQkJCXJlZnJlc2guc2NoZWR1bGUoVVBEQVRFX0RFTEFZKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAobGlzdGVuZXJzW2ldIGluc3RhbmNlb2YgVmlld2VyKSB7Ci0JCQkJCWZpbmFsIFZpZXdlciB2aWV3ZXIgPSAoVmlld2VyKSBsaXN0ZW5lcnNbaV07Ci0JCQkJCUpvYiByZWZyZXNoID0gbmV3IFVJSm9iKFhNTFVJTWVzc2FnZXMucmVmcmVzaG91dGxpbmVfMCkgewotCQkJCQkJQE92ZXJyaWRlCi0JCQkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCQkJCUNvbnRyb2wgcmVmcmVzaENvbnRyb2wgPSB2aWV3ZXIuZ2V0Q29udHJvbCgpOwotCQkJCQkJCWlmICgocmVmcmVzaENvbnRyb2wgIT0gbnVsbCkgJiYgIXJlZnJlc2hDb250cm9sLmlzRGlzcG9zZWQoKSkgewotCQkJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOwotCQkJCQkJCX0KLQkJCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQkJCX0KLQkJCQkJfTsKLQkJCQkJcmVmcmVzaC5zZXRTeXN0ZW0odHJ1ZSk7Ci0JCQkJCXJlZnJlc2guc2V0UHJpb3JpdHkoSm9iLlNIT1JUKTsKLQkJCQkJcmVmcmVzaC5zY2hlZHVsZShVUERBVEVfREVMQVkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgQ01Eb2N1bWVudE1hbmFnZXIgY21Eb2N1bWVudE1hbmFnZXI7Ci0JcHJpdmF0ZSBDTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbCBmQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lciA9IG51bGw7Ci0JLyoqCi0JICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIGxpc3RlbmVycy4KLQkgKi8KLQlwcml2YXRlIFNldCBmTGlzdGVuZXJzID0gbmV3IEhhc2hTZXQoKTsKLQotCXByb3RlY3RlZCBJTm9kZUFkYXB0ZXIgc2luZ2xldG9uQWRhcHRlcjsKLQotCXB1YmxpYyBKRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSgpIHsKLQkJdGhpcyhJSkZhY2VOb2RlQWRhcHRlci5jbGFzcywgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIEpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5KE9iamVjdCBhZGFwdGVyS2V5LCBib29sZWFuIHJlZ2lzdGVyQWRhcHRlcnMpIHsKLQkJc3VwZXIoYWRhcHRlcktleSwgcmVnaXN0ZXJBZGFwdGVycyk7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZExpc3RlbmVyKE9iamVjdCBsaXN0ZW5lcikgewotCQlmTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHN5bmNocm9uaXplZCBJTm9kZUFkYXB0ZXJGYWN0b3J5IGNvcHkoKSB7Ci0JCXJldHVybiBuZXcgSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkoZ2V0QWRhcHRlcktleSgpLCBpc1Nob3VsZFJlZ2lzdGVyQWRhcHRlcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgSkZhY2UgYWRhcHRlciBmb3IgdGhlIERPTSBub2RlIHBhc3NlZCBpbgotCSAqLwotCUBPdmVycmlkZQotCXByb3RlY3RlZCBzeW5jaHJvbml6ZWQgSU5vZGVBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoSU5vZGVOb3RpZmllciBub2RlKSB7Ci0JCWlmIChzaW5nbGV0b25BZGFwdGVyID09IG51bGwpIHsKLQkJCS8vIGNyZWF0ZSB0aGUgSkZhY2VOb2RlQWRhcHRlcgotCQkJc2luZ2xldG9uQWRhcHRlciA9IG5ldyBKRmFjZU5vZGVBZGFwdGVyKHRoaXMpOwotCQkJaW5pdEFkYXB0ZXIoc2luZ2xldG9uQWRhcHRlciwgbm9kZSk7Ci0JCX0KLQkJcmV0dXJuIHNpbmdsZXRvbkFkYXB0ZXI7Ci0JfQotCi0KLQkvKioKLQkgKiByZXR1cm5zICJjb3B5IiBzbyBubyBvbmUgY2FuIG1vZGlmeSBvdXIgbGlzdC4gSXQgaXMgYSBzaGFsbG93IGNvcHkuCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCBDb2xsZWN0aW9uIGdldExpc3RlbmVycygpIHsKLQkJcmV0dXJuIG5ldyBBcnJheUxpc3QoZkxpc3RlbmVycyk7Ci0JfQotCi0JcHJvdGVjdGVkIHN5bmNocm9uaXplZCB2b2lkIGluaXRBZGFwdGVyKElOb2RlQWRhcHRlciBhZGFwdGVyLCBJTm9kZU5vdGlmaWVyIG5vZGUpIHsKLQkJQXNzZXJ0LmlzVHJ1ZShjbURvY3VtZW50TWFuYWdlciA9PSBudWxsKTsKLQkJQXNzZXJ0LmlzVHJ1ZShmQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lciA9PSBudWxsKTsKLQotCQkvLyByZWdpc3RlciBmb3IgQ01Eb2N1bWVudE1hbmFnZXIgZXZlbnRzCi0JCU1vZGVsUXVlcnlBZGFwdGVyIG1xYWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgbm9kZS5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJaWYgKG1xYWRhcHRlciAhPSBudWxsKSB7Ci0JCQlNb2RlbFF1ZXJ5IG1xdWVyeSA9IG1xYWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCk7Ci0JCQlpZiAoKG1xdWVyeSAhPSBudWxsKSAmJiAobXF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCkgIT0gbnVsbCkpIHsKLQkJCQljbURvY3VtZW50TWFuYWdlciA9IG1xdWVyeS5nZXRDTURvY3VtZW50TWFuYWdlcigpOwotCQkJCWZDTURvY3VtZW50TWFuYWdlckxpc3RlbmVyID0gbmV3IENNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsKCk7Ci0JCQkJY21Eb2N1bWVudE1hbmFnZXIuYWRkTGlzdGVuZXIoZkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXIpOwotCQkJfQotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlbGVhc2UoKSB7Ci0JCS8vIGRlcmVnaXN0ZXIgZnJvbSBDTURvY3VtZW50TWFuYWdlciBldmVudHMKLQkJaWYgKChjbURvY3VtZW50TWFuYWdlciAhPSBudWxsKSAmJiAoZkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXIgIT0gbnVsbCkpIHsKLQkJCWNtRG9jdW1lbnRNYW5hZ2VyLnJlbW92ZUxpc3RlbmVyKGZDTURvY3VtZW50TWFuYWdlckxpc3RlbmVyKTsKLQkJfQotCQlmTGlzdGVuZXJzLmNsZWFyKCk7Ci0JCWlmIChzaW5nbGV0b25BZGFwdGVyICE9IG51bGwgJiYgc2luZ2xldG9uQWRhcHRlciBpbnN0YW5jZW9mIEpGYWNlTm9kZUFkYXB0ZXIpIHsKLQkJCVJlZnJlc2hTdHJ1Y3R1cmVKb2IgcmVmcmVzaEpvYiA9ICgoSkZhY2VOb2RlQWRhcHRlcikgc2luZ2xldG9uQWRhcHRlcikuZlJlZnJlc2hKb2I7Ci0JCQlpZiAocmVmcmVzaEpvYiAhPSBudWxsKSB7Ci0JCQkJcmVmcmVzaEpvYi5jYW5jZWwoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW1vdmVMaXN0ZW5lcihPYmplY3QgbGlzdGVuZXIpIHsKLQkJZkxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9KRmFjZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9KRmFjZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2ZhNjg3Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudG91dGxpbmUvSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYmFzZWQgb24gd29yayBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC51aQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5JSkZhY2VOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLklKRmFjZU5vZGVBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0KLS8qKgotICogQW4gSVRyZWVDb250ZW50UHJvdmlkZXIgZm9yIGEgVHJlZVZpZXdlcnMgdXNlZCB0byBkaXNwbGF5IERPTSBub2Rlcy4gVGhpcwotICogY29udGVudCBwcm92aWRlciB0YWtlcyBhbiBhZGFwdGVyIGZhY3RvcnkgdG8gY3JlYXRlIEpGYWNlIGFkYXB0ZXJzIGZvciB0aGUKLSAqIG5vZGVzIGluIHRoZSB0cmVlLgotICovCi1wdWJsaWMgY2xhc3MgSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIgewotCi0JcHVibGljIEpGYWNlTm9kZUNvbnRlbnRQcm92aWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgdmlzdWFsIHBhcnQgdGhhdCBpcyB1c2luZyB0aGlzIGNvbnRlbnQgcHJvdmlkZXIgaXMgYWJvdXQgdG8gYmUKLQkgKiBkaXNwb3NlZC4gRGVhbGxvY2F0ZSBhbGwgYWxsb2NhdGVkIFNXVCByZXNvdXJjZXMuCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRmFjZSBhZGFwdGVyIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gYWRhcHRhYmxlCi0JICogICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBhZGFwdGVyIGZvcgotCSAqLwotCXByb3RlY3RlZCBJSkZhY2VOb2RlQWRhcHRlciBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGUpIHsKLQkJaWYgKGFkYXB0YWJsZSBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpIHsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gKChJTm9kZU5vdGlmaWVyKSBhZGFwdGFibGUpLmdldEFkYXB0ZXJGb3IoSUpGYWNlTm9kZUFkYXB0ZXIuY2xhc3MpOwotCQkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJSkZhY2VOb2RlQWRhcHRlcikgewotCQkJCXJldHVybiAoSUpGYWNlTm9kZUFkYXB0ZXIpIGFkYXB0ZXI7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKLQkJSUpGYWNlTm9kZUFkYXB0ZXIgYWRhcHRlciA9IGdldEFkYXB0ZXIob2JqZWN0KTsKLQotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYWRhcHRlci5nZXRDaGlsZHJlbihvYmplY3QpOwotCQl9Ci0KLQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKLQkJLy8gVGhlIHJvb3QgaXMgdXN1YWxseSBhbiBpbnN0YW5jZSBvZiBhbiBYTUxTdHJ1Y3R1cmVkTW9kZWwgaW4KLQkJLy8gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGV4dHJhY3QgdGhlIGRvY3VtZW50LgotCQlPYmplY3QgdG9wTm9kZSA9IG9iamVjdDsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIElET01Nb2RlbCkgewotCQkJdG9wTm9kZSA9ICgoSURPTU1vZGVsKSBvYmplY3QpLmdldERvY3VtZW50KCk7Ci0JCX0KLQotCQlJSkZhY2VOb2RlQWRhcHRlciBhZGFwdGVyID0gZ2V0QWRhcHRlcih0b3BOb2RlKTsKLQotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYWRhcHRlci5nZXRFbGVtZW50cyh0b3BOb2RlKTsKLQkJfQotCi0JCXJldHVybiBuZXcgT2JqZWN0WzBdOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKLQkJSUpGYWNlTm9kZUFkYXB0ZXIgYWRhcHRlciA9IGdldEFkYXB0ZXIob2JqZWN0KTsKLQotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYWRhcHRlci5nZXRQYXJlbnQob2JqZWN0KTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKLQkJSUpGYWNlTm9kZUFkYXB0ZXIgYWRhcHRlciA9IGdldEFkYXB0ZXIob2JqZWN0KTsKLQotCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gYWRhcHRlci5oYXNDaGlsZHJlbihvYmplY3QpOwotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkgewotCQlpZiAoKG9sZElucHV0ICE9IG51bGwpICYmIChvbGRJbnB1dCBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkTW9kZWwpKSB7Ci0JCQlJSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IChJSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkpICgoSVN0cnVjdHVyZWRNb2RlbCkgb2xkSW5wdXQpLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcnlGb3IoSUpGYWNlTm9kZUFkYXB0ZXIuY2xhc3MpOwotCQkJaWYgKGZhY3RvcnkgIT0gbnVsbCkgewotCQkJCWZhY3RvcnkucmVtb3ZlTGlzdGVuZXIodmlld2VyKTsKLQkJCX0KLQkJfQotCQlpZiAoKG5ld0lucHV0ICE9IG51bGwpICYmIChuZXdJbnB1dCBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkTW9kZWwpKSB7Ci0JCQlJSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IChJSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkpICgoSVN0cnVjdHVyZWRNb2RlbCkgbmV3SW5wdXQpLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcnlGb3IoSUpGYWNlTm9kZUFkYXB0ZXIuY2xhc3MpOwotCQkJaWYgKGZhY3RvcnkgIT0gbnVsbCkgewotCQkJCWZhY3RvcnkuYWRkTGlzdGVuZXIodmlld2VyKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9KRmFjZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvY29udGVudG91dGxpbmUvSkZhY2VOb2RlTGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiZDU1ZWVjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9KRmFjZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBiYXNlZCBvbiB3b3JrIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLnVpCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLklKRmFjZU5vZGVBZGFwdGVyOwotCi0vKioKLSAqIEEgKGNvbHVtbikgbGFiZWwgcHJvdmlkZXIgYmFja2VkIGJ5IEpGYWNlTm9kZUFkYXB0ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgSkZhY2VOb2RlTGFiZWxQcm92aWRlciBleHRlbmRzIENvbHVtbkxhYmVsUHJvdmlkZXIgewotCS8qKgotCSAqIEpGYWNlTm9kZUxhYmVsUHJvdmlkZXIgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgSkZhY2VOb2RlTGFiZWxQcm92aWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBKRmFjZSBhZGFwdGVyIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gYWRhcHRhYmxlCi0JICogICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBhZGFwdGVyIGZvcgotCSAqLwotCXByb3RlY3RlZCBJSkZhY2VOb2RlQWRhcHRlciBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGUpIHsKLQkJaWYgKGFkYXB0YWJsZSBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpIHsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gKChJTm9kZU5vdGlmaWVyKSBhZGFwdGFibGUpLmdldEFkYXB0ZXJGb3IoSUpGYWNlTm9kZUFkYXB0ZXIuY2xhc3MpOwotCQkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJSkZhY2VOb2RlQWRhcHRlcikgewotCQkJCXJldHVybiAoSUpGYWNlTm9kZUFkYXB0ZXIpIGFkYXB0ZXI7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7Ci0JCUlKRmFjZU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBnZXRBZGFwdGVyKGVsZW1lbnQpOwotCQlpZiAoYWRhcHRlciAhPSBudWxsKQotCQkJcmV0dXJuIGFkYXB0ZXIuZ2V0TGFiZWxJbWFnZShlbGVtZW50KTsKLQkJcmV0dXJuIHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCUlKRmFjZU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBnZXRBZGFwdGVyKGVsZW1lbnQpOwotCQlpZiAoYWRhcHRlciAhPSBudWxsKQotCQkJcmV0dXJuIGFkYXB0ZXIuZ2V0TGFiZWxUZXh0KGVsZW1lbnQpOwotCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChlbGVtZW50KTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LAotCSAqICAgICAgamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL1JlZnJlc2hTdHJ1Y3R1cmVKb2IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9SZWZyZXNoU3RydWN0dXJlSm9iLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDRmNDM0ZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL1JlZnJlc2hTdHJ1Y3R1cmVKb2IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5YTUxVSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogVGhpcyBqb2IgaG9sZHMgYSBxdWV1ZSBvZiB1cGRhdGVzIChhZmZlY3RlZCBub2RlcykgZm9yIG11bHRpcGxlIHN0cnVjdHVyZWQKLSAqIHZpZXdlcnMuIFdoZW4gYSBuZXcgcmVxdWVzdCBjb21lcyBpbiwgdGhlIGN1cnJlbnQgcnVuIGlzIGNhbmNlbGxlZCwgdGhlIG5ldwotICogcmVxdWVzdCBpcyBhZGRlZCB0byB0aGUgcXVldWUsIHRoZW4gdGhlIGpvYiBpcyByZS1zY2hlZHVsZWQuIFN1cHBvcnQgZm9yCi0gKiBtdWx0aXBsZSBzdHJ1Y3R1cmVkIHZpZXdlcnMgaXMgcmVxdWlyZWQgYmVjYXVzZSByZWZyZXNoIHVwZGF0ZXMgYXJlIHVzdWFsbHkKLSAqIHRyaWdnZXJlZCBieSBtb2RlbCBjaGFuZ2VzLCBhbmQgdGhlIG1vZGVsIG1heSBiZSB2aXNpYmxlIGluIG1vcmUgdGhhbiBvbmUKLSAqIHZpZXdlci4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotY2xhc3MgUmVmcmVzaFN0cnVjdHVyZUpvYiBleHRlbmRzIEpvYiB7Ci0KLQkvKiogZGVidWcgZmxhZyAqLwotCXN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgVVBEQVRFX0RFTEFZID0gMzAwOwotCXN0YXRpYyB7Ci0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKCJvcmcuZWNsaXBzZS53c3Quc3NlLnVpL2RlYnVnL3JlZnJlc2hTdHJ1Y3R1cmUiKTsgLy8kTk9OLU5MUy0xJAotCQlERUJVRyA9ICh2YWx1ZSAhPSBudWxsKSAmJiB2YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JLyoqIExpc3Qgb2YgcmVmcmVzaCByZXF1ZXN0cyAoTm9kZXMpICovCi0JcHJpdmF0ZSBmaW5hbCBMaXN0IGZSZWZyZXNoZXM7Ci0JLyoqIExpc3Qgb2YgdXBkYXRlIHJlcXVlc3RzIChOb2RlcykgKi8KLQlwcml2YXRlIGZpbmFsIExpc3QgZlVwZGF0ZXM7Ci0JLyoqIExpc3Qgb2YgdXBkYXRlIHJlcXVlc3RzIChOb2RlcykgKi8KLQlwcml2YXRlIGZpbmFsIExpc3QgZlVwZGF0ZVByb3BlcnRpZXM7Ci0JLyoqIHRoZSBzdHJ1Y3R1cmVkIHZpZXdlcnMgKi8KLQlTZXQgZlJlZnJlc2hWaWV3ZXJzID0gbmV3IEhhc2hTZXQoMyk7Ci0JU2V0IGZVcGRhdGVWaWV3ZXJzID0gbmV3IEhhc2hTZXQoMyk7Ci0KLQlwdWJsaWMgUmVmcmVzaFN0cnVjdHVyZUpvYigpIHsKLQkJc3VwZXIoWE1MVUlNZXNzYWdlcy5yZWZyZXNob3V0bGluZV8wKTsKLQkJc2V0UHJpb3JpdHkoSm9iLkxPTkcpOwotCQlzZXRTeXN0ZW0odHJ1ZSk7Ci0JCWZSZWZyZXNoZXMgPSBuZXcgQXJyYXlMaXN0KDUpOwotCQlmVXBkYXRlcyA9IG5ldyBBcnJheUxpc3QoNSk7Ci0JCWZVcGRhdGVQcm9wZXJ0aWVzID0gbmV3IEFycmF5TGlzdCg1KTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIGFkZFVwZGF0ZVJlcXVlc3QoTm9kZSBuZXdOb2RlUmVxdWVzdCwgU3RyaW5nW10gdXBkYXRlUHJvcGVydGllcykgewotCQkvKgotCQkgKiBJZiB3ZSBnZXQgdG8gaGVyZSwgZWl0aGVyIGZyb20gZXhpc3RpbmcgcmVxdWVzdCBsaXN0IGJlaW5nIHplcm8KLQkJICogbGVuZ3RoLCBvciBubyBleGlzaXRuZyByZXF1ZXN0cyAibWF0Y2hlZCIgbmV3IHJlcXVlc3QsIHRoZW4gYWRkIHRoZQotCQkgKiBuZXcgcmVxdWVzdC4KLQkJICovCi0JCWZVcGRhdGVzLmFkZChuZXdOb2RlUmVxdWVzdCk7Ci0JCWZVcGRhdGVQcm9wZXJ0aWVzLmFkZCh1cGRhdGVQcm9wZXJ0aWVzKTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIGFkZFVwZGF0ZVZpZXdlcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgewotCQlmVXBkYXRlVmlld2Vycy5hZGQodmlld2VyKTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIGFkZFJlZnJlc2hSZXF1ZXN0KE5vZGUgbmV3Tm9kZVJlcXVlc3QpIHsKLQkJLyoKLQkJICogbm90ZTogdGhlIGNhbGxlciBtdXN0IE5PVCBwYXNzIGluIG51bGwgbm9kZSByZXF1ZXN0ICh3aGljaCwgc2luY2UKLQkJICogcHJpdmF0ZSBtZXRob2QsIHdlIGRvIG5vdCBuZWVkIHRvIGdhdXJkIGFnYWluc3QgaGVyZSwgYXMgbG9uZyBhcyB3ZQotCQkgKiBnYXVyZCBhZ2FpbnN0IGl0IGluIGNhbGxpbmcgbWV0aG9kLgotCQkgKi8KLQkJaW50IHNpemUgPSBmUmVmcmVzaGVzLnNpemUoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCU5vZGUgZXhpc3RpbmdOb2RlUmVxdWVzdCA9IChOb2RlKSBmUmVmcmVzaGVzLmdldChpKTsKLQkJCS8qCi0JCQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDI3IElmIHdlCi0JCQkgKiBhbHJlYWR5IGhhdmUgYSByZXF1ZXN0IHdoaWNoIGVxdWFscyB0aGUgbmV3IHJlcXVlc3QsIGRpc2NhcmQKLQkJCSAqIHRoZSBuZXcgcmVxdWVzdAotCQkJICovCi0JCQlpZiAoZXhpc3RpbmdOb2RlUmVxdWVzdC5lcXVhbHMobmV3Tm9kZVJlcXVlc3QpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJLyoKLQkJCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBhIHJlcXVlc3Qgd2hpY2ggY29udGFpbnMgdGhlIG5ldyByZXF1ZXN0LAotCQkJICogZGlzY2FyZCB0aGUgbmV3IHJlcXVlc3QKLQkJCSAqLwotCQkJaWYgKGNvbnRhaW5zKGV4aXN0aW5nTm9kZVJlcXVlc3QsIG5ld05vZGVSZXF1ZXN0KSkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJCS8qCi0JCQkgKiBJZiBuZXcgcmVxdWVzdCBjb250YWlucyBhbnkgZXhpc3RpbmcgcmVxdWVzdHMsIHJlcGxhY2UgaXQgd2l0aAotCQkJICogbmV3IHJlcXVlc3QuIElTU1VFOiB0ZWNobmljYWxseSwgd2Ugc2hvdWxkIHJlcGxhY2UgQUxMCi0JCQkgKiBjb250YWluZWQsIGV4aXN0aW5nIHJlcXVlc3RzIChzdWNoIGFzIGlmIG1hbnkgc2libGluZ3MgYWxyZWFkeQotCQkJICogcXVlJ2QgdXAgd2hlbiB0aGVpciBjb21tb24gcGFyZW50IGlzIHRoZW4gcmVxdWVzdGVkLCBidXQsIEknbQotCQkJICogbm90IHN1cmUgaWYgdGhhdCBvY2N1cnMgbXVjaCwgaW4gcHJhY3RpY2UsIG9yIGlmIHRoZXJlJ3MgYW4KLQkJCSAqIGFsZ29yaXRobSB0byBxdWlja2x5IGZpbmQgdGhlbSBhbGwuIEFjdHVhbGx5LCBJIGd1ZXNzIHdlIGNvdWxkCi0JCQkgKiBqdXN0IGdvIHRocm91Z2ggdGhlIF9yZXN0XyBvZiB0aGUgbGlzdCAoaSsxIHRvIHNpemUpIGFuZCByZW1vdmUKLQkJCSAqIGFueSB0aGF0IGFyZSBjb250YWluZWQgYnkgbmV3IHJlcXVlc3QgLi4uIGluIGZ1dHVyZSA6KSAuCi0JCQkgKi8KLQkJCWlmIChjb250YWlucyhuZXdOb2RlUmVxdWVzdCwgZXhpc3RpbmdOb2RlUmVxdWVzdCkpIHsKLQkJCQlmUmVmcmVzaGVzLnNldChpLCBuZXdOb2RlUmVxdWVzdCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIElmIHdlIGdldCB0byBoZXJlLCBlaXRoZXIgZnJvbSBleGlzdGluZyByZXF1ZXN0IGxpc3QgYmVpbmcgemVybwotCQkgKiBsZW5ndGgsIG9yIG5vIGV4aXNpdG5nIHJlcXVlc3RzICJtYXRjaGVkIiBuZXcgcmVxdWVzdCwgdGhlbiBhZGQgdGhlCi0JCSAqIG5ldyByZXF1ZXN0LgotCQkgKi8KLQkJZlJlZnJlc2hlcy5hZGQobmV3Tm9kZVJlcXVlc3QpOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgYWRkUmVmcmVzaFZpZXdlcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgewotCQlmUmVmcmVzaFZpZXdlcnMuYWRkKHZpZXdlcik7Ci0JfQotCQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYiNjYW5jZWxpbmcoKQotCSAqLwotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNhbmNlbGluZygpIHsKLQkJZlVwZGF0ZXMuY2xlYXIoKTsKLQkJZlVwZGF0ZVZpZXdlcnMuY2xlYXIoKTsKLQkJc3VwZXIuY2FuY2VsaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogU2ltcGxlIGhpZXJhcmNoaWNhbCBjb250YWlubWVudCByZWxhdGlvbnNoaXAuIE5vdGUsIHRoaXMgbWV0aG9kIHJldHVybnMKLQkgKiAiZmFsc2UiIGlmIHRoZSB0d28gbm9kZXMgYXJlIGVxdWFsIQotCSAqIAotCSAqIEBwYXJhbSByb290Ci0JICogQHBhcmFtIHBvc3NpYmxlCi0JICogQHJldHVybiBpZiB0aGUgcm9vdCBpcyBwYXJlbnQgb2YgcG9zc2libGUsIHJldHVybiB0cnVlLCBvdGhlcndpc2UKLQkgKiAgICAgICAgIHJldHVybiBmYWxzZQotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBjb250YWlucyhOb2RlIHJvb3QsIE5vZGUgcG9zc2libGUpIHsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7IC8vJE5PTi1OTFMtMSQKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigicmVjdXJzaXZlIGNhbGwgdy8gcm9vdDogIiArIHJvb3QuZ2V0Tm9kZU5hbWUoKSArICIgYW5kIHBvc3NpYmxlOiAiICsgcG9zc2libGUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJLy8gdGhlIGZvbGxvd2luZyBjaGVja3MgYXJlIGltcG9ydGFudAotCQkvLyAjZG9jdW1lbnQgbm9kZSB3aWxsIGJyZWFrIHRoZSBhbGdvcml0aG0gb3RoZXJ3aXNlCi0KLQkJLy8gY2FuJ3QgY29udGFpbiB0aGUgY2hpbGQgaWYgaXQncyBudWxsCi0JCWlmIChyb290ID09IG51bGwpIHsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigicmV0dXJuaW5nIGZhbHNlOiByb290IGlzIG51bGwiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCS8vIG5vdGhpbmcgY2FuIGJlIHBhcmVudCBvZiBEb2N1bWVudCBub2RlCi0JCWlmIChwb3NzaWJsZSBpbnN0YW5jZW9mIERvY3VtZW50KSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInJldHVybmluZyBmYWxzZTogcG9zc2libGUgaXMgRG9jdW1lbnQgbm9kZSIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJLy8gZG9jdW1lbnQgY29udGFpbnMgZXZlcnl0aGluZwotCQlpZiAocm9vdCBpbnN0YW5jZW9mIERvY3VtZW50KSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInJldHVybmluZyB0cnVlOiByb290IGlzIERvY3VtZW50IG5vZGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvLyBjaGVjayBwYXJlbnRhZ2UKLQkJTm9kZSBjdXJyZW50ID0gcG9zc2libGU7Ci0JCS8vIGxvb3AgcGFyZW50cwotCQl3aGlsZSAoKGN1cnJlbnQgIT0gbnVsbCkgJiYgKGN1cnJlbnQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkRPQ1VNRU5UX05PREUpKSB7Ci0JCQkvLyBmb3VuZCBpdAotCQkJaWYgKHJvb3QuZXF1YWxzKGN1cnJlbnQpKSB7Ci0JCQkJaWYgKERFQlVHKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgISEhIGZvdW5kOiAiICsgcG9zc2libGUuZ2V0Tm9kZU5hbWUoKSArICIgaW4gc3ViZWxlbWVudCBvZjogIiArIHJvb3QuZ2V0Tm9kZU5hbWUoKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCX0KLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWN1cnJlbnQgPSBjdXJyZW50LmdldFBhcmVudE5vZGUoKTsKLQkJfQotCQkvLyBuZXZlciBmb3VuZCBpdAotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogUmVmcmVzaCBtdXN0IGJlIG9uIFVJIHRocmVhZCBiZWNhdXNlIGl0J3Mgb24gYSBTV1Qgd2lkZ2V0LgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvUmVmcmVzaChmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0cnVjdHVyZWRWaWV3ZXJbXSB2aWV3ZXJzKSB7Ci0JCWZpbmFsIERpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQlkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJaWYgKERFQlVHKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigicmVmcmVzaCBvbjogWyIgKyBub2RlLmdldE5vZGVOYW1lKCkgKyAiXSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl9Ci0KLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHZpZXdlcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJaWYgKCF2aWV3ZXJzW2ldLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKLQkJCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7Ci0JCQkJCQkJdmlld2Vyc1tpXS5yZWZyZXNoKHRydWUpOwotCQkJCQkJfQotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJdmlld2Vyc1tpXS5yZWZyZXNoKG5vZGUsIHRydWUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJaWYgKERFQlVHKSB7Ci0JCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAhISEgc2tpcHBlZCByZWZyZXNoaW5nIGRpc3Bvc2VkIHZpZXdlcjogIiArIHZpZXdlcnNbaV0pOyAvLyROT04tTkxTLTEkCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCX0KLQotCS8qKgotCSAqIFVwZGF0ZSBtdXN0IGJlIG9uIFVJIHRocmVhZCBiZWNhdXNlIGl0J3Mgb24gYSBTV1Qgd2lkZ2V0LgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVXBkYXRlKGZpbmFsIFN0cnVjdHVyZWRWaWV3ZXJbXSB2aWV3ZXJzLCBmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0cmluZ1tdIHByb3BlcnRpZXMpIHsKLQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlpZiAoREVCVUcpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJyZWZyZXNoIG9uOiBbIiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSArICJdIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCX0KLQotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmlld2Vycy5sZW5ndGg7IGkrKykgewotCQkJCQlpZiAoIXZpZXdlcnNbaV0uZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgewotCQkJCQkJdmlld2Vyc1tpXS51cGRhdGUobm9kZSwgcHJvcGVydGllcyk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlpZiAoREVCVUcpIHsKLQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICEhISBza2lwcGVkIHJlZnJlc2hpbmcgZGlzcG9zZWQgdmlld2VyOiAiICsgdmlld2Vyc1tpXSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgYWxzbyBzeW5jaHJvbml6ZWQgYmVjYXVzZSBpdCBhY2Nlc3NlcyB0aGUgZlJlZnJlc2hlcyBxdWV1ZQotCSAqIGFuZCBmUmVmcmVzaFZpZXdlcnMgbGlzdAotCSAqIAotCSAqIEByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbmQgYXJyYXkgb2YgdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgTm9kZXMKLQkgKiAgICAgICAgIHRvIHJlZnJlc2ggYW5kIHRoZSB2aWV3ZXJzIGluIHdoaWNoIHRvIHJlZnJlc2ggdGhlbQotCSAqLwotCXByaXZhdGUgc3luY2hyb25pemVkIE9iamVjdFtdIGdldFJlZnJlc2hSZXF1ZXN0cygpIHsKLQkJTm9kZVtdIHRvUmVmcmVzaCA9IChOb2RlW10pIGZSZWZyZXNoZXMudG9BcnJheShuZXcgTm9kZVtmUmVmcmVzaGVzLnNpemUoKV0pOwotCQlmUmVmcmVzaGVzLmNsZWFyKCk7Ci0KLQkJU3RydWN0dXJlZFZpZXdlcltdIHZpZXdlcnMgPSAoU3RydWN0dXJlZFZpZXdlcltdKSBmUmVmcmVzaFZpZXdlcnMudG9BcnJheShuZXcgU3RydWN0dXJlZFZpZXdlcltmUmVmcmVzaFZpZXdlcnMuc2l6ZSgpXSk7Ci0JCWZSZWZyZXNoVmlld2Vycy5jbGVhcigpOwotCi0JCXJldHVybiBuZXcgT2JqZWN0W117dG9SZWZyZXNoLCB2aWV3ZXJzfTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBhbHNvIHN5bmNocm9uaXplZCBiZWNhdXNlIGl0IGFjY2Vzc2VzIHRoZSBmVXBkYXRlcyBxdWV1ZQotCSAqIGFuZCBmVXBkYXRlVmlld2VycyBsaXN0Ci0JICogCi0JICogQHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFuZCBhcnJheSBvZiB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBOb2RlcwotCSAqICAgICAgICAgdG8gcmVmcmVzaCBhbmQgdGhlIHZpZXdlcnMgaW4gd2hpY2ggdG8gcmVmcmVzaCB0aGVtCi0JICovCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgT2JqZWN0W10gZ2V0VXBkYXRlUmVxdWVzdHMoKSB7Ci0JCU5vZGVbXSB0b1VwZGF0ZSA9IChOb2RlW10pIGZVcGRhdGVzLnRvQXJyYXkobmV3IE5vZGVbZlVwZGF0ZXMuc2l6ZSgpXSk7Ci0JCWZVcGRhdGVzLmNsZWFyKCk7Ci0KLQkJU3RydWN0dXJlZFZpZXdlcltdIHZpZXdlcnMgPSAoU3RydWN0dXJlZFZpZXdlcltdKSBmVXBkYXRlVmlld2Vycy50b0FycmF5KG5ldyBTdHJ1Y3R1cmVkVmlld2VyW2ZVcGRhdGVWaWV3ZXJzLnNpemUoKV0pOwotCQlmVXBkYXRlVmlld2Vycy5jbGVhcigpOwotCi0JCVN0cmluZ1tdW10gcHJvcGVydGllcyA9IChTdHJpbmdbXVtdKSBmVXBkYXRlUHJvcGVydGllcy50b0FycmF5KG5ldyBTdHJpbmdbZlVwZGF0ZVByb3BlcnRpZXMuc2l6ZSgpXVtdKTsKLQkJZlVwZGF0ZVByb3BlcnRpZXMuY2xlYXIoKTsKLQotCQlyZXR1cm4gbmV3IE9iamVjdFtde3RvVXBkYXRlLCB2aWV3ZXJzLCBwcm9wZXJ0aWVzfTsKLQl9Ci0KLQkvKioKLQkgKiBJbnZva2UgYSByZWZyZXNoIG9uIHRoZSB2aWV3ZXIgb24gdGhlIGdpdmVuIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyLCBOb2RlIG5vZGUpIHsKLQkJaWYgKG5vZGUgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJYWRkUmVmcmVzaFZpZXdlcih2aWV3ZXIpOwotCQlhZGRSZWZyZXNoUmVxdWVzdChub2RlKTsKLQkJc2NoZWR1bGUoVVBEQVRFX0RFTEFZKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnZva2UgYSByZWZyZXNoIG9uIHRoZSB2aWV3ZXIgb24gdGhlIGdpdmVuIG5vZGUuCi0JICogCi0JICogQHBhcmFtIG5vZGUKLQkgKi8KLQlwdWJsaWMgdm9pZCB1cGRhdGUoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIsIE5vZGUgbm9kZSwgU3RyaW5nW10gcHJvcGVydGllcykgewotCQlpZiAobm9kZSA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlhZGRVcGRhdGVWaWV3ZXIodmlld2VyKTsKLQkJYWRkVXBkYXRlUmVxdWVzdChub2RlLCBwcm9wZXJ0aWVzKTsKLQkJc2NoZWR1bGUoVVBEQVRFX0RFTEFZKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJdHJ5IHsKLQkJCXBlcmZvcm1VcGRhdGVzKCk7Ci0JCQkKLQkJCXBlcmZvcm1SZWZyZXNoZXMobW9uaXRvcik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb25pdG9yLmRvbmUoKTsKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXByaXZhdGUgdm9pZCBwZXJmb3JtUmVmcmVzaGVzKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkvLyBSZXRyaWV2ZSBCT1RIIHZpZXdlcnMgYW5kIE5vZGVzIG9uIG9uZSBibG9jawotCQlPYmplY3RbXSByZXF1ZXN0cyA9IGdldFJlZnJlc2hSZXF1ZXN0cygpOwotCQlOb2RlW10gbm9kZXMgPSAoTm9kZVtdKSByZXF1ZXN0c1swXTsKLQkJU3RydWN0dXJlZFZpZXdlcltdIHZpZXdlcnMgPSAoU3RydWN0dXJlZFZpZXdlcltdKSByZXF1ZXN0c1sxXTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpIHsKLQkJCQl0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKLQkJCX0KLQkJCWRvUmVmcmVzaChub2Rlc1tpXSwgdmlld2Vycyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGVyZm9ybVVwZGF0ZXMoKSB7Ci0JCS8vIFJldHJpZXZlIEJPVEggdmlld2VycyBhbmQgTm9kZXMgb24gb25lIGJsb2NrCi0JCU9iamVjdFtdIHJlcXVlc3RzID0gZ2V0VXBkYXRlUmVxdWVzdHMoKTsKLQkJTm9kZVtdIG5vZGVzID0gKE5vZGVbXSkgcmVxdWVzdHNbMF07Ci0JCVN0cnVjdHVyZWRWaWV3ZXJbXSB2aWV3ZXJzID0gKFN0cnVjdHVyZWRWaWV3ZXJbXSkgcmVxdWVzdHNbMV07Ci0JCVN0cmluZ1tdW10gcHJvcGVydGllcyA9IChTdHJpbmdbXVtdKSByZXF1ZXN0c1syXTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlkb1VwZGF0ZSh2aWV3ZXJzLCBub2Rlc1tpXSwgcHJvcGVydGllc1tpXSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9YTUxOb2RlQWN0aW9uTWFuYWdlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL1hNTE5vZGVBY3Rpb25NYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU5NzJjNTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL1hNTE5vZGVBY3Rpb25NYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuTW9kZWxRdWVyeVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5hY3Rpb25zLkFic3RyYWN0Tm9kZUFjdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotCi1wdWJsaWMgY2xhc3MgWE1MTm9kZUFjdGlvbk1hbmFnZXIgZXh0ZW5kcyBBYnN0cmFjdE5vZGVBY3Rpb25NYW5hZ2VyIHsKLQlwdWJsaWMgWE1MTm9kZUFjdGlvbk1hbmFnZXIoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgVmlld2VyIHZpZXdlcikgewotCQlzdXBlcihtb2RlbCwgTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShtb2RlbCksIHZpZXdlcik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcmVmb3JtYXQoTm9kZSBuZXdFbGVtZW50LCBib29sZWFuIGRlZXApIHsKLQkJdHJ5IHsKLQkJCS8vIHRlbGwgdGhlIG1vZGVsIHRoYXQgd2UgYXJlIGFib3V0IHRvIG1ha2UgYSBiaWcgbW9kZWwgY2hhbmdlCi0JCQlmTW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0KLQkJCS8vIGZvcm1hdCBzZWxlY3RlZCBub2RlCi0JCQlJU3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvciBmb3JtYXRQcm9jZXNzb3IgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0JCQlmb3JtYXRQcm9jZXNzb3IuZm9ybWF0Tm9kZShuZXdFbGVtZW50KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCS8vIHRlbGwgdGhlIG1vZGVsIHRoYXQgd2UgYXJlIGRvbmUgd2l0aCB0aGUgYmlnIG1vZGVsIGNoYW5nZQotCQkJZk1vZGVsLmNoYW5nZWRNb2RlbCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TW9kZWwoSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCkgewotCQlmTW9kZWwgPSBuZXdNb2RlbDsKLQkJc2V0TW9kZWxRdWVyeShNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KG5ld01vZGVsKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0TW9kZWxRdWVyeShNb2RlbFF1ZXJ5IG5ld01vZGVsUXVlcnkpIHsKLQkJbW9kZWxRdWVyeSA9IG5ld01vZGVsUXVlcnk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL1hTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2NvbnRlbnRvdXRsaW5lL1hTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmMTA4ZGE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9jb250ZW50b3V0bGluZS9YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGJhc2VkIG9uIFhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBYU0wgaW1wbGVtZW50YXRpb24uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlByb3BlcnR5Q2hhbmdlVXBkYXRlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuUHJvcGVydHlDaGFuZ2VVcGRhdGVBY3Rpb25Db250cmlidXRpb25JdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuZWRpdG9yLkVkaXRvclBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuZWRpdG9yLkVkaXRvclBsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxVSVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkFic3RyYWN0WE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MuY29udGVudG91dGxpbmUuWE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBNb3JlIGFkdmFuY2VkIE91dGxpbmUgQ29uZmlndXJhdGlvbiBmb3IgWE1MIHN1cHBvcnQuICBFeHBlY3RzIHRoYXQgdGhlIHZpZXdlcidzCi0gKiBpbnB1dCB3aWxsIGJlIHRoZSBET00gTW9kZWwuCi0gKiAKLSAqIEBzZWUgQWJzdHJhY3RYTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24KLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiBleHRlbmRzIFhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiB7Ci0Jc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLQlzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0KLQotCS8qKgotCSAqIFRvZ2dsZSBhY3Rpb24gZm9yIHdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZQotCSAqLwotCXByaXZhdGUgY2xhc3MgVG9nZ2xlU2hvd0F0dHJpYnV0ZUFjdGlvbiBleHRlbmRzIFByb3BlcnR5Q2hhbmdlVXBkYXRlQWN0aW9uIHsKLQkJLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTg4NDQ0Ci0JCXByaXZhdGUgVHJlZVZpZXdlciBmVHJlZVZpZXdlcjsKLQotCQlwdWJsaWMgVG9nZ2xlU2hvd0F0dHJpYnV0ZUFjdGlvbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZmVyZW5jZSwgVHJlZVZpZXdlciB0cmVlVmlld2VyKSB7Ci0JCQlzdXBlcihYTUxVSU1lc3NhZ2VzLlhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbl8wLCBzdG9yZSwgcHJlZmVyZW5jZSwgdHJ1ZSk7Ci0JCQlzZXRUb29sVGlwVGV4dChnZXRUZXh0KCkpOwotCi0JCQlzZXRJbWFnZURlc2NyaXB0b3IoRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZURlc2NyaXB0b3IoRWRpdG9yUGx1Z2luSW1hZ2VzLklNR19PQkpfUFJPUF9QUykpOwotCQkJZlRyZWVWaWV3ZXIgPSB0cmVlVmlld2VyOwotCQkJdXBkYXRlKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVVwZGF0ZSN1cGRhdGUoKQotCQkgKi8KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCXN1cGVyLnVwZGF0ZSgpOwotCQkJZlNob3dBdHRyaWJ1dGVzID0gaXNDaGVja2VkKCk7Ci0KLQkJCS8vIG5vdGlmeSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgY2hhbmdlCi0JCQllbmFibGVTaG93QXR0cmlidXRlcyhmU2hvd0F0dHJpYnV0ZXMsIGZUcmVlVmlld2VyKTsKLQotCQkJLy8gcmVmcmVzaCB0aGUgb3V0bGluZSB2aWV3Ci0JCQlmVHJlZVZpZXdlci5yZWZyZXNoKHRydWUpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIgZkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyOwotCXByaXZhdGUgSUNvbnRlbnRQcm92aWRlciBmQ29udGVudFByb3ZpZGVyID0gbnVsbDsKLQotCWJvb2xlYW4gZlNob3dBdHRyaWJ1dGVzID0gZmFsc2U7Ci0KLQkvKgotCSAqIFByZWZlcmVuY2Uga2V5IGZvciBTaG93IEF0dHJpYnV0ZXMKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1VUTElORV9TSE9XX0FUVFJJQlVURV9QUkVGID0gIm91dGxpbmUtc2hvdy1hdHRyaWJ1dGUiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBDcmVhdGUgbmV3IGluc3RhbmNlIG9mIFhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbgotCSAqLwotCXB1YmxpYyBYU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24oKSB7Ci0JCS8vIE11c3QgaGF2ZSBlbXB0eSBjb25zdHJ1Y3RvciB0byBjcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uCi0JCXN1cGVyKCk7Ci0KLQkJLyoqCi0JCSAqIFNldCB1cCBvdXIgcHJlZmVyZW5jZSBzdG9yZSBoZXJlLiBUaGlzIGlzIGRvbmUgc28gdGhhdCBzdWJjbGFzc2VzCi0JCSAqIGFyZW4ndCByZXF1aXJlZCB0byBzZXQgdGhlaXIgb3duIHZhbHVlcywgYWx0aG91Z2ggaWYgdGhleSBoYXZlLAotCQkgKiB0aG9zZSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KLQkJICovCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBnZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJaWYgKHN0b3JlLmdldERlZmF1bHRTdHJpbmcoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5ET0NVTUVOVF9OT0RFKS5sZW5ndGgoKSA9PSAwKQotCQkJc3RvcmUuc2V0RGVmYXVsdChYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLkRPQ1VNRU5UX05PREUsICIxLCB0cnVlIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHN0b3JlLmdldERlZmF1bHRTdHJpbmcoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpLmxlbmd0aCgpID09IDApCi0JCQlzdG9yZS5zZXREZWZhdWx0KFhNTFVJUHJlZmVyZW5jZU5hbWVzLk9VVExJTkVfQkVIQVZJT1IuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFLCAiMiwgdHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0JCWlmIChzdG9yZS5nZXREZWZhdWx0U3RyaW5nKFhNTFVJUHJlZmVyZW5jZU5hbWVzLk9VVExJTkVfQkVIQVZJT1IuRE9DVU1FTlRfVFlQRV9OT0RFKS5sZW5ndGgoKSA9PSAwKQotCQkJc3RvcmUuc2V0RGVmYXVsdChYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLkRPQ1VNRU5UX1RZUEVfTk9ERSwgIjMsIHRydWUiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpLmxlbmd0aCgpID09IDApCi0JCQlzdG9yZS5zZXREZWZhdWx0KFhNTFVJUHJlZmVyZW5jZU5hbWVzLk9VVExJTkVfQkVIQVZJT1IuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSwgIjQsIHRydWUiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLkNPTU1FTlRfTk9ERSkubGVuZ3RoKCkgPT0gMCkKLQkJCXN0b3JlLnNldERlZmF1bHQoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5DT01NRU5UX05PREUsICI1LCB0cnVlIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHN0b3JlLmdldERlZmF1bHRTdHJpbmcoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5BVFRSSUJVVEVfTk9ERSkubGVuZ3RoKCkgPT0gMCkKLQkJCXN0b3JlLnNldERlZmF1bHQoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5BVFRSSUJVVEVfTk9ERSwgIjYsIGZhbHNlIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHN0b3JlLmdldERlZmF1bHRTdHJpbmcoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5FTEVNRU5UX05PREUpLmxlbmd0aCgpID09IDApCi0JCQlzdG9yZS5zZXREZWZhdWx0KFhNTFVJUHJlZmVyZW5jZU5hbWVzLk9VVExJTkVfQkVIQVZJT1IuRUxFTUVOVF9OT0RFLCAiNywgdHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0JCWlmIChzdG9yZS5nZXREZWZhdWx0U3RyaW5nKFhNTFVJUHJlZmVyZW5jZU5hbWVzLk9VVExJTkVfQkVIQVZJT1IuRU5USVRZX1JFRkVSRU5DRV9OT0RFKS5sZW5ndGgoKSA9PSAwKQotCQkJc3RvcmUuc2V0RGVmYXVsdChYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLkVOVElUWV9SRUZFUkVOQ0VfTk9ERSwgIjgsIHRydWUiKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAoc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLkNEQVRBX1NFQ1RJT05fTk9ERSkubGVuZ3RoKCkgPT0gMCkKLQkJCXN0b3JlLnNldERlZmF1bHQoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5DREFUQV9TRUNUSU9OX05PREUsICI5LCB0cnVlIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHN0b3JlLmdldERlZmF1bHRTdHJpbmcoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5FTlRJVFlfTk9ERSkubGVuZ3RoKCkgPT0gMCkKLQkJCXN0b3JlLnNldERlZmF1bHQoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5FTlRJVFlfTk9ERSwgIjEwLCB0cnVlIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHN0b3JlLmdldERlZmF1bHRTdHJpbmcoWE1MVUlQcmVmZXJlbmNlTmFtZXMuT1VUTElORV9CRUhBVklPUi5OT1RBVElPTl9OT0RFKS5sZW5ndGgoKSA9PSAwKQotCQkJc3RvcmUuc2V0RGVmYXVsdChYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLk5PVEFUSU9OX05PREUsICIxMSwgdHJ1ZSIpOyAvLyROT04tTkxTLTEkCi0JCWlmIChzdG9yZS5nZXREZWZhdWx0U3RyaW5nKFhNTFVJUHJlZmVyZW5jZU5hbWVzLk9VVExJTkVfQkVIQVZJT1IuVEVYVF9OT0RFKS5sZW5ndGgoKSA9PSAwKQotCQkJc3RvcmUuc2V0RGVmYXVsdChYTUxVSVByZWZlcmVuY2VOYW1lcy5PVVRMSU5FX0JFSEFWSU9SLlRFWFRfTk9ERSwgIjEyLCBmYWxzZSIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiNjcmVhdGVNZW51Q29udHJpYnV0aW9ucyhvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXIpCi0JICovCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElDb250cmlidXRpb25JdGVtW10gY3JlYXRlTWVudUNvbnRyaWJ1dGlvbnMoVHJlZVZpZXdlciB2aWV3ZXIpIHsKLQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtczsKLQkJLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTg4NDQ0Ci0JCUlDb250cmlidXRpb25JdGVtIHNob3dBdHRyaWJ1dGVJdGVtID0gbmV3IFByb3BlcnR5Q2hhbmdlVXBkYXRlQWN0aW9uQ29udHJpYnV0aW9uSXRlbShuZXcgVG9nZ2xlU2hvd0F0dHJpYnV0ZUFjdGlvbihnZXRQcmVmZXJlbmNlU3RvcmUoKSwgT1VUTElORV9TSE9XX0FUVFJJQlVURV9QUkVGLCB2aWV3ZXIpKTsKLQotCQlpdGVtcyA9IHN1cGVyLmNyZWF0ZU1lbnVDb250cmlidXRpb25zKHZpZXdlcik7Ci0JCWlmIChpdGVtcyA9PSBudWxsKSB7Ci0JCQlpdGVtcyA9IG5ldyBJQ29udHJpYnV0aW9uSXRlbVtde3Nob3dBdHRyaWJ1dGVJdGVtfTsKLQkJfQotCQllbHNlIHsKLQkJCUlDb250cmlidXRpb25JdGVtW10gY29tYmluZWRJdGVtcyA9IG5ldyBJQ29udHJpYnV0aW9uSXRlbVtpdGVtcy5sZW5ndGggKyAxXTsKLQkJCVN5c3RlbS5hcnJheWNvcHkoaXRlbXMsIDAsIGNvbWJpbmVkSXRlbXMsIDAsIGl0ZW1zLmxlbmd0aCk7Ci0JCQljb21iaW5lZEl0ZW1zW2l0ZW1zLmxlbmd0aF0gPSBzaG93QXR0cmlidXRlSXRlbTsKLQkJCWl0ZW1zID0gY29tYmluZWRJdGVtczsKLQkJfQotCQlyZXR1cm4gaXRlbXM7Ci0JfQotCi0JLyoqCi0JICogTm90aWZpZXMgdGhpcyBjb25maWd1cmF0aW9uIHRoYXQgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QKLQkgKiB0byBzaG93IGF0dHJpYnV0ZSB2YWx1ZXMgaW4gdGhlIHRyZWUgdmlld2VyIGhhcyBjaGFuZ2VkLiBUaGUgdHJlZQotCSAqIHZpZXdlciBpcyBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlZCBhZnRlcndhcmRzIHRvIHVwZGF0ZSB0aGUgbGFiZWxzLgotCSAqIAotCSAqIENsaWVudHMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgbWV0aG9kLCBidXQgcmF0aGVyIHNob3VsZCByZWFjdCB0byBpdC4KLQkgKiAKLQkgKiBAcGFyYW0gc2hvd0F0dHJpYnV0ZXMKLQkgKiAgICAgICAgICAgIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBzaG93IGF0dHJpYnV0ZSB2YWx1ZXMgaW4KLQkgKiAgICAgICAgICAgIHRoZSB0cmVlIHZpZXdlcgotCSAqIEBwYXJhbSB0cmVlVmlld2VyCi0JICogICAgICAgICAgICB0aGUgVHJlZVZpZXdlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uCi0JICovCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZW5hYmxlU2hvd0F0dHJpYnV0ZXMoYm9vbGVhbiBzaG93QXR0cmlidXRlcywgVHJlZVZpZXdlciB0cmVlVmlld2VyKSB7Ci0JCWlmIChmQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIgIT0gbnVsbCkgewotCQkJZkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyLnNldFNob3dBdHRyaWJ1dGVzKHNob3dBdHRyaWJ1dGVzKTsKLQkJfQotCX0KLQkKLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uI2dldENvbnRlbnRQcm92aWRlcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXIpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIElDb250ZW50UHJvdmlkZXIgZ2V0Q29udGVudFByb3ZpZGVyKFRyZWVWaWV3ZXIgdmlld2VyKSB7Ci0JCWlmIChmQ29udGVudFByb3ZpZGVyID09IG51bGwpIHsKLQkJCWZDb250ZW50UHJvdmlkZXIgPSBuZXcgSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyKCk7Ci0JCX0KLQkJcmV0dXJuIGZDb250ZW50UHJvdmlkZXI7Ci0JfQotCi0JcHJpdmF0ZSBPYmplY3QgZ2V0RmlsdGVyZWROb2RlKE9iamVjdCBvYmplY3QpIHsKLQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHsKLQkJCU5vZGUgbm9kZSA9IChOb2RlKSBvYmplY3Q7Ci0JCQlzaG9ydCBub2RlVHlwZSA9IG5vZGUuZ2V0Tm9kZVR5cGUoKTsKLQkJCS8vIHJlcGxhY2UgYXR0cmlidXRlIG5vZGUgaW4gc2VsZWN0aW9uIHdpdGggaXRzIHBhcmVudAotCQkJaWYgKG5vZGVUeXBlID09IE5vZGUuQVRUUklCVVRFX05PREUpIHsKLQkJCQlub2RlID0gKChBdHRyKSBub2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCX0KLQkJCS8vIGFueXRoaW5nIGVsc2Ugbm90IHZpc2libGUsIHJlcGxhY2Ugd2l0aCBwYXJlbnQgbm9kZQotCQkJZWxzZSBpZiAobm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUgfHwgbm9kZVR5cGUgPT0gTm9kZS5DT01NRU5UX05PREUpIHsKLQkJCQlub2RlID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0JCQl9Ci0JCQlyZXR1cm4gbm9kZTsKLQkJfQotCQlyZXR1cm4gb2JqZWN0OwotCX0KLQotCXByaXZhdGUgT2JqZWN0W10gZ2V0RmlsdGVyZWROb2RlcyhPYmplY3RbXSBmaWx0ZXJlZE5vZGVzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsdGVyZWROb2Rlcy5sZW5ndGg7IGkrKykgewotCQkJZmlsdGVyZWROb2Rlc1tpXSA9IGdldEZpbHRlcmVkTm9kZShmaWx0ZXJlZE5vZGVzW2ldKTsKLQkJfQotCQlyZXR1cm4gZmlsdGVyZWROb2RlczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uI2dldExhYmVsUHJvdmlkZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBJTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKFRyZWVWaWV3ZXIgdmlld2VyKSB7Ci0JCWlmIChmQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIgPT0gbnVsbCkgewotCQkJZkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyID0gbmV3IEF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyKGZTaG93QXR0cmlidXRlcyk7Ci0JCX0KLQkJcmV0dXJuIGZBdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlcjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uI2dldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXIsCi0JICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKFRyZWVWaWV3ZXIgdmlld2VyLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlJU2VsZWN0aW9uIGZpbHRlcmVkU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCU9iamVjdFtdIGZpbHRlcmVkTm9kZXMgPSBnZXRGaWx0ZXJlZE5vZGVzKCgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikudG9BcnJheSgpKTsKLQkJCWZpbHRlcmVkU2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZmlsdGVyZWROb2Rlcyk7Ci0JCX0KLQkJcmV0dXJuIGZpbHRlcmVkU2VsZWN0aW9uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9kb3VibGVjbGljay9YU0xEb3VibGVDbGlja1N0cmF0ZWd5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvZG91YmxlY2xpY2svWFNMRG91YmxlQ2xpY2tTdHJhdGVneS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMmQ1ZDhmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9kb3VibGVjbGljay9YU0xEb3VibGVDbGlja1N0cmF0ZWd5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiwgYmFzZWQgb24gYSBwYXRjaAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSBOaWsgTWF0eXVzaGV2IGluIGJ1ZyAxOTUyNjIuCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmRvdWJsZWNsaWNrLlhNTERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci0gCi0KLS8qKgotICogWFNMRG91YmxlQ2xpY2tTdHJhdGVneSBleHRlbmRzIHRoZSBYTUxEb3VibGVjbGlja1N0cmF0ZWd5IHRvIHRha2UgaW50bwotICogYWNjb3VudCB0aG9zZSBhcmVhcyB0aGF0IG1heSBiZSBpbnZvbHZlZCBpbiBYUGF0aCBFeHByZXNzaW9ucy4KLSAqIAotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgWFNMRG91YmxlQ2xpY2tTdHJhdGVneSBleHRlbmRzIFhNTERvdWJsZUNsaWNrU3RyYXRlZ3kgewotCXN0YXRpYyBmaW5hbCBjaGFyW10gWE1MX0RFTElNSVRFUlMgPSB7ICcgJywgJ1wnJywgJ1wiJywgJ1snLCAnXScsCi0JCQknfCcsICcoJywgJyknLCAneycsICd9JywgJz0nLCAnIScgfTsKLQlzdGF0aWMgZmluYWwgY2hhcltdIFhNTF9QQVJFTlRIRVNJUyA9IHsgJ1snLCAnXScsICcoJywgJyknLCAneycsCi0JCQknfScgfTsKLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBQb2ludCBnZXRXb3JkKFN0cmluZyBzdHJpbmcsIGludCBjdXJzb3IpIHsKLQkJaWYgKHN0cmluZyA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCWludCB3b3JkU3RhcnQgPSAwOwotCQlpbnQgd29yZEVuZCA9IHN0cmluZy5sZW5ndGgoKTsKLQotCQl3b3JkU3RhcnQgPSBzdGFydE9mV29yZChzdHJpbmcsIGN1cnNvciwgd29yZFN0YXJ0KTsKLQkJd29yZEVuZCA9IGVuZE9mV29yZChzdHJpbmcsIGN1cnNvciwgd29yZEVuZCk7Ci0JCXdvcmRFbmQgPSBjaGVja1hQYXRoRXhwcmVzc2lvbihzdHJpbmcsIHdvcmRFbmQpOwotCi0JCWlmICgod29yZFN0YXJ0ID09IHdvcmRFbmQpICYmICFpc1F1b3RlZChzdHJpbmcpKSB7Ci0JCQl3b3JkU3RhcnQgPSAwOwotCQkJd29yZEVuZCA9IHN0cmluZy5sZW5ndGgoKTsKLQkJfQotCi0JCXJldHVybiBuZXcgUG9pbnQod29yZFN0YXJ0LCB3b3JkRW5kKTsKLQl9Ci0KLQlwcml2YXRlIGludCBjaGVja1hQYXRoRXhwcmVzc2lvbihTdHJpbmcgc3RyaW5nLCBpbnQgd29yZEVuZCkgewotCQlpZiAod29yZEVuZCA8IHN0cmluZy5sZW5ndGgoKSAtIDEpIHsKLQkJCS8vIGNoZWNrIHBhcmFudGhlc2lzCi0JCQlpbnRbXSBmbGFncyA9IG5ldyBpbnRbWE1MX1BBUkVOVEhFU0lTLmxlbmd0aCAvIDJdOwotCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQkJaW50IHBvcyA9IHdvcmRFbmQ7Ci0JCQlkbyB7Ci0JCQkJY2hhciBjdXIgPSBzdHJpbmcuY2hhckF0KHBvcyk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBYTUxfUEFSRU5USEVTSVMubGVuZ3RoOyBpKyspIHsKLQkJCQkJaWYgKGN1ciA9PSBYTUxfUEFSRU5USEVTSVNbaV0pIHsKLQkJCQkJCWZsYWdzW2kgLyAyXSArPSAoaSAlIDIgPT0gMCA/IDEgOiAtMSk7Ci0JCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYm9vbGVhbiBzdG9wID0gdHJ1ZTsKLQkJCQlib29sZWFuIHVuYmFsYW5jZWQgPSBmYWxzZTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGZsYWdzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXN0b3AgPSBzdG9wICYmIGZsYWdzW2ldID09IDA7Ci0JCQkJCXVuYmFsYW5jZWQgfD0gZmxhZ3NbaV0gPCAwOwotCQkJCX0KLQotCQkJCWlmICghdW5iYWxhbmNlZCkgewotCQkJCQlwb3MrKzsKLQkJCQl9Ci0JCQkJaWYgKHN0b3AgfCB1bmJhbGFuY2VkKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gd2hpbGUgKHBvcyA8IHN0cmluZy5sZW5ndGgoKSk7Ci0JCQkKLQkJCWlmIChmb3VuZCkgewotCQkJCXdvcmRFbmQgPSBNYXRoLm1pbihzdHJpbmcubGVuZ3RoKCkgLSAxLCBwb3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiB3b3JkRW5kOwotCX0KLQotCXByaXZhdGUgaW50IGVuZE9mV29yZChTdHJpbmcgc3RyaW5nLCBpbnQgY3Vyc29yLCBpbnQgd29yZEVuZCkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IFhNTF9ERUxJTUlURVJTLmxlbmd0aDsgaSsrKSB7Ci0JCQljaGFyIGRlbGltID0gWE1MX0RFTElNSVRFUlNbaV07Ci0JCQlpbnQgZW5kID0gc3RyaW5nLmluZGV4T2YoZGVsaW0sIGN1cnNvcik7Ci0JCQl3b3JkRW5kID0gTWF0aC5taW4od29yZEVuZCwgZW5kID09IC0xID8gc3RyaW5nLmxlbmd0aCgpIDogZW5kKTsKLQkJfQotCi0JCWlmICh3b3JkRW5kID09IHN0cmluZy5sZW5ndGgoKSkgewotCQkJd29yZEVuZCA9IGN1cnNvcjsKLQkJfQotCQlyZXR1cm4gd29yZEVuZDsKLQl9Ci0KLQlwcm90ZWN0ZWQgaW50IHN0YXJ0T2ZXb3JkKFN0cmluZyBzdHJpbmcsIGludCBjdXJzb3IsIGludCB3b3JkU3RhcnQpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBYTUxfREVMSU1JVEVSUy5sZW5ndGg7IGkrKykgewotCQkJY2hhciBkZWxpbSA9IFhNTF9ERUxJTUlURVJTW2ldOwotCQkJd29yZFN0YXJ0ID0gTWF0aC5tYXgod29yZFN0YXJ0LCBzdHJpbmcubGFzdEluZGV4T2YoZGVsaW0sCi0JCQkJCWN1cnNvciAtIDEpKTsKLQkJfQotCi0JCWlmICh3b3JkU3RhcnQgPT0gLTEpIHsKLQkJCXdvcmRTdGFydCA9IGN1cnNvcjsKLQkJfSBlbHNlIHsKLQkJCXdvcmRTdGFydCsrOwotCQl9Ci0JCXJldHVybiB3b3JkU3RhcnQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvZWRpdG9yL092ZXJyaWRlSW5kaWNhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvZWRpdG9yL092ZXJyaWRlSW5kaWNhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZDZkNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2VkaXRvci9PdmVycmlkZUluZGljYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci0KLS8qKgotICogT3ZlcndyaXRlIGFuZCBvdmVycmlkZSBpbmRpY2F0b3IgYW5ub3RhdGlvbi4KLSAqIAotICogQHNpbmNlIDEuMAotICovCi1jbGFzcyBPdmVycmlkZUluZGljYXRvciBleHRlbmRzIEFubm90YXRpb24KLXsKLQotCS8vcHJpdmF0ZSBTdHJpbmcgZkFzdE5vZGVLZXk7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IG92ZXJyaWRlIGFubm90YXRpb24uCi0JICogCi0JICogQHBhcmFtIGlzT3ZlcndyaXRlSW5kaWNhdG9yCi0JICogICAgICAgICAgICA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGFubm90YXRpb24gaXMgYW4gb3ZlcndyaXRlIGluZGljYXRvciwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZQotCSAqIEBwYXJhbSB0ZXh0Ci0JICogICAgICAgICAgICB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhbm5vdGF0aW9uCi0JICogQHBhcmFtIGtleQotCSAqICAgICAgICAgICAgdGhlIG1ldGhvZCBiaW5kaW5nIGtleQotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlPdmVycmlkZUluZGljYXRvcihTdHJpbmcgdGV4dCwgU3RyaW5nIGtleSkKLQl7Ci0JCXN1cGVyKE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlci5BTk5PVEFUSU9OX1RZUEUsIGZhbHNlLCB0ZXh0KTsKLQkJLy9mQXN0Tm9kZUtleSA9IGtleTsKLQl9Ci0KLQkvKioKLQkgKiBPcGVucyBhbmQgcmV2ZWFscyB0aGUgZGVmaW5pbmcgbWV0aG9kLgotCSAqLwotCXB1YmxpYyB2b2lkIG9wZW4oKQotCXsKLQkJLy8gQ29tcGlsYXRpb25Vbml0IGFzdD0gU2hhcmVkQVNUUHJvdmlkZXIuZ2V0QVNUKGZKYXZhRWxlbWVudCwgU2hhcmVkQVNUUHJvdmlkZXIuV0FJVF9BQ1RJVkVfT05MWSwgbnVsbCk7Ci0JCS8vIGlmIChhc3QgIT0gbnVsbCkgewotCQkvLyBBU1ROb2RlIG5vZGU9IGFzdC5maW5kRGVjbGFyaW5nTm9kZShmQXN0Tm9kZUtleSk7Ci0JCS8vIGlmIChub2RlIGluc3RhbmNlb2YgTWV0aG9kRGVjbGFyYXRpb24pIHsKLQkJLy8gdHJ5IHsKLQkJLy8gSU1ldGhvZEJpbmRpbmcgbWV0aG9kQmluZGluZz0gKChNZXRob2REZWNsYXJhdGlvbilub2RlKS5yZXNvbHZlQmluZGluZygpOwotCQkvLyBJTWV0aG9kQmluZGluZyBkZWZpbmluZ01ldGhvZEJpbmRpbmc9IEJpbmRpbmdzLmZpbmRPdmVycmlkZGVuTWV0aG9kKG1ldGhvZEJpbmRpbmcsIHRydWUpOwotCQkvLyBpZiAoZGVmaW5pbmdNZXRob2RCaW5kaW5nICE9IG51bGwpIHsKLQkJLy8gSUphdmFFbGVtZW50IGRlZmluaW5nTWV0aG9kPSBkZWZpbmluZ01ldGhvZEJpbmRpbmcuZ2V0SmF2YUVsZW1lbnQoKTsKLQkJLy8gaWYgKGRlZmluaW5nTWV0aG9kICE9IG51bGwpIHsKLQkJLy8gSmF2YVVJLm9wZW5JbkVkaXRvcihkZWZpbmluZ01ldGhvZCwgdHJ1ZSwgdHJ1ZSk7Ci0JCS8vIHJldHVybjsKLQkJLy8gfQotCQkvLyB9Ci0JCS8vIH0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkvLyBFeGNlcHRpb25IYW5kbGVyLmhhbmRsZShlLCBKYXZhRWRpdG9yTWVzc2FnZXMuT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyX29wZW5fZXJyb3JfdGl0bGUsIEphdmFFZGl0b3JNZXNzYWdlcy5PdmVycmlkZUluZGljYXRvck1hbmFnZXJfb3Blbl9lcnJvcl9tZXNzYWdlSGFzTG9nRW50cnkpOwotCQkvLyByZXR1cm47Ci0JCS8vIH0KLQkJLy8gfQotCQkvLyB9Ci0JCS8vIFN0cmluZyB0aXRsZT0gSmF2YUVkaXRvck1lc3NhZ2VzLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcl9vcGVuX2Vycm9yX3RpdGxlOwotCQkvLyBTdHJpbmcgbWVzc2FnZT0gSmF2YUVkaXRvck1lc3NhZ2VzLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcl9vcGVuX2Vycm9yX21lc3NhZ2U7Ci0JCS8vIE1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKEphdmFQbHVnaW4uZ2V0QWN0aXZlV29ya2JlbmNoU2hlbGwoKSwgdGl0bGUsIG1lc3NhZ2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9lZGl0b3IvT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvZWRpdG9yL092ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTAxNTljLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9lZGl0b3IvT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Bbm5vdGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklBbm5vdGF0aW9uSW1hZ2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luOwotCi0vKioKLSAqIEltYWdlIHByb3ZpZGVyIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyLk92ZXJyaWRlSW5kaWNhdG9yfSBhbm5vdGF0aW9ucy4KLSAqIAotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgY2xhc3MgT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyIGltcGxlbWVudHMgSUFubm90YXRpb25JbWFnZVByb3ZpZGVyCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9WRVJSSURFX0lNR19ERVNDX0lEID0gIk92ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlci5PVkVSUklERV9JTUdfREVTQ19JRCI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCBtYW5hZ2luZyBpdHMgb3duIGltYWdlLgotCSAqIAotCSAqIEBwYXJhbSBhbm5vdGF0aW9uCi0JICogQHJldHVybiBudWxsCi0JICovCi0JcHVibGljIEltYWdlIGdldE1hbmFnZWRJbWFnZShBbm5vdGF0aW9uIGFubm90YXRpb24pCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSUFubm90YXRpb25JbWFnZVByb3ZpZGVyI2dldEltYWdlRGVzY3JpcHRvcklkKG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb24pCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJbWFnZURlc2NyaXB0b3JJZChBbm5vdGF0aW9uIGFubm90YXRpb24pCi0JewotCQlpZiAoIWlzSW1hZ2VQcm92aWRlckZvcihhbm5vdGF0aW9uKSkKLQkJCXJldHVybiBudWxsOwotCQlyZXR1cm4gT1ZFUlJJREVfSU1HX0RFU0NfSUQ7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklBbm5vdGF0aW9uSW1hZ2VQcm92aWRlciNnZXRJbWFnZURlc2NyaXB0b3IoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgaW1hZ2VEZXNjcml0cG9ySWQpCi0JewotCQlpZiAoT1ZFUlJJREVfSU1HX0RFU0NfSUQuZXF1YWxzKGltYWdlRGVzY3JpdHBvcklkKSkKLQkJCXJldHVybiBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oWFNMVUlQbHVnaW4uUExVR0lOX0lELCAiaWNvbnMvZnVsbC9vdmVyX2NvLmdpZiIpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0ltYWdlUHJvdmlkZXJGb3IoQW5ub3RhdGlvbiBhbm5vdGF0aW9uKQotCXsKLQkJcmV0dXJuIGFubm90YXRpb24gIT0gbnVsbCAmJiBPdmVycmlkZUluZGljYXRvck1hbmFnZXIuQU5OT1RBVElPTl9UWVBFLmVxdWFscyhhbm5vdGF0aW9uLmdldFR5cGUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2VkaXRvci9PdmVycmlkZUluZGljYXRvck1hbmFnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9lZGl0b3IvT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjYyMDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2VkaXRvci9PdmVycmlkZUluZGljYXRvck1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklTeW5jaHJvbml6YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotLyoqCi0gKiBNYW5hZ2VzIHRoZSBvdmVycmlkZSBhbmQgb3ZlcndyaXRlIGluZGljYXRvcnMgZm9yIHRoZSBnaXZlbiBKYXZhIGVsZW1lbnQgYW5kIGFubm90YXRpb24gbW9kZWwuCi0gKiAKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcgotewotCi0KLQlzdGF0aWMgZmluYWwgU3RyaW5nIEFOTk9UQVRJT05fVFlQRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnVpLm92ZXJyaWRlIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBJQW5ub3RhdGlvbk1vZGVsIGZBbm5vdGF0aW9uTW9kZWw7Ci0JcHJpdmF0ZSBPYmplY3QgZkFubm90YXRpb25Nb2RlbExvY2tPYmplY3Q7Ci0JcHJpdmF0ZSBBbm5vdGF0aW9uW10gZk92ZXJyaWRlQW5ub3RhdGlvbnM7Ci0KLQlwcml2YXRlIElGaWxlIGZpbGU7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciByZXF1aXJlcyB0aGUgZWRpdG9ycyBhbm5vdGF0aW9uIG1vZGVsIGFuZCB0aGUgZmlsZSB0aGUgZWRpdG9yIGlzIGxvb2tpbmcgYXQuCi0JICogCi0JICogQHBhcmFtIGFubm90YXRpb25Nb2RlbAotCSAqIEBwYXJhbSBmaWxlCi0JICovCi0JcHVibGljIE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcihJQW5ub3RhdGlvbk1vZGVsIGFubm90YXRpb25Nb2RlbCwgSUZpbGUgZmlsZSkKLQl7Ci0JCUFzc2VydC5pc05vdE51bGwoYW5ub3RhdGlvbk1vZGVsKTsKLQotCQl0aGlzLmZpbGUgPSBmaWxlOwotCQlmQW5ub3RhdGlvbk1vZGVsID0gYW5ub3RhdGlvbk1vZGVsOwotCQlmQW5ub3RhdGlvbk1vZGVsTG9ja09iamVjdCA9IGdldExvY2tPYmplY3QoZkFubm90YXRpb25Nb2RlbCk7Ci0KLQkJdXBkYXRlQW5ub3RhdGlvbnMoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBsb2NrIG9iamVjdCBmb3IgdGhlIGdpdmVuIGFubm90YXRpb24gbW9kZWwuCi0JICogCi0JICogQHBhcmFtIGFubm90YXRpb25Nb2RlbAotCSAqICAgICAgICAgICAgdGhlIGFubm90YXRpb24gbW9kZWwKLQkgKiBAcmV0dXJuIHRoZSBhbm5vdGF0aW9uIG1vZGVsJ3MgbG9jayBvYmplY3QKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHJpdmF0ZSBPYmplY3QgZ2V0TG9ja09iamVjdChJQW5ub3RhdGlvbk1vZGVsIGFubm90YXRpb25Nb2RlbCkKLQl7Ci0JCWlmIChhbm5vdGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBJU3luY2hyb25pemFibGUpCi0JCXsKLQkJCU9iamVjdCBsb2NrID0gKChJU3luY2hyb25pemFibGUpIGFubm90YXRpb25Nb2RlbCkuZ2V0TG9ja09iamVjdCgpOwotCQkJaWYgKGxvY2sgIT0gbnVsbCkKLQkJCQlyZXR1cm4gbG9jazsKLQkJfQotCQlyZXR1cm4gYW5ub3RhdGlvbk1vZGVsOwotCX0KLQotCS8qKgotCSAqIFVwZGF0ZXMgdGhlIG92ZXJyaWRlIGFuZCBpbXBsZW1lbnRzIGFubm90YXRpb25zIGJhc2VkIG9uIHRoZSBnaXZlbiBBU1QuCi0JICogCi0JICogQHBhcmFtIGFzdAotCSAqICAgICAgICAgICAgdGhlIGNvbXBpbGF0aW9uIHVuaXQgQVNUCi0JICogQHBhcmFtIHByb2dyZXNzTW9uaXRvcgotCSAqICAgICAgICAgICAgdGhlIHByb2dyZXNzIG1vbml0b3IKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIHZvaWQgdXBkYXRlQW5ub3RhdGlvbnMoKQotCXsKLQkJU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCA9IFhTTENvcmUuZ2V0SW5zdGFuY2UoKS5nZXRTdHlsZXNoZWV0KGZpbGUpOwotCQlmaW5hbCBNYXA8QW5ub3RhdGlvbixQb3NpdGlvbj4gYW5ub3RhdGlvbk1hcD0gbmV3IEhhc2hNYXA8QW5ub3RhdGlvbixQb3NpdGlvbj4oNTApOwotCQlMaXN0PFRlbXBsYXRlPiBuZXN0ZWRUZW1wbGF0ZXMgPSBzdHlsZXNoZWV0Q29tcG9zZWQuZmluZEFsbE5lc3RlZFRlbXBsYXRlcygpOwotCQlmb3IgKFRlbXBsYXRlIHRlbXBsYXRlIDogc3R5bGVzaGVldENvbXBvc2VkLmdldFN0eWxlc2hlZXQoKS5nZXRUZW1wbGF0ZXMoKSkKLQkJewotCQkJLy8gY2hlY2sgZm9yIG92ZXJyaWRkZW4gc3R5bGVzaGVldHMKLQkJCWZvciAoVGVtcGxhdGUgbmVzdGVkVGVtcGxhdGUgOiBuZXN0ZWRUZW1wbGF0ZXMpCi0JCQl7Ci0JCQkJSUZpbGUgbmVzdGVkRmlsZSA9IG5lc3RlZFRlbXBsYXRlLmdldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCk7Ci0JCQkJaWYgKG5lc3RlZEZpbGUgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWlmKHRlbXBsYXRlLm1hdGNoZXNCeU1hdGNoT3JOYW1lKG5lc3RlZFRlbXBsYXRlKSkKLQkJCQkJey8vIHRoZSB0ZW1wbGF0ZSBvdmVycmlkZXMgYW5vdGhlciB0ZW1wbGF0ZXMgYXMgaXRzIG5hbWUgbWF0Y2hlcywgb3IgaXRzIG1hdGNoIGFuZCBtb2RlIG1hdGNoZXMKLQkJCQkJCWlmICh0ZW1wbGF0ZS5nZXROYW1lKCkgIT0gbnVsbCkKLQkJCQkJCXsKLQkJCQkJCQlTdHJpbmcgdGV4dCA9IE5MUy5iaW5kKE1lc3NhZ2VzLlhTTEVkaXRvck92ZXJyaWRlVGVtcGxhdGUgLCB0ZW1wbGF0ZS5nZXROYW1lKCksIG5lc3RlZEZpbGUuZ2V0TmFtZSgpKTsKLQkJCQkJCQlhbm5vdGF0aW9uTWFwLnB1dCgKLQkJCQkJCQkJbmV3IE92ZXJyaWRlSW5kaWNhdG9yKHRleHQsICJiaW5kaW5nLmdldEtleSgpIiksICAvLyROT04tTkxTLTEkCi0JCQkJCQkJCW5ldyBQb3NpdGlvbih0ZW1wbGF0ZS5nZXRPZmZzZXQoKSwgdGVtcGxhdGUuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJKTsKLQkJCQkJCX0KLQkJCQkJCWVsc2UKLQkJCQkJCXsKLQkJCQkJCQlTdHJpbmdbXSBvdmVycmlkZVBhcm1zID0geyB0ZW1wbGF0ZS5nZXRNYXRjaCgpLHRlbXBsYXRlLmdldE1vZGUoKSwgbmVzdGVkRmlsZS5nZXROYW1lKCkgfTsKLQkJCQkJCQkKLQkJCQkJCQlTdHJpbmcgdGV4dCA9IE5MUy5iaW5kKE1lc3NhZ2VzLlhTTEVkaXRvck92ZXJyaWRlVGVtcGxhdGVNb2RlLCBvdmVycmlkZVBhcm1zKTsKLQkJCQkJCQlhbm5vdGF0aW9uTWFwLnB1dCgKLQkJCQkJCQkJbmV3IE92ZXJyaWRlSW5kaWNhdG9yKHRleHQsICJiaW5kaW5nLmdldEtleSgpIiksICAvLyROT04tTkxTLTEkCi0JCQkJCQkJCW5ldyBQb3NpdGlvbih0ZW1wbGF0ZS5nZXRPZmZzZXQoKSwgdGVtcGxhdGUuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXN5bmNocm9uaXplZCAoZkFubm90YXRpb25Nb2RlbExvY2tPYmplY3QpCi0JCXsKLQkJCWlmIChmQW5ub3RhdGlvbk1vZGVsIGluc3RhbmNlb2YgSUFubm90YXRpb25Nb2RlbEV4dGVuc2lvbikKLQkJCXsKLQkJCQkoKElBbm5vdGF0aW9uTW9kZWxFeHRlbnNpb24pIGZBbm5vdGF0aW9uTW9kZWwpLnJlcGxhY2VBbm5vdGF0aW9ucyhmT3ZlcnJpZGVBbm5vdGF0aW9ucywgYW5ub3RhdGlvbk1hcCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJcmVtb3ZlQW5ub3RhdGlvbnMoKTsKLQkJCQlJdGVyYXRvciBpdGVyID0gYW5ub3RhdGlvbk1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0JCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKQotCQkJCXsKLQkJCQkJTWFwLkVudHJ5IG1hcEVudHJ5ID0gKE1hcC5FbnRyeSkgaXRlci5uZXh0KCk7Ci0JCQkJCWZBbm5vdGF0aW9uTW9kZWwuYWRkQW5ub3RhdGlvbigoQW5ub3RhdGlvbikgbWFwRW50cnkuZ2V0S2V5KCksIChQb3NpdGlvbikgbWFwRW50cnkuZ2V0VmFsdWUoKSk7Ci0JCQkJfQotCQkJfQotCQkJZk92ZXJyaWRlQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uTWFwLmtleVNldCgpLnRvQXJyYXkobmV3IEFubm90YXRpb25bYW5ub3RhdGlvbk1hcC5rZXlTZXQoKS5zaXplKCldKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJlbW92ZXMgYWxsIG92ZXJyaWRlIGluZGljYXRvcnMgZnJvbSB0aGlzIG1hbmFnZXIncyBhbm5vdGF0aW9uIG1vZGVsLgotCSAqLwotCXZvaWQgcmVtb3ZlQW5ub3RhdGlvbnMoKQotCXsKLQkJaWYgKGZPdmVycmlkZUFubm90YXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0KLQkJc3luY2hyb25pemVkIChmQW5ub3RhdGlvbk1vZGVsTG9ja09iamVjdCkKLQkJewotCQkJaWYgKGZBbm5vdGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBJQW5ub3RhdGlvbk1vZGVsRXh0ZW5zaW9uKQotCQkJewotCQkJCSgoSUFubm90YXRpb25Nb2RlbEV4dGVuc2lvbikgZkFubm90YXRpb25Nb2RlbCkucmVwbGFjZUFubm90YXRpb25zKGZPdmVycmlkZUFubm90YXRpb25zLCBudWxsKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gZk92ZXJyaWRlQW5ub3RhdGlvbnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspCi0JCQkJCWZBbm5vdGF0aW9uTW9kZWwucmVtb3ZlQW5ub3RhdGlvbihmT3ZlcnJpZGVBbm5vdGF0aW9uc1tpXSk7Ci0JCQl9Ci0JCQlmT3ZlcnJpZGVBbm5vdGF0aW9ucyA9IG51bGw7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvZWRpdG9yL1NvdXJjZUZpbGVIeXBlcmxpbmsuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9lZGl0b3IvU291cmNlRmlsZUh5cGVybGluay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTFkMDIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9lZGl0b3IvU291cmNlRmlsZUh5cGVybGluay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luOwotCi0vKioKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTb3VyY2VGaWxlSHlwZXJsaW5rIGltcGxlbWVudHMgSUh5cGVybGluawotewotCXByaXZhdGUgSVJlZ2lvbiBoeXBlckxpbmtSZWdpb247Ci0JcHJpdmF0ZSBJRmlsZSBsaW5rZWRGaWxlOwotCXByaXZhdGUgWFNMTm9kZSBzb3VyY2VBcnRpZmFjdDsKLQotCS8qKgotCSAqIEBwYXJhbSBoeXBlckxpbmtSZWdpb24KLQkgKiBAcGFyYW0gbGlua2VkRmlsZQotCSAqLwotCXB1YmxpYyBTb3VyY2VGaWxlSHlwZXJsaW5rKElSZWdpb24gaHlwZXJMaW5rUmVnaW9uLCBJRmlsZSBsaW5rZWRGaWxlKQotCXsKLQkJdGhpcy5oeXBlckxpbmtSZWdpb24gPSBoeXBlckxpbmtSZWdpb247Ci0JCXRoaXMubGlua2VkRmlsZSA9IGxpbmtlZEZpbGU7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGh5cGVyTGlua1JlZ2lvbgotCSAqIEBwYXJhbSBsaW5rZWRGaWxlCi0JICogQHBhcmFtIG5vZGUKLQkgKi8KLQlwdWJsaWMgU291cmNlRmlsZUh5cGVybGluayhJUmVnaW9uIGh5cGVyTGlua1JlZ2lvbiwgSUZpbGUgbGlua2VkRmlsZSwgWFNMTm9kZSBub2RlKQotCXsKLQkJdGhpcy5oeXBlckxpbmtSZWdpb24gPSBoeXBlckxpbmtSZWdpb247Ci0JCXRoaXMubGlua2VkRmlsZSA9IGxpbmtlZEZpbGU7Ci0JCXRoaXMuc291cmNlQXJ0aWZhY3QgPSBub2RlOwotCX0KLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmsjZ2V0SHlwZXJsaW5rUmVnaW9uKCkKLQkgKi8KLQlwdWJsaWMgSVJlZ2lvbiBnZXRIeXBlcmxpbmtSZWdpb24oKQotCXsKLQkJcmV0dXJuIGh5cGVyTGlua1JlZ2lvbjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rI2dldFR5cGVMYWJlbCgpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRUeXBlTGFiZWwoKQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGluayNnZXRIeXBlcmxpbmtUZXh0KCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEh5cGVybGlua1RleHQoKQotCXsKLQkJcmV0dXJuIE5MUy5iaW5kKE1lc3NhZ2VzLk9wZW4sIGxpbmtlZEZpbGUuZ2V0TmFtZSgpKTsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rI29wZW4oKQotCSAqLwotCXB1YmxpYyB2b2lkIG9wZW4oKQotCXsKLQkJaWYgKGxpbmtlZEZpbGUgIT0gbnVsbCAmJiBsaW5rZWRGaWxlLmV4aXN0cygpKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gSURFLm9wZW5FZGl0b3IocGFnZSwgbGlua2VkRmlsZSwgdHJ1ZSk7Ci0JCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcillZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCQkJaWYgKHNvdXJjZUFydGlmYWN0ICE9IG51bGwgJiYgdGV4dEVkaXRvciAhPSBudWxsKQotCQkJCXsKLQkJCQkJSURvY3VtZW50IG9wZW5lZERvY3VtZW50ID0gKElEb2N1bWVudCllZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQkJCQlpZiAob3BlbmVkRG9jdW1lbnQgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJaW50IGxpbmVPZmZzZXQgPSBvcGVuZWREb2N1bWVudC5nZXRMaW5lT2Zmc2V0KHNvdXJjZUFydGlmYWN0LmdldExpbmVOdW1iZXIoKSk7Ci0JCQkJCQlpbnQgb2Zmc2V0ID0gbGluZU9mZnNldCArIHNvdXJjZUFydGlmYWN0LmdldENvbHVtbk51bWJlcigpOwotCQkJCQkJLy90ZXh0RWRpdG9yLnNlbGVjdEFuZFJldmVhbChvZmZzZXQsIHNvdXJjZUFydGlmYWN0LmdldExlbmd0aCgpKTsKLQkJCQkJCXRleHRFZGl0b3Iuc2V0SGlnaGxpZ2h0UmFuZ2Uob2Zmc2V0LCBzb3VyY2VBcnRpZmFjdC5nZXRMZW5ndGgoKSwgdHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gcGllKQotCQkJewotCQkJCVhTTFVJUGx1Z2luLmxvZyhwaWUpOwotCQkJfQotCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJWFNMVUlQbHVnaW4ubG9nKGUpOwotCQkJfQotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvZWRpdG9yL1hTTEVkaXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2VkaXRvci9YU0xFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiOTY1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvZWRpdG9yL1hTTEVkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLnRlbXBsYXRlcy5JVGVtcGxhdGVzUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlhTTFRlbXBsYXRlc1BhZ2U7Ci0KLS8qKgotICogWFNMIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gdGhlIFNTRSBVSSB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gbWFkZQotICogYXZhaWxhYmxlIHRvIHRoZSBTU0UuCi0gKiAKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTEVkaXRvciBleHRlbmRzIFN0cnVjdHVyZWRUZXh0RWRpdG9yCi17Ci0JcHJpdmF0ZSBPdmVycmlkZUluZGljYXRvck1hbmFnZXIgZk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjsKLQkKLQkvKioKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHJpdmF0ZSBYU0xUZW1wbGF0ZXNQYWdlIGZUZW1wbGF0ZXNQYWdlOwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZG9TZXRJbnB1dChJRWRpdG9ySW5wdXQgaW5wdXQpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlzdXBlci5kb1NldElucHV0KGlucHV0KTsKLQkJaW5zdGFsbE92ZXJyaWRlSW5kaWNhdG9yKCk7Ci0JfQotCQotCXB1YmxpYyBPdmVycmlkZUluZGljYXRvck1hbmFnZXIgZ2V0T3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyKCkKLQl7Ci0JCXJldHVybiBmT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBpbnN0YWxsT3ZlcnJpZGVJbmRpY2F0b3IoKQotCXsKLQkJLy8gdW5pbnN0YWxsT3ZlcnJpZGVJbmRpY2F0b3IoKTsKLQkJaWYgKGdldEVkaXRvcklucHV0KCkgaW5zdGFuY2VvZiBGaWxlRWRpdG9ySW5wdXQpCi0JCXsKLQkJCUlBbm5vdGF0aW9uTW9kZWwgbW9kZWwgPSBnZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGdldEVkaXRvcklucHV0KCkpOwotCQkJSUZpbGUgZmlsZSA9ICgoRmlsZUVkaXRvcklucHV0KWdldEVkaXRvcklucHV0KCkpLmdldEZpbGUoKTsKLQkJCWZPdmVycmlkZUluZGljYXRvck1hbmFnZXIgPSBuZXcgT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyKG1vZGVsLCBmaWxlKTsKLQkJfQotCX0KLQkKLQkvKiogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgcmVxdWlyZWQpIHsKLQkJaWYgKElUZW1wbGF0ZXNQYWdlLmNsYXNzLmVxdWFscyhyZXF1aXJlZCkpIHsKLQkJCWlmIChmVGVtcGxhdGVzUGFnZSA9PSBudWxsKQotCQkJCWZUZW1wbGF0ZXNQYWdlID0gbmV3IFhTTFRlbXBsYXRlc1BhZ2UodGhpcyk7Ci0JCQlyZXR1cm4gZlRlbXBsYXRlc1BhZ2U7Ci0JCX0KLQotCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihyZXF1aXJlZCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2VkaXRvci9YU0xIeXBlcmxpbmtEZXRlY3Rvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2VkaXRvci9YU0xIeXBlcmxpbmtEZXRlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODI1MGExLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9lZGl0b3IvWFNMSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLkFic3RyYWN0SHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQSBoeXBlcmxpbmsgZGV0ZWN0b3IgZm9yIFhTTCBmaWxlcy4KLSAqIAotICogVGhlIGRldGVjdG9yIG1ha2VzIHVzZSBvZiB0aGUgbW9kZWwgYnVpbHQgYnkgU1NFIHZhbGlkYXRpb24gKGZvdW5kIGluIDxjb2RlPlhTTENvcmU8L2NvZGU+KS4KLSAqIAotICogQ3VycmVudGx5IHN1cHBvcnRzIGh5cGVybGlua2luZyBmb3IgaW5jbHVkZXMsIGltcG9ydHMgb3IgY2FsbGVkIHRlbXBsYXRlcy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgWFNMSHlwZXJsaW5rRGV0ZWN0b3IgZXh0ZW5kcyBBYnN0cmFjdEh5cGVybGlua0RldGVjdG9yCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVMRU1fV0lUSF9QQVJBTSA9ICJ3aXRoLXBhcmFtIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX05BTUUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUxNX0NBTExfVEVNUExBVEUgPSAiY2FsbC10ZW1wbGF0ZSI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFRyeSB0byBjcmVhdGUgaHlwZXJsaW5rcyBmb3Igdmlld2VyIGFuZCByZWdpb24KLQkgKiAKLQkgKiBAc2VlIEFic3RyYWN0SHlwZXJsaW5rRGV0ZWN0b3IKLQkgKiBAcGFyYW0gdGV4dFZpZXdlciAKLQkgKiBAcGFyYW0gcmVnaW9uIAotCSAqIEBwYXJhbSBjYW5TaG93TXVsdGlwbGVIeXBlcmxpbmtzIAotCSAqIEByZXR1cm4gYXJyYXkgb2YgaHlwZXJsaW5rcyBmb3IgY3VycmVudCByZWdpb24KLQkgKi8KLQlwdWJsaWMgSUh5cGVybGlua1tdIGRldGVjdEh5cGVybGlua3MoSVRleHRWaWV3ZXIgdGV4dFZpZXdlciwgSVJlZ2lvbiByZWdpb24sIGJvb2xlYW4gY2FuU2hvd011bHRpcGxlSHlwZXJsaW5rcykKLQl7Ci0JCUlIeXBlcmxpbmsgaHlwZXJsaW5rID0gbnVsbDsKLQkJaWYgKHJlZ2lvbiAhPSBudWxsICYmIHRleHRWaWV3ZXIgIT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIGRldGVjdEh5cGVybGlua3ModGV4dFZpZXdlci5nZXREb2N1bWVudCgpLCByZWdpb24sIGNhblNob3dNdWx0aXBsZUh5cGVybGlua3MpOwotCQl9Ci0JCXJldHVybiBuZXcgSUh5cGVybGlua1tde2h5cGVybGlua307Ci0JfQotCi0JLyoqCi0JICogVHJ5IHRvIGNyZWF0ZSBoeXBlcmxpbmtzIGZvciBkb2N1bWVudCBhbmQgcmVnaW9uCi0JICogQHBhcmFtIGRvY3VtZW50Ci0JICogQHBhcmFtIHJlZ2lvbgotCSAqIEBwYXJhbSBjYW5TaG93TXVsdGlwbGVIeXBlcmxpbmtzCi0JICogQHJldHVybiBhcnJheSBvZiBoeXBlcmxpbmtzIGZvciBjdXJyZW50IHJlZ2lvbgotCSAqLwotCXB1YmxpYyBJSHlwZXJsaW5rW10gZGV0ZWN0SHlwZXJsaW5rcyhJRG9jdW1lbnQgZG9jdW1lbnQsIElSZWdpb24gcmVnaW9uLCBib29sZWFuIGNhblNob3dNdWx0aXBsZUh5cGVybGlua3MpCi0JewotCQlJSHlwZXJsaW5rIGh5cGVybGluayA9IG51bGw7Ci0JCQotCQlpZiAocmVnaW9uICE9IG51bGwgJiYgZG9jdW1lbnQgIT0gbnVsbCkKLQkJewotCQkJTm9kZSBjdXJyZW50Tm9kZSA9IFhTTENvcmUuZ2V0Q3VycmVudE5vZGUoZG9jdW1lbnQsIHJlZ2lvbi5nZXRPZmZzZXQoKSk7Ci0KLQkJCUVsZW1lbnQgeHNsRWwgPSBudWxsOwotCQkJQXR0ciB4c2xBdHRyID0gbnVsbDsKLQkJCWlmIChYU0xDb3JlLlhTTF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhjdXJyZW50Tm9kZS5nZXROYW1lc3BhY2VVUkkoKSkpIHsKLQkJCQlpZiAoY3VycmVudE5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKQotCQkJCXsKLQkJCQkJQXR0ciBhdHQgPSAoQXR0cikgY3VycmVudE5vZGU7Ci0JCQkJCXhzbEVsID0gYXR0LmdldE93bmVyRWxlbWVudCgpOwotCQkJCQl4c2xBdHRyID0gYXR0OwotCQkJCX0KLQkJCQkKLQkJCQlpZiAoY3VycmVudE5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkKLQkJCQl7Ci0JCQkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCljdXJyZW50Tm9kZTsKLQkJCQkJCXhzbEVsID0gZWw7Ci0JCQkJCQl4c2xBdHRyID0gWFNMQ29yZS5nZXRDdXJyZW50QXR0ck5vZGUoZWwsIHJlZ2lvbi5nZXRPZmZzZXQoKSk7Ci0JCQkJfQotCQkJfQotCQkJCi0JCQloeXBlcmxpbmsgPSBjcmVhdGVIeXBlckxpbmsoZG9jdW1lbnQsIGh5cGVybGluaywgeHNsRWwsIHhzbEF0dHIpOwotCQl9Ci0JCXJldHVybiBoeXBlcmxpbmsgPT0gbnVsbCA/IG51bGwgOiBuZXcgSUh5cGVybGlua1tde2h5cGVybGlua307Ci0JfQotCi0JcHJpdmF0ZSBJSHlwZXJsaW5rIGNyZWF0ZUh5cGVyTGluayhJRG9jdW1lbnQgZG9jdW1lbnQsCi0JCQlJSHlwZXJsaW5rIGh5cGVybGluaywgRWxlbWVudCB4c2xFbCwgQXR0ciB4c2xBdHRyKSB7Ci0JCWlmICh4c2xFbCAhPSBudWxsICYmIHhzbEF0dHIgIT0gbnVsbCkKLQkJewotCQkJSVJlZ2lvbiBoeXBlcmxpbmtSZWdpb24gPSBnZXRIeXBlcmxpbmtSZWdpb24oeHNsQXR0cik7Ci0JCQlJRmlsZSBmaWxlID0gZ2V0RmlsZUZvckRvY3VtZW50KGRvY3VtZW50KTsKLQkJCWlmIChmaWxlICE9IG51bGwpCi0JCQl7Ci0JCQkJaWYgKEVMTV9DQUxMX1RFTVBMQVRFLmVxdWFscyh4c2xFbC5nZXRMb2NhbE5hbWUoKSkgJiYgQVRUUl9OQU1FLmVxdWFscyh4c2xBdHRyLmdldExvY2FsTmFtZSgpKSkKLQkJCQl7Ci0JCQkJCWh5cGVybGluayA9IGNyZWF0ZUNhbGxUZW1wbGF0ZUh5cGVyTGluayhmaWxlLHhzbEF0dHIuZ2V0VmFsdWUoKSwgaHlwZXJsaW5rUmVnaW9uKTsKLQkJCQl9Ci0JCQkJCi0JCQkJaWYgKEVMRU1fV0lUSF9QQVJBTS5lcXVhbHMoeHNsRWwuZ2V0TG9jYWxOYW1lKCkpICYmIEFUVFJfTkFNRS5lcXVhbHMoeHNsQXR0ci5nZXRMb2NhbE5hbWUoKSkpIHsKLQkJCQkJaHlwZXJsaW5rID0gY3JlYXRlV2l0aFBhcmFtSHlwZXJMaW5rKGZpbGUsIHhzbEVsLCB4c2xBdHRyLCBoeXBlcmxpbmtSZWdpb24pOwotCQkJCX0KLQkJCX0KLQkJCQotCQl9Ci0JCXJldHVybiBoeXBlcmxpbms7Ci0JfQotCQotCi0JcHJpdmF0ZSBJSHlwZXJsaW5rIGNyZWF0ZUNhbGxUZW1wbGF0ZUh5cGVyTGluayhJRmlsZSBjdXJyZW50RmlsZSwgU3RyaW5nIHRlbXBsYXRlTmFtZSwgSVJlZ2lvbiBoeXBlcmxpbmtSZWdpb24pCi0JewotCQlJSHlwZXJsaW5rIGh5cGVybGluayA9IG51bGw7Ci0JCVN0eWxlc2hlZXRNb2RlbCBzZiA9IFhTTENvcmUuZ2V0SW5zdGFuY2UoKS5nZXRTdHlsZXNoZWV0KGN1cnJlbnRGaWxlKTsKLQkJaWYgKHNmICE9IG51bGwpCi0JCXsKLQkJCUxpc3Q8VGVtcGxhdGU+IHRlbXBsYXRlcyA9IHNmLmdldFRlbXBsYXRlc0J5TmFtZSh0ZW1wbGF0ZU5hbWUpOwotCQkJaWYgKHRlbXBsYXRlcyAhPSBudWxsICYmIHRlbXBsYXRlcy5zaXplKCkgPT0gMSkKLQkJCXsKLQkJCQlUZW1wbGF0ZSB0ZW1wbGF0ZSA9IHRlbXBsYXRlcy5nZXQoMCk7Ci0JCQkJaHlwZXJsaW5rID0gbmV3IFNvdXJjZUZpbGVIeXBlcmxpbmsoaHlwZXJsaW5rUmVnaW9uLHRlbXBsYXRlLmdldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCksdGVtcGxhdGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBoeXBlcmxpbms7Ci0JfQotCQotCXByaXZhdGUgSUh5cGVybGluayBjcmVhdGVXaXRoUGFyYW1IeXBlckxpbmsoSUZpbGUgY3VycmVudEZpbGUsIEVsZW1lbnQgZWxlbSwgQXR0ciBhdHRyLCBJUmVnaW9uIGh5cGVybGlua1JlZ2lvbikKLQl7Ci0JCUlIeXBlcmxpbmsgaHlwZXJsaW5rID0gbnVsbDsKLQkJU3R5bGVzaGVldE1vZGVsIHNmID0gWFNMQ29yZS5nZXRJbnN0YW5jZSgpLmdldFN0eWxlc2hlZXQoY3VycmVudEZpbGUpOwotCQlpZiAoc2YgIT0gbnVsbCkKLQkJewotCQkJTm9kZSBwYXJlbnROb2RlID0gZWxlbS5nZXRQYXJlbnROb2RlKCk7Ci0JCQlBdHRyIHBhcmVudEF0dHJpYnV0ZSA9IChBdHRyKSBwYXJlbnROb2RlLmdldEF0dHJpYnV0ZXMoKS5nZXROYW1lZEl0ZW0oQVRUUl9OQU1FKTsKLQkJCVN0cmluZyB0ZW1wbGF0ZU5hbWUgPSBwYXJlbnRBdHRyaWJ1dGUuZ2V0VmFsdWUoKTsKLQkJCUxpc3Q8VGVtcGxhdGU+IHRlbXBsYXRlcyA9IHNmLmdldFRlbXBsYXRlc0J5TmFtZSh0ZW1wbGF0ZU5hbWUpOwotCQkJCi0JCQlpZiAodGVtcGxhdGVzICE9IG51bGwgJiYgdGVtcGxhdGVzLnNpemUoKSA9PSAxKQotCQkJewotCQkJCVRlbXBsYXRlIHRlbXBsYXRlID0gdGVtcGxhdGVzLmdldCgwKTsKLQkJCQlMaXN0PFBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IHRlbXBsYXRlLmdldFBhcmFtZXRlcnMoKTsKLQkJCQlmb3IoUGFyYW1ldGVyIHBhcmFtIDogcGFyYW1ldGVycykgewotCQkJCQlTdHJpbmcgcGFyYW1OYW1lID0gYXR0ci5nZXRWYWx1ZSgpOwotCQkJCQlYU0xBdHRyaWJ1dGUgcGFyYW1ldGVyTmFtZUF0dHIgPSBwYXJhbS5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKTsKLQkJCQkJaWYgKHBhcmFtZXRlck5hbWVBdHRyICE9IG51bGwgJiYgcGFyYW1ldGVyTmFtZUF0dHIuZ2V0VmFsdWUoKS5lcXVhbHMocGFyYW1OYW1lKSkgewotCQkJCQkJaHlwZXJsaW5rID0gbmV3IFNvdXJjZUZpbGVIeXBlcmxpbmsoaHlwZXJsaW5rUmVnaW9uLHRlbXBsYXRlLmdldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCkscGFyYW0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBoeXBlcmxpbms7Ci0JfQotCi0JcHJpdmF0ZSBJUmVnaW9uIGdldEh5cGVybGlua1JlZ2lvbihOb2RlIG5vZGUpCi0JewotCQlJUmVnaW9uIGh5cGVyUmVnaW9uID0gbnVsbDsKLQotCQlpZiAobm9kZSAhPSBudWxsKQotCQl7Ci0JCQlzaG9ydCBub2RlVHlwZSA9IG5vZGUuZ2V0Tm9kZVR5cGUoKTsKLQkJCWlmIChub2RlVHlwZSA9PSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERSkKLQkJCXsKLQkJCQkvLyBoYW5kbGUgZG9jIHR5cGUgbm9kZQotCQkJCUlET01Ob2RlIGRvY05vZGUgPSAoSURPTU5vZGUpIG5vZGU7Ci0JCQkJaHlwZXJSZWdpb24gPSBuZXcgUmVnaW9uKGRvY05vZGUuZ2V0U3RhcnRPZmZzZXQoKSwgZG9jTm9kZS5nZXRFbmRPZmZzZXQoKSAtIGRvY05vZGUuZ2V0U3RhcnRPZmZzZXQoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChub2RlVHlwZSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKQotCQkJewotCQkJCS8vIGhhbmRsZSBhdHRyaWJ1dGUgbm9kZXMKLQkJCQlJRE9NQXR0ciBhdHQgPSAoSURPTUF0dHIpIG5vZGU7Ci0JCQkJLy8gZG8gbm90IGluY2x1ZGUgcXVvdGVzIGluIGF0dHJpYnV0ZSB2YWx1ZSByZWdpb24KLQkJCQlpbnQgcmVnT2Zmc2V0ID0gYXR0LmdldFZhbHVlUmVnaW9uU3RhcnRPZmZzZXQoKTsKLQkJCQlJVGV4dFJlZ2lvbiB2YWx1ZVJlZ2lvbiA9IGF0dC5nZXRWYWx1ZVJlZ2lvbigpOwotCQkJCWlmICh2YWx1ZVJlZ2lvbiAhPSBudWxsKQotCQkJCXsKLQkJCQkJaW50IHJlZ0xlbmd0aCA9IHZhbHVlUmVnaW9uLmdldFRleHRMZW5ndGgoKTsKLQkJCQkJU3RyaW5nIGF0dFZhbHVlID0gYXR0LmdldFZhbHVlUmVnaW9uVGV4dCgpOwotCQkJCQlpZiAoU3RyaW5nVXRpbHMuaXNRdW90ZWQoYXR0VmFsdWUpKQotCQkJCQl7Ci0JCQkJCQkrK3JlZ09mZnNldDsKLQkJCQkJCXJlZ0xlbmd0aCA9IHJlZ0xlbmd0aCAtIDI7Ci0JCQkJCX0KLQkJCQkJaHlwZXJSZWdpb24gPSBuZXcgUmVnaW9uKHJlZ09mZnNldCwgcmVnTGVuZ3RoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGh5cGVyUmVnaW9uOwotCX0KLQkKLQlwcml2YXRlIElGaWxlIGdldEZpbGVGb3JEb2N1bWVudChJRG9jdW1lbnQgZG9jdW1lbnQpCi0JewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBudWxsOwotCQl0cnkKLQkJewotCQkJc01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRFeGlzdGluZ01vZGVsRm9yUmVhZChkb2N1bWVudCk7Ci0JCQlpZiAoc01vZGVsICE9IG51bGwpCi0JCQl7Ci0JCQkJSVBhdGggcGF0aCA9IG5ldyBQYXRoKHNNb2RlbC5nZXRCYXNlTG9jYXRpb24oKSk7Ci0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCWlmIChzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGUgIT0gbnVsbCAmJiBmaWxlLmV4aXN0cygpID8gZmlsZSA6IG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvaGFuZGxlcnMvT3BlbkRlY2xhcmF0aW9uSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL2hhbmRsZXJzL09wZW5EZWNsYXJhdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIxNzY0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvaGFuZGxlcnMvT3BlbkRlY2xhcmF0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5oYW5kbGVyczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMSHlwZXJsaW5rRGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBPcGVuRGVjbGFyYXRpb25IYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCi17Ci0JcHJpdmF0ZSBYU0xIeXBlcmxpbmtEZXRlY3RvciBkZXRlY3RvciA9IG5ldyBYU0xIeXBlcmxpbmtEZXRlY3RvcigpOwotCi0JcHVibGljIE9iamVjdCBleGVjdXRlKEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uCi0JewotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBIYW5kbGVyVXRpbC5nZXRBY3RpdmVFZGl0b3IoZXZlbnQpOwotCi0JCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSBudWxsOwotCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQl0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3I7Ci0JCWVsc2UKLQkJewotCQkJT2JqZWN0IG8gPSBlZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCQlpZiAobyAhPSBudWxsKQotCQkJCXRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIG87Ci0JCX0KLQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkKLQkJewotCQkJSURvY3VtZW50IGRvY3VtZW50ID0gdGV4dEVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQodGV4dEVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJCWlmIChkb2N1bWVudCAhPSBudWxsKQotCQkJewotCQkJCS8vIGdldCBjdXJyZW50IHRleHQgc2VsZWN0aW9uCi0JCQkJSVRleHRTZWxlY3Rpb24gdGV4dFNlbGVjdGlvbiA9IGdldEN1cnJlbnRTZWxlY3Rpb24odGV4dEVkaXRvcik7Ci0JCQkJaWYgKHRleHRTZWxlY3Rpb24uaXNFbXB0eSgpKQotCQkJCXsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQkJCWludCBvZmZzZXQgPSB0ZXh0U2VsZWN0aW9uLmdldE9mZnNldCgpOwotCQkJCWlmIChvZmZzZXQgPT0gLTEpCi0JCQkJCXJldHVybiBudWxsOwotCQkJCUlSZWdpb24gcmVnaW9uID0gbmV3IFJlZ2lvbihvZmZzZXQsIDApOwotCQkJCUlIeXBlcmxpbmtbXSBsaW5rcyA9IGRldGVjdG9yLmRldGVjdEh5cGVybGlua3MoZG9jdW1lbnQsIHJlZ2lvbiwgdHJ1ZSk7Ci0JCQkJaWYgKGxpbmtzICE9IG51bGwgJiYgbGlua3MubGVuZ3RoID4gMCkKLQkJCQl7Ci0JCQkJCUlIeXBlcmxpbmsgbGluayA9IGxpbmtzWzBdOwotCQkJCQlsaW5rLm9wZW4oKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIElUZXh0U2VsZWN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oSVRleHRFZGl0b3IgdGV4dEVkaXRvcikKLQl7Ci0JCUlTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IHRleHRFZGl0b3IuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKLQkJaWYgKHByb3ZpZGVyICE9IG51bGwpCi0JCXsKLQkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gcHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVRleHRTZWxlY3Rpb24pCi0JCQl7Ci0JCQkJcmV0dXJuIChJVGV4dFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJfQotCQl9Ci0JCXJldHVybiBUZXh0U2VsZWN0aW9uLmVtcHR5U2VsZWN0aW9uKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWMyYWZiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotTWFpblByZWZlcmVuY2VQYWdlID0gRXhwYW5kIHRoZSB0cmVlIGZvciBtb3JlIHByZWZlcmVuY2VzLgotRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdCA9IFhNTCBOYW1lc3BhY2U6Ci1Ob0NvbnRlbnRBc3Npc3RhbmNlID0gTm8gQ29udGVudCBBc3Npc3RhbmNlIFByb3Bvc2FscyBBdmFpbGFibGUuCi1YU0xTeW50YXhDb2xvcmluZ1BhZ2UgPSBcbkRlZmF1bHQgY29sb3JzIGFuZCBmb250cyBmb3IgPGEgaHJlZj0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5wcmVmZXJlbmNlcy54bWwuY29sb3JzIj5YTUw8L2E+IGNhbiBiZSBjb25maWd1cmVkIG9uIHRoZSBYTUwgU3ludGF4IENvbG9yaW5nIHBhZ2UuICBTZXR0aW5ncyBvbiB0aGlzIHBhZ2Ugb25seSBhZmZlY3QgWFNMVCBjb250ZW50LgoteHNsdFN0eWxlRG9jdW1lbnQgPSA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM6eHNsPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXCI+XG4gPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cIi9cIj4gICAgICAgIDxodG1sPlxuCQkgICAgPGJvZHkgYmdjb2xvcj1cIiNmZmZmZmZcIj5cbiAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD1cIiRzb21lVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQUREIFNvbWUgQ29kZSBoZXJlIC0tPlxuICAgICAgICAgICAgICAgPC94c2w6aWY+XG4gICAgICAgICAgICA8L2JvZHk+XG4gICAgICAgIDwvaHRtbD5cbgk8L3hzbDp0ZW1wbGF0ZT5cbjwveHNsOnN0eWxlc2hlZXQ+XG4KLU5ld1hTTFNlbGVjdFRlbXBsYXRlID0gU2VsZWN0IFhTTCBUZW1wbGF0ZS4KLU5ld1hTTFRlbXBsYXRlRGVzY3JpcHRpb24gPSBTZWxlY3QgYSB0ZW1wbGF0ZSBhcyBpbml0aWFsIGNvbnRlbnQgZm9yIHRoZSBzdHlsZXNoZWV0LgotTmV3WFNMVXNlVGVtcGxhdGVCdXR0b25UZXh0ID0gVXNlIHRlbXBsYXRlLgotTmV3WFNMTGlua1ByZWZlcmVuY2VQYWdlID0gVGVtcGxhdGVzIGFyZSBcIk5ldyBTdHlsZXNoZWV0XCIgdGVtcGxhdGVzIGZvdW5kIGluIHRoZSA8YT5YU0w8L2E+IHByZWZlcmVuY2UgcGFnZS4KLU5ld1hTTENvbHVtblRlbXBsYXRlTmFtZSA9IE5hbWUKLU5ld1hTTENvbHVtblRlbXBsYXRlRGVzY3JpcHRpb24gPSBEZXNjcmlwdGlvbgotTmV3WFNMVGVtcGxhdGVQcmV2aWV3VGl0bGUgPSBQcmV2aWV3Ci1OZXdYU0xGaWxlUGFnZVRpdGxlID0gWFNMIFN0eWxlc2hlZXQKLU5ld1hTTEZpbGVQYWdlRGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgWFNMIFN0eWxlc2hlZXQuCi1OZXdYU0xGaWxlUGFnZVdpbmRvd1RpdGxlID0gTmV3IFhTTCBTdHlsZXNoZWV0Ci1OZXdYU0xGaWxlV2l6YXJkRXh0ZW5zaW9uRXJyb3IgPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnMgezB9LgotTmV3WFNMRmlsZUFscmVhZEV4aXN0c0Vycm9yID0gVGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KLVZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJQYWdlRGVzY3JpcHRpb24gPSBYU0xUIFZlcnNpb24gcHJlZmVyZW5jZS4KLUFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZU1iVGV4dCA9IFhTTCBWYWxpZGF0aW9uCi1BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VXb3Jrc3BhY2UgPSBYU0wgV29ya3NwYWNlIFZhbGlkYXRpb24KLUFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVByb2plY3QgPSBYU0wgUHJvamVjdCBMZXZlbCBWYWxpZGF0aW9uCi1BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VKb2IgPSBYU0wgVmFsaWRhdGlvbiBKb2IKLUVycm9yTGV2ZWxUZXh0ID0gRXJyb3IKLVdhcm5pbmdMZXZlbFRleHQgPSBXYXJuaW5nCi1JZ25vcmVMZXZlbFRleHQgPSBJZ25vcmUKLVhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZVRpdGxlID0gWFNMVCBWYWxpZGF0aW9uCi1YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2VEZXNjcmlwdGlvbiA9IENvbmZpZ3VyZSB2YWxpZGF0aW9uIHByZWZlcmVuY2VzLgotWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNMYWJlbCA9IE1heGltdW0gbnVtYmVyIG9mIGVycm9ycyByZXBvcnRlZCBwZXIgc3R5bGVzaGVldDoKLVhTTFZhbGlkYXRpb25QcmVmZXJlbmNlSW1wb3J0c0luY2x1ZGVzTGFiZWwgPSBJbXBvcnRzIGFuZCBJbmNsdWRlcwotWFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVJbXBvcnRJbmNsdWRlTGFiZWwgPSBVbnJlc29sdmVkIGluY2x1ZGUvaW1wb3J0OgotWFNMVmFsaWRhdGlvblByZWZlcmVuY2VDaXJjdWxhclJlZmVyZW5jZXNMYWJlbCA9IENpcmN1bGFyIHJlZmVyZW5jZXM6Ci1YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU5hbWVkVGVtcGxhdGVzTGFiZWwgPSBOYW1lZCBUZW1wbGF0ZXMKLVhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVGVtcGxhdGVDb25mbGljdHNMYWJlbCA9IFRlbXBsYXRlIG5hbWUgY29uZmxpY3RzOgotWFNMVmFsaWRhdGlvblByZWZlcmVuY2VEdXBsaWNhdGVQYXJhbWV0ZXJMYWJlbCA9IER1cGxpY2F0ZSBwYXJhbWV0ZXI6Ci1YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVMYWJlbCA9IFBhcmFtZXRlciB3aXRob3V0IG5hbWUgYXR0cmlidXRlOgotWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbWV0ZXJFbXB0eUF0dHJpYnV0ZUxhYmVsID0gUGFyYW1ldGVyIHdpdGggZW1wdHkgbmFtZSBhdHRyaWJ1dGU6Ci1YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUNhbGxUZW1wbGF0ZXNMYWJlbCA9IFRlbXBsYXRlIENhbGxzCi1YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZWRUZW1wbGF0ZXNMYWJlbCA9IFVucmVzb2x2ZWQgdGVtcGxhdGVzOgotWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW10ZXJzTGFiZWwgPSBNaXNzaW5nIHBhcmFtZXRlcnM6Ci1YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsID0gUGFyYW1ldGVycyB3aXRob3V0IHZhbHVlOgotWFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aExhYmVsID0gWFBhdGggUHJvYmxlbXMKLVhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhTeW50YXhMYWJlbCA9IEluY29ycmVjdCBYUGF0aCBzeW50YXg6Ci1YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc01zZ0Vycm9yID0gTWF4IGVycm9ycyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcgotWFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZSA9IE92ZXJyaWRlcyB7MH0gaW4gezF9LgotWFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZU1vZGUgPSBvdmVycmlkZXMgXCJ7MH1cIiAoezF9KSBpbiB7Mn0uCi1DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lID0gVGVtcGxhdGUgTmFtZToKLUNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWVGaWxlID0gRmlsZToKLVhTTFZhbGlkYXRpb25QYWdlU2V2ZXJpdHlMZXZlbCA9IFNlbGVjdCB0aGUgc2VydmVyaXR5IGxldmVsIGZvciB0aGUgZm9sbG93aW5nIHZhbGlkYXRpb24gcHJvYmxlbXM6Ci1PcGVuID0gT3BlbiAnJ3swfScnCi0KLQotCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFhMGEyNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIzMDA3MiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkgY2xhc3Mgb2YKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIG5hbWUuCi0gKiAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjk3NzE0IC0gVmFsdWVzIG5vdCBiZWluZyBsb2FkZWQgZnJvbSBwcmVmZXJlbmNlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5Qcm9qZWN0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JUHJlZmVyZW5jZXNTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JU2NvcGVDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVzc2FnZUJveDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkV4cGFuc2lvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkV4cGFuc2lvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLndpZGdldHMuRXhwYW5kYWJsZUNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudmFsaWRhdGUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5TY3JvbGxlZFBhZ2VDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25GcmFtZXdvcms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLkJhY2tpbmdTdG9yZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBCYXNlZCBvbiBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuT3B0aW9uc0NvbmZpZ3VyYXRpb25CbG9jawotICovCi1hYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UgZXh0ZW5kcyBQcm9wZXJ0eVByZWZlcmVuY2VQYWdlIHsKLQotCXByaXZhdGUgTGlzdCBmQ29tYm9zOwotCXByaXZhdGUgTGlzdCBmRXhwYW5kYWJsZXM7Ci0JCi0JcHJpdmF0ZSBTZWxlY3Rpb25MaXN0ZW5lciBmU2VsZWN0aW9uTGlzdGVuZXI7Ci0JCi0JcHJpdmF0ZSBJUHJlZmVyZW5jZXNTZXJ2aWNlIGZQcmVmZXJlbmNlc1NlcnZpY2UgPSBudWxsOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HU19FWFBBTkRFRCA9ICJleHBhbmRlZCI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIFZhbGlkYXRpb25GcmFtZXdvcmsgZlZhbGlkYXRpb247Ci0JCi0JcHVibGljIEFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZSgpIHsKLQkJc3VwZXIoKTsKLQkJZkNvbWJvcyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxDb21ibz4oKTsKLQkJZkV4cGFuZGFibGVzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PEV4cGFuZGFibGVDb21wb3NpdGU+KCk7Ci0JCWZQcmVmZXJlbmNlc1NlcnZpY2UgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKTsKLQkJZlZhbGlkYXRpb24gPSBWYWxpZGF0aW9uRnJhbWV3b3JrLmdldERlZmF1bHQoKTsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIENvbWJvIHdpZGdldCBpbiB0aGUgY29tcG9zaXRlIDxjb2RlPnBhcmVudDwvY29kZT4uIFRoZSBkYXRhCi0JICogaW4gdGhlIENvbWJvIGlzIGFzc29jaWF0ZWQgd2l0aCA8Y29kZT5rZXk8L2NvZGU+LiBUaGUgQ29tYm8gZGF0YSBpcwotCSAqIGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgaW50ZWdlciA8Y29kZT52YWx1ZXM8L2NvZGU+IHdoZXJlIHRoZSBpbmRleAotCSAqIG9mIDxjb2RlPnZhbHVlczwvY29kZT4gY29ycmVzcG9uZHMgdG8gdGhlIGluZGV4IG9mIDxjb2RlPnZhbHVlTGFiZWxzPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQgdGhlIGNvbXBvc2l0ZSB0byBjcmVhdGUgdGhlIGNvbWJvIGJveCBpbgotCSAqIEBwYXJhbSBsYWJlbCB0aGUgbGFiZWwgdG8gZ2l2ZSB0aGUgY29tYm8gYm94Ci0JICogQHBhcmFtIGtleSB0aGUgdW5pcXVlIGtleSB0byBpZGVudGlmeSB0aGUgY29tYm8gYm94Ci0JICogQHBhcmFtIHZhbHVlcyB0aGUgdmFsdWVzIHJlcHJlc2VudGVkIGJ5IHRoZSBjb21ibyBvcHRpb25zCi0JICogQHBhcmFtIHZhbHVlTGFiZWxzIHRoZSBjYWx1ZXMgZGlzcGxheWVkIGluIHRoZSBjb21ibyBib3gKLQkgKiBAcGFyYW0gaW5kZW50IGhvdyBmYXIgdG8gaW5kZW50IHRoZSBjb21ibyBib3ggbGFiZWwKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBnZW5lcmF0ZWQgY29tYm8gYm94Ci0JICovCi0JcHJvdGVjdGVkIENvbWJvIGFkZENvbWJvQm94KENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbCwgU3RyaW5nIGtleSwgaW50W10gdmFsdWVzLCBTdHJpbmdbXSB2YWx1ZUxhYmVscywgaW50IGluZGVudCkgewotCQlHcmlkRGF0YSBnZD0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwgZmFsc2UsIDIsIDEpOwotCQlnZC5ob3Jpem9udGFsSW5kZW50PSBpbmRlbnQ7Ci0JCQkJCi0JCUxhYmVsIGxhYmVsQ29udHJvbD0gbmV3IExhYmVsKHBhcmVudCwgU1dULkxFRlQpOwotCQlsYWJlbENvbnRyb2wuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXREaWFsb2dGb250KCkpOwotCQlsYWJlbENvbnRyb2wuc2V0VGV4dChsYWJlbCk7Ci0JCWxhYmVsQ29udHJvbC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJCQkKLQkJQ29tYm8gY29tYm9Cb3g9IG5ld0NvbWJvQ29udHJvbChwYXJlbnQsIGtleSwgdmFsdWVzLCB2YWx1ZUxhYmVscyk7Ci0JCWNvbWJvQm94LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotCi0JCXJldHVybiBjb21ib0JveDsKLQl9Ci0JCi0JLyoqCi0JICogQ3JlYXRlcyBhIGNvbWJvIGJveCBhbmQgYXNzb2NpYXRlcyB0aGUgY29tYm8gZGF0YSB3aXRoIHRoZQotCSAqIGNvbWJvIGJveC4KLQkgKiAKLQkgKiBAcGFyYW0gY29tcG9zaXRlIHRoZSBjb21wb3NpdGUgdG8gY3JlYXRlIHRoZSBjb21ibyBib3ggaW4KLQkgKiBAcGFyYW0ga2V5IHRoZSB1bmlxdWUga2V5IHRvIGlkZW50aWZ5IHRoZSBjb21ibyBib3gKLQkgKiBAcGFyYW0gdmFsdWVzIHRoZSB2YWx1ZXMgcmVwcmVzZW50ZWQgYnkgdGhlIGNvbWJvIG9wdGlvbnMKLQkgKiBAcGFyYW0gdmFsdWVMYWJlbHMgdGhlIHZhbHVlcyBkaXNwbGF5ZWQgaW4gdGhlIGNvbWJvIGJveAotCSAqIAotCSAqIEByZXR1cm4gdGhlIGdlbmVyYXRlZCBjb21ibyBib3gKLQkgKi8KLQlwcm90ZWN0ZWQgQ29tYm8gbmV3Q29tYm9Db250cm9sKENvbXBvc2l0ZSBjb21wb3NpdGUsIFN0cmluZyBrZXksIGludFtdIHZhbHVlcywgU3RyaW5nW10gdmFsdWVMYWJlbHMpIHsKLQkJQ29tYm9EYXRhIGRhdGEgPSBuZXcgQ29tYm9EYXRhKGtleSwgdmFsdWVzLCAtMSk7Ci0JCQotCQlDb21ibyBjb21ib0JveD0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7Ci0JCWNvbWJvQm94LnNldEl0ZW1zKHZhbHVlTGFiZWxzKTsKLQkJY29tYm9Cb3guc2V0RGF0YShkYXRhKTsKLQkJY29tYm9Cb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIoZ2V0U2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0JCWNvbWJvQm94LnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0RGlhbG9nRm9udCgpKTsKLQkJCQotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKGNvbWJvQm94KTsKLQkJCi0JCWludCBzZXZlcml0eSA9IC0xOwotCQlpZihrZXkgIT0gbnVsbCkKLQkJCXNldmVyaXR5ID0gZlByZWZlcmVuY2VzU2VydmljZS5nZXRJbnQoZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIoKSwga2V5LCBWYWxpZGF0aW9uTWVzc2FnZS5XQVJOSU5HLCBjcmVhdGVQcmVmZXJlbmNlU2NvcGVzKCkpOwotCi0JCWlmIChzZXZlcml0eSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5FUlJPUiB8fCBzZXZlcml0eSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5XQVJOSU5HIHx8IHNldmVyaXR5ID09IFZhbGlkYXRpb25NZXNzYWdlLklHTk9SRSkgewotCQkJZGF0YS5zZXRTZXZlcml0eShzZXZlcml0eSk7Ci0JCQlkYXRhLm9yaWdpbmFsU2V2ZXJpdHkgPSBzZXZlcml0eTsKLQkJfQotCQkKLQkJaWYoZGF0YS5nZXRJbmRleCgpID49IDApCi0JCQljb21ib0JveC5zZWxlY3QoZGF0YS5nZXRJbmRleCgpKTsKLQkJCi0JCWZDb21ib3MuYWRkKGNvbWJvQm94KTsKLQkJcmV0dXJuIGNvbWJvQm94OwotCX0KLQkKLQlwcm90ZWN0ZWQgU2VsZWN0aW9uTGlzdGVuZXIgZ2V0U2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCWlmIChmU2VsZWN0aW9uTGlzdGVuZXIgPT0gbnVsbCkgewotCQkJZlNlbGVjdGlvbkxpc3RlbmVyPSBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHt9Ci0JCi0JCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCQljb250cm9sQ2hhbmdlZChlLndpZGdldCk7Ci0JCQkJfQotCQkJfTsKLQkJfQotCQlyZXR1cm4gZlNlbGVjdGlvbkxpc3RlbmVyOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjb250cm9sQ2hhbmdlZChXaWRnZXQgd2lkZ2V0KSB7Ci0JCUNvbWJvRGF0YSBkYXRhPSAoQ29tYm9EYXRhKSB3aWRnZXQuZ2V0RGF0YSgpOwotCQlpZiAod2lkZ2V0IGluc3RhbmNlb2YgQ29tYm8pIHsKLQkJCWRhdGEuc2V0SW5kZXgoKChDb21ibyl3aWRnZXQpLmdldFNlbGVjdGlvbkluZGV4KCkpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkFic3RyYWN0U2V0dGluZ3NQYWdlI3N0b3JlVmFsdWVzKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzdG9yZVZhbHVlcygpIHsKLQkJaWYoZkNvbWJvcyA9PSBudWxsIHx8IGZDb21ib3Muc2l6ZSgpID09IDApCi0JCQlyZXR1cm47Ci0JCQotCQlJdGVyYXRvciBpdCA9IGZDb21ib3MuaXRlcmF0b3IoKTsKLQkJCi0JCUlTY29wZUNvbnRleHRbXSBjb250ZXh0cyA9IGNyZWF0ZVByZWZlcmVuY2VTY29wZXMoKTsKLQotCQl3aGlsZShpdC5oYXNOZXh0KCkpIHsKLQkJCUNvbWJvRGF0YSBkYXRhID0gKENvbWJvRGF0YSkgKChDb21ibylpdC5uZXh0KCkpLmdldERhdGEoKTsKLQkJCWlmKGRhdGEuZ2V0S2V5KCkgIT0gbnVsbCkgewotCQkJCWNvbnRleHRzWzBdLmdldE5vZGUoZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIoKSkucHV0SW50KGRhdGEuZ2V0S2V5KCksIGRhdGEuZ2V0U2V2ZXJpdHkoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCWZvcihpbnQgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQljb250ZXh0c1tpXS5nZXROb2RlKGdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyKCkpLmZsdXNoKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQmFja2luZ1N0b3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkKLQkJCX0KLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgRXhwYW5kYWJsZUNvbXBvc2l0ZSBnZXRQYXJlbnRFeHBhbmRhYmxlQ29tcG9zaXRlKENvbnRyb2wgY29udHJvbCkgewotCQlDb250cm9sIHBhcmVudD0gY29udHJvbC5nZXRQYXJlbnQoKTsKLQkJd2hpbGUgKCEocGFyZW50IGluc3RhbmNlb2YgRXhwYW5kYWJsZUNvbXBvc2l0ZSkgJiYgcGFyZW50ICE9IG51bGwpIHsKLQkJCXBhcmVudD0gcGFyZW50LmdldFBhcmVudCgpOwotCQl9Ci0JCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBFeHBhbmRhYmxlQ29tcG9zaXRlKSB7Ci0JCQlyZXR1cm4gKEV4cGFuZGFibGVDb21wb3NpdGUpIHBhcmVudDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHJvdGVjdGVkIEV4cGFuZGFibGVDb21wb3NpdGUgY3JlYXRlVHdpc3RpZShDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwsIGludCBuQ29sdW1ucykgewotCQlFeHBhbmRhYmxlQ29tcG9zaXRlIGV4Y29tcG9zaXRlPSBuZXcgRXhwYW5kYWJsZUNvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FLCBFeHBhbmRhYmxlQ29tcG9zaXRlLlRXSVNUSUUgfCBFeHBhbmRhYmxlQ29tcG9zaXRlLkNMSUVOVF9JTkRFTlQpOwotCQlleGNvbXBvc2l0ZS5zZXRUZXh0KGxhYmVsKTsKLQkJZXhjb21wb3NpdGUuc2V0RXhwYW5kZWQoZmFsc2UpOwotCQlleGNvbXBvc2l0ZS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnRSZWdpc3RyeSgpLmdldEJvbGQoSkZhY2VSZXNvdXJjZXMuRElBTE9HX0ZPTlQpKTsKLQkJZXhjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwgdHJ1ZSwgZmFsc2UsIG5Db2x1bW5zLCAxKSk7Ci0JCWV4Y29tcG9zaXRlLmFkZEV4cGFuc2lvbkxpc3RlbmVyKG5ldyBFeHBhbnNpb25BZGFwdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBleHBhbnNpb25TdGF0ZUNoYW5nZWQoRXhwYW5zaW9uRXZlbnQgZSkgewotCQkJCWV4cGFuZGVkU3RhdGVDaGFuZ2VkKChFeHBhbmRhYmxlQ29tcG9zaXRlKSBlLmdldFNvdXJjZSgpKTsKLQkJCX0KLQkJfSk7Ci0JCWZFeHBhbmRhYmxlcy5hZGQoZXhjb21wb3NpdGUpOwotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKGV4Y29tcG9zaXRlKTsKLQkJcmV0dXJuIGV4Y29tcG9zaXRlOwotCX0KLQkKLQlwcm90ZWN0ZWQgZmluYWwgdm9pZCBleHBhbmRlZFN0YXRlQ2hhbmdlZChFeHBhbmRhYmxlQ29tcG9zaXRlIGV4cGFuZGFibGUpIHsKLQkJU2Nyb2xsZWRQYWdlQ29udGVudCBwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZT0gZ2V0UGFyZW50U2Nyb2xsZWRDb21wb3NpdGUoZXhwYW5kYWJsZSk7Ci0JCWlmIChwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSAhPSBudWxsKSB7Ci0JCQlwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZS5yZWZsb3codHJ1ZSk7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIG1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUoQ29udHJvbCBjb250cm9sKSB7Ci0JCVNjcm9sbGVkUGFnZUNvbnRlbnQgcGFyZW50U2Nyb2xsZWRDb21wb3NpdGU9IGdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlKGNvbnRyb2wpOwotCQlpZiAocGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgIT0gbnVsbCkgewotCQkJcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUuYWRhcHRDaGlsZChjb250cm9sKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgU2Nyb2xsZWRQYWdlQ29udGVudCBnZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZShDb250cm9sIGNvbnRyb2wpIHsKLQkJQ29udHJvbCBwYXJlbnQ9IGNvbnRyb2wuZ2V0UGFyZW50KCk7Ci0JCXdoaWxlICghKHBhcmVudCBpbnN0YW5jZW9mIFNjcm9sbGVkUGFnZUNvbnRlbnQpICYmIHBhcmVudCAhPSBudWxsKSB7Ci0JCQlwYXJlbnQ9IHBhcmVudC5nZXRQYXJlbnQoKTsKLQkJfQotCQlpZiAocGFyZW50IGluc3RhbmNlb2YgU2Nyb2xsZWRQYWdlQ29udGVudCkgewotCQkJcmV0dXJuIChTY3JvbGxlZFBhZ2VDb250ZW50KSBwYXJlbnQ7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyhJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbikgewotCQlmb3IoaW50IGkgPSAwOyBpIDwgZkV4cGFuZGFibGVzLnNpemUoKTsgaSsrKSB7Ci0JCQlFeHBhbmRhYmxlQ29tcG9zaXRlIGNvbXAgPSAoRXhwYW5kYWJsZUNvbXBvc2l0ZSkgZkV4cGFuZGFibGVzLmdldChpKTsKLQkJCXNlY3Rpb24ucHV0KFNFVFRJTkdTX0VYUEFOREVEICsgU3RyaW5nLnZhbHVlT2YoaSksIGNvbXAuaXNFeHBhbmRlZCgpKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCByZXN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyhJRGlhbG9nU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGZFeHBhbmRhYmxlcy5zaXplKCk7IGkrKykgewotCQkJRXhwYW5kYWJsZUNvbXBvc2l0ZSBleGNvbXBvc2l0ZT0gKEV4cGFuZGFibGVDb21wb3NpdGUpIGZFeHBhbmRhYmxlcy5nZXQoaSk7Ci0JCQlpZiAoc2V0dGluZ3MgPT0gbnVsbCkgewotCQkJCWV4Y29tcG9zaXRlLnNldEV4cGFuZGVkKGkgPT0gMCk7IC8vIG9ubHkgZXhwYW5kIHRoZSBmaXJzdCBub2RlIGJ5IGRlZmF1bHQKLQkJCX0gZWxzZSB7Ci0JCQkJZXhjb21wb3NpdGUuc2V0RXhwYW5kZWQoc2V0dGluZ3MuZ2V0Qm9vbGVhbihTRVRUSU5HU19FWFBBTkRFRCArIFN0cmluZy52YWx1ZU9mKGkpKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgcmVzZXRTZXZlcml0aWVzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIGRlZmF1bHRDb250ZXh0ID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIoKSk7Ci0JCWZvcihpbnQgaSA9IDA7IGkgPCBmQ29tYm9zLnNpemUoKTsgaSsrKSB7Ci0JCQlDb21ib0RhdGEgZGF0YSA9IChDb21ib0RhdGEpKChDb21ibylmQ29tYm9zLmdldChpKSkuZ2V0RGF0YSgpOwotCQkJaW50IHNldmVyaXR5ID0gZGVmYXVsdENvbnRleHQuZ2V0SW50KGRhdGEuZ2V0S2V5KCksIFZhbGlkYXRpb25NZXNzYWdlLldBUk5JTkcpOwotCQkJZGF0YS5zZXRTZXZlcml0eShzZXZlcml0eSk7Ci0JCQkoKENvbWJvKWZDb21ib3MuZ2V0KGkpKS5zZWxlY3QoZGF0YS5nZXRJbmRleCgpKTsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRSZXZhbGlkYXRlT25TZXR0aW5nc0NoYW5nZSgpIHsKLQkJSXRlcmF0b3IgaXQgPSBmQ29tYm9zLml0ZXJhdG9yKCk7Ci0KLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJQ29tYm9EYXRhIGRhdGEgPSAoQ29tYm9EYXRhKSAoKENvbWJvKSBpdC5uZXh0KCkpLmdldERhdGEoKTsKLQkJCWlmIChkYXRhLmlzQ2hhbmdlZCgpKQotCQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkgewotCQlzdG9yZVZhbHVlcygpOwotCQlpZihzdXBlci5wZXJmb3JtT2soKSAmJiBzaG91bGRSZXZhbGlkYXRlT25TZXR0aW5nc0NoYW5nZSgpKSB7Ci0JCQlNZXNzYWdlQm94IG1iID0gbmV3IE1lc3NhZ2VCb3godGhpcy5nZXRTaGVsbCgpLCBTV1QuQVBQTElDQVRJT05fTU9EQUwgfCBTV1QuWUVTIHwgU1dULk5PIHwgU1dULkNBTkNFTCB8IFNXVC5JQ09OX0lORk9STUFUSU9OIHwgU1dULlJJR0hUKTsKLQkJCW1iLnNldFRleHQoTWVzc2FnZXMuQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlTWJUZXh0KTsKLQkJCS8qIENob29zZSB3aGljaCBtZXNzYWdlIHRvIHVzZSBiYXNlZCBvbiBpZiBpdHMgcHJvamVjdCBvciB3b3Jrc3BhY2Ugc2V0dGluZ3MgKi8KLQkJCVN0cmluZyBtc2cgPSAoZ2V0UHJvamVjdCgpID09IG51bGwpID8gTWVzc2FnZXMuQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlV29ya3NwYWNlIDogTWVzc2FnZXMuQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlUHJvamVjdDsKLQkJCW1iLnNldE1lc3NhZ2UobXNnKTsKLQkJCXN3aXRjaChtYi5vcGVuKCkpIHsKLQkJCQljYXNlIFNXVC5DQU5DRUw6Ci0JCQkJCXJldHVybiBmYWxzZTsKLQkJCQljYXNlIFNXVC5ZRVM6Ci0JCQkJCVZhbGlkYXRlSm9iIGpvYiA9IG5ldyBWYWxpZGF0ZUpvYihNZXNzYWdlcy5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VKb2IpOwotCQkJCQlqb2Iuc2NoZWR1bGUoKTsKLQkJCQljYXNlIFNXVC5OTzoKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLyoqCi0JICogUGVyZm9ybXMgdmFsaWRhdGlvbiBhZnRlciB2YWxpZGF0aW9uIHByZWZlcmVuY2VzIGhhdmUgYmVlbiBtb2RpZmllZC4KLQkgKi8KLQlwcml2YXRlIGNsYXNzIFZhbGlkYXRlSm9iIGV4dGVuZHMgSm9iIHsKLQkJCi0JCXB1YmxpYyBWYWxpZGF0ZUpvYihTdHJpbmcgbmFtZSkgewotCQkJc3VwZXIobmFtZSk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQkJdHJ5IHsKLQkJCQlJUHJvamVjdFtdIHByb2plY3RzID0gbnVsbDsKLQkJCQkvKiBDaGFuZ2VkIHByZWZlcmVuY2VzIGZvciBhIHNpbmdsZSBwcm9qZWN0LCBvbmx5IHZhbGlkYXRlIGl0ICovCi0JCQkJaWYoZ2V0UHJvamVjdCgpICE9IG51bGwpCi0JCQkJCXByb2plY3RzID0gbmV3IElQcm9qZWN0W10ge2dldFByb2plY3QoKX07Ci0JCQkJLyogV29ya3NwYWNlLXdpZGUgcHJlZmVyZW5jZXMgY2hhbmdlZCAqLwotCQkJCWVsc2UgewotCQkJCQkvKiBHZXQgYWxsIG9mIHRoZSBwcm9qZWN0cyBpbiB0aGUgd29ya3NwYWNlICovCi0JCQkJCXByb2plY3RzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0cygpOwotCQkJCQlJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZzID0gbnVsbDsKLQkJCQkJTGlzdCBwcm9qZWN0TGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQkJCi0JCQkJCS8qIEZpbHRlciBvdXQgcHJvamVjdHMgdGhhdCB1c2UgcHJvamVjdC1zcGVjaWZpYyBzZXR0aW5ncyBvciBoYXZlIGJlZW4gY2xvc2VkICovCi0JCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQkJcHJlZnMgPSBuZXcgUHJvamVjdFNjb3BlKHByb2plY3RzW2ldKS5nZXROb2RlKGdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyKCkpOwotCQkJCQkJaWYocHJvamVjdHNbaV0uaXNBY2Nlc3NpYmxlKCkgJiYgIXByZWZzLmdldEJvb2xlYW4oZ2V0UHJvamVjdFNldHRpbmdzS2V5KCksIGZhbHNlKSkKLQkJCQkJCQlwcm9qZWN0TGlzdC5hZGQocHJvamVjdHNbaV0pOwotCQkJCQl9Ci0JCQkJCXByb2plY3RzID0gKElQcm9qZWN0W10pIHByb2plY3RMaXN0LnRvQXJyYXkobmV3IElQcm9qZWN0W3Byb2plY3RMaXN0LnNpemUoKV0pOwotCQkJCX0KLQkJCQlmVmFsaWRhdGlvbi52YWxpZGF0ZShwcm9qZWN0cywgdHJ1ZSwgZmFsc2UsIG1vbml0b3IpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gY2UpIHsKLQkJCQlzdGF0dXMgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKLQkJCX0KLQkJCQotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQkKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0Fic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyYTdkMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkV4cGFuc2lvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMuZXZlbnRzLkV4cGFuc2lvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmZvcm1zLndpZGdldHMuRXhwYW5kYWJsZUNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkFic3RyYWN0UHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5TY3JvbGxlZFBhZ2VDb250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW47Ci0KLS8qKgotICogQXVnbWVudHMgdGhlIFNTRSA8Y29kZT5BYnN0cmFjdFByZWZlcmVuY2VQYWdlPC9jb2RlPiB3aXRoIHN1cHBvcnQgZm9yIGV4cGFuZGFibGUgY29tcG9zaXRlcyAodHdpc3RpZXMpIGFuZCBjb21ib3MuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5BYnN0cmFjdFByZWZlcmVuY2VQYWdlCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlUGFnZQotewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNFVFRJTkdTX0VYUEFOREVEID0gZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkrIi5TRVRUSU5HU19FWFBBTkRFRCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTRVRUSU5HU19TRUNUSU9OX05BTUUgPSBnZXRDbGFzcygpLmdldENhbm9uaWNhbE5hbWUoKSsiLlNFVFRJTkdTX1NFQ1RJT05fTkFNRSI7Ly8kTk9OLU5MUy0xJAotCXByaXZhdGUgTGlzdDxFeHBhbmRhYmxlQ29tcG9zaXRlPiBmRXhwYW5kYWJsZXMgPSBuZXcgQXJyYXlMaXN0PEV4cGFuZGFibGVDb21wb3NpdGU+KCk7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgZmluYWwgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJY3JlYXRlQ29tbW9uQ29udGVudHMocGFyZW50KTsKLQkJbG9hZFByZWZlcmVuY2VzKCk7Ci0JCXJlc3RvcmVTZWN0aW9uRXhwYW5zaW9uU3RhdGVzKGdldERpYWxvZ1NldHRpbmdzKCkuZ2V0U2VjdGlvbihTRVRUSU5HU19TRUNUSU9OX05BTUUpKTsKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0KLQkvKioKLQkgKiBDYWxsZWQgYnkgY3JlYXRlQ29udGVudHMgYW5kIG11c3QgYmUgaW1wbGVtZW50ZWQuCi0JICogCi0JICogQHBhcmFtIHBhcmVudAotCSAqIEByZXR1cm4gdGhlIGNvbXBvc2l0ZQotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCBDb21wb3NpdGUgY3JlYXRlQ29tbW9uQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCk7Ci0KLQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVR3aXN0aWUoQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsLCBpbnQgY29scykKLQl7Ci0JCUV4cGFuZGFibGVDb21wb3NpdGUgZXhjb21wb3NpdGUgPSBuZXcgRXhwYW5kYWJsZUNvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FLCBFeHBhbmRhYmxlQ29tcG9zaXRlLlRXSVNUSUUgfCBFeHBhbmRhYmxlQ29tcG9zaXRlLkNMSUVOVF9JTkRFTlQpOwotCQlleGNvbXBvc2l0ZS5zZXRUZXh0KGxhYmVsKTsKLQkJZXhjb21wb3NpdGUuc2V0RXhwYW5kZWQoZmFsc2UpOwotCQlleGNvbXBvc2l0ZS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnRSZWdpc3RyeSgpLmdldEJvbGQoSkZhY2VSZXNvdXJjZXMuRElBTE9HX0ZPTlQpKTsKLQkJZXhjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwgdHJ1ZSwgZmFsc2UsIGNvbHMsIDEpKTsKLQkJZXhjb21wb3NpdGUuYWRkRXhwYW5zaW9uTGlzdGVuZXIobmV3IEV4cGFuc2lvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIGV4cGFuc2lvblN0YXRlQ2hhbmdlZChFeHBhbnNpb25FdmVudCBlKQotCQkJewotCQkJCWV4cGFuZGVkU3RhdGVDaGFuZ2VkKChFeHBhbmRhYmxlQ29tcG9zaXRlKSBlLmdldFNvdXJjZSgpKTsKLQkJCX0KLQkJfSk7Ci0JCWZFeHBhbmRhYmxlcy5hZGQoZXhjb21wb3NpdGUpOwotCQltYWtlU2Nyb2xsYWJsZUNvbXBvc2l0ZUF3YXJlKGV4Y29tcG9zaXRlKTsKLQotCQlDb21wb3NpdGUgdHdpc3RpZUNpZW50ID0gbmV3IENvbXBvc2l0ZShleGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQlleGNvbXBvc2l0ZS5zZXRDbGllbnQodHdpc3RpZUNpZW50KTsKLQotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLQkJbGF5b3V0Lm1hcmdpblJpZ2h0ID0gNTsKLQkJdHdpc3RpZUNpZW50LnNldExheW91dChsYXlvdXQpOwotCi0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UpOwotCQl0d2lzdGllQ2llbnQuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJcmV0dXJuIHR3aXN0aWVDaWVudDsKLQl9Ci0KLQlwcml2YXRlIGZpbmFsIHZvaWQgZXhwYW5kZWRTdGF0ZUNoYW5nZWQoRXhwYW5kYWJsZUNvbXBvc2l0ZSBleHBhbmRhYmxlKQotCXsKLQkJU2Nyb2xsZWRQYWdlQ29udGVudCBwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSA9IGdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlKGV4cGFuZGFibGUpOwotCQlpZiAocGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgIT0gbnVsbCkKLQkJewotCQkJcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUucmVmbG93KHRydWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIG1ha2VTY3JvbGxhYmxlQ29tcG9zaXRlQXdhcmUoQ29udHJvbCBjb250cm9sKQotCXsKLQkJU2Nyb2xsZWRQYWdlQ29udGVudCBwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSA9IGdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlKGNvbnRyb2wpOwotCQlpZiAocGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgIT0gbnVsbCkKLQkJewotCQkJcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUuYWRhcHRDaGlsZChjb250cm9sKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU2Nyb2xsZWRQYWdlQ29udGVudCBnZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZShDb250cm9sIGNvbnRyb2wpCi0JewotCQlDb250cm9sIHBhcmVudCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk7Ci0JCXdoaWxlICghKHBhcmVudCBpbnN0YW5jZW9mIFNjcm9sbGVkUGFnZUNvbnRlbnQpICYmIHBhcmVudCAhPSBudWxsKQotCQl7Ci0JCQlwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7Ci0JCX0KLQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIFNjcm9sbGVkUGFnZUNvbnRlbnQpCi0JCXsKLQkJCXJldHVybiAoU2Nyb2xsZWRQYWdlQ29udGVudCkgcGFyZW50OwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByb3RlY3RlZCBDb21ibyBjcmVhdGVDb21ibyhDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwsIFN0cmluZyBwcmVmS2V5KQotCXsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMSwgMSk7Ci0KLQkJTGFiZWwgbGFiZWxDb250cm9sID0gbmV3IExhYmVsKHBhcmVudCwgU1dULkxFRlQpOwotCQlsYWJlbENvbnRyb2wuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXREaWFsb2dGb250KCkpOwotCQlsYWJlbENvbnRyb2wuc2V0VGV4dChsYWJlbCk7Ci0JCWxhYmVsQ29udHJvbC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlDb21ibyBjb21ibyA9IGNyZWF0ZURyb3BEb3duQm94KHBhcmVudCk7Ci0JCWNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCQljb21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpKTsKLQkJcmV0dXJuIGNvbWJvOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXMoSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24pCi0JewotCQlmb3IgKGludCBpID0gMDsgaSA8IGZFeHBhbmRhYmxlcy5zaXplKCk7IGkrKykKLQkJewotCQkJRXhwYW5kYWJsZUNvbXBvc2l0ZSBjb21wID0gZkV4cGFuZGFibGVzLmdldChpKTsKLQkJCXNlY3Rpb24ucHV0KFNFVFRJTkdTX0VYUEFOREVEICsgU3RyaW5nLnZhbHVlT2YoaSksIGNvbXAuaXNFeHBhbmRlZCgpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkKLQl7Ci0JCXJldHVybiBYU0xVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGlhbG9nU2V0dGluZ3MoKTsKLQl9Ci0KLQkvKioKLQkgKiBTYXZlcyB0aGUgZXhwYW5zaW9uIHN0YXRlcyBiZWZvcmUgY2FsbGluZyBzdXBlci4KLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nUGFnZSNkaXNwb3NlKCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCXN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyhnZXREaWFsb2dTZXR0aW5ncygpLmFkZE5ld1NlY3Rpb24oU0VUVElOR1NfU0VDVElPTl9OQU1FKSk7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVzdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXMoSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzKQotCXsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRXhwYW5kYWJsZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUV4cGFuZGFibGVDb21wb3NpdGUgZXhjb21wb3NpdGUgPSBmRXhwYW5kYWJsZXMuZ2V0KGkpOwotCQkJaWYgKHNldHRpbmdzID09IG51bGwpCi0JCQl7Ci0JCQkJZXhjb21wb3NpdGUuc2V0RXhwYW5kZWQoaSA9PSAwKTsgLy8gb25seSBleHBhbmQgdGhlIGZpcnN0IG5vZGUgYnkgZGVmYXVsdAotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWV4Y29tcG9zaXRlLnNldEV4cGFuZGVkKHNldHRpbmdzLmdldEJvb2xlYW4oU0VUVElOR1NfRVhQQU5ERUQgKyBTdHJpbmcudmFsdWVPZihpKSkpOwotCQkJfQotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFByZWZlcmVuY2VzIGdldE1vZGVsUHJlZmVyZW5jZXMoKQotCXsKLQkJcmV0dXJuIFhTTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JfQotCi0JLyoqCi0JICogU2F2ZSB0aGUgcHJlZmVyZW5jZXMuCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkFic3RyYWN0UHJlZmVyZW5jZVBhZ2UjcGVyZm9ybU9rKCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKQotCXsKLQkJYm9vbGVhbiBvayA9IHN1cGVyLnBlcmZvcm1PaygpOwotCQlpZiAob2spCi0JCQlYU0xDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcmV0dXJuIG9rOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Db21ib0RhdGEuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Db21ib0RhdGEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzNDZlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQ29tYm9EYXRhLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWNsYXNzIENvbWJvRGF0YSB7Ci0JcHJpdmF0ZSBTdHJpbmcgZktleTsKLQlwcml2YXRlIGludFtdIGZTZXZlcml0aWVzOwotCXByaXZhdGUgaW50IGZJbmRleDsKLQlpbnQgb3JpZ2luYWxTZXZlcml0eSA9IC0yOwotCQotCXB1YmxpYyBDb21ib0RhdGEoU3RyaW5nIGtleSwgaW50W10gc2V2ZXJpdGllcywgaW50IGluZGV4KSB7Ci0JCWZLZXkgPSBrZXk7Ci0JCWZTZXZlcml0aWVzID0gc2V2ZXJpdGllczsKLQkJZkluZGV4ID0gaW5kZXg7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgewotCQlyZXR1cm4gZktleTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0SW5kZXgoaW50IGluZGV4KSB7Ci0JCWZJbmRleCA9IGluZGV4OwotCX0KLQkKLQlwdWJsaWMgaW50IGdldEluZGV4KCkgewotCQlyZXR1cm4gZkluZGV4OwotCX0KLQkKLQkvKioKLQkgKiBTZXRzIHRoZSBzZXZlcml0eSBpbmRleCBiYXNlZCBvbiA8Y29kZT5zZXZlcml0eTwvY29kZT4uCi0JICogSWYgdGhlIHNldmVyaXR5IGRvZXNuJ3QgZXhpc3QsIHRoZSBpbmRleCBpcyBzZXQgdG8gLTEuCi0JICogCi0JICogQHBhcmFtIHNldmVyaXR5IHRoZSBzZXZlcml0eSBsZXZlbAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNldmVyaXR5KGludCBzZXZlcml0eSkgewotCQlmb3IoaW50IGkgPSAwOyBmU2V2ZXJpdGllcyAhPSBudWxsICYmIGkgPCBmU2V2ZXJpdGllcy5sZW5ndGg7IGkrKykgewotCQkJaWYoZlNldmVyaXRpZXNbaV0gPT0gc2V2ZXJpdHkpIHsKLQkJCQlmSW5kZXggPSBpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQkKLQkJZkluZGV4ID0gLTE7Ci0JfQotCQotCXB1YmxpYyBpbnQgZ2V0U2V2ZXJpdHkoKSB7Ci0JCXJldHVybiAoZkluZGV4ID49IDAgJiYgZlNldmVyaXRpZXMgIT0gbnVsbCAmJiBmSW5kZXggPCBmU2V2ZXJpdGllcy5sZW5ndGgpID8gZlNldmVyaXRpZXNbZkluZGV4XSA6IC0xOwotCX0KLQkKLQlib29sZWFuIGlzQ2hhbmdlZCgpIHsKLQkJcmV0dXJuIGZTZXZlcml0aWVzW2ZJbmRleF0gIT0gb3JpZ2luYWxTZXZlcml0eTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWFpblByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWFpblByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjA0MzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL01haW5QcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTM4NTMgLSBNb3ZlZCBtYWluIHByZWZlcmVuY2UgcGFnZSBvdXQgb2YKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnIHVpIGFuZCBpbnRvIFhTTCB1aS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotCi0vKioKLSAqIAotICoKLSAqLwotcHVibGljIGNsYXNzIE1haW5QcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0JLyoqCi0JICogTWFpblByZWZlcm5jZVBhZ2UgaXMgdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgWFNMIFByZWZlcmVuY2UgUGFnZQotCSAqLwotCXB1YmxpYyBNYWluUHJlZmVyZW5jZVBhZ2UoKQotCXsKLQkJc3VwZXIoKTsKLQkJbm9EZWZhdWx0QW5kQXBwbHlCdXR0b24oKTsKLQl9Ci0KLQkvKiogCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKQotCXsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgYW5jZXN0b3IpCi0JewotCQlpbml0aWFsaXplRGlhbG9nVW5pdHMoYW5jZXN0b3IpOwotCi0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJYW5jZXN0b3Iuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoYW5jZXN0b3IsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5NYWluUHJlZmVyZW5jZVBhZ2UpOwotCQkKLQkJYXBwbHlEaWFsb2dGb250KGFuY2VzdG9yKTsKLQkJcmV0dXJuIGFuY2VzdG9yOwotCX0KLQotCS8qKiAKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlByZWZlcmVuY2VQYWdlI3BlcmZvcm1PaygpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLQl7Ci0JCXJldHVybiBzdXBlci5wZXJmb3JtT2soKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvcGVydHlQcmVmZXJlbmNlUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1Byb3BlcnR5UHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UwMTY1Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvcGVydHlQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyMzAwNzIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpIGNsYXNzIG9mCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBuYW1lLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSVNjb3BlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkNvbnRyb2xFbmFibGVTdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRlY29yYXRpbmdMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuTGlzdERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlByZWZlcmVuY2VzVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlByb3BlcnR5UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLm5hdmlnYXRvci5SZXNvdXJjZVNvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGFza3MuVGFza1RhZ1ByZWZlcmVuY2VLZXlzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotCi0vKioKLSAqIEJhc2VkIGxvb3NlbHkgb24gb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByZWZlcmVuY2VzLlByb3BlcnR5QW5kUHJlZmVyZW5jZVBhZ2UKLSAqLwotYWJzdHJhY3QgY2xhc3MgUHJvcGVydHlQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByb3BlcnR5UGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBfZGVidWdQcmVmZXJlbmNlcyA9ICJ0cnVlIi5lcXVhbHNJZ25vcmVDYXNlKFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKCJvcmcuZWNsaXBzZS53c3Quc3NlLnVpL3ByZWZlcmVuY2VzLXByb3BlcnRpZXMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCS8qCi0JICogRGlzYWJsZSBsaW5rIGRhdGEsIHByZXZlbnRzIHRoZSBkaXNwbGF5IG9mIGEgIndvcmtzcGFjZSIgb3IgInByb2plY3QiCi0JICogc2V0dGluZ3MgbGluayB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBkaWFsb2cgbGF1bmNoaW5nCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0IERJU0FCTEVfTElOSyA9ICJESVNBQkxFX0xJTksiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIE1hcCBEYXRhID0gbnVsbDsKLQotCXByaXZhdGUgQnV0dG9uIEVuYWJsZVByb2plY3RTZXR0aW5nczsKLQotCXByaXZhdGUgTGluayBQcm9qZWN0U2V0dGluZ3NMaW5rOwotCQotCXByaXZhdGUgQ29udHJvbCBDb21tb247Ci0JCi0JcHJpdmF0ZSBDb250cm9sRW5hYmxlU3RhdGUgRW5hYmxlbWVudHM7Ci0KLQlwdWJsaWMgUHJvcGVydHlQcmVmZXJlbmNlUGFnZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgZmluYWwgdm9pZCBhcHBseURhdGEoT2JqZWN0IGRhdGEpIHsKLQkJc3VwZXIuYXBwbHlEYXRhKGRhdGEpOwotCQlpZiAoZGF0YSBpbnN0YW5jZW9mIE1hcCkgewotCQkJRGF0YSA9IChNYXApIGRhdGE7Ci0JCQl1cGRhdGVMaW5rRW5hYmxlbWVudCgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IENvbnRyb2wgY3JlYXRlQ29tbW9uQ29udGVudHMoQ29tcG9zaXRlIGNvbXBvc2l0ZSk7Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgZmluYWwgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5VTEwpOwotCi0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCUNvbXBvc2l0ZSBjaGVja0xpbmtDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOwotCQljaGVja0xpbmtDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKSk7Ci0JCWNoZWNrTGlua0NvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpKTsKLQotCQlpZiAoZ2V0UHJvamVjdCgpICE9IG51bGwpIHsKLQkJCUVuYWJsZVByb2plY3RTZXR0aW5ncyA9IG5ldyBCdXR0b24oY2hlY2tMaW5rQ29tcG9zaXRlLCBTV1QuQ0hFQ0spOwotCQkJRW5hYmxlUHJvamVjdFNldHRpbmdzLnNldFRleHQoU1NFVUlNZXNzYWdlcy5FbmFibGVQcm9qZWN0U2V0dGluZ3MpOyAKLQkJCUVuYWJsZVByb2plY3RTZXR0aW5ncy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuQkVHSU5OSU5HLCBTV1QuQ0VOVEVSLCBmYWxzZSwgZmFsc2UpKTsKLQkJCWJvb2xlYW4gZW5hYmxlZEZvclByb2plY3QgPSBjcmVhdGVQcmVmZXJlbmNlU2NvcGVzKClbMF0uZ2V0Tm9kZShnZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllcigpKS5nZXRCb29sZWFuKGdldFByb2plY3RTZXR0aW5nc0tleSgpLCBmYWxzZSk7Ci0JCQlFbmFibGVQcm9qZWN0U2V0dGluZ3Muc2V0U2VsZWN0aW9uKGVuYWJsZWRGb3JQcm9qZWN0KTsKLQkJfQotCQllbHNlIHsKLQkJCUxhYmVsIHNwYWNlciA9IG5ldyBMYWJlbChjaGVja0xpbmtDb21wb3NpdGUsIFNXVC5DSEVDSyk7Ci0JCQlzcGFjZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7Ci0JCX0KLQotCQlQcm9qZWN0U2V0dGluZ3NMaW5rID0gbmV3IExpbmsoY2hlY2tMaW5rQ29tcG9zaXRlLCBTV1QuTk9ORSk7Ci0JCVByb2plY3RTZXR0aW5nc0xpbmsuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkVORCwgU1dULkJFR0lOTklORywgdHJ1ZSwgZmFsc2UpKTsKLQotCQkvKgotCQkgKiAiZWxlbWVudCIgc2hvdWxkIGJlIGEgcHJvamVjdCwgaWYgbnVsbCwgbGluayB0byBwZXItcHJvamVjdAotCQkgKiBwcm9wZXJ0aWVzCi0JCSAqLwotCQlpZiAoZ2V0UHJvamVjdCgpICE9IG51bGwpIHsKLQkJCVByb2plY3RTZXR0aW5nc0xpbmsuc2V0VGV4dCgiPGE+IiArIFNTRVVJTWVzc2FnZXMuQ29uZmlndXJlV29ya3NwYWNlU2V0dGluZ3MgKyAiPC9hPiIpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQl9Ci0JCWVsc2UgewotCQkJUHJvamVjdFNldHRpbmdzTGluay5zZXRUZXh0KCI8YT4iICsgU1NFVUlNZXNzYWdlcy5Db25maWd1cmVQcm9qZWN0U2V0dGluZ3MgKyAiPC9hPiIpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQl9Ci0KLQkJdXBkYXRlTGlua0VuYWJsZW1lbnQoKTsKLQotCQlQcm9qZWN0U2V0dGluZ3NMaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJd2lkZ2V0U2VsZWN0ZWQoZSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlpZiAoZ2V0UHJvamVjdCgpID09IG51bGwpIHsKLQkJCQkJb3BlblByb2plY3RTZXR0aW5ncygpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJb3BlbldvcmtzcGFjZVNldHRpbmdzKCk7Ci0JCQkJfQotCQkJfQotCi0JCX0pOwotCi0JCWlmIChnZXRQcm9qZWN0KCkgIT0gbnVsbCkgewotCQkJTGFiZWwgbGluZSA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5TRVBBUkFUT1IgfCBTV1QuSE9SSVpPTlRBTCk7Ci0JCQlsaW5lLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCkpOwotCQl9Ci0KLQkJQ29tbW9uID0gY3JlYXRlQ29tbW9uQ29udGVudHMoY29tcG9zaXRlKTsKLQkJCi0JCUNvbW1vbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQlpZiAoRW5hYmxlUHJvamVjdFNldHRpbmdzICE9IG51bGwpIHsKLQkJCVNlbGVjdGlvbkFkYXB0ZXIgc2VsZWN0aW9uQWRhcHRlciA9IG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJCUBPdmVycmlkZQotCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQkJc3VwZXIud2lkZ2V0U2VsZWN0ZWQoZSk7Ci0JCQkJCWVuYWJsZVByZWZlcmVuY2VDb250ZW50KEVuYWJsZVByb2plY3RTZXR0aW5ncy5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJfQotCQkJfTsKLQkJCXNlbGVjdGlvbkFkYXB0ZXIud2lkZ2V0U2VsZWN0ZWQobnVsbCk7Ci0JCQlFbmFibGVQcm9qZWN0U2V0dGluZ3MuYWRkU2VsZWN0aW9uTGlzdGVuZXIoc2VsZWN0aW9uQWRhcHRlcik7Ci0JCX0KLQkJCi0JCWFwcGx5RGlhbG9nRm9udChjb21wb3NpdGUpOwotCQlyZXR1cm4gY29tcG9zaXRlOwotCX0KLQotCXByb3RlY3RlZCBJU2NvcGVDb250ZXh0W10gY3JlYXRlUHJlZmVyZW5jZVNjb3BlcygpIHsKLQkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoKTsKLQkJaWYgKHByb2plY3QgIT0gbnVsbCkgewotCQkJcmV0dXJuIG5ldyBJU2NvcGVDb250ZXh0W117bmV3IFByb2plY3RTY29wZShwcm9qZWN0KSwgbmV3IEluc3RhbmNlU2NvcGUoKSwgbmV3IERlZmF1bHRTY29wZSgpfTsKLQkJfQotCQlyZXR1cm4gbmV3IElTY29wZUNvbnRleHRbXXtuZXcgSW5zdGFuY2VTY29wZSgpLCBuZXcgRGVmYXVsdFNjb3BlKCl9OwotCX0KLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIoKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJlZmVyZW5jZVBhZ2VJRCgpOwotCi0JcHJvdGVjdGVkIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCWlmIChnZXRFbGVtZW50KCkgIT0gbnVsbCkgewotCQkJaWYgKGdldEVsZW1lbnQoKSBpbnN0YW5jZW9mIElQcm9qZWN0KSB7Ci0JCQkJcmV0dXJuIChJUHJvamVjdCkgZ2V0RWxlbWVudCgpOwotCQkJfQotCQkJT2JqZWN0IGFkYXB0ZXIgPSBnZXRFbGVtZW50KCkuZ2V0QWRhcHRlcihJUHJvamVjdC5jbGFzcyk7Ci0JCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIElQcm9qZWN0KSB7Ci0JCQkJcmV0dXJuIChJUHJvamVjdCkgYWRhcHRlcjsKLQkJCX0KLQkJCWFkYXB0ZXIgPSBnZXRFbGVtZW50KCkuZ2V0QWRhcHRlcihJUmVzb3VyY2UuY2xhc3MpOwotCQkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBJUHJvamVjdCkgewotCQkJCXJldHVybiAoSVByb2plY3QpIGFkYXB0ZXI7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRQcm9qZWN0U2V0dGluZ3NLZXkoKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydHlQYWdlSUQoKTsKLQotCXByb3RlY3RlZCBib29sZWFuIGlzRWxlbWVudFNldHRpbmdzRW5hYmxlZCgpIHsKLQkJcmV0dXJuIEVuYWJsZVByb2plY3RTZXR0aW5ncyAhPSBudWxsICYmIEVuYWJsZVByb2plY3RTZXR0aW5ncy5nZXRTZWxlY3Rpb24oKTsKLQl9Ci0KLQl2b2lkIG9wZW5Qcm9qZWN0U2V0dGluZ3MoKSB7Ci0JCUxpc3REaWFsb2cgZGlhbG9nID0gbmV3IExpc3REaWFsb2coZ2V0U2hlbGwoKSkgewotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIGNvbnRhaW5lcikgewotCQkJCUNvbnRyb2wgYXJlYSA9IHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEoY29udGFpbmVyKTsKLQkJCQlnZXRUYWJsZVZpZXdlcigpLnNldFNvcnRlcihuZXcgUmVzb3VyY2VTb3J0ZXIoUmVzb3VyY2VTb3J0ZXIuTkFNRSkpOwotCQkJCXJldHVybiBhcmVhOwotCQkJfQotCQl9OwotCQlkaWFsb2cuc2V0TWVzc2FnZShTU0VVSU1lc3NhZ2VzLlByb3BlcnR5UHJlZmVyZW5jZVBhZ2VfMDIpOwotCQlkaWFsb2cuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7Ci0JCQkJcmV0dXJuICgoSVdvcmtzcGFjZSkgaW5wdXRFbGVtZW50KS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7Ci0JCQl9Ci0JCX0pOwotCQlkaWFsb2cuc2V0TGFiZWxQcm92aWRlcihuZXcgRGVjb3JhdGluZ0xhYmVsUHJvdmlkZXIobmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwgU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERlY29yYXRvck1hbmFnZXIoKS5nZXRMYWJlbERlY29yYXRvcigpKSk7Ci0JCWRpYWxvZy5zZXRJbnB1dChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkpOwotCQlkaWFsb2cuc2V0VGl0bGUoU1NFVUlNZXNzYWdlcy5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlXzAxKTsKLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlPYmplY3RbXSByZXN1bHQgPSBkaWFsb2cuZ2V0UmVzdWx0KCk7Ci0JCQlpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHsKLQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gKElQcm9qZWN0KSBkaWFsb2cuZ2V0UmVzdWx0KClbMF07Ci0JCQkJTWFwIGRhdGEgPSBuZXcgSGFzaE1hcCgpOwotCQkJCWRhdGEucHV0KERJU0FCTEVfTElOSywgQm9vbGVhbi5UUlVFKTsKLQkJCQlQcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJvcGVydHlEaWFsb2dPbihnZXRTaGVsbCgpLCBwcm9qZWN0LCBnZXRQcm9wZXJ0eVBhZ2VJRCgpLCBuZXcgU3RyaW5nW117Z2V0UHJvcGVydHlQYWdlSUQoKX0sIGRhdGEpLm9wZW4oKTsKLQkJCX0KLQkJfQotCX0KLQotCXZvaWQgb3BlbldvcmtzcGFjZVNldHRpbmdzKCkgewotCQlNYXAgZGF0YSA9IG5ldyBIYXNoTWFwKCk7Ci0JCWRhdGEucHV0KERJU0FCTEVfTElOSywgQm9vbGVhbi5UUlVFKTsKLQkJUHJlZmVyZW5jZXNVdGlsLmNyZWF0ZVByZWZlcmVuY2VEaWFsb2dPbihnZXRTaGVsbCgpLCBnZXRQcmVmZXJlbmNlUGFnZUlEKCksIG5ldyBTdHJpbmdbXXtnZXRQcmVmZXJlbmNlUGFnZUlEKCl9LCBkYXRhKS5vcGVuKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkgewotCQlib29sZWFuIG9rID0gc3VwZXIucGVyZm9ybU9rKCk7Ci0JCUlTY29wZUNvbnRleHRbXSBwcmVmZXJlbmNlU2NvcGVzID0gY3JlYXRlUHJlZmVyZW5jZVNjb3BlcygpOwotCQlpZiAoZ2V0UHJvamVjdCgpICE9IG51bGwpIHsKLQkJCWlmIChpc0VsZW1lbnRTZXR0aW5nc0VuYWJsZWQoKSkgewotCQkJCWlmIChfZGVidWdQcmVmZXJlbmNlcykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIHNldHRpbmcgIiArIFRhc2tUYWdQcmVmZXJlbmNlS2V5cy5UQVNLX1RBR19QRVJfUFJPSkVDVCArICIgKCIgKyB0cnVlICsgIikgaW4gc2NvcGUgIiArIHByZWZlcmVuY2VTY29wZXNbMF0uZ2V0TmFtZSgpICsgIjoiICsgcHJlZmVyZW5jZVNjb3Blc1swXS5nZXRMb2NhdGlvbigpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQgLy8kTk9OLU5MUy00JCAgCi0JCQkJfQotCQkJCXByZWZlcmVuY2VTY29wZXNbMF0uZ2V0Tm9kZShnZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllcigpKS5wdXRCb29sZWFuKGdldFByb2plY3RTZXR0aW5nc0tleSgpLCBFbmFibGVQcm9qZWN0U2V0dGluZ3MuZ2V0U2VsZWN0aW9uKCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJaWYgKF9kZWJ1Z1ByZWZlcmVuY2VzKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihnZXRDbGFzcygpLmdldE5hbWUoKSArICIgcmVtb3ZpbmcgIiArIFRhc2tUYWdQcmVmZXJlbmNlS2V5cy5UQVNLX1RBR19QRVJfUFJPSkVDVCArICIgZnJvbSBzY29wZSAiICsgcHJlZmVyZW5jZVNjb3Blc1swXS5nZXROYW1lKCkgKyAiOiIgKyBwcmVmZXJlbmNlU2NvcGVzWzBdLmdldExvY2F0aW9uKCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJCAKLQkJCQl9Ci0JCQkJcHJlZmVyZW5jZVNjb3Blc1swXS5nZXROb2RlKGdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyKCkpLnJlbW92ZShnZXRQcm9qZWN0U2V0dGluZ3NLZXkoKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG9rOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7Ci0JCWlmKGdldFByb2plY3QoKSAhPSBudWxsICYmIEVuYWJsZVByb2plY3RTZXR0aW5ncyAhPSBudWxsKSB7Ci0JCQlFbmFibGVQcm9qZWN0U2V0dGluZ3Muc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJCWVuYWJsZVByZWZlcmVuY2VDb250ZW50KGZhbHNlKTsKLQkJfQotCQlzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlTGlua0VuYWJsZW1lbnQoKSB7Ci0JCWlmIChEYXRhICE9IG51bGwgJiYgUHJvamVjdFNldHRpbmdzTGluayAhPSBudWxsKSB7Ci0JCQlQcm9qZWN0U2V0dGluZ3NMaW5rLnNldEVuYWJsZWQoIUJvb2xlYW4uVFJVRS5lcXVhbHMoRGF0YS5nZXQoRElTQUJMRV9MSU5LKSkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIENvbnRyb2xzIHRoZSBlbmFibGVtZW50IG9mIHRoZSBjb21tb24gY29udGVudCByZWdpb24KLQkgKiBvZiBhIHByb3BlcnR5IG9yIHByZWZlcmVuY2UgcGFnZQotCSAqIAotCSAqIEBwYXJhbSBlbmFibGUgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIGNvbW1vbiBjb250ZW50Ci0JICogYXJlYQotCSAqLwotCXByb3RlY3RlZCB2b2lkIGVuYWJsZVByZWZlcmVuY2VDb250ZW50KGJvb2xlYW4gZW5hYmxlKSB7Ci0JCWlmKGVuYWJsZSkgewotCQkJaWYoRW5hYmxlbWVudHMgIT0gbnVsbCkgewotCQkJCUVuYWJsZW1lbnRzLnJlc3RvcmUoKTsKLQkJCQlFbmFibGVtZW50cyA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZihFbmFibGVtZW50cyA9PSBudWxsKQotCQkJCUVuYWJsZW1lbnRzID0gQ29udHJvbEVuYWJsZVN0YXRlLmRpc2FibGUoQ29tbW9uKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjMjRmZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMudWkuU2Nyb2xsZWRQYWdlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLS8qKgotICogUHJlZmVyZW5jZSBwYWdlIGZvciBYU0wgdmFsaWRhdG9yIHByZWZlcmVuY2VzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAZGVwcmVjYXRlZCAgVGhpcyBoYXMgYmVlbiByZXBsYWNlZCBieSBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UKLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBBYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRVJST1JTID0gbmV3IFN0cmluZ1tdIHsgTWVzc2FnZXMuRXJyb3JMZXZlbFRleHQsIE1lc3NhZ2VzLldhcm5pbmdMZXZlbFRleHQsIE1lc3NhZ2VzLklnbm9yZUxldmVsVGV4dCB9OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIEVSUk9SX1ZBTFVFUyA9IG5ldyBpbnRbXSB7IElNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPIH07Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPEludGVnZXIsIEludGVnZXI+IEVSUk9SX01BUCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0JcHJpdmF0ZSBUZXh0IG1heEVycm9yc1RleHQ7Ci0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBDb21ibz4gY29tYm9zID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBDb21ibz4oKTsKLQotCXN0YXRpYwotCXsKLQkJRVJST1JfTUFQLnB1dChJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCAwKTsKLQkJRVJST1JfTUFQLnB1dChJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIDEpOwotCQlFUlJPUl9NQVAucHV0KElNYXJrZXIuU0VWRVJJVFlfSU5GTywgMik7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICovCi0JcHVibGljIFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZSgpCi0JewotCQlzdXBlcigpOwotCQkvLyBvbmx5IHVzZWQgd2hlbiBwYWdlIGlzIHNob3duIHByb2dyYW1hdGljYWxseQotCQlzZXRUaXRsZShNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2VUaXRsZSk7Ci0JCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZURlc2NyaXB0aW9uKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZUNvbW1vbkNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlHcmlkTGF5b3V0IGxheW91dD0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnM9IDI7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQ9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aD0gMDsKLQkJCi0JCWZpbmFsIFNjcm9sbGVkUGFnZUNvbnRlbnQgcGFnZUNvbnRlbnQgPSBuZXcgU2Nyb2xsZWRQYWdlQ29udGVudChwYXJlbnQpOwotCQlwYWdlQ29udGVudC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJcGFnZUNvbnRlbnQuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKLQkJcGFnZUNvbnRlbnQuc2V0RXhwYW5kVmVydGljYWwodHJ1ZSk7Ci0JCQotCQlDb21wb3NpdGUgYm9keSA9IHBhZ2VDb250ZW50LmdldEJvZHkoKTsKLQkJYm9keS5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQkvLyBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgSUhlbHBDb250ZXh0SWRzLlhNTF9QUkVGV0VCWF9GSUxFU19IRUxQSUQpOwotCi0JCWNyZWF0ZUxhYmVsKGJvZHksIE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTGFiZWwpOwotCQltYXhFcnJvcnNUZXh0ID0gY3JlYXRlVGV4dEZpZWxkKGJvZHkpOwotCQltYXhFcnJvcnNUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHRoaXMpOwotCi0JCUNvbXBvc2l0ZSB0d2lzdGllOwotCQkKLQkJdHdpc3RpZSA9IGNyZWF0ZVR3aXN0aWUoYm9keSxNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsLDIpOwkJCi0JCWNyZWF0ZUNvbWJvKHR3aXN0aWUsIE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlSW1wb3J0SW5jbHVkZUxhYmVsLCBWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19JTkNMVURFKTsKLQkJY3JlYXRlQ29tYm8odHdpc3RpZSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VDaXJjdWxhclJlZmVyZW5jZXNMYWJlbCwgVmFsaWRhdGlvblByZWZlcmVuY2VzLkNJUkNVTEFSX1JFRik7Ci0KLQkJdHdpc3RpZSA9IGNyZWF0ZVR3aXN0aWUoYm9keSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VOYW1lZFRlbXBsYXRlc0xhYmVsLCAyKTsJCQotCQljcmVhdGVDb21ibyh0d2lzdGllLCBNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVRlbXBsYXRlQ29uZmxpY3RzTGFiZWwsIFZhbGlkYXRpb25QcmVmZXJlbmNlcy5URU1QTEFURV9DT05GTElDVCk7Ci0JCWNyZWF0ZUNvbWJvKHR3aXN0aWUsIE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlRHVwbGljYXRlUGFyYW1ldGVyTGFiZWwsIFZhbGlkYXRpb25QcmVmZXJlbmNlcy5EVVBMSUNBVEVfUEFSQU1FVEVSKTsKLQkJY3JlYXRlQ29tYm8odHdpc3RpZSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW1ldGVyQXR0cmlidXRlTGFiZWwsIFZhbGlkYXRpb25QcmVmZXJlbmNlcy5OQU1FX0FUVFJJQlVURV9NSVNTSU5HKTsKLQkJY3JlYXRlQ29tYm8odHdpc3RpZSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbWV0ZXJFbXB0eUF0dHJpYnV0ZUxhYmVsLCBWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTkFNRV9BVFRSSUJVVEVfRU1QVFkpOwotCQkKLQkJdHdpc3RpZSA9IGNyZWF0ZVR3aXN0aWUoYm9keSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VDYWxsVGVtcGxhdGVzTGFiZWwsMik7CQkKLQkJY3JlYXRlQ29tYm8odHdpc3RpZSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVkVGVtcGxhdGVzTGFiZWwsIFZhbGlkYXRpb25QcmVmZXJlbmNlcy5DQUxMX1RFTVBMQVRFUyk7Ci0JCWNyZWF0ZUNvbWJvKHR3aXN0aWUsIE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtdGVyc0xhYmVsLCBWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19QQVJBTSk7Ci0JCWNyZWF0ZUNvbWJvKHR3aXN0aWUsIE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW10ZXJzV2l0aG91dFZhbHVlTGFiZWwsIFZhbGlkYXRpb25QcmVmZXJlbmNlcy5FTVBUWV9QQVJBTSk7Ci0KLQkJdHdpc3RpZSA9IGNyZWF0ZVR3aXN0aWUoYm9keSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aExhYmVsLCAyKTsKLQkJY3JlYXRlQ29tYm8odHdpc3RpZSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aFN5bnRheExhYmVsLCBWYWxpZGF0aW9uUHJlZmVyZW5jZXMuWFBBVEhTKTsKLQotCQlyZXR1cm4gcGFyZW50OwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb21ibyBjcmVhdGVDb21ibyhDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwsIFN0cmluZyBwcmVmS2V5KQotCXsKLQkJQ29tYm8gY29tYm8gPSBzdXBlci5jcmVhdGVDb21ibyhwYXJlbnQsIGxhYmVsLCBwcmVmS2V5KTsKLQkJY29tYm8uc2V0SXRlbXMoRVJST1JTKTsKLQkJY29tYm9zLnB1dChwcmVmS2V5LCBjb21ibyk7Ci0JCXJldHVybiBjb21ibzsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkKLQl7Ci0JCWludCBtYXhFcnJvcnMgPSBnZXRNb2RlbFByZWZlcmVuY2VzKCkuZ2V0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NQVhfRVJST1JTKTsKLQkJbWF4RXJyb3JzVGV4dC5zZXRUZXh0KFN0cmluZy52YWx1ZU9mKG1heEVycm9ycykpOwotCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIENvbWJvPiBlbnRyeSA6IGNvbWJvcy5lbnRyeVNldCgpKQotCQl7Ci0JCQlpbnQgdmFsID0gZ2V0TW9kZWxQcmVmZXJlbmNlcygpLmdldEludChlbnRyeS5nZXRLZXkoKSk7Ci0JCQllbnRyeS5nZXRWYWx1ZSgpLnNlbGVjdChFUlJPUl9NQVAuZ2V0KHZhbCkpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc3RvcmVWYWx1ZXMoKQotCXsKLQkJaW50IG1heEVycm9ycyA9IEludGVnZXIucGFyc2VJbnQobWF4RXJyb3JzVGV4dC5nZXRUZXh0KCkpOwotCQlnZXRNb2RlbFByZWZlcmVuY2VzKCkuc2V0VmFsdWUoVmFsaWRhdGlvblByZWZlcmVuY2VzLk1BWF9FUlJPUlMsIG1heEVycm9ycyk7Ci0JCWZvciAoTWFwLkVudHJ5PFN0cmluZywgQ29tYm8+IGVudHJ5IDogY29tYm9zLmVudHJ5U2V0KCkpCi0JCXsKLQkJCWludCBpbmRleCA9IGVudHJ5LmdldFZhbHVlKCkuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKLQkJCWdldE1vZGVsUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShlbnRyeS5nZXRLZXkoKSwgRVJST1JfVkFMVUVTW2luZGV4XSk7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVZhbHVlcygpCi0JewotCQlTdHJpbmcgZXJyb3JNZXNzYWdlID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCWludCBtYXhFcnJvcnMgPSBJbnRlZ2VyLnBhcnNlSW50KG1heEVycm9yc1RleHQuZ2V0VGV4dCgpKTsKLQkJCWlmIChtYXhFcnJvcnMgPCAwKQotCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTXNnRXJyb3I7Ci0JCX0KLQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc01zZ0Vycm9yOwotCQl9Ci0JCXNldEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwotCQlzZXRWYWxpZChlcnJvck1lc3NhZ2UgPT0gbnVsbCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkKLQl7Ci0JCWludCBtYXhFcnJvcnMgPSBnZXRNb2RlbFByZWZlcmVuY2VzKCkuZ2V0RGVmYXVsdEludChWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUFYX0VSUk9SUyk7Ci0JCW1heEVycm9yc1RleHQuc2V0VGV4dChTdHJpbmcudmFsdWVPZihtYXhFcnJvcnMpKTsKLQkJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBDb21ibz4gZW50cnkgOiBjb21ib3MuZW50cnlTZXQoKSkKLQkJewotCQkJaW50IGRlZiA9IGdldE1vZGVsUHJlZmVyZW5jZXMoKS5nZXREZWZhdWx0SW50KGVudHJ5LmdldEtleSgpKTsKLQkJCWVudHJ5LmdldFZhbHVlKCkuc2VsZWN0KEVSUk9SX01BUC5nZXQoZGVmKSk7Ci0JCX0KLQkJc3VwZXIucGVyZm9ybURlZmF1bHRzKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hTTFN5bnRheENvbG9yaW5nUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hTTFN5bnRheENvbG9yaW5nUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlMzA4NzI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YU0xTeW50YXhDb2xvcmluZ1BhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29sb3JTZWxlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyQ29tcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5hY2Nlc3NpYmlsaXR5LkFDQzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TYXNoRm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlUmFuZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGluazsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuUHJlZmVyZW5jZXNVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSU1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5PdmVybGF5UHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuT3ZlcmxheVByZWZlcmVuY2VTdG9yZS5PdmVybGF5S2V5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMudWkuQ29sb3JIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC51dGlsLkVkaXRvclV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLklTdHlsZUNvbnN0YW50c1hTTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmVkaXRvci5JSGVscENvbnRleHRJZHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQ29sbGF0b3I7Ci0KLS8qKgotICogQSBwcmVmZXJlbmNlIHBhZ2UgdG8gY29uZmlndXJlIG91ciBYU0wgc3ludGF4IGNvbG9yLiBJdCByZXNlbWJsZXMgdGhlIFhNTAotICogcGFnZXMuCi0gKiAKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTFN5bnRheENvbG9yaW5nUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMKLQkJSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTWU5UQVhDT0xPUklOR19YU0wgPSAic3ludGF4Y29sb3JpbmcueHNsIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0xGSUxFU19ESVIgPSAieHNsZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBCdXR0b24gYm9sZDsKLQlwcml2YXRlIExhYmVsIGZvcmVncm91bmRMYWJlbDsKLQlwcml2YXRlIExhYmVsIGJhY2tncm91bmRMYWJlbDsKLQlwcml2YXRlIEJ1dHRvbiBjbGVhclN0eWxlOwotCXByaXZhdGUgTWFwIGNvbnRleHRUb1hTTFN0eWxlTWFwOwotCXByaXZhdGUgQ29sb3IgZGVmYXVsdEZvcmVncm91bmQgPSBudWxsOwotCXByaXZhdGUgQ29sb3IgZGVmYXVsdEJhY2tncm91bmQgPSBudWxsOwotCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudDsKLQlwcml2YXRlIENvbG9yU2VsZWN0b3IgZm9yZWdyb3VuZENvbG9yRWRpdG9yOwotCXByaXZhdGUgQ29sb3JTZWxlY3RvciBiYWNrZ3JvdW5kQ29sb3JFZGl0b3I7Ci0JcHJpdmF0ZSBCdXR0b24gaXRhbGljOwotCXByaXZhdGUgT3ZlcmxheVByZWZlcmVuY2VTdG9yZSBvdmVybGF5U3RvcmU7Ci0JcHJpdmF0ZSBCdXR0b24gc3RyaWtlOwotCXByaXZhdGUgQ29sbGVjdGlvbjxTdHJpbmc+IHN0eWxlUHJlZmVyZW5jZUtleXM7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVmlld2VyIHN0eWxlc1ZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBNYXAgc3R5bGVUb0Rlc2NyaXB0aW9uTWFwOwotCXByaXZhdGUgU3R5bGVkVGV4dCBzdHlsZWRUZXh0OwotCXByaXZhdGUgQnV0dG9uIHVuZGVybGluZTsKLQotCS8vIGFjdGl2YXRlIGNvbnRyb2xzIGJhc2VkIG9uIHRoZSBnaXZlbiBsb2NhbCBjb2xvciB0eXBlCi0JcHJpdmF0ZSB2b2lkIGFjdGl2YXRlKFN0cmluZyBuYW1lZFN0eWxlKSB7Ci0JCUNvbG9yIGZvcmVncm91bmQgPSBkZWZhdWx0Rm9yZWdyb3VuZDsKLQkJQ29sb3IgYmFja2dyb3VuZCA9IGRlZmF1bHRCYWNrZ3JvdW5kOwotCQlpZiAobmFtZWRTdHlsZSA9PSBudWxsKSB7Ci0JCQljbGVhclN0eWxlLnNldEVuYWJsZWQoZmFsc2UpOwotCQkJYm9sZC5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCWl0YWxpYy5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCXN0cmlrZS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCXVuZGVybGluZS5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCWZvcmVncm91bmRMYWJlbC5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCWJhY2tncm91bmRMYWJlbC5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCWZvcmVncm91bmRDb2xvckVkaXRvci5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCWJhY2tncm91bmRDb2xvckVkaXRvci5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCWJvbGQuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJCWl0YWxpYy5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJc3RyaWtlLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQl1bmRlcmxpbmUuc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJfSBlbHNlIHsKLQkJCVRleHRBdHRyaWJ1dGUgYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlRm9yKG5hbWVkU3R5bGUpOwotCQkJY2xlYXJTdHlsZS5zZXRFbmFibGVkKHRydWUpOwotCQkJYm9sZC5zZXRFbmFibGVkKHRydWUpOwotCQkJaXRhbGljLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCQlzdHJpa2Uuc2V0RW5hYmxlZCh0cnVlKTsKLQkJCXVuZGVybGluZS5zZXRFbmFibGVkKHRydWUpOwotCQkJZm9yZWdyb3VuZExhYmVsLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCQliYWNrZ3JvdW5kTGFiZWwuc2V0RW5hYmxlZCh0cnVlKTsKLQkJCWZvcmVncm91bmRDb2xvckVkaXRvci5zZXRFbmFibGVkKHRydWUpOwotCQkJYmFja2dyb3VuZENvbG9yRWRpdG9yLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCQlib2xkLnNldFNlbGVjdGlvbigoYXR0cmlidXRlLmdldFN0eWxlKCkgJiBTV1QuQk9MRCkgIT0gMCk7Ci0JCQlpdGFsaWMuc2V0U2VsZWN0aW9uKChhdHRyaWJ1dGUuZ2V0U3R5bGUoKSAmIFNXVC5JVEFMSUMpICE9IDApOwotCQkJc3RyaWtlCi0JCQkJCS5zZXRTZWxlY3Rpb24oKGF0dHJpYnV0ZS5nZXRTdHlsZSgpICYgVGV4dEF0dHJpYnV0ZS5TVFJJS0VUSFJPVUdIKSAhPSAwKTsKLQkJCXVuZGVybGluZQotCQkJCQkuc2V0U2VsZWN0aW9uKChhdHRyaWJ1dGUuZ2V0U3R5bGUoKSAmIFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FKSAhPSAwKTsKLQkJCWlmIChhdHRyaWJ1dGUuZ2V0Rm9yZWdyb3VuZCgpICE9IG51bGwpIHsKLQkJCQlmb3JlZ3JvdW5kID0gYXR0cmlidXRlLmdldEZvcmVncm91bmQoKTsKLQkJCX0KLQkJCWlmIChhdHRyaWJ1dGUuZ2V0QmFja2dyb3VuZCgpICE9IG51bGwpIHsKLQkJCQliYWNrZ3JvdW5kID0gYXR0cmlidXRlLmdldEJhY2tncm91bmQoKTsKLQkJCX0KLQkJfQotCi0JCWZvcmVncm91bmRDb2xvckVkaXRvci5zZXRDb2xvclZhbHVlKGZvcmVncm91bmQuZ2V0UkdCKCkpOwotCQliYWNrZ3JvdW5kQ29sb3JFZGl0b3Iuc2V0Q29sb3JWYWx1ZShiYWNrZ3JvdW5kLmdldFJHQigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDb2xvciB0aGUgdGV4dCBpbiB0aGUgc2FtcGxlIGFyZWEgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHByZWZlcmVuY2VzCi0JICovCi0JcHVibGljIHZvaWQgYXBwbHlTdHlsZXMoKSB7Ci0JCWlmIChzdHlsZWRUZXh0ID09IG51bGwgfHwgc3R5bGVkVGV4dC5pc0Rpc3Bvc2VkKCkpCi0JCQlyZXR1cm47Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSBkb2N1bWVudAotCQkJCS5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCi0JCXdoaWxlIChkb2N1bWVudFJlZ2lvbiAhPSBudWxsKSB7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9ucyA9IGRvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnaW9ucy5zaXplKCk7IGkrKykgewotCQkJCUlUZXh0UmVnaW9uIGN1cnJlbnRSZWdpb24gPSByZWdpb25zLmdldChpKTsKLQkJCQkvLyBsb29rdXAgdGhlIGxvY2FsIGNvbG9yaW5nIHR5cGUgYW5kIGFwcGx5IGl0Ci0JCQkJLy8gVGhpcyBjb3VsZCBiZSBwb3RlbnRpYWxseSBleHBlbnNpdmUgYXMgd2UgZ2V0IHRoZSBtb2RlbCBhbmQKLQkJCQkvLyByZWFkIGl0IHByZXR0eSBjb25zaXN0ZW50bHkuCi0JCQkJU3RyaW5nIG5hbWVkU3R5bGUgPSBudWxsOwotCQkJCWlmIChjb250ZXh0VG9YU0xTdHlsZU1hcC5jb250YWluc0tleShjdXJyZW50UmVnaW9uLmdldFR5cGUoKSkpIHsKLQkJCQkJbmFtZWRTdHlsZSA9IChTdHJpbmcpIGNvbnRleHRUb1hTTFN0eWxlTWFwCi0JCQkJCQkJLmdldChjdXJyZW50UmVnaW9uLmdldFR5cGUoKSk7Ci0JCQkJCWlmIChuYW1lZFN0eWxlID09IG51bGwpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJVGV4dEF0dHJpYnV0ZSBhdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVGb3IobmFtZWRTdHlsZSk7Ci0JCQkJCWlmIChhdHRyaWJ1dGUgPT0gbnVsbCkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlTdHlsZVJhbmdlIHN0eWxlID0gbmV3IFN0eWxlUmFuZ2UoZG9jdW1lbnRSZWdpb24KLQkJCQkJCQkuZ2V0U3RhcnRPZmZzZXQoY3VycmVudFJlZ2lvbiksIGN1cnJlbnRSZWdpb24KLQkJCQkJCQkuZ2V0VGV4dExlbmd0aCgpLCBhdHRyaWJ1dGUuZ2V0Rm9yZWdyb3VuZCgpLAotCQkJCQkJCWF0dHJpYnV0ZS5nZXRCYWNrZ3JvdW5kKCksIGF0dHJpYnV0ZS5nZXRTdHlsZSgpKTsKLQkJCQkJc3R5bGUuc3RyaWtlb3V0ID0gKGF0dHJpYnV0ZS5nZXRTdHlsZSgpICYgVGV4dEF0dHJpYnV0ZS5TVFJJS0VUSFJPVUdIKSAhPSAwOwotCQkJCQlzdHlsZS51bmRlcmxpbmUgPSAoYXR0cmlidXRlLmdldFN0eWxlKCkgJiBUZXh0QXR0cmlidXRlLlVOREVSTElORSkgIT0gMDsKLQkJCQkJc3R5bGVkVGV4dC5zZXRTdHlsZVJhbmdlKHN0eWxlKTsKLQkJCQl9Ci0JCQl9Ci0JCQlkb2N1bWVudFJlZ2lvbiA9IGRvY3VtZW50UmVnaW9uLmdldE5leHQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBCdXR0b24gY3JlYXRlQ2hlY2tib3goQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsKSB7Ci0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLKTsKLQkJYnV0dG9uLnNldFRleHQobGFiZWwpOwotCQlidXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCBmYWxzZSkpOwotCQlyZXR1cm4gYnV0dG9uOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgY29tcG9zaXRlIGNvbnRyb2wgYW5kIHNldHMgdGhlIGRlZmF1bHQgbGF5b3V0IGRhdGEuCi0JICovCi0JcHJpdmF0ZSBDb21wb3NpdGUgY3JlYXRlQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQsIGludCBudW1Db2x1bW5zKSB7Ci0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5VTEwpOwotCi0JCS8vIEdyaWRMYXlvdXQKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IG51bUNvbHVtbnM7Ci0JCWxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBmYWxzZTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQkvLyBHcmlkRGF0YQotCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgZmFsc2UpOwotCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJcmV0dXJuIGNvbXBvc2l0ZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWluaXRpYWxpemVEaWFsb2dVbml0cyhwYXJlbnQpOwotCi0JCWRlZmF1bHRGb3JlZ3JvdW5kID0gcGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcigKLQkJCQlTV1QuQ09MT1JfTElTVF9GT1JFR1JPVU5EKTsKLQkJZGVmYXVsdEJhY2tncm91bmQgPSBwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAotCQkJCVNXVC5DT0xPUl9MSVNUX0JBQ0tHUk9VTkQpOwotCQlDb21wb3NpdGUgcGFnZUNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvc2l0ZShwYXJlbnQsIDIpOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhZ2VDb21wb25lbnQsCi0JCQkJSUhlbHBDb250ZXh0SWRzLlhNTF9QUkVGV0VCWF9TVFlMRVNfSEVMUElEKTsKLQotCQlMaW5rIGxpbmsgPSBuZXcgTGluayhwYWdlQ29tcG9uZW50LCBTV1QuV1JBUCk7Ci0JCWxpbmsuc2V0VGV4dChNZXNzYWdlcy5YU0xTeW50YXhDb2xvcmluZ1BhZ2UpOwotCQlsaW5rLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJUHJlZmVyZW5jZXNVdGlsLmNyZWF0ZVByZWZlcmVuY2VEaWFsb2dPbihwYXJlbnQuZ2V0U2hlbGwoKSwKLQkJCQkJCWUudGV4dCwgbnVsbCwgbnVsbCk7Ci0JCQl9Ci0JCX0pOwotCi0JCUdyaWREYXRhIGxpbmtEYXRhID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQkVHSU5OSU5HLCB0cnVlLCBmYWxzZSwKLQkJCQkyLCAxKTsKLQkJbGlua0RhdGEud2lkdGhIaW50ID0gMTUwOyAvLyBvbmx5IGV4cGFuZCBmdXJ0aGVyIGlmIGFueW9uZSBlbHNlIHJlcXVpcmVzCi0JCQkJCQkJCQkvLyBpdAotCQlsaW5rLnNldExheW91dERhdGEobGlua0RhdGEpOwotCi0JCW5ldyBMYWJlbChwYWdlQ29tcG9uZW50LCBTV1QuTk9ORSkuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7Ci0JCW5ldyBMYWJlbChwYWdlQ29tcG9uZW50LCBTV1QuTk9ORSkuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7Ci0KLQkJU2FzaEZvcm0gZWRpdG9yID0gbmV3IFNhc2hGb3JtKHBhZ2VDb21wb25lbnQsIFNXVC5WRVJUSUNBTCk7Ci0JCUdyaWREYXRhIGdyaWREYXRhMiA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQlncmlkRGF0YTIuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQllZGl0b3Iuc2V0TGF5b3V0RGF0YShncmlkRGF0YTIpOwotCQlTYXNoRm9ybSB0b3AgPSBuZXcgU2FzaEZvcm0oZWRpdG9yLCBTV1QuSE9SSVpPTlRBTCk7Ci0JCUNvbXBvc2l0ZSBzdHlsZUVkaXRvciA9IGNyZWF0ZUNvbXBvc2l0ZSh0b3AsIDEpOwotCQkoKEdyaWRMYXlvdXQpIHN0eWxlRWRpdG9yLmdldExheW91dCgpKS5tYXJnaW5SaWdodCA9IDU7Ci0JCSgoR3JpZExheW91dCkgc3R5bGVFZGl0b3IuZ2V0TGF5b3V0KCkpLm1hcmdpbkxlZnQgPSAwOwotCQljcmVhdGVMYWJlbChzdHlsZUVkaXRvciwgWE1MVUlNZXNzYWdlcy5TeW50YXhDb2xvcmluZ1BhZ2VfMCk7Ci0JCXN0eWxlc1ZpZXdlciA9IGNyZWF0ZVN0eWxlc1ZpZXdlcihzdHlsZUVkaXRvcik7Ci0JCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JCWdyaWREYXRhLmhvcml6b250YWxJbmRlbnQgPSAwOwotCQlJdGVyYXRvciBpdGVyYXRvciA9IHN0eWxlVG9EZXNjcmlwdGlvbk1hcC52YWx1ZXMoKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQlncmlkRGF0YS53aWR0aEhpbnQgPSBNYXRoLm1heChncmlkRGF0YS53aWR0aEhpbnQsCi0JCQkJCWNvbnZlcnRXaWR0aEluQ2hhcnNUb1BpeGVscyhpdGVyYXRvci5uZXh0KCkudG9TdHJpbmcoKQotCQkJCQkJCS5sZW5ndGgoKSkpOwotCQl9Ci0JCWdyaWREYXRhLmhlaWdodEhpbnQgPSBjb252ZXJ0SGVpZ2h0SW5DaGFyc1RvUGl4ZWxzKDUpOwotCQlzdHlsZXNWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldExheW91dERhdGEoZ3JpZERhdGEpOwotCi0JCUNvbXBvc2l0ZSBlZGl0aW5nQ29tcG9zaXRlID0gY3JlYXRlQ29tcG9zaXRlKHRvcCwgMSk7Ci0JCSgoR3JpZExheW91dCkgc3R5bGVFZGl0b3IuZ2V0TGF5b3V0KCkpLm1hcmdpbkxlZnQgPSA1OwotCQljcmVhdGVMYWJlbChlZGl0aW5nQ29tcG9zaXRlLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJQnV0dG9uIGVuYWJsZXIgPSBjcmVhdGVDaGVja2JveChlZGl0aW5nQ29tcG9zaXRlLAotCQkJCVhNTFVJTWVzc2FnZXMuU3ludGF4Q29sb3JpbmdQYWdlXzIpOwotCQllbmFibGVyLnNldEVuYWJsZWQoZmFsc2UpOwotCQllbmFibGVyLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJQ29tcG9zaXRlIGVkaXRDb250cm9scyA9IGNyZWF0ZUNvbXBvc2l0ZShlZGl0aW5nQ29tcG9zaXRlLCAyKTsKLQkJKChHcmlkTGF5b3V0KSBlZGl0Q29udHJvbHMuZ2V0TGF5b3V0KCkpLm1hcmdpbkxlZnQgPSAyMDsKLQotCQlmb3JlZ3JvdW5kTGFiZWwgPSBjcmVhdGVMYWJlbChlZGl0Q29udHJvbHMsCi0JCQkJU1NFVUlNZXNzYWdlcy5Gb3JlZ3JvdW5kX1VJXyk7Ci0JCSgoR3JpZERhdGEpIGZvcmVncm91bmRMYWJlbC5nZXRMYXlvdXREYXRhKCkpLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkNFTlRFUjsKLQkJZm9yZWdyb3VuZExhYmVsLnNldEVuYWJsZWQoZmFsc2UpOwotCi0JCWZvcmVncm91bmRDb2xvckVkaXRvciA9IG5ldyBDb2xvclNlbGVjdG9yKGVkaXRDb250cm9scyk7Ci0JCUJ1dHRvbiBmRm9yZWdyb3VuZENvbG9yID0gZm9yZWdyb3VuZENvbG9yRWRpdG9yLmdldEJ1dHRvbigpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuQkVHSU5OSU5HLCBTV1QuRklMTCwgZmFsc2UsIGZhbHNlKTsKLQkJZkZvcmVncm91bmRDb2xvci5zZXRMYXlvdXREYXRhKGdkKTsKLQkJZm9yZWdyb3VuZENvbG9yRWRpdG9yLnNldEVuYWJsZWQoZmFsc2UpOwotCi0JCWJhY2tncm91bmRMYWJlbCA9IGNyZWF0ZUxhYmVsKGVkaXRDb250cm9scywKLQkJCQlTU0VVSU1lc3NhZ2VzLkJhY2tncm91bmRfVUlfKTsKLQkJKChHcmlkRGF0YSkgYmFja2dyb3VuZExhYmVsLmdldExheW91dERhdGEoKSkudmVydGljYWxBbGlnbm1lbnQgPSBTV1QuQ0VOVEVSOwotCQliYWNrZ3JvdW5kTGFiZWwuc2V0RW5hYmxlZChmYWxzZSk7Ci0KLQkJYmFja2dyb3VuZENvbG9yRWRpdG9yID0gbmV3IENvbG9yU2VsZWN0b3IoZWRpdENvbnRyb2xzKTsKLQkJQnV0dG9uIGZCYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3JFZGl0b3IuZ2V0QnV0dG9uKCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5CRUdJTk5JTkcsIFNXVC5GSUxMLCBmYWxzZSwgZmFsc2UpOwotCQlmQmFja2dyb3VuZENvbG9yLnNldExheW91dERhdGEoZ2QpOwotCQliYWNrZ3JvdW5kQ29sb3JFZGl0b3Iuc2V0RW5hYmxlZChmYWxzZSk7Ci0KLQkJYm9sZCA9IGNyZWF0ZUNoZWNrYm94KGVkaXRDb250cm9scywgWE1MVUlNZXNzYWdlcy5TeW50YXhDb2xvcmluZ1BhZ2VfMyk7Ci0JCWJvbGQuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCSgoR3JpZERhdGEpIGJvbGQuZ2V0TGF5b3V0RGF0YSgpKS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCWl0YWxpYyA9IGNyZWF0ZUNoZWNrYm94KGVkaXRDb250cm9scywKLQkJCQlYTUxVSU1lc3NhZ2VzLlN5bnRheENvbG9yaW5nUGFnZV80KTsKLQkJaXRhbGljLnNldEVuYWJsZWQoZmFsc2UpOwotCQkoKEdyaWREYXRhKSBpdGFsaWMuZ2V0TGF5b3V0RGF0YSgpKS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXN0cmlrZSA9IGNyZWF0ZUNoZWNrYm94KGVkaXRDb250cm9scywKLQkJCQlYTUxVSU1lc3NhZ2VzLlN5bnRheENvbG9yaW5nUGFnZV81KTsKLQkJc3RyaWtlLnNldEVuYWJsZWQoZmFsc2UpOwotCQkoKEdyaWREYXRhKSBzdHJpa2UuZ2V0TGF5b3V0RGF0YSgpKS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXVuZGVybGluZSA9IGNyZWF0ZUNoZWNrYm94KGVkaXRDb250cm9scywKLQkJCQlYTUxVSU1lc3NhZ2VzLlN5bnRheENvbG9yaW5nUGFnZV82KTsKLQkJdW5kZXJsaW5lLnNldEVuYWJsZWQoZmFsc2UpOwotCQkoKEdyaWREYXRhKSB1bmRlcmxpbmUuZ2V0TGF5b3V0RGF0YSgpKS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCWNsZWFyU3R5bGUgPSBuZXcgQnV0dG9uKGVkaXRpbmdDb21wb3NpdGUsIFNXVC5QVVNIKTsKLQkJY2xlYXJTdHlsZS5zZXRUZXh0KFNTRVVJTWVzc2FnZXMuUmVzdG9yZV9EZWZhdWx0X1VJXyk7IC8vID0gIlJlc3RvcmUgRGVmYXVsdCIKLQkJY2xlYXJTdHlsZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuQkVHSU5OSU5HKSk7Ci0JCSgoR3JpZERhdGEpIGNsZWFyU3R5bGUuZ2V0TGF5b3V0RGF0YSgpKS5ob3Jpem9udGFsSW5kZW50ID0gMjA7Ci0JCWNsZWFyU3R5bGUuc2V0RW5hYmxlZChmYWxzZSk7Ci0KLQkJQ29tcG9zaXRlIHNhbXBsZUFyZWEgPSBjcmVhdGVDb21wb3NpdGUoZWRpdG9yLCAxKTsKLQotCQkoKEdyaWRMYXlvdXQpIHNhbXBsZUFyZWEuZ2V0TGF5b3V0KCkpLm1hcmdpbkxlZnQgPSA1OwotCQkoKEdyaWRMYXlvdXQpIHNhbXBsZUFyZWEuZ2V0TGF5b3V0KCkpLm1hcmdpblRvcCA9IDU7Ci0JCWNyZWF0ZUxhYmVsKHNhbXBsZUFyZWEsIFNTRVVJTWVzc2FnZXMuU2FtcGxlX3RleHRfX1VJXyk7IC8vID0gIiZTYW1wbGUgdGV4dDoiCi0JCVNvdXJjZVZpZXdlciB2aWV3ZXIgPSBuZXcgU291cmNlVmlld2VyKHNhbXBsZUFyZWEsIG51bGwsIFNXVC5CT1JERVIKLQkJCQl8IFNXVC5MRUZUX1RPX1JJR0hUIHwgU1dULk1VTFRJIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMCi0JCQkJfCBTV1QuUkVBRF9PTkxZKTsKLQkJc3R5bGVkVGV4dCA9IHZpZXdlci5nZXRUZXh0V2lkZ2V0KCk7Ci0JCUdyaWREYXRhIGdyaWREYXRhMyA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQlncmlkRGF0YTMud2lkdGhIaW50ID0gY29udmVydFdpZHRoSW5DaGFyc1RvUGl4ZWxzKDIwKTsKLQkJZ3JpZERhdGEzLmhlaWdodEhpbnQgPSBjb252ZXJ0SGVpZ2h0SW5DaGFyc1RvUGl4ZWxzKDUpOwotCQlncmlkRGF0YTMuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlzdHlsZWRUZXh0LnNldExheW91dERhdGEoZ3JpZERhdGEzKTsKLQkJc3R5bGVkVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7Ci0JCXN0eWxlZFRleHQuc2V0Rm9udChKRmFjZVJlc291cmNlcwotCQkJCS5nZXRGb250KCJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IikpOyAvLyROT04tTkxTLTEkCi0JCXN0eWxlZFRleHQuYWRkS2V5TGlzdGVuZXIoZ2V0VGV4dEtleUxpc3RlbmVyKCkpOwotCQlzdHlsZWRUZXh0LmFkZFNlbGVjdGlvbkxpc3RlbmVyKGdldFRleHRTZWxlY3Rpb25MaXN0ZW5lcigpKTsKLQkJc3R5bGVkVGV4dC5hZGRNb3VzZUxpc3RlbmVyKGdldFRleHRNb3VzZUxpc3RlbmVyKCkpOwotCQlzdHlsZWRUZXh0LmFkZFRyYXZlcnNlTGlzdGVuZXIoZ2V0VHJhdmVyc2VMaXN0ZW5lcigpKTsKLQkJc2V0QWNjZXNzaWJsZShzdHlsZWRUZXh0LCBTU0VVSU1lc3NhZ2VzLlNhbXBsZV90ZXh0X19VSV8pOwotCi0JCXRyeSB7Ci0JCQlGaWxlIGZpbGUgPSBYU0xVSVBsdWdpbi5tYWtlRmlsZUZvcihYU0xTeW50YXhDb2xvcmluZ1BhZ2UuWFNMRklMRVNfRElSLAotCQkJCQlYU0xTeW50YXhDb2xvcmluZ1BhZ2UuU1lOVEFYQ09MT1JJTkdfWFNMKTsKLQkJCWRvY3VtZW50ID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKQotCQkJCQkuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksCi0JCQkJCQkJbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKSwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJWFNMVUlQbHVnaW4ubG9nKGV4KTsKLQkJfQotCQkKLQkJdmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQl0b3Auc2V0V2VpZ2h0cyhuZXcgaW50W10geyAxLCAxIH0pOwotCQllZGl0b3Iuc2V0V2VpZ2h0cyhuZXcgaW50W10geyAxLCAxIH0pOwotCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhZ2VDb21wb25lbnQsCi0JCQkJSUhlbHBDb250ZXh0SWRzLlhNTF9QUkVGV0VCWF9TVFlMRVNfSEVMUElEKTsKLQotCQlzdHlsZXNWaWV3ZXIuc2V0SW5wdXQoZ2V0U3R5bGVQcmVmZXJlbmNlS2V5cygpKTsKLQotCQlhcHBseVN0eWxlcygpOwotCi0JCXN0eWxlc1ZpZXdlcgotCQkJCS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSkgewotCQkJCQkJCU9iamVjdCBvID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQKLQkJCQkJCQkJCS5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJCQkJU3RyaW5nIG5hbWVkU3R5bGUgPSBvLnRvU3RyaW5nKCk7Ci0JCQkJCQkJYWN0aXZhdGUobmFtZWRTdHlsZSk7Ci0JCQkJCQkJaWYgKG5hbWVkU3R5bGUgPT0gbnVsbCkKLQkJCQkJCQkJcmV0dXJuOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSk7Ci0KLQkJZm9yZWdyb3VuZENvbG9yRWRpdG9yLmFkZExpc3RlbmVyKG5ldyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZXZlbnQuZ2V0UHJvcGVydHkoKS5lcXVhbHMoQ29sb3JTZWxlY3Rvci5QUk9QX0NPTE9SQ0hBTkdFKSkgewotCQkJCQlPYmplY3QgbyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHN0eWxlc1ZpZXdlcgotCQkJCQkJCS5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJCVN0cmluZyBuYW1lZFN0eWxlID0gby50b1N0cmluZygpOwotCQkJCQlTdHJpbmcgcHJlZlN0cmluZyA9IGdldE92ZXJsYXlTdG9yZSgpLmdldFN0cmluZyhuYW1lZFN0eWxlKTsKLQkJCQkJU3RyaW5nW10gc3R5bGVQcmVmcyA9IENvbG9ySGVscGVyCi0JCQkJCQkJLnVucGFja1N0eWxlUHJlZmVyZW5jZXMocHJlZlN0cmluZyk7Ci0JCQkJCWlmIChzdHlsZVByZWZzICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBvbGRWYWx1ZSA9IHN0eWxlUHJlZnNbMF07Ci0JCQkJCQkvLyBvcGVuIGNvbG9yIGRpYWxvZyB0byBnZXQgbmV3IGNvbG9yCi0JCQkJCQlTdHJpbmcgbmV3VmFsdWUgPSBDb2xvckhlbHBlcgotCQkJCQkJCQkudG9SR0JTdHJpbmcoZm9yZWdyb3VuZENvbG9yRWRpdG9yCi0JCQkJCQkJCQkJLmdldENvbG9yVmFsdWUoKSk7Ci0KLQkJCQkJCWlmICghbmV3VmFsdWUuZXF1YWxzKG9sZFZhbHVlKSkgewotCQkJCQkJCXN0eWxlUHJlZnNbMF0gPSBuZXdWYWx1ZTsKLQkJCQkJCQlTdHJpbmcgbmV3UHJlZlN0cmluZyA9IENvbG9ySGVscGVyCi0JCQkJCQkJCQkucGFja1N0eWxlUHJlZmVyZW5jZXMoc3R5bGVQcmVmcyk7Ci0JCQkJCQkJZ2V0T3ZlcmxheVN0b3JlKCkuc2V0VmFsdWUobmFtZWRTdHlsZSwKLQkJCQkJCQkJCW5ld1ByZWZTdHJpbmcpOwotCQkJCQkJCWFwcGx5U3R5bGVzKCk7Ci0JCQkJCQkJc3R5bGVkVGV4dC5yZWRyYXcoKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0KLQkJYmFja2dyb3VuZENvbG9yRWRpdG9yLmFkZExpc3RlbmVyKG5ldyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZXZlbnQuZ2V0UHJvcGVydHkoKS5lcXVhbHMoQ29sb3JTZWxlY3Rvci5QUk9QX0NPTE9SQ0hBTkdFKSkgewotCQkJCQlPYmplY3QgbyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHN0eWxlc1ZpZXdlcgotCQkJCQkJCS5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJCVN0cmluZyBuYW1lZFN0eWxlID0gby50b1N0cmluZygpOwotCQkJCQlTdHJpbmcgcHJlZlN0cmluZyA9IGdldE92ZXJsYXlTdG9yZSgpLmdldFN0cmluZyhuYW1lZFN0eWxlKTsKLQkJCQkJU3RyaW5nW10gc3R5bGVQcmVmcyA9IENvbG9ySGVscGVyCi0JCQkJCQkJLnVucGFja1N0eWxlUHJlZmVyZW5jZXMocHJlZlN0cmluZyk7Ci0JCQkJCWlmIChzdHlsZVByZWZzICE9IG51bGwpIHsKLQkJCQkJCVN0cmluZyBvbGRWYWx1ZSA9IHN0eWxlUHJlZnNbMV07Ci0JCQkJCQkvLyBvcGVuIGNvbG9yIGRpYWxvZyB0byBnZXQgbmV3IGNvbG9yCi0JCQkJCQlTdHJpbmcgbmV3VmFsdWUgPSBDb2xvckhlbHBlcgotCQkJCQkJCQkudG9SR0JTdHJpbmcoYmFja2dyb3VuZENvbG9yRWRpdG9yCi0JCQkJCQkJCQkJLmdldENvbG9yVmFsdWUoKSk7Ci0KLQkJCQkJCWlmICghbmV3VmFsdWUuZXF1YWxzKG9sZFZhbHVlKSkgewotCQkJCQkJCXN0eWxlUHJlZnNbMV0gPSBuZXdWYWx1ZTsKLQkJCQkJCQlTdHJpbmcgbmV3UHJlZlN0cmluZyA9IENvbG9ySGVscGVyCi0JCQkJCQkJCQkucGFja1N0eWxlUHJlZmVyZW5jZXMoc3R5bGVQcmVmcyk7Ci0JCQkJCQkJZ2V0T3ZlcmxheVN0b3JlKCkuc2V0VmFsdWUobmFtZWRTdHlsZSwKLQkJCQkJCQkJCW5ld1ByZWZTdHJpbmcpOwotCQkJCQkJCWFwcGx5U3R5bGVzKCk7Ci0JCQkJCQkJc3R5bGVkVGV4dC5yZWRyYXcoKTsKLQkJCQkJCQlhY3RpdmF0ZShuYW1lZFN0eWxlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0KLQkJYm9sZC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXN1cGVyLndpZGdldFNlbGVjdGVkKGUpOwotCQkJCS8vIGdldCBjdXJyZW50IChuZXdseSBvbGQpIHN0eWxlCi0JCQkJT2JqZWN0IG8gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzdHlsZXNWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpCi0JCQkJCQkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJU3RyaW5nIG5hbWVkU3R5bGUgPSBvLnRvU3RyaW5nKCk7Ci0JCQkJU3RyaW5nIHByZWZTdHJpbmcgPSBnZXRPdmVybGF5U3RvcmUoKS5nZXRTdHJpbmcobmFtZWRTdHlsZSk7Ci0JCQkJU3RyaW5nW10gc3R5bGVQcmVmcyA9IENvbG9ySGVscGVyCi0JCQkJCQkudW5wYWNrU3R5bGVQcmVmZXJlbmNlcyhwcmVmU3RyaW5nKTsKLQkJCQlpZiAoc3R5bGVQcmVmcyAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBvbGRWYWx1ZSA9IHN0eWxlUHJlZnNbMl07Ci0JCQkJCVN0cmluZyBuZXdWYWx1ZSA9IFN0cmluZy52YWx1ZU9mKGJvbGQuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCQlpZiAoIW5ld1ZhbHVlLmVxdWFscyhvbGRWYWx1ZSkpIHsKLQkJCQkJCXN0eWxlUHJlZnNbMl0gPSBuZXdWYWx1ZTsKLQkJCQkJCVN0cmluZyBuZXdQcmVmU3RyaW5nID0gQ29sb3JIZWxwZXIKLQkJCQkJCQkJLnBhY2tTdHlsZVByZWZlcmVuY2VzKHN0eWxlUHJlZnMpOwotCQkJCQkJZ2V0T3ZlcmxheVN0b3JlKCkuc2V0VmFsdWUobmFtZWRTdHlsZSwgbmV3UHJlZlN0cmluZyk7Ci0JCQkJCQlhcHBseVN0eWxlcygpOwotCQkJCQkJc3R5bGVkVGV4dC5yZWRyYXcoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0KLQkJaXRhbGljLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJc3VwZXIud2lkZ2V0U2VsZWN0ZWQoZSk7Ci0JCQkJLy8gZ2V0IGN1cnJlbnQgKG5ld2x5IG9sZCkgc3R5bGUKLQkJCQlPYmplY3QgbyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHN0eWxlc1ZpZXdlci5nZXRTZWxlY3Rpb24oKSkKLQkJCQkJCS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlTdHJpbmcgbmFtZWRTdHlsZSA9IG8udG9TdHJpbmcoKTsKLQkJCQlTdHJpbmcgcHJlZlN0cmluZyA9IGdldE92ZXJsYXlTdG9yZSgpLmdldFN0cmluZyhuYW1lZFN0eWxlKTsKLQkJCQlTdHJpbmdbXSBzdHlsZVByZWZzID0gQ29sb3JIZWxwZXIKLQkJCQkJCS51bnBhY2tTdHlsZVByZWZlcmVuY2VzKHByZWZTdHJpbmcpOwotCQkJCWlmIChzdHlsZVByZWZzICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIG9sZFZhbHVlID0gc3R5bGVQcmVmc1szXTsKLQkJCQkJU3RyaW5nIG5ld1ZhbHVlID0gU3RyaW5nLnZhbHVlT2YoaXRhbGljLmdldFNlbGVjdGlvbigpKTsKLQkJCQkJaWYgKCFuZXdWYWx1ZS5lcXVhbHMob2xkVmFsdWUpKSB7Ci0JCQkJCQlzdHlsZVByZWZzWzNdID0gbmV3VmFsdWU7Ci0JCQkJCQlTdHJpbmcgbmV3UHJlZlN0cmluZyA9IENvbG9ySGVscGVyCi0JCQkJCQkJCS5wYWNrU3R5bGVQcmVmZXJlbmNlcyhzdHlsZVByZWZzKTsKLQkJCQkJCWdldE92ZXJsYXlTdG9yZSgpLnNldFZhbHVlKG5hbWVkU3R5bGUsIG5ld1ByZWZTdHJpbmcpOwotCQkJCQkJYXBwbHlTdHlsZXMoKTsKLQkJCQkJCXN0eWxlZFRleHQucmVkcmF3KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCXN0cmlrZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXN1cGVyLndpZGdldFNlbGVjdGVkKGUpOwotCQkJCS8vIGdldCBjdXJyZW50IChuZXdseSBvbGQpIHN0eWxlCi0JCQkJT2JqZWN0IG8gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzdHlsZXNWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpCi0JCQkJCQkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJU3RyaW5nIG5hbWVkU3R5bGUgPSBvLnRvU3RyaW5nKCk7Ci0JCQkJU3RyaW5nIHByZWZTdHJpbmcgPSBnZXRPdmVybGF5U3RvcmUoKS5nZXRTdHJpbmcobmFtZWRTdHlsZSk7Ci0JCQkJU3RyaW5nW10gc3R5bGVQcmVmcyA9IENvbG9ySGVscGVyCi0JCQkJCQkudW5wYWNrU3R5bGVQcmVmZXJlbmNlcyhwcmVmU3RyaW5nKTsKLQkJCQlpZiAoc3R5bGVQcmVmcyAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBvbGRWYWx1ZSA9IHN0eWxlUHJlZnNbNF07Ci0JCQkJCVN0cmluZyBuZXdWYWx1ZSA9IFN0cmluZy52YWx1ZU9mKHN0cmlrZS5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJCWlmICghbmV3VmFsdWUuZXF1YWxzKG9sZFZhbHVlKSkgewotCQkJCQkJc3R5bGVQcmVmc1s0XSA9IG5ld1ZhbHVlOwotCQkJCQkJU3RyaW5nIG5ld1ByZWZTdHJpbmcgPSBDb2xvckhlbHBlcgotCQkJCQkJCQkucGFja1N0eWxlUHJlZmVyZW5jZXMoc3R5bGVQcmVmcyk7Ci0JCQkJCQlnZXRPdmVybGF5U3RvcmUoKS5zZXRWYWx1ZShuYW1lZFN0eWxlLCBuZXdQcmVmU3RyaW5nKTsKLQkJCQkJCWFwcGx5U3R5bGVzKCk7Ci0JCQkJCQlzdHlsZWRUZXh0LnJlZHJhdygpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9KTsKLQotCQl1bmRlcmxpbmUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlzdXBlci53aWRnZXRTZWxlY3RlZChlKTsKLQkJCQkvLyBnZXQgY3VycmVudCAobmV3bHkgb2xkKSBzdHlsZQotCQkJCU9iamVjdCBvID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc3R5bGVzVmlld2VyLmdldFNlbGVjdGlvbigpKQotCQkJCQkJLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCVN0cmluZyBuYW1lZFN0eWxlID0gby50b1N0cmluZygpOwotCQkJCVN0cmluZyBwcmVmU3RyaW5nID0gZ2V0T3ZlcmxheVN0b3JlKCkuZ2V0U3RyaW5nKG5hbWVkU3R5bGUpOwotCQkJCVN0cmluZ1tdIHN0eWxlUHJlZnMgPSBDb2xvckhlbHBlcgotCQkJCQkJLnVucGFja1N0eWxlUHJlZmVyZW5jZXMocHJlZlN0cmluZyk7Ci0JCQkJaWYgKHN0eWxlUHJlZnMgIT0gbnVsbCkgewotCQkJCQlTdHJpbmcgb2xkVmFsdWUgPSBzdHlsZVByZWZzWzVdOwotCQkJCQlTdHJpbmcgbmV3VmFsdWUgPSBTdHJpbmcudmFsdWVPZih1bmRlcmxpbmUuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCQlpZiAoIW5ld1ZhbHVlLmVxdWFscyhvbGRWYWx1ZSkpIHsKLQkJCQkJCXN0eWxlUHJlZnNbNV0gPSBuZXdWYWx1ZTsKLQkJCQkJCVN0cmluZyBuZXdQcmVmU3RyaW5nID0gQ29sb3JIZWxwZXIKLQkJCQkJCQkJLnBhY2tTdHlsZVByZWZlcmVuY2VzKHN0eWxlUHJlZnMpOwotCQkJCQkJZ2V0T3ZlcmxheVN0b3JlKCkuc2V0VmFsdWUobmFtZWRTdHlsZSwgbmV3UHJlZlN0cmluZyk7Ci0JCQkJCQlhcHBseVN0eWxlcygpOwotCQkJCQkJc3R5bGVkVGV4dC5yZWRyYXcoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0KLQkJY2xlYXJTdHlsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWlmIChzdHlsZXNWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKQotCQkJCQlyZXR1cm47Ci0JCQkJU3RyaW5nIG5hbWVkU3R5bGUgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzdHlsZXNWaWV3ZXIKLQkJCQkJCS5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCQlnZXRPdmVybGF5U3RvcmUoKS5zZXRUb0RlZmF1bHQobmFtZWRTdHlsZSk7Ci0JCQkJYXBwbHlTdHlsZXMoKTsKLQkJCQlzdHlsZWRUZXh0LnJlZHJhdygpOwotCQkJCWFjdGl2YXRlKG5hbWVkU3R5bGUpOwotCQkJfQotCQl9KTsKLQotCQlyZXR1cm4gcGFnZUNvbXBvbmVudDsKLQl9Ci0KLQlwcml2YXRlIExhYmVsIGNyZWF0ZUxhYmVsKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0ZXh0KSB7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULldSQVApOwotCQlsYWJlbC5zZXRUZXh0KHRleHQpOwotCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgZmFsc2UsIGZhbHNlKTsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJbGFiZWwuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0QmFja2dyb3VuZCgpKTsKLQkJcmV0dXJuIGxhYmVsOwotCX0KLQotCS8vIHByb3RlY3RlZCBMYWJlbCBjcmVhdGVEZXNjcmlwdGlvbkxhYmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkvLyByZXR1cm4gbnVsbDsKLQkvLyB9Ci0KLQkvKioKLQkgKiBTZXQgdXAgYWxsIHRoZSBzdHlsZSBwcmVmZXJlbmNlIGtleXMgaW4gdGhlIG92ZXJsYXkgc3RvcmUKLQkgKi8KLQlwcml2YXRlIE92ZXJsYXlLZXlbXSBjcmVhdGVPdmVybGF5U3RvcmVLZXlzKCkgewotCQlMaXN0IG92ZXJsYXlLZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCUl0ZXJhdG9yIGkgPSBnZXRTdHlsZVByZWZlcmVuY2VLZXlzKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlvdmVybGF5S2V5cy5hZGQobmV3IE92ZXJsYXlQcmVmZXJlbmNlU3RvcmUuT3ZlcmxheUtleSgKLQkJCQkJT3ZlcmxheVByZWZlcmVuY2VTdG9yZS5TVFJJTkcsIChTdHJpbmcpIGkubmV4dCgpKSk7Ci0JCX0KLQotCQlPdmVybGF5UHJlZmVyZW5jZVN0b3JlLk92ZXJsYXlLZXlbXSBrZXlzID0gbmV3IE92ZXJsYXlQcmVmZXJlbmNlU3RvcmUuT3ZlcmxheUtleVtvdmVybGF5S2V5cwotCQkJCS5zaXplKCldOwotCQlvdmVybGF5S2V5cy50b0FycmF5KGtleXMpOwotCQlyZXR1cm4ga2V5czsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIHRoZSBMaXN0IHZpZXdlciB3aGVyZSB3ZSBzZWUgdGhlIHZhcmlvdXMgc3ludGF4IGVsZW1lbnQgZGlzcGxheQotCSAqIG5hbWVzLS13b3VsZCBpdCBldmVyIGJlIGEgVHJlZSBsaWtlIEpEVCdzPwotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVmlld2VyIGNyZWF0ZVN0eWxlc1ZpZXdlcihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCVN0cnVjdHVyZWRWaWV3ZXIgc3R5bGVzVmlld2VyID0gbmV3IExpc3RWaWV3ZXIocGFyZW50LCBTV1QuU0lOR0xFCi0JCQkJfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuQk9SREVSKTsKLQkJc3R5bGVzVmlld2VyCi0JCQkJLnNldENvbXBhcmF0b3IobmV3IFZpZXdlckNvbXBhcmF0b3IoQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKSkpOwotCQlzdHlsZXNWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgTGFiZWxQcm92aWRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJT2JqZWN0IGRlc2NyaXB0aW9uID0gc3R5bGVUb0Rlc2NyaXB0aW9uTWFwLmdldChlbGVtZW50KTsKLQkJCQlpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkKLQkJCQkJcmV0dXJuIGRlc2NyaXB0aW9uLnRvU3RyaW5nKCk7Ci0JCQkJcmV0dXJuIHN1cGVyLmdldFRleHQoZWxlbWVudCk7Ci0JCQl9Ci0JCX0pOwotCQlzdHlsZXNWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJVHJlZUNvbnRlbnRQcm92aWRlcigpIHsKLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkgewotCQkJCXJldHVybiBnZXRTdHlsZVByZWZlcmVuY2VLZXlzKCkudG9BcnJheSgpOwotCQkJfQotCi0JCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkgewotCQkJCXJldHVybiBnZXRDaGlsZHJlbihpbnB1dEVsZW1lbnQpOwotCQkJfQotCi0JCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgZWxlbWVudCkgewotCQkJCXJldHVybiBnZXRTdHlsZVByZWZlcmVuY2VLZXlzKCk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LAotCQkJCQlPYmplY3QgbmV3SW5wdXQpIHsKLQkJCX0KLQkJfSk7Ci0JCXJldHVybiBzdHlsZXNWaWV3ZXI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJaWYgKG92ZXJsYXlTdG9yZSAhPSBudWxsKSB7Ci0JCQlvdmVybGF5U3RvcmUuc3RvcCgpOwotCQl9Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSVByZWZlcmVuY2VTdG9yZSBkb0dldFByZWZlcmVuY2VTdG9yZSgpIHsKLQkJcmV0dXJuIFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQl9Ci0KLQlwcml2YXRlIFRleHRBdHRyaWJ1dGUgZ2V0QXR0cmlidXRlRm9yKFN0cmluZyBuYW1lZFN0eWxlKSB7Ci0JCVRleHRBdHRyaWJ1dGUgdGEgPSBuZXcgVGV4dEF0dHJpYnV0ZShkZWZhdWx0Rm9yZWdyb3VuZCwKLQkJCQlkZWZhdWx0QmFja2dyb3VuZCwgU1dULk5PUk1BTCk7Ci0KLQkJaWYgKG5hbWVkU3R5bGUgIT0gbnVsbCAmJiBvdmVybGF5U3RvcmUgIT0gbnVsbCkgewotCQkJLy8gbm90ZTogIm5hbWVkU3R5bGUiICppcyogdGhlIHByZWZlcmVuY2Uga2V5Ci0JCQlTdHJpbmcgcHJlZlN0cmluZyA9IGdldE92ZXJsYXlTdG9yZSgpLmdldFN0cmluZyhuYW1lZFN0eWxlKTsKLQkJCVN0cmluZ1tdIHN0eWxlUHJlZnMgPSBDb2xvckhlbHBlcgotCQkJCQkudW5wYWNrU3R5bGVQcmVmZXJlbmNlcyhwcmVmU3RyaW5nKTsKLQkJCWlmIChzdHlsZVByZWZzICE9IG51bGwpIHsKLQkJCQlSR0IgZm9yZWdyb3VuZCA9IENvbG9ySGVscGVyLnRvUkdCKHN0eWxlUHJlZnNbMF0pOwotCQkJCVJHQiBiYWNrZ3JvdW5kID0gQ29sb3JIZWxwZXIudG9SR0Ioc3R5bGVQcmVmc1sxXSk7Ci0KLQkJCQlpbnQgZm9udE1vZGlmaWVyID0gU1dULk5PUk1BTDsKLQotCQkJCWlmIChzdHlsZVByZWZzLmxlbmd0aCA+IDIpIHsKLQkJCQkJYm9vbGVhbiBvbiA9IEJvb2xlYW4udmFsdWVPZihzdHlsZVByZWZzWzJdKS5ib29sZWFuVmFsdWUoKTsKLQkJCQkJaWYgKG9uKQotCQkJCQkJZm9udE1vZGlmaWVyID0gZm9udE1vZGlmaWVyIHwgU1dULkJPTEQ7Ci0JCQkJfQotCQkJCWlmIChzdHlsZVByZWZzLmxlbmd0aCA+IDMpIHsKLQkJCQkJYm9vbGVhbiBvbiA9IEJvb2xlYW4udmFsdWVPZihzdHlsZVByZWZzWzNdKS5ib29sZWFuVmFsdWUoKTsKLQkJCQkJaWYgKG9uKQotCQkJCQkJZm9udE1vZGlmaWVyID0gZm9udE1vZGlmaWVyIHwgU1dULklUQUxJQzsKLQkJCQl9Ci0JCQkJaWYgKHN0eWxlUHJlZnMubGVuZ3RoID4gNCkgewotCQkJCQlib29sZWFuIG9uID0gQm9vbGVhbi52YWx1ZU9mKHN0eWxlUHJlZnNbNF0pLmJvb2xlYW5WYWx1ZSgpOwotCQkJCQlpZiAob24pCi0JCQkJCQlmb250TW9kaWZpZXIgPSBmb250TW9kaWZpZXIKLQkJCQkJCQkJfCBUZXh0QXR0cmlidXRlLlNUUklLRVRIUk9VR0g7Ci0JCQkJfQotCQkJCWlmIChzdHlsZVByZWZzLmxlbmd0aCA+IDUpIHsKLQkJCQkJYm9vbGVhbiBvbiA9IEJvb2xlYW4udmFsdWVPZihzdHlsZVByZWZzWzVdKS5ib29sZWFuVmFsdWUoKTsKLQkJCQkJaWYgKG9uKQotCQkJCQkJZm9udE1vZGlmaWVyID0gZm9udE1vZGlmaWVyIHwgVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkU7Ci0JCQkJfQotCi0JCQkJdGEgPSBuZXcgVGV4dEF0dHJpYnV0ZSgoZm9yZWdyb3VuZCAhPSBudWxsKSA/IEVkaXRvclV0aWxpdHkKLQkJCQkJCS5nZXRDb2xvcihmb3JlZ3JvdW5kKSA6IG51bGwsCi0JCQkJCQkoYmFja2dyb3VuZCAhPSBudWxsKSA/IEVkaXRvclV0aWxpdHkKLQkJCQkJCQkJLmdldENvbG9yKGJhY2tncm91bmQpIDogbnVsbCwgZm9udE1vZGlmaWVyKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdGE7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZWRTdHlsZUF0T2Zmc2V0KGludCBvZmZzZXQpIHsKLQkJLy8gZW5zdXJlIHRoZSBvZmZzZXQgaXMgY2xlYW4KLQkJaWYgKG9mZnNldCA+PSBkb2N1bWVudC5nZXRMZW5ndGgoKSkKLQkJCXJldHVybiBnZXROYW1lZFN0eWxlQXRPZmZzZXQoZG9jdW1lbnQuZ2V0TGVuZ3RoKCkgLSAxKTsKLQkJZWxzZSBpZiAob2Zmc2V0IDwgMCkKLQkJCXJldHVybiBnZXROYW1lZFN0eWxlQXRPZmZzZXQoMCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSBkb2N1bWVudAotCQkJCS5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQl3aGlsZSAoZG9jdW1lbnRSZWdpb24gIT0gbnVsbCAmJiAhZG9jdW1lbnRSZWdpb24uY29udGFpbnNPZmZzZXQob2Zmc2V0KSkgewotCQkJZG9jdW1lbnRSZWdpb24gPSBkb2N1bWVudFJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQkJaWYgKGRvY3VtZW50UmVnaW9uICE9IG51bGwpIHsKLQkJCS8vIGZpbmQgdGhlIElUZXh0UmVnaW9uJ3MgQ29udGV4dCBhdCB0aGlzIG9mZnNldAotCQkJSVRleHRSZWdpb24gaW50ZXJlc3QgPSBkb2N1bWVudFJlZ2lvbgotCQkJCQkuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQob2Zmc2V0KTsKLQkJCWlmIChpbnRlcmVzdCA9PSBudWxsKQotCQkJCXJldHVybiBudWxsOwotCQkJaWYgKG9mZnNldCA+IGRvY3VtZW50UmVnaW9uLmdldFRleHRFbmRPZmZzZXQoaW50ZXJlc3QpKQotCQkJCXJldHVybiBudWxsOwotCQkJU3RyaW5nIHJlZ2lvbkNvbnRleHQgPSBpbnRlcmVzdC5nZXRUeXBlKCk7Ci0JCQlpZiAocmVnaW9uQ29udGV4dCA9PSBudWxsKQotCQkJCXJldHVybiBudWxsOwotCQkJLy8gZmluZCB0aGUgbmFtZWQgc3R5bGUgKGludGVybmFsL3NlbGVjdGFibGUgbmFtZSkgZm9yIHRoYXQKLQkJCS8vIGNvbnRleHQKLQkJCVN0cmluZyBuYW1lZFN0eWxlID0gKFN0cmluZykgY29udGV4dFRvWFNMU3R5bGVNYXAuZ2V0KHJlZ2lvbkNvbnRleHQpOwotCQkJaWYgKG5hbWVkU3R5bGUgIT0gbnVsbCkgewotCQkJCXJldHVybiBuYW1lZFN0eWxlOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgT3ZlcmxheVByZWZlcmVuY2VTdG9yZSBnZXRPdmVybGF5U3RvcmUoKSB7Ci0JCXJldHVybiBvdmVybGF5U3RvcmU7Ci0JfQotCi0JcHJpdmF0ZSBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0U3R5bGVQcmVmZXJlbmNlS2V5cygpIHsKLQkJaWYgKHN0eWxlUHJlZmVyZW5jZUtleXMgPT0gbnVsbCkgewotCQkJTGlzdDxTdHJpbmc+IHN0eWxlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQkJc3R5bGVzLmFkZChJU3R5bGVDb25zdGFudHNYU0wuVEFHX0JPUkRFUik7Ci0JCQlzdHlsZXMuYWRkKElTdHlsZUNvbnN0YW50c1hTTC5UQUdfTkFNRSk7Ci0JCQlzdHlsZXMuYWRkKElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX05BTUUpOwotCQkJc3R5bGVzLmFkZChJU3R5bGVDb25zdGFudHNYU0wuVEFHX0FUVFJJQlVURV9WQUxVRSk7Ci0JCQlzdHlsZVByZWZlcmVuY2VLZXlzID0gc3R5bGVzOwotCQl9Ci0JCXJldHVybiBzdHlsZVByZWZlcmVuY2VLZXlzOwotCX0KLQotCXByaXZhdGUgS2V5TGlzdGVuZXIgZ2V0VGV4dEtleUxpc3RlbmVyKCkgewotCQlyZXR1cm4gbmV3IEtleUxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKSB7Ci0JCQkJaWYgKGUud2lkZ2V0IGluc3RhbmNlb2YgU3R5bGVkVGV4dCkgewotCQkJCQlpbnQgeCA9ICgoU3R5bGVkVGV4dCkgZS53aWRnZXQpLmdldENhcmV0T2Zmc2V0KCk7Ci0JCQkJCXNlbGVjdENvbG9yQXRPZmZzZXQoeCk7Ci0JCQkJfQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBrZXlSZWxlYXNlZChLZXlFdmVudCBlKSB7Ci0JCQkJaWYgKGUud2lkZ2V0IGluc3RhbmNlb2YgU3R5bGVkVGV4dCkgewotCQkJCQlpbnQgeCA9ICgoU3R5bGVkVGV4dCkgZS53aWRnZXQpLmdldENhcmV0T2Zmc2V0KCk7Ci0JCQkJCXNlbGVjdENvbG9yQXRPZmZzZXQoeCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgTW91c2VMaXN0ZW5lciBnZXRUZXh0TW91c2VMaXN0ZW5lcigpIHsKLQkJcmV0dXJuIG5ldyBNb3VzZUxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgbW91c2VEb3VibGVDbGljayhNb3VzZUV2ZW50IGUpIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgbW91c2VEb3duKE1vdXNlRXZlbnQgZSkgewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBtb3VzZVVwKE1vdXNlRXZlbnQgZSkgewotCQkJCWlmIChlLndpZGdldCBpbnN0YW5jZW9mIFN0eWxlZFRleHQpIHsKLQkJCQkJaW50IHggPSAoKFN0eWxlZFRleHQpIGUud2lkZ2V0KS5nZXRDYXJldE9mZnNldCgpOwotCQkJCQlzZWxlY3RDb2xvckF0T2Zmc2V0KHgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIFNlbGVjdGlvbkxpc3RlbmVyIGdldFRleHRTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJcmV0dXJuIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJc2VsZWN0Q29sb3JBdE9mZnNldChlLngpOwotCQkJCWlmIChlLndpZGdldCBpbnN0YW5jZW9mIFN0eWxlZFRleHQpIHsKLQkJCQkJKChTdHlsZWRUZXh0KSBlLndpZGdldCkuc2V0U2VsZWN0aW9uKGUueCk7Ci0JCQkJfQotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJc2VsZWN0Q29sb3JBdE9mZnNldChlLngpOwotCQkJCWlmIChlLndpZGdldCBpbnN0YW5jZW9mIFN0eWxlZFRleHQpIHsKLQkJCQkJKChTdHlsZWRUZXh0KSBlLndpZGdldCkuc2V0U2VsZWN0aW9uKGUueCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgVHJhdmVyc2VMaXN0ZW5lciBnZXRUcmF2ZXJzZUxpc3RlbmVyKCkgewotCQlyZXR1cm4gbmV3IFRyYXZlcnNlTGlzdGVuZXIoKSB7Ci0JCQkvKioKLQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5UcmF2ZXJzZUxpc3RlbmVyI2tleVRyYXZlcnNlZChUcmF2ZXJzZUV2ZW50KQotCQkJICovCi0JCQlwdWJsaWMgdm9pZCBrZXlUcmF2ZXJzZWQoVHJhdmVyc2VFdmVudCBlKSB7Ci0JCQkJaWYgKGUud2lkZ2V0IGluc3RhbmNlb2YgU3R5bGVkVGV4dCkgewotCQkJCQlpZiAoKGUuZGV0YWlsID09IFNXVC5UUkFWRVJTRV9UQUJfTkVYVCkKLQkJCQkJCQl8fCAoZS5kZXRhaWwgPT0gU1dULlRSQVZFUlNFX1RBQl9QUkVWSU9VUykpCi0JCQkJCQllLmRvaXQgPSB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKSB7Ci0JCXNldERlc2NyaXB0aW9uKFNTRVVJTWVzc2FnZXMuU3ludGF4Q29sb3JpbmdfRGVzY3JpcHRpb24pOwotCi0JCXN0eWxlVG9EZXNjcmlwdGlvbk1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JCWNvbnRleHRUb1hTTFN0eWxlTWFwID0gbmV3IEhhc2hNYXAoKTsKLQotCQlpbml0U3R5bGVUb0Rlc2NyaXB0aW9uTWFwKCk7Ci0JCWluaXRSZWdpb25Db250ZXh0VG9TdHlsZU1hcCgpOwotCi0JCW92ZXJsYXlTdG9yZSA9IG5ldyBPdmVybGF5UHJlZmVyZW5jZVN0b3JlKGdldFByZWZlcmVuY2VTdG9yZSgpLAotCQkJCWNyZWF0ZU92ZXJsYXlTdG9yZUtleXMoKSk7Ci0JCW92ZXJsYXlTdG9yZS5sb2FkKCk7Ci0JCW92ZXJsYXlTdG9yZS5zdGFydCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0UmVnaW9uQ29udGV4dFRvU3R5bGVNYXAoKSB7Ci0JCXhzbENvbnRleHRUb1N0eWxlTWFwKCk7Ci0JfQotCi0KLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIHZvaWQgeHNsQ29udGV4dFRvU3R5bGVNYXAoKSB7Ci0JCWNvbnRleHRUb1hTTFN0eWxlTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwKLQkJCQlJU3R5bGVDb25zdGFudHNYU0wuVEFHX0JPUkRFUik7Ci0JCWNvbnRleHRUb1hTTFN0eWxlTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sCi0JCQkJSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19CT1JERVIpOwotCQljb250ZXh0VG9YU0xTdHlsZU1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsCi0JCQkJSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19OQU1FKTsKLQkJY29udGV4dFRvWFNMU3R5bGVNYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwKLQkJCQlJU3R5bGVDb25zdGFudHNYU0wuVEFHX0FUVFJJQlVURV9OQU1FKTsKLQkJY29udGV4dFRvWFNMU3R5bGVNYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsCi0JCQkJSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19BVFRSSUJVVEVfVkFMVUUpOwotCQljb250ZXh0VG9YU0xTdHlsZU1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFLAotCQkJCUlTdHlsZUNvbnN0YW50c1hTTC5UQUdfQk9SREVSKTsKLQkJY29udGV4dFRvWFNMU3R5bGVNYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRSwKLQkJCQlJU3R5bGVDb25zdGFudHNYU0wuVEFHX0JPUkRFUik7Ci0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSB2b2lkIGluaXRTdHlsZVRvRGVzY3JpcHRpb25NYXAoKSB7Ci0JCXN0eWxlVG9EZXNjcmlwdGlvbk1hcC5wdXQoSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19CT1JERVIsCi0JCQkJWE1MVUlNZXNzYWdlcy5UYWdfRGVsaW1pdGVyc19VSV8pOwotCQlzdHlsZVRvRGVzY3JpcHRpb25NYXAucHV0KElTdHlsZUNvbnN0YW50c1hTTC5UQUdfTkFNRSwKLQkJCQlYTUxVSU1lc3NhZ2VzLlRhZ19OYW1lc19VSV8pOwotCQlzdHlsZVRvRGVzY3JpcHRpb25NYXAucHV0KElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX05BTUUsCi0JCQkJWE1MVUlNZXNzYWdlcy5BdHRyaWJ1dGVfTmFtZXNfVUlfKTsKLQkJc3R5bGVUb0Rlc2NyaXB0aW9uTWFwLnB1dChJU3R5bGVDb25zdGFudHNYU0wuVEFHX0FUVFJJQlVURV9WQUxVRSwKLQkJCQlYTUxVSU1lc3NhZ2VzLkF0dHJpYnV0ZV9WYWx1ZXNfVUlfKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7Ci0JCXN1cGVyLnBlcmZvcm1EZWZhdWx0cygpOwotCQlnZXRPdmVybGF5U3RvcmUoKS5sb2FkRGVmYXVsdHMoKTsKLQkJYXBwbHlTdHlsZXMoKTsKLQkJc3R5bGVzVmlld2VyLnNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKLQkJYWN0aXZhdGUobnVsbCk7Ci0JCXN0eWxlZFRleHQucmVkcmF3KCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkgewotCQlnZXRPdmVybGF5U3RvcmUoKS5wcm9wYWdhdGUoKTsKLQotCQlYU0xVSVBsdWdpbi5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCVNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNlbGVjdENvbG9yQXRPZmZzZXQoaW50IG9mZnNldCkgewotCQlTdHJpbmcgbmFtZWRTdHlsZSA9IGdldE5hbWVkU3R5bGVBdE9mZnNldChvZmZzZXQpOwotCQlpZiAobmFtZWRTdHlsZSAhPSBudWxsKSB7Ci0JCQlzdHlsZXNWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG5hbWVkU3R5bGUpKTsKLQkJCXN0eWxlc1ZpZXdlci5yZXZlYWwobmFtZWRTdHlsZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHlsZXNWaWV3ZXIuc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOwotCQl9Ci0JCWFjdGl2YXRlKG5hbWVkU3R5bGUpOwotCX0KLQotCS8qKgotCSAqIFNwZWNpZmljYWxseSBzZXQgdGhlIHJlcG9ydGluZyBuYW1lIG9mIGEgY29udHJvbCBmb3IgYWNjZXNzaWJpbGl0eQotCSAqLwotCXByaXZhdGUgdm9pZCBzZXRBY2Nlc3NpYmxlKENvbnRyb2wgY29udHJvbCwgU3RyaW5nIG5hbWUpIHsKLQkJaWYgKGNvbnRyb2wgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJZmluYWwgU3RyaW5nIG4gPSBuYW1lOwotCQljb250cm9sLmdldEFjY2Vzc2libGUoKS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIobmV3IEFjY2Vzc2libGVBZGFwdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBnZXROYW1lKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCQkJaWYgKGUuY2hpbGRJRCA9PSBBQ0MuQ0hJTERJRF9TRUxGKQotCQkJCQllLnJlc3VsdCA9IG47Ci0JCQl9Ci0JCX0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjA5ZDYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTM4NDkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxUZW1wbGF0ZVByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW47Ci0KLS8qKgotICogWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSBzZXRzIHVwIHRoZSB0ZW1wbGF0ZSBwcmVmZXJlbmNlIHBhZ2UgdGhhdAotICogY29udGFpbnMgdGhlIHRlbXBsYXRlcyBmb3IgeHBhdGgsIHhwYXRoIDIuMCwgYXhpcywgb3BlcmF0b3JzLCBhbmQgCi0gKiBleHNsdCBmdW5jdGlvbnMuIAotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlIGV4dGVuZHMgWE1MVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSgpIHsKLQkJc2V0UHJlZmVyZW5jZVN0b3JlKFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7Ci0JCXNldFRlbXBsYXRlU3RvcmUoWFNMVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFRlbXBsYXRlU3RvcmUoKSk7Ci0JCXNldENvbnRleHRUeXBlUmVnaXN0cnkoWFNMVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCkpOwotCX0KLQkKLQkvKioKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlUGFnZSNwZXJmb3JtT2soKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsKLQkJYm9vbGVhbiBvayA9IHN1cGVyLnBlcmZvcm1PaygpOwotCQlYU0xVSVBsdWdpbi5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXJldHVybiBvazsKLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1hTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvWFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2Y3NmIwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvWFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgQmVuamFtaW4gTXVza2FsbGEsIGIubXVza2FsbGFAZ214Lm5ldCAtIFsxNTg2NjBdIGNoYXJhY3RlciBlbnRpdGllcyBzaG91bGQgaGF2ZSB0aGVpciBvd24gc3ludGF4IGhpZ2hsaWdodGluZyBwcmVmZXJlbmNlIAotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkNvbG9yUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkNvbG9ySGVscGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLklTdHlsZUNvbnN0YW50c1hTTDsKLQotLyoqCi0gKiBTZXRzIGRlZmF1bHQgdmFsdWVzIGZvciBYU0wgVUkgcHJlZmVyZW5jZXMKLSAqLwotcHVibGljIGNsYXNzIFhTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIjaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJQ29sb3JSZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0VGhlbWVNYW5hZ2VyKCkuZ2V0Q3VycmVudFRoZW1lKCkuZ2V0Q29sb3JSZWdpc3RyeSgpOwotCi0KLQkJLy8gWFNMIFN0eWxlIFByZWZlcmVuY2VzCi0JCVN0cmluZyBCT0xEID0gIiB8IG51bGwgfCB0cnVlIjsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgSlVTVElUQUxJQyA9ICIgfCBudWxsIHwgZmFsc2UgfCB0cnVlIjsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgc3R5bGVWYWx1ZSA9IENvbG9ySGVscGVyLmZpbmRSR0JTdHJpbmcocmVnaXN0cnksIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX05BTUUsIDEyNywgMCwgMTI3KSArIEJPTEQ7Ci0JCXN0b3JlLnNldERlZmF1bHQoSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19BVFRSSUJVVEVfTkFNRSwgc3R5bGVWYWx1ZSk7Ci0KLQkJc3R5bGVWYWx1ZSA9IENvbG9ySGVscGVyLmZpbmRSR0JTdHJpbmcocmVnaXN0cnksIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX1ZBTFVFLCA0MiwgMCwgMjU1KSArIEpVU1RJVEFMSUM7Ci0JCXN0b3JlLnNldERlZmF1bHQoSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19BVFRSSUJVVEVfVkFMVUUsIHN0eWxlVmFsdWUpOwotCi0JCXN0eWxlVmFsdWUgPSBDb2xvckhlbHBlci5maW5kUkdCU3RyaW5nKHJlZ2lzdHJ5LCBJU3R5bGVDb25zdGFudHNYU0wuVEFHX0JPUkRFUiwgMCwgMTI4LCAxMjgpICsgQk9MRDsKLQkJc3RvcmUuc2V0RGVmYXVsdChJU3R5bGVDb25zdGFudHNYU0wuVEFHX0JPUkRFUiwgc3R5bGVWYWx1ZSk7Ci0KLQkJc3R5bGVWYWx1ZSA9IENvbG9ySGVscGVyLmZpbmRSR0JTdHJpbmcocmVnaXN0cnksIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfTkFNRSwgNjMsIDEyNywgMTI3KSArIEJPTEQ7Ci0JCXN0b3JlLnNldERlZmF1bHQoSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19OQU1FLCBzdHlsZVZhbHVlKTsKLQkJCi0JCXN0b3JlLnNldERlZmF1bHQoInhzbC51aS5oaWdobGlnaHRpbmcudGFnLmJvbGQiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAotCQlzdG9yZS5zZXREZWZhdWx0KCJ4c2wudWkuaGlnaGxpZ2h0aW5nLnRhZy5pdGFsaWMiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQkJc3RvcmUuc2V0RGVmYXVsdCgieHNsLnVpLmhpZ2hsaWdodGluZy50YWcuc3RyaWtldGhyb3VnaCIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotCQlzdG9yZS5zZXREZWZhdWx0KCJ4c2wudWkuaGlnaGxpZ2h0aW5nLnRhZy51bmRlcmxpbmUiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQkJc3RvcmUuc2V0RGVmYXVsdCgieHNsLnVpLmhpZ2hsaWdodGluZy50YWcuZW5hYmxlZCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0JCXN0b3JlLnNldERlZmF1bHQoInhzbC51aS5oaWdobGlnaHRpbmcudGFnLmNvbG9yIiwgIiNGRjAwRkYiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQotCQlzdG9yZS5zZXREZWZhdWx0KCJ4c2wudWkuaGlnaGxpZ2h0aW5nLmF0dHIuYm9sZCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0JCXN0b3JlLnNldERlZmF1bHQoInhzbC51aS5oaWdobGlnaHRpbmcuYXR0ci5pdGFsaWMiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQkJc3RvcmUuc2V0RGVmYXVsdCgieHNsLnVpLmhpZ2hsaWdodGluZy5hdHRyLnN0cmlrZXRocm91Z2giLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKLQkJc3RvcmUuc2V0RGVmYXVsdCgieHNsLnVpLmhpZ2hsaWdodGluZy5hdHRyLnVuZGVybGluZSIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotCQlzdG9yZS5zZXREZWZhdWx0KCJ4c2wudWkuaGlnaGxpZ2h0aW5nLmF0dHIuZW5hYmxlZCIsIHRydWUpOyAvLyROT04tTkxTLTEkCi0JCXN0b3JlLnNldERlZmF1bHQoInhzbC51aS5oaWdobGlnaHRpbmcuYXR0ci5jb2xvciIsICIjRkYwMEZGIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkYjhmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIC0gYnVnIDIzMDA3MiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBjb2RlIGZyb20KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VnIFNhdGNod2VsbCwgSmVzcGVyIE1vZWxsZXIsIGFuZCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MIFZhbGlkYXRpb24gUHJlZmVyZW5jZVBhZ2UuCi0gKiAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjk3NzE0IC0gVmFsdWVzIG5vdCBiZWluZyBsb2FkZWQgZnJvbSBwcmVmZXJlbmNlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuQmFja2luZ1N0b3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuRXhwYW5zaW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5mb3Jtcy5ldmVudHMuRXhwYW5zaW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5FeHBhbmRhYmxlQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMudWkuU2Nyb2xsZWRQYWdlQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5sYXlvdXQuUGl4ZWxDb252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBBYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UKLQkJaW1wbGVtZW50cyBNb2RpZnlMaXN0ZW5lciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMX1VJX1BST1BFUlRZX1BBR0VfUFJPSkVDVF9WQUxJREFUSU9OX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvcGVydHlQYWdlLnByb2plY3QudmFsaWRhdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMX1VJX1BSRUZFUkVOQ0VTX1ZBTElEQVRJT05fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcmVmZXJlbmNlcy5WYWxpZGF0aW9uIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVSUk9SUyA9IG5ldyBTdHJpbmdbXSB7Ci0JCQlNZXNzYWdlcy5FcnJvckxldmVsVGV4dCwgTWVzc2FnZXMuV2FybmluZ0xldmVsVGV4dCwKLQkJCU1lc3NhZ2VzLklnbm9yZUxldmVsVGV4dCB9OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIEVSUk9SX1ZBTFVFUyA9IG5ldyBpbnRbXSB7Ci0JCQlJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsCi0JCQlJTWFya2VyLlNFVkVSSVRZX0lORk8gfTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8SW50ZWdlciwgSW50ZWdlcj4gRVJST1JfTUFQID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7Ci0JcHJpdmF0ZSBUZXh0IG1heEVycm9yc1RleHQ7Ci0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBDb21ibz4gY29tYm9zID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPFN0cmluZywgQ29tYm8+KCk7Ci0JcHJpdmF0ZSBMaXN0PEV4cGFuZGFibGVDb21wb3NpdGU+IEV4cGFuZGFibGVzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PEV4cGFuZGFibGVDb21wb3NpdGU+KCk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVFRJTkdTX1NFQ1RJT05fTkFNRSA9ICJYU0xWYWxpZGF0aW9uU2V2ZXJpdGllcyI7Ly8kTk9OLU5MUy0xJAotCXByaXZhdGUgUGl4ZWxDb252ZXJ0ZXIgZlBpeGVsQ29udmVydGVyOwotCi0Jc3RhdGljIHsKLQkJRVJST1JfTUFQLnB1dChJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCAwKTsKLQkJRVJST1JfTUFQLnB1dChJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIDEpOwotCQlFUlJPUl9NQVAucHV0KElNYXJrZXIuU0VWRVJJVFlfSU5GTywgMik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29tbW9uQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotCQlmaW5hbCBDb21wb3NpdGUgcGFnZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7Ci0KLQkJLy8gR3JpZExheW91dAotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJcGFnZS5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQlmUGl4ZWxDb252ZXJ0ZXIgPSBuZXcgUGl4ZWxDb252ZXJ0ZXIocGFyZW50KTsKLQotCQlmaW5hbCBDb21wb3NpdGUgY29udGVudCA9IGNyZWF0ZVZhbGlkYXRpb25TZWN0aW9uKHBhZ2UpOwotCi0JCWxvYWRQcmVmZXJlbmNlcygpOwotCQlyZXN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyhnZXREaWFsb2dTZXR0aW5ncygpLmdldFNlY3Rpb24oCi0JCQkJU0VUVElOR1NfU0VDVElPTl9OQU1FKSk7Ci0KLQkJR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwgdHJ1ZSwKLQkJCQl0cnVlKTsKLQkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IGZQaXhlbENvbnZlcnRlci5jb252ZXJ0SGVpZ2h0SW5DaGFyc1RvUGl4ZWxzKDIwKTsKLQkJY29udGVudC5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKLQotCQlyZXR1cm4gcGFnZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVZhbGlkYXRpb25TZWN0aW9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCi0JCWZpbmFsIFNjcm9sbGVkUGFnZUNvbnRlbnQgcGFnZUNvbnRlbnQgPSBuZXcgU2Nyb2xsZWRQYWdlQ29udGVudChwYXJlbnQpOwotCQlwYWdlQ29udGVudC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJcGFnZUNvbnRlbnQuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKLQkJcGFnZUNvbnRlbnQuc2V0RXhwYW5kVmVydGljYWwodHJ1ZSk7Ci0KLQkJQ29tcG9zaXRlIGJvZHkgPSBwYWdlQ29udGVudC5nZXRCb2R5KCk7Ci0JCWJvZHkuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSwKLQkJCQkyLCAxKTsKLQkJZ2QuaG9yaXpvbnRhbEluZGVudCA9IDA7Ci0KLQkJY3JlYXRlTGFiZWwoYm9keSwgTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNMYWJlbCk7Ci0JCW1heEVycm9yc1RleHQgPSBjcmVhdGVUZXh0RmllbGQoYm9keSk7Ci0JCW1heEVycm9yc1RleHQuYWRkTW9kaWZ5TGlzdGVuZXIodGhpcyk7Ci0KLQkJTGFiZWwgZGVzY3JpcHRpb24gPSBuZXcgTGFiZWwoYm9keSwgU1dULk5PTkUpOwotCQlkZXNjcmlwdGlvbi5zZXRUZXh0KE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QYWdlU2V2ZXJpdHlMZXZlbCk7Ci0JCWRlc2NyaXB0aW9uLnNldEZvbnQocGFnZUNvbnRlbnQuZ2V0Rm9udCgpKTsKLQkJZGVzY3JpcHRpb24uc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJRXhwYW5kYWJsZUNvbXBvc2l0ZSB0d2lzdGllOwotCi0JCWludCBjb2x1bW5zID0gMzsKLQkJdHdpc3RpZSA9IGNyZWF0ZVR3aXN0aWUoYm9keSwKLQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsLCBjb2x1bW5zKTsKLQkJQ29tcG9zaXRlIGlubmVyID0gY3JlYXRlSW5uZXJDb21wb3NpdGUocGFyZW50LCB0d2lzdGllLCBjb2x1bW5zKTsKLQotCQlTdHJpbmcgbGFiZWwgPSBNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZUltcG9ydEluY2x1ZGVMYWJlbDsKLQkJY3JlYXRlQ29tYm8oaW5uZXIsIGxhYmVsLCBWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19JTkNMVURFKTsKLQotCQlpbm5lciA9IGNyZWF0ZUlubmVyQ29tcG9zaXRlKHBhcmVudCwgdHdpc3RpZSwgY29sdW1ucyk7Ci0JCWNyZWF0ZUNvbWJvKGlubmVyLCBsYWJlbCwgVmFsaWRhdGlvblByZWZlcmVuY2VzLk1JU1NJTkdfSU5DTFVERSk7Ci0JCWNyZWF0ZUNvbWJvKGlubmVyLAotCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2lyY3VsYXJSZWZlcmVuY2VzTGFiZWwsCi0JCQkJVmFsaWRhdGlvblByZWZlcmVuY2VzLkNJUkNVTEFSX1JFRik7Ci0KLQkJdHdpc3RpZSA9IGNyZWF0ZVR3aXN0aWUoYm9keSwKLQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU5hbWVkVGVtcGxhdGVzTGFiZWwsIGNvbHVtbnMpOwotCQlpbm5lciA9IGNyZWF0ZUlubmVyQ29tcG9zaXRlKHBhcmVudCwgdHdpc3RpZSwgY29sdW1ucyk7Ci0KLQkJY3JlYXRlQ29tYm8oaW5uZXIsCi0JCQkJTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VUZW1wbGF0ZUNvbmZsaWN0c0xhYmVsLAotCQkJCVZhbGlkYXRpb25QcmVmZXJlbmNlcy5URU1QTEFURV9DT05GTElDVCk7Ci0JCWNyZWF0ZUNvbWJvKGlubmVyLAotCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlRHVwbGljYXRlUGFyYW1ldGVyTGFiZWwsCi0JCQkJVmFsaWRhdGlvblByZWZlcmVuY2VzLkRVUExJQ0FURV9QQVJBTUVURVIpOwotCQljcmVhdGVDb21ibyhpbm5lciwKLQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsLAotCQkJCVZhbGlkYXRpb25QcmVmZXJlbmNlcy5OQU1FX0FUVFJJQlVURV9NSVNTSU5HKTsKLQkJY3JlYXRlQ29tYm8oaW5uZXIsCi0JCQkJTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW1ldGVyQXR0cmlidXRlTGFiZWwsCi0JCQkJVmFsaWRhdGlvblByZWZlcmVuY2VzLk5BTUVfQVRUUklCVVRFX0VNUFRZKTsKLQotCQl0d2lzdGllID0gY3JlYXRlVHdpc3RpZShib2R5LAotCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2FsbFRlbXBsYXRlc0xhYmVsLCBjb2x1bW5zKTsKLQkJaW5uZXIgPSBjcmVhdGVJbm5lckNvbXBvc2l0ZShwYXJlbnQsIHR3aXN0aWUsIGNvbHVtbnMpOwotCi0JCWNyZWF0ZUNvbWJvKGlubmVyLAotCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlZFRlbXBsYXRlc0xhYmVsLAotCQkJCVZhbGlkYXRpb25QcmVmZXJlbmNlcy5DQUxMX1RFTVBMQVRFUyk7Ci0JCWNyZWF0ZUNvbWJvKGlubmVyLAotCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtdGVyc0xhYmVsLAotCQkJCVZhbGlkYXRpb25QcmVmZXJlbmNlcy5NSVNTSU5HX1BBUkFNKTsKLQkJY3JlYXRlQ29tYm8oaW5uZXIsCi0JCQkJTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW1ldGVyQXR0cmlidXRlTGFiZWwsCi0JCQkJVmFsaWRhdGlvblByZWZlcmVuY2VzLkVNUFRZX1BBUkFNKTsKLQotCQl0d2lzdGllID0gY3JlYXRlVHdpc3RpZShib2R5LAotCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhMYWJlbCwgY29sdW1ucyk7Ci0JCWlubmVyID0gY3JlYXRlSW5uZXJDb21wb3NpdGUocGFyZW50LCB0d2lzdGllLCBjb2x1bW5zKTsKLQkJY3JlYXRlQ29tYm8oaW5uZXIsIE1lc3NhZ2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhTeW50YXhMYWJlbCwKLQkJCQlWYWxpZGF0aW9uUHJlZmVyZW5jZXMuWFBBVEhTKTsKLQotCQlyZXR1cm4gcGFyZW50OwotCX0KLQotCXByaXZhdGUgQ29tcG9zaXRlIGNyZWF0ZUlubmVyQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQsCi0JCQlFeHBhbmRhYmxlQ29tcG9zaXRlIHR3aXN0aWUsIGludCBjb2x1bW5zKSB7Ci0JCUNvbXBvc2l0ZSBpbm5lciA9IG5ldyBDb21wb3NpdGUodHdpc3RpZSwgU1dULk5PTkUpOwotCQlpbm5lci5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQlpbm5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoY29sdW1ucywgZmFsc2UpKTsKLQkJdHdpc3RpZS5zZXRDbGllbnQoaW5uZXIpOwotCQlyZXR1cm4gaW5uZXI7Ci0JfQotCi0JcHJvdGVjdGVkIENvbWJvIGNyZWF0ZUNvbWJvKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbCwgU3RyaW5nIGtleSkgewotCQlDb21ibyBjb21ibyA9IGFkZENvbWJvQm94KHBhcmVudCwgbGFiZWwsIGtleSwgRVJST1JfVkFMVUVTLCBFUlJPUlMsIDApOwotCQljb21ib3MucHV0KGtleSwgY29tYm8pOwotCQlyZXR1cm4gY29tYm87Ci0JfQotCi0JcHJvdGVjdGVkIExhYmVsIGNyZWF0ZUxhYmVsKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0ZXh0KSB7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULkxFRlQpOwotCQlsYWJlbC5zZXRUZXh0KHRleHQpOwotCi0JCS8vIEdyaWREYXRhCi0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCk7Ci0JCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5DRU5URVI7Ci0JCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0JCWxhYmVsLnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJcmV0dXJuIGxhYmVsOwotCX0KLQotCXByb3RlY3RlZCBUZXh0IGNyZWF0ZVRleHRGaWVsZChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCVRleHQgdGV4dCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotCi0JCS8vIEdyaWREYXRhCi0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkNFTlRFUjsKLQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKLQkJdGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCXJldHVybiB0ZXh0OwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBFeHBhbmRhYmxlQ29tcG9zaXRlIGNyZWF0ZVR3aXN0aWUoQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsLAotCQkJaW50IG5Db2x1bW5zKSB7Ci0JCUV4cGFuZGFibGVDb21wb3NpdGUgZXhjb21wb3NpdGUgPSBuZXcgRXhwYW5kYWJsZUNvbXBvc2l0ZShwYXJlbnQsCi0JCQkJU1dULk5PTkUsIEV4cGFuZGFibGVDb21wb3NpdGUuVFdJU1RJRQotCQkJCQkJfCBFeHBhbmRhYmxlQ29tcG9zaXRlLkNMSUVOVF9JTkRFTlQpOwotCQlleGNvbXBvc2l0ZS5zZXRUZXh0KGxhYmVsKTsKLQkJZXhjb21wb3NpdGUuc2V0RXhwYW5kZWQoZmFsc2UpOwotCQlleGNvbXBvc2l0ZS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnRSZWdpc3RyeSgpLmdldEJvbGQoCi0JCQkJSkZhY2VSZXNvdXJjZXMuRElBTE9HX0ZPTlQpKTsKLQkJZXhjb21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwKLQkJCQl0cnVlLCBmYWxzZSwgbkNvbHVtbnMsIDEpKTsKLQkJZXhjb21wb3NpdGUuYWRkRXhwYW5zaW9uTGlzdGVuZXIobmV3IEV4cGFuc2lvbkFkYXB0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIGV4cGFuc2lvblN0YXRlQ2hhbmdlZChFeHBhbnNpb25FdmVudCBlKSB7Ci0JCQkJZXhwYW5kZWRTdGF0ZUNoYW5nZWQoKEV4cGFuZGFibGVDb21wb3NpdGUpIGUuZ2V0U291cmNlKCkpOwotCQkJfQotCQl9KTsKLQkJRXhwYW5kYWJsZXMuYWRkKGV4Y29tcG9zaXRlKTsKLQkJbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShleGNvbXBvc2l0ZSk7Ci0JCXJldHVybiBleGNvbXBvc2l0ZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgbWFrZVNjcm9sbGFibGVDb21wb3NpdGVBd2FyZShDb250cm9sIGNvbnRyb2wpIHsKLQkJU2Nyb2xsZWRQYWdlQ29udGVudCBwYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSA9IGdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlKGNvbnRyb2wpOwotCQlpZiAocGFyZW50U2Nyb2xsZWRDb21wb3NpdGUgIT0gbnVsbCkgewotCQkJcGFyZW50U2Nyb2xsZWRDb21wb3NpdGUuYWRhcHRDaGlsZChjb250cm9sKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyhnZXREaWFsb2dTZXR0aW5ncygpLmFkZE5ld1NlY3Rpb24oCi0JCQkJU0VUVElOR1NfU0VDVElPTl9OQU1FKSk7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFF1YWxpZmllcigpIHsKLQkJcmV0dXJuIFhTTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIoKSB7Ci0JCXJldHVybiBYU0xDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByZWZlcmVuY2VQYWdlSUQoKSB7Ci0JCXJldHVybiBYU0xfVUlfUFJFRkVSRU5DRVNfVkFMSURBVElPTl9JRDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2plY3RTZXR0aW5nc0tleSgpIHsKLQkJcmV0dXJuIFhTTENvcmVQbHVnaW4uVVNFX1BST0pFQ1RfU0VUVElOR1M7Ci0JfQotCi0JcHJvdGVjdGVkIElEaWFsb2dTZXR0aW5ncyBnZXREaWFsb2dTZXR0aW5ncygpIHsKLQkJcmV0dXJuIFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvcGVydHlQYWdlSUQoKSB7Ci0JCXJldHVybiBYU0xfVUlfUFJPUEVSVFlfUEFHRV9QUk9KRUNUX1ZBTElEQVRJT05fSUQ7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgewotCi0JfQotCi0JcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCS8vIElmIHdlIGFyZSBjYWxsZWQgdG9vIGVhcmx5LCBpLmUuIGJlZm9yZSB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQKLQkJLy8gdGhlbiByZXR1cm4KLQkJLy8gdG8gYXZvaWQgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbnMKLQkJaWYgKGUud2lkZ2V0ICE9IG51bGwgJiYgZS53aWRnZXQuaXNEaXNwb3NlZCgpKQotCQkJcmV0dXJuOwotCi0JCXZhbGlkYXRlVmFsdWVzKCk7Ci0JCWVuYWJsZVZhbHVlcygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHN0b3JlVmFsdWVzKCkgewotCQlzdXBlci5zdG9yZVZhbHVlcygpOwotCQlpbnQgbWF4RXJyb3JzID0gSW50ZWdlci5wYXJzZUludChtYXhFcnJvcnNUZXh0LmdldFRleHQoKSk7Ci0JCVByZWZlcmVuY2VzIHByZWZzID0gZ2V0TW9kZWxQcmVmZXJlbmNlcygpOwotCQkKLQkJcHJlZnMucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NQVhfRVJST1JTLCBtYXhFcnJvcnMpOwotCQkKLQkJdHJ5IHsKLQkJCXByZWZzLmZsdXNoKCk7Ci0JCX0gY2F0Y2ggKEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiBleCkgewotCQkJWFNMVUlQbHVnaW4ubG9nKGV4KTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBQcmVmZXJlbmNlcyBnZXRNb2RlbFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIHByZWZzID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0Um9vdE5vZGUoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3QoKTsKLQkJaWYgKHByb2plY3QgIT0gbnVsbCkgewotCQkJcmV0dXJuIHByZWZzLm5vZGUoUHJvamVjdFNjb3BlLlNDT1BFKS5ub2RlKGdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyKCkpOwotCQl9Ci0JCVByZWZlcmVuY2VzIGluc3RhbmNlU2NvcGUgPSBwcmVmcy5ub2RlKEluc3RhbmNlU2NvcGUuU0NPUEUpLm5vZGUoZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIoKSk7Ci0JCWlmIChpbnN0YW5jZVNjb3BlICE9IG51bGwpIHsKLQkJCXJldHVybiBpbnN0YW5jZVNjb3BlOwotCQl9Ci0JCXJldHVybiBwcmVmcy5ub2RlKERlZmF1bHRTY29wZS5TQ09QRSkubm9kZShnZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllcigpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBsb2FkUHJlZmVyZW5jZXMoKSB7Ci0JCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldENvbnRyb2woKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlpbml0aWFsaXplVmFsdWVzKCk7Ci0JCQkJdmFsaWRhdGVWYWx1ZXMoKTsKLQkJCQllbmFibGVWYWx1ZXMoKTsKLQkJCX0KLQkJfSk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVWYWx1ZXMoKSB7Ci0JCVByZWZlcmVuY2VzIHByZWZzID0gZ2V0TW9kZWxQcmVmZXJlbmNlcygpOwotCQlpbnQgbWF4RXJyb3JzID0gcHJlZnMuZ2V0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NQVhfRVJST1JTLCAxMDApOwotCQltYXhFcnJvcnNUZXh0LnNldFRleHQoU3RyaW5nLnZhbHVlT2YobWF4RXJyb3JzKSk7Ci0JCWZvciAoTWFwLkVudHJ5PFN0cmluZywgQ29tYm8+IGVudHJ5IDogY29tYm9zLmVudHJ5U2V0KCkpIHsKLQkJCWludCB2YWwgPSBwcmVmcy5nZXRJbnQoZW50cnkuZ2V0S2V5KCksIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORyk7Ci0JCQlpZiAodmFsIDwgMCkgewotCQkJCXZhbCA9IElNYXJrZXIuU0VWRVJJVFlfV0FSTklORzsKLQkJCX0KLQkJCWVudHJ5LmdldFZhbHVlKCkuc2VsZWN0KEVSUk9SX01BUC5nZXQodmFsKSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZVZhbHVlcygpIHsKLQkJU3RyaW5nIGVycm9yTWVzc2FnZSA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpbnQgbWF4RXJyb3JzID0gSW50ZWdlci5wYXJzZUludChtYXhFcnJvcnNUZXh0LmdldFRleHQoKSk7Ci0JCQlpZiAobWF4RXJyb3JzIDwgMCkKLQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc01zZ0Vycm9yOwotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNNc2dFcnJvcjsKLQkJfQotCQlzZXRFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTsKLQkJc2V0VmFsaWQoZXJyb3JNZXNzYWdlID09IG51bGwpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGVuYWJsZVZhbHVlcygpIHsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7Ci0JCXJlc2V0U2V2ZXJpdGllcygpOwotCQlzdXBlci5wZXJmb3JtRGVmYXVsdHMoKTsKLQl9Ci0KLQkvKioKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZSNwZXJmb3JtT2soKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdXBlci5wZXJmb3JtT2soKTsKLQkJc3RvcmVWYWx1ZXMoKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcXVpY2thc3Npc3QvT3ZlcnJpZGVRdWlja0Fzc2lzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3F1aWNrYXNzaXN0L092ZXJyaWRlUXVpY2tBc3Npc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM3YmI3MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvcXVpY2thc3Npc3QvT3ZlcnJpZGVRdWlja0Fzc2lzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5xdWlja2Fzc2lzdC5JUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnF1aWNrYXNzaXN0LklRdWlja0Fzc2lzdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Bbm5vdGF0aW9uOwotCi1wdWJsaWMgY2xhc3MgT3ZlcnJpZGVRdWlja0Fzc2lzdCBpbXBsZW1lbnRzIElRdWlja0Fzc2lzdFByb2Nlc3NvcgotewotCi0JcHVibGljIE92ZXJyaWRlUXVpY2tBc3Npc3QoKQotCXsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViCi0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuQXNzaXN0KElRdWlja0Fzc2lzdEludm9jYXRpb25Db250ZXh0IGludm9jYXRpb25Db250ZXh0KQotCXsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuRml4KEFubm90YXRpb24gYW5ub3RhdGlvbikKLQl7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW10gY29tcHV0ZVF1aWNrQXNzaXN0UHJvcG9zYWxzKElRdWlja0Fzc2lzdEludm9jYXRpb25Db250ZXh0IGludm9jYXRpb25Db250ZXh0KQotCXsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpCi0JewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3F1aWNrYXNzaXN0L1ZhbGlkYXRpb25RdWlja0Fzc2lzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3F1aWNrYXNzaXN0L1ZhbGlkYXRpb25RdWlja0Fzc2lzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2QzNmFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9xdWlja2Fzc2lzdC9WYWxpZGF0aW9uUXVpY2tBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hhc2UgVGVjaG5vbG9naWVzIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LkNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnF1aWNrYXNzaXN0LklRdWlja0Fzc2lzdEludm9jYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucXVpY2thc3Npc3QuSVF1aWNrQXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uUXVpY2tBc3Npc3QgaW1wbGVtZW50cyBJUXVpY2tBc3Npc3RQcm9jZXNzb3IgewotCi0JcHVibGljIFZhbGlkYXRpb25RdWlja0Fzc2lzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5Bc3Npc3QoSVF1aWNrQXNzaXN0SW52b2NhdGlvbkNvbnRleHQgaW52b2NhdGlvbkNvbnRleHQpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5GaXgoQW5ub3RhdGlvbiBhbm5vdGF0aW9uKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXSBjb21wdXRlUXVpY2tBc3Npc3RQcm9wb3NhbHMoCi0JCQlJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCkgewotCQlDb21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBuZXcgQ29tcGxldGlvblByb3Bvc2FsKCJkb3VnIiwgNSwgMTAsIDExKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gbmV3IElDb21wbGV0aW9uUHJvcG9zYWxbXSB7IHByb3Bvc2FsIH07Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYU0wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9yZWdpc3RyeS9BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQwZmFjZDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYU0wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBiYXNlZCBvbiB3b3JrIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLnVpCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JRG9jdW1lbnRUeXBlSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWwuRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkFzc2VydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLklKRmFjZU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuQ01Eb2N1bWVudE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuTW9kZWxRdWVyeVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5ET01PYnNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9yWFNMOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxVSVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYTUw7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhNTAotCQlpbXBsZW1lbnRzIEFkYXB0ZXJGYWN0b3J5UHJvdmlkZXIgewotCi0JLyoKLQkgKiBAc2VlIEFkYXB0ZXJGYWN0b3J5UHJvdmlkZXIjYWRkQWRhcHRlckZhY3RvcmllcyhJU3RydWN0dXJlZE1vZGVsKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGFkZEFkYXB0ZXJGYWN0b3JpZXMoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQotCQkvLyBhZGQgdGhlIG5vcm1hbCBjb250ZW50IGJhc2VkIGZhY3RvcmllcyB0byBtb2RlbCdzIHJlZ2lzdHJ5Ci0JCWFkZENvbnRlbnRCYXNlZEZhY3RvcmllcyhzdHJ1Y3R1cmVkTW9kZWwpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGFkZENvbnRlbnRCYXNlZEZhY3RvcmllcyhJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgewotCQlGYWN0b3J5UmVnaXN0cnkgZmFjdG9yeVJlZ2lzdHJ5ID0gc3RydWN0dXJlZE1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpOwotCQlBc3NlcnQKLQkJCQkuaXNOb3ROdWxsKGZhY3RvcnlSZWdpc3RyeSwKLQkJCQkJCSJQcm9ncmFtIEVycm9yOiBjbGllbnQgY2FsbGVyIG11c3QgZW5zdXJlIG1vZGVsIGhhcyBmYWN0b3J5IHJlZ2lzdHJ5Iik7IC8vJE5PTi1OTFMtMSQKLQkJSU5vZGVBZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbnVsbDsKLQotCQlmYWN0b3J5ID0gZmFjdG9yeVJlZ2lzdHJ5LmdldEZhY3RvcnlGb3IoSUpGYWNlTm9kZUFkYXB0ZXIuY2xhc3MpOwotCQlpZiAoZmFjdG9yeSA9PSBudWxsKSB7Ci0JCQlmYWN0b3J5ID0gbmV3IEpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5KCk7Ci0JCQlmYWN0b3J5UmVnaXN0cnkuYWRkRmFjdG9yeShmYWN0b3J5KTsKLQkJfQotCi0JCU1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkoc3RydWN0dXJlZE1vZGVsKTsKLQkJaWYgKG1vZGVsUXVlcnkgIT0gbnVsbCkgewotCQkJQ01Eb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2VyID0gbW9kZWxRdWVyeQotCQkJCQkuZ2V0Q01Eb2N1bWVudE1hbmFnZXIoKTsKLQkJCWlmIChkb2N1bWVudE1hbmFnZXIgIT0gbnVsbCkgewotCQkJCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkJCS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJCQlib29sZWFuIHVzZUluZmVycmVkR3JhbW1hciA9IChzdG9yZSAhPSBudWxsKSA/IHN0b3JlCi0JCQkJCQkuZ2V0Qm9vbGVhbihYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUikKLQkJCQkJCTogdHJ1ZTsKLQotCQkJCWRvY3VtZW50TWFuYWdlci5zZXRQcm9wZXJ0eUVuYWJsZWQoCi0JCQkJCQlDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCB0cnVlKTsKLQkJCQlkb2N1bWVudE1hbmFnZXIuc2V0UHJvcGVydHlFbmFibGVkKAotCQkJCQkJQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVVUT19MT0FELCBmYWxzZSk7Ci0JCQkJZG9jdW1lbnRNYW5hZ2VyLnNldFByb3BlcnR5RW5hYmxlZCgKLQkJCQkJCUNNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX1VTRV9DQUNIRURfUkVTT0xWRURfVVJJLAotCQkJCQkJdHJ1ZSk7Ci0JCQkJRE9NT2JzZXJ2ZXIgZG9tT2JzZXJ2ZXIgPSBuZXcgRE9NT2JzZXJ2ZXIoc3RydWN0dXJlZE1vZGVsKTsKLQkJCQlkb21PYnNlcnZlci5zZXRHcmFtbWFySW5mZXJlbmNlRW5hYmxlZCh1c2VJbmZlcnJlZEdyYW1tYXIpOwotCQkJCWRvbU9ic2VydmVyLmluaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUKLQkgKiBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXIKLQkgKiAjCi0JICogaXNGb3Iob3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSURvY3VtZW50VHlwZUhhbmRsZXIKLQkgKiApCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNGb3IoSURvY3VtZW50VHlwZUhhbmRsZXIgY29udGVudFR5cGVEZXNjcmlwdGlvbikgewotCQlyZXR1cm4gKGNvbnRlbnRUeXBlRGVzY3JpcHRpb24gaW5zdGFuY2VvZiBNb2RlbEhhbmRsZXJGb3JYU0wpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHJlaW5pdGlhbGl6ZUZhY3RvcmllcyhJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgewotCQkvLyBub3RoaW5nIHRvIGRvLCBzaW5jZSBubyBlbWJlZGRlZCB0eXBlCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL0Fic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZjUwNjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL0Fic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEludGFsaW8sIEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMjU2MzM5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkluZGV4ZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5JU2VtYW50aWNIaWdobGlnaHRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5JU2VtYW50aWNIaWdobGlnaHRpbmdFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmcgaW1wbGVtZW50cwotCQlJU2VtYW50aWNIaWdobGlnaHRpbmdFeHRlbnNpb24sIElTZW1hbnRpY0hpZ2hsaWdodGluZyB7Ci0KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFN0eWxlUHJlZmVyZW5jZUtleSgpOwotCi0JcHVibGljIFN0cmluZyBnZXRCb2xkUHJlZmVyZW5jZUtleSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRVbmRlcmxpbmVQcmVmZXJlbmNlS2V5KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0cmlrZXRocm91Z2hQcmVmZXJlbmNlS2V5KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEl0YWxpY1ByZWZlcmVuY2VLZXkoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0Q29sb3JQcmVmZXJlbmNlS2V5KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSVByZWZlcmVuY2VTdG9yZSBnZXRQcmVmZXJlbmNlU3RvcmUoKSB7Ci0JCXJldHVybiBYU0xVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRFbmFibGVkUHJlZmVyZW5jZUtleSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREaXNwbGF5TmFtZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGFic3RyYWN0IFBvc2l0aW9uW10gY29uc3VtZXMoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pOwotCi0JcHJvdGVjdGVkIExpc3QgY3JlYXRlU2VtYW50aWNQb3NpdGlvbnMoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24sIFN0cmluZyByZWdpb25UeXBlKSB7Ci0JCWlmIChyZWdpb24gPT0gbnVsbCkgewotCQkJcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0JCX0KLQkJCi0JCWlmICghcmVnaW9uLmdldFR5cGUoKS5lcXVhbHMoRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUpKSB7Ci0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQkJfQotCQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IHJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCQotCQlBcnJheUxpc3QgYXJycG9zID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ2lvbkxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCUlUZXh0UmVnaW9uIHRleHRSZWdpb24gPSByZWdpb25MaXN0LmdldChpKTsKLQkJCWlmICh0ZXh0UmVnaW9uLmdldFR5cGUoKS5lcXVhbHMocmVnaW9uVHlwZSkpIHsKLQkJCQlQb3NpdGlvbiBwb3MgPSBuZXcgUG9zaXRpb24ocmVnaW9uCi0JCQkJCQkuZ2V0U3RhcnRPZmZzZXQodGV4dFJlZ2lvbiksIHRleHRSZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQkJCWFycnBvcy5hZGQocG9zKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYXJycG9zOwotCX0KLQotCXB1YmxpYyBQb3NpdGlvbltdIGNvbnN1bWVzKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sIEluZGV4ZWRSZWdpb24gaW5kZXhlZFJlZ2lvbikgewotCQlpZiAoaW5kZXhlZFJlZ2lvbiAhPSBudWxsICYmIGluZGV4ZWRSZWdpb24gaW5zdGFuY2VvZiBJRE9NTm9kZSkgewotCQkJSURPTU5vZGUgbm9kZSA9IChJRE9NTm9kZSlpbmRleGVkUmVnaW9uOwotCQkJaWYgKFhTTENvcmUuaXNYU0xOYW1lc3BhY2Uobm9kZSkpIHsKLQkJCQlyZXR1cm4gY29uc3VtZXMoZG9jdW1lbnRSZWdpb24pOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9JU3R5bGVDb25zdGFudHNYU0wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9JU3R5bGVDb25zdGFudHNYU0wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGMyMjJkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvSVN0eWxlQ29uc3RhbnRzWFNMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIEJlbmphbWluIE11c2thbGxhLCBiLm11c2thbGxhQGdteC5uZXQgLSBbMTU4NjYwXSBjaGFyYWN0ZXIgZW50aXRpZXMgc2hvdWxkIGhhdmUgdGhlaXIgb3duIHN5bnRheCBoaWdobGlnaHRpbmcgcHJlZmVyZW5jZSAgICAgIAotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU7Ci0KLS8qKgotICogQ29udGFpbnMgdGhlIHN5bWJvbGljIG5hbWUgb2Ygc3R5bGVzIHVzZWQgYnkgTGluZVN0eWxlUHJvdmlkZXIsCi0gKiBDb2xvck1hbmFnZXIsIGFuZCBhbnkgb3RoZXJzIHdobyBtYXkgYmUgaW50ZXJlc3RlZAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElTdHlsZUNvbnN0YW50c1hTTCB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFDS0dST1VORCA9ICJ4c2xiYWNrZ3JvdW5kIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFQ0xfQk9SREVSID0gInhzbGRlY2xCb2RlciI7Ly8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORCA9ICJ4c2xmb3JlZ3JvdW5kIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0FUVFJJQlVURV9FUVVBTFMgPSAieHNsdGFnQXR0cmlidXRlRXF1YWxzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19BVFRSSUJVVEVfTkFNRSA9ICJ4c2x0YWdBdHRyaWJ1dGVOYW1lIjsvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0FUVFJJQlVURV9WQUxVRSA9ICJ4c2x0YWdBdHRyaWJ1dGVWYWx1ZSI7Ly8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19CT1JERVIgPSAieHNsdGFnQm9yZGVyIjsvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX05BTUUgPSAieHNsdGFnTmFtZSI7Ly8kTk9OLU5MUy0xJAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL0xpbmVTdHlsZVByb3ZpZGVyRm9yWFNMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzA5OWQ0Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogCQlEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBhcGkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0QXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlByb3BlcnR5Q2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlUmFuZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkNoYWluZWRQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5Db2xvckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkFic3RyYWN0TGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5IaWdobGlnaHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuUmVjb25jaWxlckhpZ2hsaWdodGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwudXRpbC5FZGl0b3JVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuWE1MVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5zdHlsZS5JU3R5bGVDb25zdGFudHNYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLQotLyoqCi0gKiBUaGlzIGltcGxlbWVudHMgYSBTeW50YXggTGluZSBTdHlsZSBQcm92aWRlciBmb3IgWFNMLiBJdCBsZXZlcmFnZXMgc29tZQotICogaW5mb3JtYXRpb24gZnJvbSB0aGUgWE1MIFN5bnRheCBDb2xvcmluZywgYnV0IGFkZHMgc3BlY2lmaWMgY29sb3JpbmcgZm9yIFhTTAotICogc3BlY2lmaWMgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKiBAc2luY2UgMS4wCi0gKiBAZGVwcmVjYXRlZCBVc2UgQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZyBhbmQgdGhlIFNlbWFudGljSGlnaGxpZ2h0aW5nIGV4dGVuc2lvbiBwb2ludAotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGNsYXNzIExpbmVTdHlsZVByb3ZpZGVyRm9yWFNMIGV4dGVuZHMgQWJzdHJhY3RMaW5lU3R5bGVQcm92aWRlciBpbXBsZW1lbnRzIExpbmVTdHlsZVByb3ZpZGVyIHsKLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudDsKLQlwcm90ZWN0ZWQgSGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXI7Ci0JcHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkOwotCXByb3RlY3RlZCBSZWNvbmNpbGVySGlnaGxpZ2h0ZXIgcmVjSGlnaGxpZ2h0ZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBJUHJlZmVyZW5jZVN0b3JlIHhtbFByZWZlcmVuY2VTdG9yZSA9IG51bGw7Ci0JcHJpdmF0ZSBJUHJlZmVyZW5jZVN0b3JlIHhzbFByZWZlcmVuY2VTdG9yZSA9IG51bGw7Ci0JcHJpdmF0ZSBJUHJlZmVyZW5jZVN0b3JlIGNvbWJpbmVkUHJlZmVyZW5jZVN0b3JlID0gbnVsbDsKLQlwcml2YXRlIElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIHByZWZlcmVuY2VMaXN0ZW5lciAgPSBuZXcgUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpOwotCQotCXByaXZhdGUgY2xhc3MgUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciBpbXBsZW1lbnRzIElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIHsKLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyI3Byb3BlcnR5Q2hhbmdlKG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuUHJvcGVydHlDaGFuZ2VFdmVudCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCS8vIGhhdmUgdG8gZG8gaXQgdGhpcyB3YXkgc28gb3RoZXJzIGNhbiBvdmVycmlkZSB0aGUgbWV0aG9kCi0JCQloYW5kbGVQcm9wZXJ0eUNoYW5nZShldmVudCk7Ci0JCX0KLQl9CQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgY29tbW9uSW5pdChJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50LAotCQkJSGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIpIHsKLQotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJdGhpcy5oaWdobGlnaHRlciA9IGhpZ2hsaWdodGVyOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWVvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyIwotCSAqIHByZXBhcmVSZWdpb25zKG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uLCBpbnQsIGludCwKLQkgKiBqYXZhLnV0aWwuQ29sbGVjdGlvbikKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBwcmVwYXJlUmVnaW9ucyhJVHlwZWRSZWdpb24gdHlwZWRSZWdpb24sCi0JCQlpbnQgbGluZVJlcXVlc3RTdGFydCwgaW50IGxpbmVSZXF1ZXN0TGVuZ3RoLCBDb2xsZWN0aW9uIGhvbGRSZXN1bHRzKSB7Ci0JCWZpbmFsIGludCBwYXJ0aXRpb25TdGFydE9mZnNldCA9IHR5cGVkUmVnaW9uLmdldE9mZnNldCgpOwotCQlmaW5hbCBpbnQgcGFydGl0aW9uTGVuZ3RoID0gdHlwZWRSZWdpb24uZ2V0TGVuZ3RoKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gZ2V0RG9jdW1lbnQoKQotCQkJCS5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChwYXJ0aXRpb25TdGFydE9mZnNldCk7Ci0JCWJvb2xlYW4gaGFuZGxlZCA9IGZhbHNlOwotCi0JCWhhbmRsZWQgPSBwcmVwYXJlVGV4dFJlZ2lvbnMoc3RydWN0dXJlZERvY3VtZW50UmVnaW9uLAotCQkJCXBhcnRpdGlvblN0YXJ0T2Zmc2V0LCBwYXJ0aXRpb25MZW5ndGgsIGhvbGRSZXN1bHRzKTsKLQotCQlyZXR1cm4gaGFuZGxlZDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcmVnaW9uCi0JICogQHBhcmFtIHN0YXJ0Ci0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBob2xkUmVzdWx0cwotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBwcmVwYXJlVGV4dFJlZ2lvbihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gYmxvY2tlZFJlZ2lvbiwKLQkJCWludCBwYXJ0aXRpb25TdGFydE9mZnNldCwgaW50IHBhcnRpdGlvbkxlbmd0aCwKLQkJCUNvbGxlY3Rpb24gaG9sZFJlc3VsdHMpIHsKLQkJYm9vbGVhbiBoYW5kbGVkID0gZmFsc2U7Ci0JCWZpbmFsIGludCBwYXJ0aXRpb25FbmRPZmZzZXQgPSBwYXJ0aXRpb25TdGFydE9mZnNldCArIHBhcnRpdGlvbkxlbmd0aAotCQkJCS0gMTsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gbnVsbDsKLQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbnMgPSBibG9ja2VkUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJU3R5bGVSYW5nZSBzdHlsZVJhbmdlID0gbnVsbDsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IHJlZ2lvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXJlZ2lvbiA9IHJlZ2lvbnMuZ2V0KGkpOwotCQkJVGV4dEF0dHJpYnV0ZSBhdHRyID0gbnVsbDsKLQkJCVRleHRBdHRyaWJ1dGUgcHJldmlvdXNBdHRyID0gbnVsbDsKLQkJCWlmIChibG9ja2VkUmVnaW9uLmdldFN0YXJ0T2Zmc2V0KHJlZ2lvbikgPiBwYXJ0aXRpb25FbmRPZmZzZXQpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoYmxvY2tlZFJlZ2lvbi5nZXRFbmRPZmZzZXQocmVnaW9uKSA8PSBwYXJ0aXRpb25TdGFydE9mZnNldCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29sbGVjdGlvbikgewotCQkJCWhhbmRsZWQgPSBwcmVwYXJlVGV4dFJlZ2lvbigoSVRleHRSZWdpb25Db2xsZWN0aW9uKSByZWdpb24sCi0JCQkJCQlwYXJ0aXRpb25TdGFydE9mZnNldCwgcGFydGl0aW9uTGVuZ3RoLCBob2xkUmVzdWx0cyk7Ci0JCQl9IGVsc2UgewotCi0JCQkJYXR0ciA9IGdldEF0dHJpYnV0ZUZvcihibG9ja2VkUmVnaW9uLCByZWdpb24pOwotCQkJCWlmIChhdHRyICE9IG51bGwpIHsKLQkJCQkJaGFuZGxlZCA9IHRydWU7Ci0JCQkJCXN0eWxlUmFuZ2UgPSBhcHBseVN0eWxlUmFuZ2UoYmxvY2tlZFJlZ2lvbiwKLQkJCQkJCQlwYXJ0aXRpb25TdGFydE9mZnNldCwgcGFydGl0aW9uTGVuZ3RoLCBob2xkUmVzdWx0cywKLQkJCQkJCQlyZWdpb24sIHN0eWxlUmFuZ2UsIGF0dHIsIHByZXZpb3VzQXR0cik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJldmlvdXNBdHRyID0gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGhhbmRsZWQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZVJhbmdlIGFwcGx5U3R5bGVSYW5nZShJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gYmxvY2tlZFJlZ2lvbiwKLQkJCWludCBwYXJ0aXRpb25TdGFydE9mZnNldCwgaW50IHBhcnRpdGlvbkxlbmd0aCwKLQkJCUNvbGxlY3Rpb24gaG9sZFJlc3VsdHMsIElUZXh0UmVnaW9uIHJlZ2lvbiwgU3R5bGVSYW5nZSBzdHlsZVJhbmdlLAotCQkJVGV4dEF0dHJpYnV0ZSBhdHRyLCBUZXh0QXR0cmlidXRlIHByZXZpb3VzQXR0cikgewotCQlpZiAoZXF1YWxzUHJldmlvdXNBdHRyaWJ1dGUoc3R5bGVSYW5nZSwgYXR0ciwgcHJldmlvdXNBdHRyKSkgewotCQkJc3R5bGVSYW5nZS5sZW5ndGggKz0gcmVnaW9uLmdldExlbmd0aCgpOwotCQl9IGVsc2UgewotCQkJc3R5bGVSYW5nZSA9IGNyZWF0ZVN0eWxlUmFuZ2UoYmxvY2tlZFJlZ2lvbiwgcmVnaW9uLCBhdHRyLAotCQkJCQlwYXJ0aXRpb25TdGFydE9mZnNldCwgcGFydGl0aW9uTGVuZ3RoKTsKLQkJCWhvbGRSZXN1bHRzLmFkZChzdHlsZVJhbmdlKTsKLQkJCXByZXZpb3VzQXR0ciA9IGF0dHI7Ci0JCX0KLQkJcmV0dXJuIHN0eWxlUmFuZ2U7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGVxdWFsc1ByZXZpb3VzQXR0cmlidXRlKFN0eWxlUmFuZ2Ugc3R5bGVSYW5nZSwKLQkJCVRleHRBdHRyaWJ1dGUgYXR0ciwgVGV4dEF0dHJpYnV0ZSBwcmV2aW91c0F0dHIpIHsKLQkJcmV0dXJuIChzdHlsZVJhbmdlICE9IG51bGwpICYmIChwcmV2aW91c0F0dHIgIT0gbnVsbCkKLQkJCQkmJiAocHJldmlvdXNBdHRyLmVxdWFscyhhdHRyKSk7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gcHJlcGFyZVRleHRSZWdpb25zKAotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24sCi0JCQlpbnQgcGFydGl0aW9uU3RhcnRPZmZzZXQsIGludCBwYXJ0aXRpb25MZW5ndGgsCi0JCQlDb2xsZWN0aW9uIGhvbGRSZXN1bHRzKSB7Ci0JCWJvb2xlYW4gaGFuZGxlZCA9IGZhbHNlOwotCQlmaW5hbCBpbnQgcGFydGl0aW9uRW5kT2Zmc2V0ID0gcGFydGl0aW9uU3RhcnRPZmZzZXQgKyBwYXJ0aXRpb25MZW5ndGgKLQkJCQktIDE7Ci0JCXdoaWxlIChzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gIT0gbnVsbAotCQkJCSYmIHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbi5nZXRTdGFydE9mZnNldCgpIDw9IHBhcnRpdGlvbkVuZE9mZnNldCkgewotCQkJSVRleHRSZWdpb24gcmVnaW9uID0gbnVsbDsKLQkJCUlUZXh0UmVnaW9uTGlzdCByZWdpb25zID0gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQotCQkJU3R5bGVSYW5nZSBzdHlsZVJhbmdlID0gbnVsbDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVnaW9ucy5zaXplKCk7IGkrKykgewotCQkJCXJlZ2lvbiA9IHJlZ2lvbnMuZ2V0KGkpOwotCQkJCVRleHRBdHRyaWJ1dGUgYXR0ciA9IG51bGw7Ci0JCQkJVGV4dEF0dHJpYnV0ZSBwcmV2aW91c0F0dHIgPSBudWxsOwotCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24uZ2V0U3RhcnRPZmZzZXQocmVnaW9uKSA+IHBhcnRpdGlvbkVuZE9mZnNldCkKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbi5nZXRFbmRPZmZzZXQocmVnaW9uKSA8PSBwYXJ0aXRpb25TdGFydE9mZnNldCkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAocmVnaW9uIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db2xsZWN0aW9uKSB7Ci0JCQkJCWJvb2xlYW4gaGFuZGxlZENvbGxlY3Rpb24gPSAocHJlcGFyZVRleHRSZWdpb24oCi0JCQkJCQkJKElUZXh0UmVnaW9uQ29sbGVjdGlvbikgcmVnaW9uLAotCQkJCQkJCXBhcnRpdGlvblN0YXJ0T2Zmc2V0LCBwYXJ0aXRpb25MZW5ndGgsIGhvbGRSZXN1bHRzKSk7Ci0JCQkJCWhhbmRsZWQgPSAoIWhhbmRsZWQpID8gaGFuZGxlZENvbGxlY3Rpb24gOiBoYW5kbGVkOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF0dHIgPSBnZXRBdHRyaWJ1dGVGb3Ioc3RydWN0dXJlZERvY3VtZW50UmVnaW9uLCByZWdpb24pOwotCQkJCQlpZiAoYXR0ciA9PSBudWxsKSB7Ci0JCQkJCQlwcmV2aW91c0F0dHIgPSBudWxsOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaGFuZGxlZCA9IHRydWU7Ci0JCQkJCQlzdHlsZVJhbmdlID0gYXBwbHlTdHlsZVJhbmdlKHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiwKLQkJCQkJCQkJcGFydGl0aW9uU3RhcnRPZmZzZXQsIHBhcnRpdGlvbkxlbmd0aCwKLQkJCQkJCQkJaG9sZFJlc3VsdHMsIHJlZ2lvbiwgc3R5bGVSYW5nZSwgYXR0ciwKLQkJCQkJCQkJcHJldmlvdXNBdHRyKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA9IHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQkJcmV0dXJuIGhhbmRsZWQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZVJhbmdlIGNyZWF0ZVN0eWxlUmFuZ2UoCi0JCQlJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gdGV4dFJlZ2lvbkNvbGxlY3Rpb24sIElUZXh0UmVnaW9uIHRleHRSZWdpb24sCi0JCQlUZXh0QXR0cmlidXRlIGF0dHIsIGludCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCkgewotCQlpbnQgc3RhcnRpbmdPZmZzZXQgPSB0ZXh0UmVnaW9uQ29sbGVjdGlvbi5nZXRTdGFydE9mZnNldCh0ZXh0UmVnaW9uKTsKLQkJaWYgKHN0YXJ0aW5nT2Zmc2V0IDwgc3RhcnRPZmZzZXQpCi0JCQlzdGFydGluZ09mZnNldCA9IHN0YXJ0T2Zmc2V0OwotCi0JCWludCB0ZXh0RW5kID0gc3RhcnRpbmdPZmZzZXQKLQkJCQkrIHRleHRSZWdpb25Db2xsZWN0aW9uLmdldFRleHQodGV4dFJlZ2lvbikubGVuZ3RoKCk7Ci0JCWludCBtYXhPZmZzZXQgPSBzdGFydE9mZnNldCArIGxlbmd0aDsKLQkJaW50IGVuZGluZ09mZnNldCA9IHRleHRSZWdpb25Db2xsZWN0aW9uLmdldEVuZE9mZnNldCh0ZXh0UmVnaW9uKTsKLQotCQlpZiAodGV4dEVuZCA8IGVuZGluZ09mZnNldCkKLQkJCWVuZGluZ09mZnNldCA9IHRleHRFbmQ7Ci0JCWlmIChlbmRpbmdPZmZzZXQgPiBtYXhPZmZzZXQpCi0JCQllbmRpbmdPZmZzZXQgPSBtYXhPZmZzZXQ7Ci0JCVN0eWxlUmFuZ2UgcmVzdWx0ID0gbmV3IFN0eWxlUmFuZ2Uoc3RhcnRpbmdPZmZzZXQsIGVuZGluZ09mZnNldAotCQkJCS0gc3RhcnRpbmdPZmZzZXQsIGF0dHIuZ2V0Rm9yZWdyb3VuZCgpLCBhdHRyLmdldEJhY2tncm91bmQoKSwKLQkJCQlhdHRyLmdldFN0eWxlKCkpOwotCQlpZiAoKGF0dHIuZ2V0U3R5bGUoKSAmIFRleHRBdHRyaWJ1dGUuU1RSSUtFVEhST1VHSCkgIT0gMCkgewotCQkJcmVzdWx0LnN0cmlrZW91dCA9IHRydWU7Ci0JCX0KLQkJaWYgKChhdHRyLmdldFN0eWxlKCkgJiBUZXh0QXR0cmlidXRlLlVOREVSTElORSkgIT0gMCkgewotCQkJcmVzdWx0LnVuZGVybGluZSA9IHRydWU7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUZXh0QXR0cmlidXRlIGdldEF0dHJpYnV0ZUZvcihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gY29sbGVjdGlvbiwKLQkJCUlUZXh0UmVnaW9uIHRleHRSZWdpb24pIHsKLQkJaWYgKHRleHRSZWdpb24gPT0gbnVsbCkgewotCQkJcmV0dXJuIFhNTFRleHRBdHRyaWJ1dGVNYXAuZ2V0SW5zdGFuY2UoKQotCQkJCQkuZ2V0VGV4dEF0dHJpYnV0ZU1hcCgpLmdldChJU3R5bGVDb25zdGFudHNYTUwuQ0RBVEFfVEVYVCk7Ci0JCX0KLQotCQlTdHJpbmcgdHlwZSA9IHRleHRSZWdpb24uZ2V0VHlwZSgpOwotCQlpZiAoY29sbGVjdGlvbi5nZXRUZXh0KCkuY29udGFpbnMoInhzbDoiKSkgeyAvLyROT04tTkxTLTEkCi0JCQlyZXR1cm4gZ2V0WFNMQXR0cmlidXRlKHR5cGUpOwotCQl9Ci0KLQkJcmV0dXJuIGdldFhNTEF0dHJpYnV0ZSh0eXBlKTsKLQl9Ci0KLQlwcml2YXRlIFRleHRBdHRyaWJ1dGUgZ2V0WFNMQXR0cmlidXRlKFN0cmluZyB0eXBlKSB7Ci0JCU1hcDxTdHJpbmcsIFN0cmluZz4gcmVnaW9uTWFwID0gWFNMUmVnaW9uTWFwLmdldEluc3RhbmNlKCkKLQkJCQkuZ2V0UmVnaW9uTWFwKCk7Ci0JCU1hcDxTdHJpbmcsIFRleHRBdHRyaWJ1dGU+IHRleHRBdHRyaWJ1dGVzID0gWFNMVGV4dEF0dHJpYnV0ZU1hcAotCQkJCS5nZXRJbnN0YW5jZSgpLmdldFRleHRBdHRyaWJ1dGVNYXAoKTsKLQkJcmV0dXJuIGdldFRleHRBdHRyaWJ1dGUodHlwZSwgcmVnaW9uTWFwLCB0ZXh0QXR0cmlidXRlcyk7Ci0JfQotCi0JcHJpdmF0ZSBUZXh0QXR0cmlidXRlIGdldFhNTEF0dHJpYnV0ZShTdHJpbmcgdHlwZSkgewotCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHJlZ2lvbk1hcCA9IFhNTFJlZ2lvbk1hcC5nZXRJbnN0YW5jZSgpCi0JCQkJLmdldFJlZ2lvbk1hcCgpOwotCQlNYXA8U3RyaW5nLCBUZXh0QXR0cmlidXRlPiB0ZXh0QXR0cmlidXRlcyA9IFhNTFRleHRBdHRyaWJ1dGVNYXAKLQkJCQkuZ2V0SW5zdGFuY2UoKS5nZXRUZXh0QXR0cmlidXRlTWFwKCk7Ci0KLQkJcmV0dXJuIGdldFRleHRBdHRyaWJ1dGUodHlwZSwgcmVnaW9uTWFwLCB0ZXh0QXR0cmlidXRlcyk7Ci0JfQotCi0JcHJpdmF0ZSBUZXh0QXR0cmlidXRlIGdldFRleHRBdHRyaWJ1dGUoU3RyaW5nIHR5cGUsCi0JCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHJlZ2lvbk1hcCwKLQkJCU1hcDxTdHJpbmcsIFRleHRBdHRyaWJ1dGU+IHRleHRBdHRyTWFwKSB7Ci0JCXJldHVybiB0ZXh0QXR0ck1hcC5nZXQocmVnaW9uTWFwLmdldCh0eXBlKSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgaGFuZGxlUHJvcGVydHlDaGFuZ2UoUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgewotCQlTdHJpbmcgc3R5bGVLZXkgPSBudWxsOwotCQlpZiAoZXZlbnQgPT0gbnVsbCkKLQkJCXJldHVybjsKLQotCQlTdHJpbmcgcHJlZktleSA9IGV2ZW50LmdldFByb3BlcnR5KCk7Ci0JCS8vIGNoZWNrIGlmIHByZWZlcmVuY2UgY2hhbmdlZCBpcyBhIHN0eWxlIHByZWZlcmVuY2UKLQkJaWYgKElTdHlsZUNvbnN0YW50c1hTTC5UQUdfTkFNRS5lcXVhbHMocHJlZktleSkpIHsKLQkJCXN0eWxlS2V5ID0gSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19OQU1FOwotCQl9Ci0JCWlmIChJU3R5bGVDb25zdGFudHNYU0wuVEFHX0JPUkRFUi5lcXVhbHMocHJlZktleSkpIHsKLQkJCXN0eWxlS2V5ID0gSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19CT1JERVI7Ci0JCX0KLQkJaWYgKElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX05BTUUuZXF1YWxzKHByZWZLZXkpKSB7Ci0JCQlzdHlsZUtleSA9IElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX05BTUU7Ci0JCX0KLQkJaWYgKElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX1ZBTFVFLmVxdWFscyhwcmVmS2V5KSkgewotCQkJc3R5bGVLZXkgPSBJU3R5bGVDb25zdGFudHNYU0wuVEFHX0FUVFJJQlVURV9WQUxVRTsKLQkJfQotCQlpZiAoc3R5bGVLZXkgPT0gbnVsbCkKLQkJCXJldHVybjsKLQotCQlpZiAoc3R5bGVLZXkgIT0gbnVsbCkgewotCQkJLy8gb3ZlcndyaXRlIHN0eWxlIHByZWZlcmVuY2Ugd2l0aCBuZXcgdmFsdWUKLQkJCWFkZFRleHRBdHRyaWJ1dGUoc3R5bGVLZXkpOwotCQl9Ci0JCQotCQlpZihyZWNIaWdobGlnaHRlciAhPSBudWxsKQotCQkJcmVjSGlnaGxpZ2h0ZXIucmVmcmVzaERpc3BsYXkoKTsKLQkJCi0JfQotCQotCS8qKgotCSAqIExvb2tzIHVwIHRoZSBjb2xvcktleSBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZSBhbmQgYWRkcyB0aGUgc3R5bGUKLQkgKiBpbmZvcm1hdGlvbiB0byBsaXN0IG9mIFRleHRBdHRyaWJ1dGVzCi0JICogCi0JICogQHBhcmFtIGNvbG9yS2V5Ci0JICovCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgYWRkVGV4dEF0dHJpYnV0ZShTdHJpbmcgY29sb3JLZXkpIHsKLQkJaWYgKGdldENvbG9yUHJlZmVyZW5jZXMoKSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgcHJlZlN0cmluZyA9IGdldENvbG9yUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoY29sb3JLZXkpOwotCQkJU3RyaW5nW10gc3R5bGVQcmVmcyA9IENvbG9ySGVscGVyLnVucGFja1N0eWxlUHJlZmVyZW5jZXMocHJlZlN0cmluZyk7Ci0JCQlpZiAoc3R5bGVQcmVmcyAhPSBudWxsKSB7Ci0JCQkJUkdCIGZvcmVncm91bmQgPSBDb2xvckhlbHBlci50b1JHQihzdHlsZVByZWZzWzBdKTsKLQkJCQlSR0IgYmFja2dyb3VuZCA9IENvbG9ySGVscGVyLnRvUkdCKHN0eWxlUHJlZnNbMV0pOwotCQkJCWJvb2xlYW4gYm9sZCA9IEJvb2xlYW4udmFsdWVPZihzdHlsZVByZWZzWzJdKS5ib29sZWFuVmFsdWUoKTsKLQkJCQlib29sZWFuIGl0YWxpYyA9IEJvb2xlYW4udmFsdWVPZihzdHlsZVByZWZzWzNdKS5ib29sZWFuVmFsdWUoKTsKLQkJCQlib29sZWFuIHN0cmlrZXRocm91Z2ggPSBCb29sZWFuLnZhbHVlT2Yoc3R5bGVQcmVmc1s0XSkuYm9vbGVhblZhbHVlKCk7Ci0JCQkJYm9vbGVhbiB1bmRlcmxpbmUgPSBCb29sZWFuLnZhbHVlT2Yoc3R5bGVQcmVmc1s1XSkuYm9vbGVhblZhbHVlKCk7Ci0JCQkJaW50IHN0eWxlID0gU1dULk5PUk1BTDsKLQkJCQlpZiAoYm9sZCkgewotCQkJCQlzdHlsZSA9IHN0eWxlIHwgU1dULkJPTEQ7Ci0JCQkJfQotCQkJCWlmIChpdGFsaWMpIHsKLQkJCQkJc3R5bGUgPSBzdHlsZSB8IFNXVC5JVEFMSUM7Ci0JCQkJfQotCQkJCWlmIChzdHJpa2V0aHJvdWdoKSB7Ci0JCQkJCXN0eWxlID0gc3R5bGUgfCBUZXh0QXR0cmlidXRlLlNUUklLRVRIUk9VR0g7Ci0JCQkJfQotCQkJCWlmICh1bmRlcmxpbmUpIHsKLQkJCQkJc3R5bGUgPSBzdHlsZSB8IFRleHRBdHRyaWJ1dGUuVU5ERVJMSU5FOwotCQkJCX0KLQotCQkJCXVwZGF0ZVRleHRBdHRyaWJ1dGUoY29sb3JLZXksIGZvcmVncm91bmQsIGJhY2tncm91bmQsIHN0eWxlKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCB1cGRhdGVUZXh0QXR0cmlidXRlKFN0cmluZyBjb2xvcktleSwgUkdCIGZvcmVncm91bmQsCi0JCQlSR0IgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCVRleHRBdHRyaWJ1dGUgY3JlYXRlVGV4dEF0dHJpYnV0ZSA9IGNyZWF0ZVRleHRBdHRyaWJ1dGUoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCwgc3R5bGUpOwotCQkKLQkJVGV4dEF0dHJpYnV0ZSB0ZXh0QXR0cmlidXRlID0KLQkJCVhTTFRleHRBdHRyaWJ1dGVNYXAuZ2V0SW5zdGFuY2UoKS5nZXRUZXh0QXR0cmlidXRlTWFwKCkuZ2V0KGNvbG9yS2V5KTsKLQkJaWYgKHRleHRBdHRyaWJ1dGUgIT0gbnVsbCkgewotCQkJWFNMVGV4dEF0dHJpYnV0ZU1hcC5nZXRJbnN0YW5jZSgpLmdldFRleHRBdHRyaWJ1dGVNYXAoKS5wdXQoY29sb3JLZXksIGNyZWF0ZVRleHRBdHRyaWJ1dGUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQl0ZXh0QXR0cmlidXRlID0KLQkJCQlYTUxUZXh0QXR0cmlidXRlTWFwLmdldEluc3RhbmNlKCkuZ2V0VGV4dEF0dHJpYnV0ZU1hcCgpLmdldChjb2xvcktleSk7Ci0JCWlmICh0ZXh0QXR0cmlidXRlICE9IG51bGwpIHsKLQkJCVhNTFRleHRBdHRyaWJ1dGVNYXAuZ2V0SW5zdGFuY2UoKS5nZXRUZXh0QXR0cmlidXRlTWFwKCkucHV0KGNvbG9yS2V5LCBjcmVhdGVUZXh0QXR0cmlidXRlKTsKLQkJfQotCX0JCi0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlCi0JICogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlciNpbml0Ci0JICogKG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQsCi0JICogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5IaWdobGlnaHRlcikKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBpbml0KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKSB7Ci0JCWNvbW1vbkluaXQoc3RydWN0dXJlZERvY3VtZW50LCBoaWdobGlnaHRlcik7Ci0KLQkJaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLQkJCXJldHVybjsKLQotCQlyZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyKCk7Ci0KLQkJc2V0SW5pdGlhbGl6ZWQodHJ1ZSk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZQotCSAqIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuQWJzdHJhY3RMaW5lU3R5bGVQcm92aWRlcgotCSAqICMKLQkgKiBpbml0KG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQKLQkgKiAsIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXIpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdChJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCwKLQkJCUlTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKSB7Ci0JCWluaXQoc3RydWN0dXJlZERvY3VtZW50LCAoSGlnaGxpZ2h0ZXIpIG51bGwpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUKLQkgKiBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkFic3RyYWN0TGluZVN0eWxlUHJvdmlkZXIKLQkgKiAjCi0JICogaW5pdChvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50Ci0JICogLAotCSAqIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuUmVjb25jaWxlckhpZ2hsaWdodGVyKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGluaXQoSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQsCi0JCQlSZWNvbmNpbGVySGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIpIHsKLQkJdGhpcy5zdHJ1Y3R1cmVkRG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0JCXJlY0hpZ2hsaWdodGVyID0gaGlnaGxpZ2h0ZXI7Ci0KLQkJaWYgKGlzSW5pdGlhbGl6ZWQoKSkKLQkJCXJldHVybjsKLQotCQlyZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyKCk7Ci0KLQkJc2V0SW5pdGlhbGl6ZWQodHJ1ZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQkJdW5SZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyKCk7Ci0JCXNldEluaXRpYWxpemVkKGZhbHNlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB1blJlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXIoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgcHJlZiA9IGdldENvbG9yUHJlZmVyZW5jZXMoKTsKLQkJaWYgKHByZWYgIT0gbnVsbCkgewotCQkJcHJlZi5yZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKHByZWZlcmVuY2VMaXN0ZW5lcik7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCByZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHByZWYgPSBnZXRDb2xvclByZWZlcmVuY2VzKCk7Ci0JCWlmIChwcmVmICE9IG51bGwpIHsKLQkJCXByZWYuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihwcmVmZXJlbmNlTGlzdGVuZXIgICk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpbml0aWFsaXplZC4KLQkgKiAKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKCkgewotCQlyZXR1cm4gaW5pdGlhbGl6ZWQ7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgaW5pdGlhbGl6ZWQuCi0JICogCi0JICogQHBhcmFtIGluaXRpYWxpemVkCi0JICogICAgICAgICAgICBUaGUgaW5pdGlhbGl6ZWQgdG8gc2V0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldEluaXRpYWxpemVkKGJvb2xlYW4gaW5pdGlhbGl6ZWQpIHsKLQkJdGhpcy5pbml0aWFsaXplZCA9IGluaXRpYWxpemVkOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGdldERvY3VtZW50KCkgewotCQlyZXR1cm4gc3RydWN0dXJlZERvY3VtZW50OwotCX0KLQotCS8qKgotCSAqLwotCUBPdmVycmlkZQotCXByb3RlY3RlZCBIaWdobGlnaHRlciBnZXRIaWdobGlnaHRlcigpIHsKLQkJcmV0dXJuIGhpZ2hsaWdodGVyOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSVByZWZlcmVuY2VTdG9yZSBnZXRDb2xvclByZWZlcmVuY2VzKCkgewotCQlpZiAoeG1sUHJlZmVyZW5jZVN0b3JlID09IG51bGwpIHsKLQkJCXhtbFByZWZlcmVuY2VTdG9yZSA9IFhNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJfQotCQlpZiAoeHNsUHJlZmVyZW5jZVN0b3JlID09IG51bGwpIHsKLQkJCXhzbFByZWZlcmVuY2VTdG9yZSA9IFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJfQotCQljb21iaW5lZFByZWZlcmVuY2VTdG9yZSA9IG5ldyBDaGFpbmVkUHJlZmVyZW5jZVN0b3JlKG5ldyBJUHJlZmVyZW5jZVN0b3JlW10geyB4bWxQcmVmZXJlbmNlU3RvcmUsIHhzbFByZWZlcmVuY2VTdG9yZSB9KTsKLQkJcmV0dXJuIGNvbWJpbmVkUHJlZmVyZW5jZVN0b3JlOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUZXh0QXR0cmlidXRlIGNyZWF0ZVRleHRBdHRyaWJ1dGUoUkdCIGZvcmVncm91bmQsIFJHQiBiYWNrZ3JvdW5kLCBib29sZWFuIGJvbGQpIHsKLQkJcmV0dXJuIG5ldyBUZXh0QXR0cmlidXRlKChmb3JlZ3JvdW5kICE9IG51bGwpID8gRWRpdG9yVXRpbGl0eS5nZXRDb2xvcihmb3JlZ3JvdW5kKSA6IG51bGwsIChiYWNrZ3JvdW5kICE9IG51bGwpID8gRWRpdG9yVXRpbGl0eS5nZXRDb2xvcihiYWNrZ3JvdW5kKSA6IG51bGwsIGJvbGQgPyBTV1QuQk9MRCA6IFNXVC5OT1JNQUwpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUZXh0QXR0cmlidXRlIGNyZWF0ZVRleHRBdHRyaWJ1dGUoUkdCIGZvcmVncm91bmQsIFJHQiBiYWNrZ3JvdW5kLCBpbnQgc3R5bGUpIHsKLQkJcmV0dXJuIG5ldyBUZXh0QXR0cmlidXRlKChmb3JlZ3JvdW5kICE9IG51bGwpID8gRWRpdG9yVXRpbGl0eS5nZXRDb2xvcihmb3JlZ3JvdW5kKSA6IG51bGwsIChiYWNrZ3JvdW5kICE9IG51bGwpID8gRWRpdG9yVXRpbGl0eS5nZXRDb2xvcihiYWNrZ3JvdW5kKSA6IG51bGwsIHN0eWxlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGVGb3IoSVRleHRSZWdpb24gcmVnaW9uKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgbG9hZENvbG9ycygpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWE1MUmVnaW9uTWFwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWE1MUmVnaW9uTWFwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZmNlNDUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL1hNTFJlZ2lvbk1hcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICpBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKmFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICp3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICpodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqQ29udHJpYnV0b3JzOgotICogICAgRGF2aWQgQ2FydmVyIChTVEFSKSAgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5zdHlsZS5JU3R5bGVDb25zdGFudHNYTUw7Ci0KLS8qKgotICogVGhlIFhNTFJlZ2lvbk1hcCBjbGFzcyBoYW5kbGVzIG1hcHBpbmcgZHV0aWVzIGZyb20gYW4gWE1MIFJlZ2lvbiB0bwotICogYSBMaW5lIFN0eWxlIENvbnN0YW50LgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWE1MUmVnaW9uTWFwIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+IHJlZ2lvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7Ci0JcHJpdmF0ZSBzdGF0aWMgWE1MUmVnaW9uTWFwIHhtbFJlZ2lvbk1hcCA9IG5ldyBYTUxSZWdpb25NYXAoKTsgCi0JCi0JcHJpdmF0ZSBYTUxSZWdpb25NYXAoKSB7Ci0JCQotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlQsIElTdHlsZUNvbnN0YW50c1hNTC5YTUxfQ09OVEVOVCk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfRE9DVFlQRV9JTlRFUk5BTF9TVUJTRVQsIElTdHlsZUNvbnN0YW50c1hNTC5YTUxfQ09OVEVOVCk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIElTdHlsZUNvbnN0YW50c1hNTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UsIElTdHlsZUNvbnN0YW50c1hNTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIElTdHlsZUNvbnN0YW50c1hNTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UsIElTdHlsZUNvbnN0YW50c1hNTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBJU3R5bGVDb25zdGFudHNYTUwuQ0RBVEFfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSwgSVN0eWxlQ29uc3RhbnRzWE1MLkNEQVRBX0JPUkRFUik7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgSVN0eWxlQ29uc3RhbnRzWE1MLkNEQVRBX1RFWFQpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgSVN0eWxlQ29uc3RhbnRzWE1MLlRBR19BVFRSSUJVVEVfTkFNRSk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfRE9DVFlQRV9ERUNMQVJBVElPTiwgSVN0eWxlQ29uc3RhbnRzWE1MLlRBR19OQU1FKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgSVN0eWxlQ29uc3RhbnRzWE1MLlRBR19OQU1FKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBJU3R5bGVDb25zdGFudHNYTUwuVEFHX0FUVFJJQlVURV9WQUxVRSk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIElTdHlsZUNvbnN0YW50c1hNTC5UQUdfQVRUUklCVVRFX0VRVUFMUyk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBJU3R5bGVDb25zdGFudHNYTUwuQ09NTUVOVF9CT1JERVIpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0UsIElTdHlsZUNvbnN0YW50c1hNTC5DT01NRU5UX0JPUkRFUik7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBJU3R5bGVDb25zdGFudHNYTUwuQ09NTUVOVF9URVhUKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9ET0NUWVBFX05BTUUsIElTdHlsZUNvbnN0YW50c1hNTC5ET0NUWVBFX05BTUUpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0NIQVJfUkVGRVJFTkNFLCBJU3R5bGVDb25zdGFudHNYTUwuRU5USVRZX1JFRkVSRU5DRSk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfUEVfUkVGRVJFTkNFLCBJU3R5bGVDb25zdGFudHNYTUwuRU5USVRZX1JFRkVSRU5DRSk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ09OVEVOVCwgSVN0eWxlQ29uc3RhbnRzWE1MLlBJX0NPTlRFTlQpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIElTdHlsZUNvbnN0YW50c1hNTC5QSV9CT1JERVIpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFLCBJU3R5bGVDb25zdGFudHNYTUwuUElfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9ERUNMQVJBVElPTl9PUEVOLCBJU3R5bGVDb25zdGFudHNYTUwuREVDTF9CT1JERVIpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0RFQ0xBUkFUSU9OX0NMT1NFLCBJU3R5bGVDb25zdGFudHNYTUwuREVDTF9CT1JERVIpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0RPQ1RZUEVfRVhURVJOQUxfSURfU1lTUkVGLCBJU3R5bGVDb25zdGFudHNYTUwuRE9DVFlQRV9FWFRFUk5BTF9JRF9TWVNSRUYpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0RPQ1RZUEVfRVhURVJOQUxfSURfUFVCUkVGLCBJU3R5bGVDb25zdGFudHNYTUwuRE9DVFlQRV9FWFRFUk5BTF9JRF9QVUJSRUYpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX0RPQ1RZUEVfRVhURVJOQUxfSURfUFVCTElDLCBJU3R5bGVDb25zdGFudHNYTUwuRE9DVFlQRV9FWFRFUk5BTF9JRCk7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfRE9DVFlQRV9FWFRFUk5BTF9JRF9TWVNURU0sIElTdHlsZUNvbnN0YW50c1hNTC5ET0NUWVBFX0VYVEVSTkFMX0lEKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlVOREVGSU5FRCwgSVN0eWxlQ29uc3RhbnRzWE1MLkNEQVRBX1RFWFQpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0UsIElTdHlsZUNvbnN0YW50c1hNTC5YTUxfQ09OVEVOVCk7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIFhNTFJlZ2lvbk1hcCBDbGFzcwotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhNTFJlZ2lvbk1hcCBnZXRJbnN0YW5jZSgpIHsKLQkJICByZXR1cm4geG1sUmVnaW9uTWFwOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGEgbWFwcGluZyBvZiBYTUwgUmVnaW9ucyB0byBTdHlsZSBDb25zdGFudHMKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIE1hcDxTdHJpbmcsU3RyaW5nPiBnZXRSZWdpb25NYXAoKSB7Ci0JCXJldHVybiByZWdpb25NYXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWE1MVGV4dEF0dHJpYnV0ZU1hcC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL1hNTFRleHRBdHRyaWJ1dGVNYXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzExNzlmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWE1MVGV4dEF0dHJpYnV0ZU1hcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKkNvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICphcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKkNvbnRyaWJ1dG9yczoKLSAqICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjEzNzc1IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0QXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkNvbG9ySGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwudXRpbC5FZGl0b3JVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuWE1MVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5zdHlsZS5JU3R5bGVDb25zdGFudHNYTUw7Ci0KLS8qKgotICogWE1sVGV4dEF0dHJpYnV0ZU1hcCBoYW5kbGVzIHRoZSBtYXBwaW5nIG9mIFhNTCBTdHlsZSBDb25zdGFudHMgdG8gVGV4dEF0dHJpYnV0ZXMuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxUZXh0QXR0cmlidXRlTWFwIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBIYXNoTWFwPFN0cmluZyxUZXh0QXR0cmlidXRlPiB0ZXh0QXR0cmlidXRlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLFRleHRBdHRyaWJ1dGU+KCk7Ci0JcHJpdmF0ZSBzdGF0aWMgWE1MVGV4dEF0dHJpYnV0ZU1hcCB4bWxUZXh0QXR0cmlidXRlTWFwID0gbmV3IFhNTFRleHRBdHRyaWJ1dGVNYXAoKTsgCi0JcHJpdmF0ZSBzdGF0aWMgSVByZWZlcmVuY2VTdG9yZSB4bWxQcmVmZXJlbmNlU3RvcmU7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgSVByZWZlcmVuY2VTdG9yZSBnZXRYTUxQcmVmZXJlbmNlU3RvcmUoKSB7Ci0JCXJldHVybiB4bWxQcmVmZXJlbmNlU3RvcmU7Ci0JfQotCXByaXZhdGUgWE1MVGV4dEF0dHJpYnV0ZU1hcCgpIHsKLQkJeG1sUHJlZmVyZW5jZVN0b3JlID0gWE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlhZGRYTUxUZXh0QXR0cmlidXRlKElTdHlsZUNvbnN0YW50c1hNTC5UQUdfTkFNRSk7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLlRBR19CT1JERVIpOwotCQlhZGRYTUxUZXh0QXR0cmlidXRlKElTdHlsZUNvbnN0YW50c1hNTC5UQUdfQVRUUklCVVRFX05BTUUpOwotCQlhZGRYTUxUZXh0QXR0cmlidXRlKElTdHlsZUNvbnN0YW50c1hNTC5UQUdfQVRUUklCVVRFX1ZBTFVFKTsKLQkJYWRkWE1MVGV4dEF0dHJpYnV0ZShJU3R5bGVDb25zdGFudHNYTUwuVEFHX0FUVFJJQlVURV9FUVVBTFMpOwotCQlhZGRYTUxUZXh0QXR0cmlidXRlKElTdHlsZUNvbnN0YW50c1hNTC5DT01NRU5UX0JPUkRFUik7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLkNPTU1FTlRfVEVYVCk7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLkNEQVRBX0JPUkRFUik7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLkNEQVRBX1RFWFQpOwotCQlhZGRYTUxUZXh0QXR0cmlidXRlKElTdHlsZUNvbnN0YW50c1hNTC5ERUNMX0JPUkRFUik7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLkRPQ1RZUEVfRVhURVJOQUxfSUQpOwotCQlhZGRYTUxUZXh0QXR0cmlidXRlKElTdHlsZUNvbnN0YW50c1hNTC5ET0NUWVBFX0VYVEVSTkFMX0lEX1BVQlJFRik7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLkRPQ1RZUEVfRVhURVJOQUxfSURfU1lTUkVGKTsKLQkJYWRkWE1MVGV4dEF0dHJpYnV0ZShJU3R5bGVDb25zdGFudHNYTUwuRE9DVFlQRV9OQU1FKTsKLQkJYWRkWE1MVGV4dEF0dHJpYnV0ZShJU3R5bGVDb25zdGFudHNYTUwuUElfQ09OVEVOVCk7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLlBJX0JPUkRFUik7Ci0JCWFkZFhNTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWE1MLlhNTF9DT05URU5UKTsKLQkJYWRkWE1MVGV4dEF0dHJpYnV0ZShJU3R5bGVDb25zdGFudHNYTUwuRU5USVRZX1JFRkVSRU5DRSk7Ci0JfQotCQotCS8qKgotCSAqIEFuIGluc3RhbmNlIG9mIFhNTFRleHRBdHRyaWJ1dGVNYXAuCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgWE1MVGV4dEF0dHJpYnV0ZU1hcCBnZXRJbnN0YW5jZSgpIHsKLQkJICByZXR1cm4geG1sVGV4dEF0dHJpYnV0ZU1hcDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhIE1hcCBvZiBTdHlsZSBDb25zdGFudHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFRleHQgQXR0cmlidXRlCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBNYXA8U3RyaW5nLFRleHRBdHRyaWJ1dGU+IGdldFRleHRBdHRyaWJ1dGVNYXAoKSB7Ci0JCXJldHVybiB0ZXh0QXR0cmlidXRlTWFwOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYWRkWE1MVGV4dEF0dHJpYnV0ZShTdHJpbmcgY29sb3JLZXkpIHsKLQkJaWYgKGdldFhNTFByZWZlcmVuY2VTdG9yZSgpICE9IG51bGwpIHsKLQkJCVN0cmluZyBwcmVmU3RyaW5nID0gZ2V0WE1MUHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKGNvbG9yS2V5KTsKLQkJCVN0cmluZ1tdIHN0eWxlUHJlZnMgPSBDb2xvckhlbHBlci51bnBhY2tTdHlsZVByZWZlcmVuY2VzKHByZWZTdHJpbmcpOwotCQkJaWYgKHN0eWxlUHJlZnMgIT0gbnVsbCkgewotCQkJCVJHQiBmb3JlZ3JvdW5kID0gQ29sb3JIZWxwZXIudG9SR0Ioc3R5bGVQcmVmc1swXSk7Ci0JCQkJUkdCIGJhY2tncm91bmQgPSBDb2xvckhlbHBlci50b1JHQihzdHlsZVByZWZzWzFdKTsKLQkJCQlib29sZWFuIGJvbGQgPSBCb29sZWFuLnZhbHVlT2Yoc3R5bGVQcmVmc1syXSkuYm9vbGVhblZhbHVlKCk7Ci0JCQkJYm9vbGVhbiBpdGFsaWMgPSBCb29sZWFuLnZhbHVlT2Yoc3R5bGVQcmVmc1szXSkuYm9vbGVhblZhbHVlKCk7Ci0JCQkJYm9vbGVhbiBzdHJpa2V0aHJvdWdoID0gQm9vbGVhbi52YWx1ZU9mKHN0eWxlUHJlZnNbNF0pLmJvb2xlYW5WYWx1ZSgpOwotCQkJCWJvb2xlYW4gdW5kZXJsaW5lID0gQm9vbGVhbi52YWx1ZU9mKHN0eWxlUHJlZnNbNV0pLmJvb2xlYW5WYWx1ZSgpOwotCQkJCWludCBzdHlsZSA9IFNXVC5OT1JNQUw7Ci0JCQkJaWYgKGJvbGQpIHsKLQkJCQkJc3R5bGUgPSBzdHlsZSB8IFNXVC5CT0xEOwotCQkJCX0KLQkJCQlpZiAoaXRhbGljKSB7Ci0JCQkJCXN0eWxlID0gc3R5bGUgfCBTV1QuSVRBTElDOwotCQkJCX0KLQkJCQlpZiAoc3RyaWtldGhyb3VnaCkgewotCQkJCQlzdHlsZSA9IHN0eWxlIHwgVGV4dEF0dHJpYnV0ZS5TVFJJS0VUSFJPVUdIOwotCQkJCX0KLQkJCQlpZiAodW5kZXJsaW5lKSB7Ci0JCQkJCXN0eWxlID0gc3R5bGUgfCBUZXh0QXR0cmlidXRlLlVOREVSTElORTsKLQkJCQl9Ci0KLQkJCQlUZXh0QXR0cmlidXRlIGNyZWF0ZVRleHRBdHRyaWJ1dGUgPSBjcmVhdGVUZXh0QXR0cmlidXRlKGZvcmVncm91bmQsIGJhY2tncm91bmQsIHN0eWxlKTsKLQkJCQl0ZXh0QXR0cmlidXRlTWFwLnB1dChjb2xvcktleSwgY3JlYXRlVGV4dEF0dHJpYnV0ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZSBjcmVhdGVUZXh0QXR0cmlidXRlKFJHQiBmb3JlZ3JvdW5kLCBSR0IgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBuZXcgVGV4dEF0dHJpYnV0ZSgoZm9yZWdyb3VuZCAhPSBudWxsKSA/IEVkaXRvclV0aWxpdHkuZ2V0Q29sb3IoZm9yZWdyb3VuZCkgOiBudWxsLCAoYmFja2dyb3VuZCAhPSBudWxsKSA/IEVkaXRvclV0aWxpdHkuZ2V0Q29sb3IoYmFja2dyb3VuZCkgOiBudWxsLCBzdHlsZSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL1hTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MjU5NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJbnRhbGlvLCBJbmMuIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gYnVnIDI1NjMzOSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5JU2VtYW50aWNIaWdobGlnaHRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nIGltcGxlbWVudHMgSVNlbWFudGljSGlnaGxpZ2h0aW5nIHsKLQotCXB1YmxpYyBYU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nKCkgewotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVQcmVmZXJlbmNlS2V5KCkgewotCQlyZXR1cm4gSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19BVFRSSUJVVEVfVkFMVUU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRFbmFibGVkUHJlZmVyZW5jZUtleSgpIHsKLQkJcmV0dXJuICJ4c2wudWkuaGlnaGxpZ2h0aW5nLnRhZy5lbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBQb3NpdGlvbltdIGNvbnN1bWVzKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKSB7Ci0JCUFycmF5TGlzdCBhcnJheSA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJyYXkuYWRkQWxsKGNyZWF0ZVNlbWFudGljUG9zaXRpb25zKHJlZ2lvbiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FKSk7Ci0JCVBvc2l0aW9uW10gYWxsUG9zID0gbmV3IFBvc2l0aW9uW2FycmF5LnNpemUoKV07Ci0JCWlmICghYXJyYXkuaXNFbXB0eSgpKSB7Ci0JCQlhcnJheS50b0FycmF5KGFsbFBvcyk7Ci0JCX0KLQkJcmV0dXJuIGFsbFBvczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL1hTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNmJhZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3N0eWxlL1hTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEludGFsaW8sIEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMjU2MzM5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLklTZW1hbnRpY0hpZ2hsaWdodGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi1wdWJsaWMgY2xhc3MgWFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmcgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nIGltcGxlbWVudHMgSVNlbWFudGljSGlnaGxpZ2h0aW5nIHsKLQotCXB1YmxpYyBYU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZygpIHsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0eWxlUHJlZmVyZW5jZUtleSgpIHsKLQkJcmV0dXJuIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX1ZBTFVFOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkoKSB7Ci0JCXJldHVybiAieHNsLnVpLmhpZ2hsaWdodGluZy50YWcuZW5hYmxlZCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgUG9zaXRpb25bXSBjb25zdW1lcyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQlBcnJheUxpc3QgYXJyYXkgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFycmF5LmFkZEFsbChjcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyhyZWdpb24sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUpKTsKLQkJUG9zaXRpb25bXSBhbGxQb3MgPSBuZXcgUG9zaXRpb25bYXJyYXkuc2l6ZSgpXTsKLQkJaWYgKCFhcnJheS5pc0VtcHR5KCkpIHsKLQkJCWFycmF5LnRvQXJyYXkoYWxsUG9zKTsKLQkJfQotCQlyZXR1cm4gYWxsUG9zOwl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xSZWdpb25NYXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xSZWdpb25NYXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJjMjZhMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWFNMUmVnaW9uTWFwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIxMzc3NSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotLyoqCi0gKiBYU0xSZWdpb25NYXAgaGFuZGxlcyB0aGUgbWFwcGluZyBvZiBYTUwgUmVnaW9ucyB0byBYU0wgU3R5bGUgQ29uc3RhbnRzLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWFNMUmVnaW9uTWFwIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+IHJlZ2lvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7Ci0JcHJpdmF0ZSBzdGF0aWMgWFNMUmVnaW9uTWFwIHhzbFJlZ2lvbk1hcCA9IG5ldyBYU0xSZWdpb25NYXAoKTsgCi0JCi0JcHJpdmF0ZSBYU0xSZWdpb25NYXAoKSB7Ci0JCXJlZ2lvbk1hcC5wdXQoRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UsIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UsIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQk9SREVSKTsKLQkJcmVnaW9uTWFwLnB1dChET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX05BTUUpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBJU3R5bGVDb25zdGFudHNYU0wuVEFHX05BTUUpOwotCQlyZWdpb25NYXAucHV0KERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQVRUUklCVVRFX1ZBTFVFKTsKLQkKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBYU0xSZWdpb25NYXAuCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNMUmVnaW9uTWFwIGdldEluc3RhbmNlKCkgewotCQkgIHJldHVybiB4c2xSZWdpb25NYXA7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYSBNQVAgb2YgWFNMIFJlZ2lvbnMgYW5kIFN0eWxlIENvbnN0YW50cy4KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIE1hcDxTdHJpbmcsU3RyaW5nPiBnZXRSZWdpb25NYXAoKSB7Ci0JCXJldHVybiByZWdpb25NYXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODEyOTA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxMCBJbnRhbGlvLCBJbmMuIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gYnVnIDI1NjMzOSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBidWcgMzA3OTI0IC0gRml4IE5QRSB3aGVuIHRleHRSZWdpb24gaXMgbnVsbC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLklTZW1hbnRpY0hpZ2hsaWdodGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi1wdWJsaWMgY2xhc3MgWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmcgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nIGltcGxlbWVudHMgSVNlbWFudGljSGlnaGxpZ2h0aW5nIHsKLQotCXB1YmxpYyBYU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZygpIHsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0eWxlUHJlZmVyZW5jZUtleSgpIHsKLQkJcmV0dXJuIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfQk9SREVSOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkoKSB7Ci0JCXJldHVybiAieHNsLnVpLmhpZ2hsaWdodGluZy50YWcuZW5hYmxlZCI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgUG9zaXRpb25bXSBjb25zdW1lcyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQkKLQkJTGlzdCBvcGVuUG9zID0gY3JlYXRlU2VtYW50aWNQb3NpdGlvbnMocmVnaW9uLmdldEZpcnN0UmVnaW9uKCksIHJlZ2lvbiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4pOwotCQlMaXN0IGVuZE9wZW5Qb3MgPSBjcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyhyZWdpb24uZ2V0Rmlyc3RSZWdpb24oKSwgcmVnaW9uLCBET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4pOwotCQlMaXN0IGVtcHR5VGFnQ2xvc2UgPSBjcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyhyZWdpb24sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRSk7Ci0JCUxpc3QgY2xvc2VQb3MgPSBjcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyhyZWdpb24sCURPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRSk7Ci0JCUFycmF5TGlzdCBhcnJwb3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWFycnBvcy5hZGRBbGwob3BlblBvcyk7Ci0JCWFycnBvcy5hZGRBbGwoY2xvc2VQb3MpOwotCQlhcnJwb3MuYWRkQWxsKGVuZE9wZW5Qb3MpOwotCQlhcnJwb3MuYWRkQWxsKGVtcHR5VGFnQ2xvc2UpOwotCQlQb3NpdGlvbltdIGFsbFBvcyA9IG5ldyBQb3NpdGlvblthcnJwb3Muc2l6ZSgpXTsKLQkJaWYgKCFhcnJwb3MuaXNFbXB0eSgpKSB7Ci0JCQlhcnJwb3MudG9BcnJheShhbGxQb3MpOwotCQl9Ci0JCXJldHVybiBhbGxQb3M7Ci0JfQotCQotCXByb3RlY3RlZCBMaXN0IGNyZWF0ZVNlbWFudGljUG9zaXRpb25zKElUZXh0UmVnaW9uIHRleHRSZWdpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uLCBTdHJpbmcgcmVnaW9uVHlwZSkgewotCQlBcnJheUxpc3QgYXJycG9zID0gbmV3IEFycmF5TGlzdCgpOwotCQlpZiAodGV4dFJlZ2lvbiA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQkJfQotCQotCQlpZiAocmVnaW9uVHlwZS5lcXVhbHModGV4dFJlZ2lvbi5nZXRUeXBlKCkpKSB7Ci0JCQlQb3NpdGlvbiBwb3MgPSBuZXcgUG9zaXRpb24ocmVnaW9uCi0JCQkJCS5nZXRTdGFydE9mZnNldCh0ZXh0UmVnaW9uKSwgdGV4dFJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCQlhcnJwb3MuYWRkKHBvcyk7Ci0JCX0KLQkJcmV0dXJuIGFycnBvczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM0NTBiZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDEwIEludGFsaW8sIEluYy4gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMjU2MzM5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5JU2VtYW50aWNIaWdobGlnaHRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZyBleHRlbmRzIEFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmcgaW1wbGVtZW50cyBJU2VtYW50aWNIaWdobGlnaHRpbmcgewotCi0JcHVibGljIFhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZygpIHsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0eWxlUHJlZmVyZW5jZUtleSgpIHsKLQkJcmV0dXJuIElTdHlsZUNvbnN0YW50c1hTTC5UQUdfTkFNRTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRFbmFibGVkUHJlZmVyZW5jZUtleSgpIHsKLQkJcmV0dXJuICJ4c2wudWkuaGlnaGxpZ2h0aW5nLnRhZy5lbmFibGVkIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBQb3NpdGlvbltdIGNvbnN1bWVzKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKSB7Ci0JCUFycmF5TGlzdCBhcnJheSA9IG5ldyBBcnJheUxpc3QoKTsKLQkJYXJyYXkuYWRkQWxsKGNyZWF0ZVNlbWFudGljUG9zaXRpb25zKHJlZ2lvbiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUpKTsKLQkJUG9zaXRpb25bXSBhbGxQb3MgPSBuZXcgUG9zaXRpb25bYXJyYXkuc2l6ZSgpXTsKLQkJaWYgKCFhcnJheS5pc0VtcHR5KCkpIHsKLQkJCWFycmF5LnRvQXJyYXkoYWxsUG9zKTsKLQkJfQotCQlyZXR1cm4gYWxsUG9zOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xUZXh0QXR0cmlidXRlTWFwLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvc3R5bGUvWFNMVGV4dEF0dHJpYnV0ZU1hcC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODI3NDA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC9zdHlsZS9YU0xUZXh0QXR0cmlidXRlTWFwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIxMzc3NSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5Db2xvckhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnV0aWwuRWRpdG9yVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luOwotCi0vKioKLSAqIEhhbmRsZXMgdGhlIG1hcHBpbmcgb2YgdGhlIFN0eWxlIENvbnN0YW50cyB0byBUZXh0IEF0dHJpYnV0ZXMgZm9yIFhTTC4KLSAqIAotICogQGF1dGhvciBEYXZpZCBDYXJ2ZXIKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTFRleHRBdHRyaWJ1dGVNYXAgewotCQotCXByaXZhdGUgc3RhdGljIEhhc2hNYXA8U3RyaW5nLFRleHRBdHRyaWJ1dGU+IHRleHRBdHRyaWJ1dGVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsVGV4dEF0dHJpYnV0ZT4oKTsKLQlwcml2YXRlIHN0YXRpYyBYU0xUZXh0QXR0cmlidXRlTWFwIHhzbFRleHRBdHRyaWJ1dGVNYXAgPSBuZXcgWFNMVGV4dEF0dHJpYnV0ZU1hcCgpOyAKLQlwcml2YXRlIHN0YXRpYyBJUHJlZmVyZW5jZVN0b3JlIHhzbFByZWZlcmVuY2VTdG9yZTsKLQkKLQlwcml2YXRlIHN0YXRpYyBJUHJlZmVyZW5jZVN0b3JlIGdldFhzbFByZWZlcmVuY2VTdG9yZSgpIHsKLQkJcmV0dXJuIHhzbFByZWZlcmVuY2VTdG9yZTsKLQl9Ci0JcHJpdmF0ZSBYU0xUZXh0QXR0cmlidXRlTWFwKCkgewotCQl4c2xQcmVmZXJlbmNlU3RvcmUgPSBYU0xVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCWFkZFhTTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19OQU1FKTsKLQkJYWRkWFNMVGV4dEF0dHJpYnV0ZShJU3R5bGVDb25zdGFudHNYU0wuVEFHX0JPUkRFUik7Ci0JCWFkZFhTTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19BVFRSSUJVVEVfTkFNRSk7Ci0JCWFkZFhTTFRleHRBdHRyaWJ1dGUoSVN0eWxlQ29uc3RhbnRzWFNMLlRBR19BVFRSSUJVVEVfVkFMVUUpOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFhTTFRleHRBdHRyaWJ1dGVNYXAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0xUZXh0QXR0cmlidXRlTWFwIGdldEluc3RhbmNlKCkgewotCQkgIHJldHVybiB4c2xUZXh0QXR0cmlidXRlTWFwOwotCX0KLQkKLQkvKioKLQkgKiBHZXQncyBhIE1hcCBvZiBYU0wgU3R5bGUgQ29uc3RhbnRzIHRvIFRleHQgQXR0cmlidXRlcy4KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIE1hcDxTdHJpbmcsVGV4dEF0dHJpYnV0ZT4gZ2V0VGV4dEF0dHJpYnV0ZU1hcCgpIHsKLQkJcmV0dXJuIHRleHRBdHRyaWJ1dGVNYXA7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGFkZFhTTFRleHRBdHRyaWJ1dGUoU3RyaW5nIGNvbG9yS2V5KSB7Ci0JCWlmIChnZXRYc2xQcmVmZXJlbmNlU3RvcmUoKSAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgcHJlZlN0cmluZyA9IGdldFhzbFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhjb2xvcktleSk7Ci0JCQlTdHJpbmdbXSBzdHlsZVByZWZzID0gQ29sb3JIZWxwZXIudW5wYWNrU3R5bGVQcmVmZXJlbmNlcyhwcmVmU3RyaW5nKTsKLQkJCWlmIChzdHlsZVByZWZzICE9IG51bGwpIHsKLQkJCQlSR0IgZm9yZWdyb3VuZCA9IENvbG9ySGVscGVyLnRvUkdCKHN0eWxlUHJlZnNbMF0pOwotCQkJCVJHQiBiYWNrZ3JvdW5kID0gQ29sb3JIZWxwZXIudG9SR0Ioc3R5bGVQcmVmc1sxXSk7Ci0JCQkJYm9vbGVhbiBib2xkID0gQm9vbGVhbi52YWx1ZU9mKHN0eWxlUHJlZnNbMl0pLmJvb2xlYW5WYWx1ZSgpOwotCQkJCWJvb2xlYW4gaXRhbGljID0gQm9vbGVhbi52YWx1ZU9mKHN0eWxlUHJlZnNbM10pLmJvb2xlYW5WYWx1ZSgpOwotCQkJCWJvb2xlYW4gc3RyaWtldGhyb3VnaCA9IEJvb2xlYW4udmFsdWVPZihzdHlsZVByZWZzWzRdKS5ib29sZWFuVmFsdWUoKTsKLQkJCQlib29sZWFuIHVuZGVybGluZSA9IEJvb2xlYW4udmFsdWVPZihzdHlsZVByZWZzWzVdKS5ib29sZWFuVmFsdWUoKTsKLQkJCQlpbnQgc3R5bGUgPSBTV1QuTk9STUFMOwotCQkJCWlmIChib2xkKSB7Ci0JCQkJCXN0eWxlID0gc3R5bGUgfCBTV1QuQk9MRDsKLQkJCQl9Ci0JCQkJaWYgKGl0YWxpYykgewotCQkJCQlzdHlsZSA9IHN0eWxlIHwgU1dULklUQUxJQzsKLQkJCQl9Ci0JCQkJaWYgKHN0cmlrZXRocm91Z2gpIHsKLQkJCQkJc3R5bGUgPSBzdHlsZSB8IFRleHRBdHRyaWJ1dGUuU1RSSUtFVEhST1VHSDsKLQkJCQl9Ci0JCQkJaWYgKHVuZGVybGluZSkgewotCQkJCQlzdHlsZSA9IHN0eWxlIHwgVGV4dEF0dHJpYnV0ZS5VTkRFUkxJTkU7Ci0JCQkJfQotCi0JCQkJVGV4dEF0dHJpYnV0ZSBjcmVhdGVUZXh0QXR0cmlidXRlID0gY3JlYXRlVGV4dEF0dHJpYnV0ZShmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBzdHlsZSk7Ci0JCQkJdGV4dEF0dHJpYnV0ZU1hcC5wdXQoY29sb3JLZXksIGNyZWF0ZVRleHRBdHRyaWJ1dGUpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFRleHRBdHRyaWJ1dGUgY3JlYXRlVGV4dEF0dHJpYnV0ZShSR0IgZm9yZWdyb3VuZCwgUkdCIGJhY2tncm91bmQsIGludCBzdHlsZSkgewotCQlyZXR1cm4gbmV3IFRleHRBdHRyaWJ1dGUoKGZvcmVncm91bmQgIT0gbnVsbCkgPyBFZGl0b3JVdGlsaXR5LmdldENvbG9yKGZvcmVncm91bmQpIDogbnVsbCwgKGJhY2tncm91bmQgIT0gbnVsbCkgPyBFZGl0b3JVdGlsaXR5LmdldENvbG9yKGJhY2tncm91bmQpIDogbnVsbCwgc3R5bGUpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3RlbXBsYXRlcy9UZW1wbGF0ZUNvbnRleHRUeXBlWFNMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdGVtcGxhdGVzL1RlbXBsYXRlQ29udGV4dFR5cGVYU0wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlZDkxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdGVtcGxhdGVzL1RlbXBsYXRlQ29udGV4dFR5cGVYU0wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBidWcgMjg5NDk4IC0gQWRkZWQgYWRkaXRpb25hbCBjb250ZXh0IHR5cGVzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuR2xvYmFsVGVtcGxhdGVWYXJpYWJsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRlbXBsYXRlcy5FbmNvZGluZ1RlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhNTDsKLQotcHVibGljIGNsYXNzIFRlbXBsYXRlQ29udGV4dFR5cGVYU0wgZXh0ZW5kcyBUZW1wbGF0ZUNvbnRleHRUeXBlCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMX1RBRyA9ICJ4c2xfdGFnIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTF9BVFRSID0gInhzbF9hdHRyIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTF9ORVcgPSAieHNsX25ldyI7IC8vJE5PTi1OTFMtMSQKLQkKLQkKLQlwdWJsaWMgVGVtcGxhdGVDb250ZXh0VHlwZVhTTCgpCi0JewotCQlzdXBlcigpOwotCQlhZGRSZXNvbHZlcihuZXcgR2xvYmFsVGVtcGxhdGVWYXJpYWJsZXMuQ3Vyc29yKCkpOwotCQlhZGRSZXNvbHZlcihuZXcgR2xvYmFsVGVtcGxhdGVWYXJpYWJsZXMuRGF0ZSgpKTsKLQkJYWRkUmVzb2x2ZXIobmV3IEdsb2JhbFRlbXBsYXRlVmFyaWFibGVzLkRvbGxhcigpKTsKLQkJYWRkUmVzb2x2ZXIobmV3IEdsb2JhbFRlbXBsYXRlVmFyaWFibGVzLkxpbmVTZWxlY3Rpb24oKSk7Ci0JCWFkZFJlc29sdmVyKG5ldyBHbG9iYWxUZW1wbGF0ZVZhcmlhYmxlcy5UaW1lKCkpOwotCQlhZGRSZXNvbHZlcihuZXcgR2xvYmFsVGVtcGxhdGVWYXJpYWJsZXMuVXNlcigpKTsKLQkJYWRkUmVzb2x2ZXIobmV3IEdsb2JhbFRlbXBsYXRlVmFyaWFibGVzLldvcmRTZWxlY3Rpb24oKSk7Ci0JCWFkZFJlc29sdmVyKG5ldyBHbG9iYWxUZW1wbGF0ZVZhcmlhYmxlcy5ZZWFyKCkpOwotCQlhZGRSZXNvbHZlcihuZXcgRW5jb2RpbmdUZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYTUwoKSk7Ci0JCWFkZFJlc29sdmVyKG5ldyBWZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC90ZW1wbGF0ZXMvVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3RlbXBsYXRlcy9WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNmJjNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3RlbXBsYXRlcy9WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gZXh0ZXJuYWxpemUgc3RyaW5ncy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlNpbXBsZVRlbXBsYXRlVmFyaWFibGVSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wgZXh0ZW5kcyBTaW1wbGVUZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXIKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVF9WRVJTSU9OXzFfMCA9ICIxLjAiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlNJT05fVFlQRSA9IGdldFZlcnNpb25UeXBlKCk7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VmVyc2lvblR5cGUoKQotCXsKLQkJcmV0dXJuICJ4c2xfdmVyc2lvbiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTCgpCi0JewotCQlzdXBlcihWRVJTSU9OX1RZUEUsIE1lc3NhZ2VzLlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJQYWdlRGVzY3JpcHRpb24pOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgcmVzb2x2ZShUZW1wbGF0ZUNvbnRleHQgY29udGV4dCkKLQl7Ci0JCXJldHVybiBYU0xUX1ZFUlNJT05fMV8wOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC90ZW1wbGF0ZXMvWFNMVGVtcGxhdGVzUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3RlbXBsYXRlcy9YU0xUZW1wbGF0ZXNQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MzZlMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3RlbXBsYXRlcy9YU0xUZW1wbGF0ZXNQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyOTcwMjcgLSBjb21waWxhdGlvbiBlcnJvciBvbiBnZXRUZW1wbGF0ZVN0b3JlKCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXJFeHRlbnNpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuQ29udGV4dFR5cGVSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5Eb2N1bWVudFRlbXBsYXRlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLnBlcnNpc3RlbmNlLlRlbXBsYXRlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci50ZW1wbGF0ZXMuQWJzdHJhY3RUZW1wbGF0ZXNQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuWFBhdGhVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWw7Ci0KLS8qKgotICogVGhlIFhTTCBUZW1wbGF0ZXMgUGFnZSBpcyB1c2VkIGJ5IHRoZSBUZW1wbGF0ZXNWaWV3ZXIgdG8gZGlzcGxheSBhdmFpbGFibGUKLSAqIFhTTCBUZW1wbGF0ZXMgZm9yIHVzZSB3aXRoaW4gYSBYU0wgU3RydWN0dXJlZCBUZXh0IEVkaXRvci4gSXQgaXMgcHJvdmlkZWQgYXMKLSAqIGFuIGV4YW1wbGUgb24gaG93IG90aGVyIFNTRSBlZGl0b3JzIGNhbiBjb250cmlidXRlIHRoZWlyIHRlbXBsYXRlcyB0byB0aGUKLSAqIHBhZ2UuCi0gKiAKLSAqIEBhdXRob3IgZGNhcnZlcgotICogCi0gKi8KLQotcHVibGljIGNsYXNzIFhTTFRlbXBsYXRlc1BhZ2UgZXh0ZW5kcyBBYnN0cmFjdFRlbXBsYXRlc1BhZ2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZFUkVOQ0VfUEFHRV9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnVpLlhQYXRoIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGVtcGxhdGVTdG9yZSBURU1QTEFURV9TVE9SRSA9IFhQYXRoVUlQbHVnaW4KLQkJCS5nZXREZWZhdWx0KCkuZ2V0WFBhdGhUZW1wbGF0ZVN0b3JlKCk7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIFBSRUZFUkVOQ0VfU1RPUkUgPSBYUGF0aFVJUGx1Z2luCi0JCQkuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29udGV4dFR5cGVSZWdpc3RyeSBURU1QTEFURV9DT05URVhUX1JFR0lTVFJZID0gWFBhdGhVSVBsdWdpbgotCQkJLmdldERlZmF1bHQoKS5nZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5KCk7Ci0KLQlwcml2YXRlIFhTTEVkaXRvciBmVGV4dEVkaXRvcjsKLQotCXB1YmxpYyBYU0xUZW1wbGF0ZXNQYWdlKFhTTEVkaXRvciB4c2xUZXh0RWRpdG9yKSB7Ci0JCXN1cGVyKHhzbFRleHRFZGl0b3IsIHhzbFRleHRFZGl0b3IuZ2V0VGV4dFZpZXdlcigpKTsKLQkJZlRleHRFZGl0b3IgPSB4c2xUZXh0RWRpdG9yOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmdbXSBnZXRDb250ZXh0VHlwZUlkcyhJRG9jdW1lbnQgZG9jdW1lbnQsIGludCBvZmZzZXQpIHsKLQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7IFRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aC5YUEFUSCwKLQkJCQlUZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguQVhJUywKLQkJCQlUZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGguT1BFUkFUT1IgfTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udGV4dFR5cGVSZWdpc3RyeSBnZXRDb250ZXh0VHlwZVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gVEVNUExBVEVfQ09OVEVYVF9SRUdJU1RSWTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByZWZlcmVuY2VQYWdlSWQoKSB7Ci0JCXJldHVybiBQUkVGRVJFTkNFX1BBR0VfSUQ7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElQcmVmZXJlbmNlU3RvcmUgZ2V0VGVtcGxhdGVQcmVmZXJlbmNlU3RvcmUoKSB7Ci0JCXJldHVybiBQUkVGRVJFTkNFX1NUT1JFOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBzaW5jZSAxLjEgQ2hhbmdlZCBkdWUgdG8gcGxhdGZvcm0gY2hhbmdlCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFRlbXBsYXRlU3RvcmUgZ2V0VGVtcGxhdGVTdG9yZSgpIHsKLQkJcmV0dXJuIFRFTVBMQVRFX1NUT1JFOwotCX0KLQotCS8vIFRoaXMgY29kZSBiYXNlZCBvbiB0aGUgSmF2YVRlbXBsYXRlc1BhZ2UgY29kZS4gTW9kaWZpZWQgdG8gd29yayB3aXRoCi0JLy8gU1NFCi0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBpbnNlcnRUZW1wbGF0ZShUZW1wbGF0ZSB0ZW1wbGF0ZSwgSURvY3VtZW50IGRvY3VtZW50KSB7Ci0JCUlTb3VyY2VWaWV3ZXIgY29udGV4dFZpZXdlciA9IGZUZXh0RWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJSVRleHRTZWxlY3Rpb24gdGV4dFNlbGVjdGlvbiA9IChJVGV4dFNlbGVjdGlvbikgY29udGV4dFZpZXdlcgotCQkJCS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLmdldFNlbGVjdGlvbigpOwotCi0JCWlmICghaXNWYWxpZFRlbXBsYXRlKGRvY3VtZW50LCB0ZW1wbGF0ZSwgdGV4dFNlbGVjdGlvbi5nZXRPZmZzZXQoKSwKLQkJCQl0ZXh0U2VsZWN0aW9uLmdldExlbmd0aCgpKSkKLQkJCXJldHVybjsKLQotCQliZWdpbkNvbXBvdW5kQ2hhbmdlKGNvbnRleHRWaWV3ZXIpOwotCi0JCS8qCi0JCSAqIFRoZSBFZGl0b3IgY2hlY2tzIHdoZXRoZXIgYSBjb21wbGV0aW9uIGZvciBhIHdvcmQgZXhpc3RzIGJlZm9yZSBpdAotCQkgKiBhbGxvd3MgZm9yIHRoZSB0ZW1wbGF0ZSB0byBiZSBhcHBsaWVkLiBXZSBwaWNrdXAgdGhlIGN1cnJlbnQgdGV4dCBhdAotCQkgKiB0aGUgc2VsZWN0aW9uIHBvc2l0aW9uIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIGZpcnN0IGNoYXIgb2YgdGhlCi0JCSAqIHRlbXBsYXRlIG5hbWUgZm9yIHRoaXMgdG8gc3VjY2VlZC4gQW5vdGhlciBhZHZhbnRhZ2UgYnkgdGhpcyBtZXRob2QKLQkJICogaXMgdGhhdCB0aGUgdGVtcGxhdGUgcmVwbGFjZXMgdGhlIHNlbGVjdGVkIHRleHQgcHJvdmlkZWQgdGhlCi0JCSAqIHNlbGVjdGlvbiBieSBpdHNlbGYgaXMgbm90IHVzZWQgaW4gdGhlIHRlbXBsYXRlIHBhdHRlcm4uCi0JCSAqLwotCi0JCVN0cmluZyBzYXZlZFRleHQ7Ci0KLQkJdHJ5IHsKLQkJCXNhdmVkVGV4dCA9IGRvY3VtZW50LmdldCh0ZXh0U2VsZWN0aW9uLmdldE9mZnNldCgpLCB0ZXh0U2VsZWN0aW9uCi0JCQkJCS5nZXRMZW5ndGgoKSk7Ci0KLQkJCWlmIChzYXZlZFRleHQubGVuZ3RoKCkgPT0gMCkgewotCQkJCVN0cmluZyBwcmVmaXggPSBnZXRJZGVudGlmaWVyUGFydChkb2N1bWVudCwgdGVtcGxhdGUsCi0JCQkJCQl0ZXh0U2VsZWN0aW9uLmdldE9mZnNldCgpLCB0ZXh0U2VsZWN0aW9uLmdldExlbmd0aCgpKTsKLQotCQkJCWlmIChwcmVmaXgubGVuZ3RoKCkgPiAwCi0JCQkJCQkmJiAhdGVtcGxhdGUuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgocHJlZml4KSkgewotCQkJCQlyZXR1cm47Ci0JCQkJfQotCi0JCQkJaWYgKHByZWZpeC5sZW5ndGgoKSA+IDApIHsKLQkJCQkJY29udGV4dFZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHRleHRTZWxlY3Rpb24uZ2V0T2Zmc2V0KCkKLQkJCQkJCQktIHByZWZpeC5sZW5ndGgoKSwgcHJlZml4Lmxlbmd0aCgpKTsKLQotCQkJCQl0ZXh0U2VsZWN0aW9uID0gKElUZXh0U2VsZWN0aW9uKSBjb250ZXh0Vmlld2VyCi0JCQkJCQkJLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfQotCi0JCQlkb2N1bWVudC5yZXBsYWNlKHRleHRTZWxlY3Rpb24uZ2V0T2Zmc2V0KCksIHRleHRTZWxlY3Rpb24KLQkJCQkJLmdldExlbmd0aCgpLCB0ZW1wbGF0ZS5nZXROYW1lKCkuc3Vic3RyaW5nKDAsIDEpKTsKLQotCQl9IGNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllbmRDb21wb3VuZENoYW5nZShjb250ZXh0Vmlld2VyKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCVJlZ2lvbiByZWdpb24gPSBuZXcgUmVnaW9uKHRleHRTZWxlY3Rpb24uZ2V0T2Zmc2V0KCkgKyAxLCAwKTsKLQotCQljb250ZXh0Vmlld2VyLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuc2V0U2VsZWN0aW9uKAotCQkJCW5ldyBUZXh0U2VsZWN0aW9uKHRleHRTZWxlY3Rpb24uZ2V0T2Zmc2V0KCksIDEpKTsKLQotCQlEb2N1bWVudFRlbXBsYXRlQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dChkb2N1bWVudCwgdGVtcGxhdGUsCi0JCQkJdGV4dFNlbGVjdGlvbi5nZXRPZmZzZXQoKSwgdGV4dFNlbGVjdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJY29udGV4dC5zZXRWYXJpYWJsZSgic2VsZWN0aW9uIiwgc2F2ZWRUZXh0KTsgLy8kTk9OLU5MUy0xJAotCi0JCWlmIChjb250ZXh0LmdldEtleSgpLmxlbmd0aCgpID09IDApIHsKLQkJCXRyeSB7Ci0JCQkJZG9jdW1lbnQucmVwbGFjZSh0ZXh0U2VsZWN0aW9uLmdldE9mZnNldCgpLCAxLCBzYXZlZFRleHQpOwotCQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWVuZENvbXBvdW5kQ2hhbmdlKGNvbnRleHRWaWV3ZXIpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JCUlUZXh0Vmlld2VyIHZpZXdlciA9IGZUZXh0RWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJaW50IG9mZnNldCA9IHZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuZ2V0Q2FyZXRPZmZzZXQoKTsKLQkJaW50IHN0YXJ0TGVuZ3RoID0gb2Zmc2V0IC0gcmVnaW9uLmdldE9mZnNldCgpOwotCQlTdHJpbmcgcGF0dGVybiA9IHRlbXBsYXRlLmdldFBhdHRlcm4oKS5yZXBsYWNlKCIke2N1cnNvcn0iLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBuZXcgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsKAotCQkJCXBhdHRlcm4sIG9mZnNldCwgMCwgc3RhcnRMZW5ndGggKyBwYXR0ZXJuLmxlbmd0aCgpLAotCQkJCWdldEltYWdlKHRlbXBsYXRlKSwgdGVtcGxhdGUuZ2V0TmFtZSgpLCBudWxsLCBudWxsLCAwKTsKLQotCQlmVGV4dEVkaXRvci5nZXRTaXRlKCkuZ2V0UGFnZSgpLmFjdGl2YXRlKGZUZXh0RWRpdG9yKTsKLQkJcHJvcG9zYWwuYXBwbHkoZlRleHRFZGl0b3IuZ2V0VGV4dFZpZXdlcigpLCAnICcsIDAsIG9mZnNldCk7Ci0JCXZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Q2FyZXRPZmZzZXQob2Zmc2V0ICsgcGF0dGVybi5sZW5ndGgoKSAtIDEpOwotCQllbmRDb21wb3VuZENoYW5nZShjb250ZXh0Vmlld2VyKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkVGVtcGxhdGUoSURvY3VtZW50IGRvY3VtZW50LCBUZW1wbGF0ZSB0ZW1wbGF0ZSwKLQkJCWludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLQotCQlTdHJpbmdbXSBjb250ZXh0SWRzID0gZ2V0Q29udGV4dFR5cGVJZHMoZG9jdW1lbnQsIG9mZnNldCk7Ci0KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZXh0SWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoY29udGV4dElkc1tpXS5lcXVhbHModGVtcGxhdGUuZ2V0Q29udGV4dFR5cGVJZCgpKSkgewotCQkJCURvY3VtZW50VGVtcGxhdGVDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KGRvY3VtZW50LAotCQkJCQkJdGVtcGxhdGUsIG9mZnNldCwgbGVuZ3RoKTsKLQkJCQlyZXR1cm4gY29udGV4dC5jYW5FdmFsdWF0ZSh0ZW1wbGF0ZSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogVW5kb21hbmFnZXIgLSBlbmQgY29tcG91bmQgY2hhbmdlCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqLwotCi0JcHJpdmF0ZSB2b2lkIGVuZENvbXBvdW5kQ2hhbmdlKElTb3VyY2VWaWV3ZXIgdmlld2VyKSB7Ci0KLQkJaWYgKHZpZXdlciBpbnN0YW5jZW9mIElUZXh0Vmlld2VyRXh0ZW5zaW9uKQotCQkJKChJVGV4dFZpZXdlckV4dGVuc2lvbikgdmlld2VyKS5nZXRSZXdyaXRlVGFyZ2V0KCkKLQkJCQkJLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0JfQotCi0JLyoqCi0JICogVW5kb21hbmFnZXIgLSBiZWdpbiBhIGNvbXBvdW5kIGNoYW5nZQotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKi8KLQotCXByaXZhdGUgdm9pZCBiZWdpbkNvbXBvdW5kQ2hhbmdlKElTb3VyY2VWaWV3ZXIgdmlld2VyKSB7Ci0KLQkJaWYgKHZpZXdlciBpbnN0YW5jZW9mIElUZXh0Vmlld2VyRXh0ZW5zaW9uKQotCQkJKChJVGV4dFZpZXdlckV4dGVuc2lvbikgdmlld2VyKS5nZXRSZXdyaXRlVGFyZ2V0KCkKLQkJCQkJLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgY29udGV4dAotCSAqIAotCSAqIEBwYXJhbSBkb2N1bWVudAotCSAqIEBwYXJhbSB0ZW1wbGF0ZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcGFyYW0gbGVuZ3RoCi0JICogQHJldHVybiB0aGUgY29udGV4dAotCSAqLwotCi0JcHJpdmF0ZSBEb2N1bWVudFRlbXBsYXRlQ29udGV4dCBnZXRDb250ZXh0KElEb2N1bWVudCBkb2N1bWVudCwKLQkJCVRlbXBsYXRlIHRlbXBsYXRlLCBmaW5hbCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0KLQkJVGVtcGxhdGVDb250ZXh0VHlwZSBjb250ZXh0VHlwZSA9IFhQYXRoVUlQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJLmdldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnkoKS5nZXRDb250ZXh0VHlwZSgKLQkJCQkJCXRlbXBsYXRlLmdldENvbnRleHRUeXBlSWQoKSk7Ci0KLQkJcmV0dXJuIG5ldyBEb2N1bWVudFRlbXBsYXRlQ29udGV4dChjb250ZXh0VHlwZSwgZG9jdW1lbnQsIG9mZnNldCwKLQkJCQlsZW5ndGgpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgeG1sIGlkZW50aWZpZXIgdGVybWluYXRlZCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0Ci0JICogCi0JICogQHBhcmFtIGRvY3VtZW50Ci0JICogQHBhcmFtIHRlbXBsYXRlCi0JICogQHBhcmFtIG9mZnNldAotCSAqIEBwYXJhbSBsZW5ndGgKLQkgKiBAcmV0dXJuIHRoZSBpZGVudGlmaWVyIHBhcnQKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0KLQlwcml2YXRlIFN0cmluZyBnZXRJZGVudGlmaWVyUGFydChJRG9jdW1lbnQgZG9jdW1lbnQsIFRlbXBsYXRlIHRlbXBsYXRlLAotCQkJaW50IG9mZnNldCwgaW50IGxlbmd0aCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJcmV0dXJuIGdldENvbnRleHQoZG9jdW1lbnQsIHRlbXBsYXRlLCBvZmZzZXQsIGxlbmd0aCkuZ2V0S2V5KCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC91dGlsL1hTTFBsdWdpbkltYWdlSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdXRpbC9YU0xQbHVnaW5JbWFnZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhMmZlNjdhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC91dGlsL1hTTFBsdWdpbkltYWdlSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjEzODQ5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyB0byBoYW5kbGUgaW1hZ2VzIHByb3ZpZGVkIGJ5IHRoaXMgcGx1Zy1pbi4KLSAqIAotICogTk9URTogRm9yIGludGVybmFsIHVzZSBvbmx5LiBGb3IgaW1hZ2VzIHVzZWQgZXh0ZXJuYWxseSwgcGxlYXNlIHVzZSB0aGUKLSAqIFNoYXJlZCoqKkltYWdlSGVscGVyIGNsYXNzIGluc3RlYWQuCi0gKiAKLSAqIEBhdXRob3IgZGF2aWQgY2FydmVyIGJhc2VkIG9uIHdvcmsgYnkgYW15d3UKLSAqLwotcHVibGljIGNsYXNzIFhTTFBsdWdpbkltYWdlSGVscGVyIHsKLQlwcml2YXRlIHN0YXRpYyBYU0xQbHVnaW5JbWFnZUhlbHBlciBpbnN0YW5jZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJldHVybnMgYSBYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFhTTFBsdWdpbkltYWdlSGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgWFNMUGx1Z2luSW1hZ2VIZWxwZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi0JLy8gc2F2ZSBhIGRlc2NyaXB0b3IgZm9yIGVhY2ggaW1hZ2UKLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIEhhc2hNYXAgZkltYWdlRGVzY1JlZ2lzdHJ5ID0gbnVsbDsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gaW1hZ2UgZnJvbSB0aGUgZ2l2ZW4gcmVzb3VyY2UgYW5kIGFkZHMgdGhlIGltYWdlIHRvIHRoZQotCSAqIGltYWdlIHJlZ2lzdHJ5LgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZQotCSAqIEByZXR1cm4gSW1hZ2UKLQkgKi8KLQlwcml2YXRlIEltYWdlIGNyZWF0ZUltYWdlKFN0cmluZyByZXNvdXJjZSkgewotCQlJbWFnZURlc2NyaXB0b3IgZGVzYyA9IGdldEltYWdlRGVzY3JpcHRvcihyZXNvdXJjZSk7Ci0JCUltYWdlIGltYWdlID0gbnVsbDsKLQotCQlpZiAoZGVzYyAhPSBudWxsKSB7Ci0JCQlpbWFnZSA9IGRlc2MuY3JlYXRlSW1hZ2UoKTsKLQkJCS8vIGRvbnQgYWRkIHRoZSBtaXNzaW5nIGltYWdlIGRlc2NyaXB0b3IgaW1hZ2UgdG8gdGhlIGltYWdlCi0JCQkvLyByZWdpc3RyeQotCQkJaWYgKCFkZXNjLmVxdWFscyhJbWFnZURlc2NyaXB0b3IuZ2V0TWlzc2luZ0ltYWdlRGVzY3JpcHRvcigpKSkgewotCQkJCWdldEltYWdlUmVnaXN0cnkoKS5wdXQocmVzb3VyY2UsIGltYWdlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW1hZ2U7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZyb20gdGhlIGdpdmVuIGltYWdlRmlsZVBhdGggYW5kIGFkZHMgdGhlCi0JICogaW1hZ2UgZGVzY3JpcHRvciB0byB0aGUgaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeS4gSWYgYW4gaW1hZ2UKLQkgKiBkZXNjcmlwdG9yIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB0aGUgZGVmYXVsdCAibWlzc2luZyIgaW1hZ2UgZGVzY3JpcHRvcgotCSAqIGlzIHJldHVybmVkIGJ1dCBub3QgYWRkZWQgdG8gdGhlIGltYWdlIGRlc2NyaXB0b3IgcmVnaXN0cnkuCi0JICogCi0JICogQHBhcmFtIGltYWdlRmlsZVBhdGgKLQkgKiBAcmV0dXJuIEltYWdlRGVzY3JpcHRvciBpbWFnZSBkZXNjcmlwdG9yIGZvciBpbWFnZUZpbGVQYXRoIG9yIGRlZmF1bHQKLQkgKiAgICAgICAgICJtaXNzaW5nIiBpbWFnZSBkZXNjcmlwdG9yIGlmIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZAotCSAqLwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgSW1hZ2VEZXNjcmlwdG9yIGNyZWF0ZUltYWdlRGVzY3JpcHRvcihTdHJpbmcgaW1hZ2VGaWxlUGF0aCkgewotCQlJbWFnZURlc2NyaXB0b3IgaW1hZ2VEZXNjcmlwdG9yID0gQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFhTTFVJUGx1Z2luLlBMVUdJTl9JRCwgaW1hZ2VGaWxlUGF0aCk7Ci0JCWlmIChpbWFnZURlc2NyaXB0b3IgIT0gbnVsbCkgewotCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yUmVnaXN0cnkoKS5wdXQoaW1hZ2VGaWxlUGF0aCwgaW1hZ2VEZXNjcmlwdG9yKTsKLQkJfQotCQllbHNlIHsKLQkJCWltYWdlRGVzY3JpcHRvciA9IEltYWdlRGVzY3JpcHRvci5nZXRNaXNzaW5nSW1hZ2VEZXNjcmlwdG9yKCk7Ci0JCX0KLQotCQlyZXR1cm4gaW1hZ2VEZXNjcmlwdG9yOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIGZyb20gdGhlIGltYWdlIHJlZ2lzdHJ5LgotCSAqIElmIHRoZSBpbWFnZSBjYW5ub3QgYmUgcmV0cmlldmVkLCBhdHRlbXB0IHRvIGZpbmQgYW5kIGxvYWQgdGhlIGltYWdlIGF0Ci0JICogdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbiByZXNvdXJjZS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIHRoZSBpbWFnZSB0byByZXRyaWV2ZQotCSAqIEByZXR1cm4gSW1hZ2UgdGhlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBvciBudWxsIGlmIG9uZSBjb3VsZAotCSAqICAgICAgICAgbm90IGJlIGZvdW5kCi0JICovCi0JcHVibGljIEltYWdlIGdldEltYWdlKFN0cmluZyByZXNvdXJjZSkgewotCQlJbWFnZSBpbWFnZSA9IGdldEltYWdlUmVnaXN0cnkoKS5nZXQocmVzb3VyY2UpOwotCQlpZiAoaW1hZ2UgPT0gbnVsbCkgewotCQkJLy8gY3JlYXRlIGFuIGltYWdlCi0JCQlpbWFnZSA9IGNyZWF0ZUltYWdlKHJlc291cmNlKTsKLQkJfQotCQlyZXR1cm4gaW1hZ2U7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBmcm9tIHRoZSBpbWFnZQotCSAqIGRlc2NyaXB0b3IgcmVnaXN0cnkuIElmIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGNhbm5vdCBiZSByZXRyaWV2ZWQsCi0JICogYXR0ZW1wdCB0byBmaW5kIGFuZCBsb2FkIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQKLQkgKiBpbiByZXNvdXJjZS4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzb3VyY2UKLQkgKiAgICAgICAgICAgIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHRvIHJldHJpZXZlCi0JICogQHJldHVybiBJbWFnZURlc2NyaXB0b3IgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXNzb2NhdGVkIHdpdGggcmVzb3VyY2Ugb3IKLQkgKiAgICAgICAgIHRoZSBkZWZhdWx0ICJtaXNzaW5nIiBpbWFnZSBkZXNjcmlwdG9yIGlmIG9uZSBjb3VsZCBub3QgYmUKLQkgKiAgICAgICAgIGZvdW5kCi0JICovCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHJlc291cmNlKSB7Ci0JCUltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSBudWxsOwotCQlPYmplY3QgbyA9IGdldEltYWdlRGVzY3JpcHRvclJlZ2lzdHJ5KCkuZ2V0KHJlc291cmNlKTsKLQkJaWYgKG8gPT0gbnVsbCkgewotCQkJLy8gY3JlYXRlIGEgZGVzY3JpcHRvcgotCQkJaW1hZ2VEZXNjcmlwdG9yID0gY3JlYXRlSW1hZ2VEZXNjcmlwdG9yKHJlc291cmNlKTsKLQkJfQotCQllbHNlIHsKLQkJCWltYWdlRGVzY3JpcHRvciA9IChJbWFnZURlc2NyaXB0b3IpIG87Ci0JCX0KLQkJcmV0dXJuIGltYWdlRGVzY3JpcHRvcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbi4KLQkgKiAKLQkgKiBAcmV0dXJuIEhhc2hNYXAgLSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbgotCSAqLwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgSGFzaE1hcCBnZXRJbWFnZURlc2NyaXB0b3JSZWdpc3RyeSgpIHsKLQkJaWYgKGZJbWFnZURlc2NSZWdpc3RyeSA9PSBudWxsKSB7Ci0JCQlmSW1hZ2VEZXNjUmVnaXN0cnkgPSBuZXcgSGFzaE1hcCgpOwotCQl9Ci0JCXJldHVybiBmSW1hZ2VEZXNjUmVnaXN0cnk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW1hZ2UgcmVnaXN0cnkgZm9yIHRoaXMgcGx1Z2luLgotCSAqIAotCSAqIEByZXR1cm4gSW1hZ2VSZWdpc3RyeSAtIGltYWdlIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbgotCSAqLwotCXByaXZhdGUgSW1hZ2VSZWdpc3RyeSBnZXRJbWFnZVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gSkZhY2VSZXNvdXJjZXMuZ2V0SW1hZ2VSZWdpc3RyeSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC91dGlsL1hTTFBsdWdpbkltYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3V0aWwvWFNMUGx1Z2luSW1hZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ1M2NkMjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3V0aWwvWFNMUGx1Z2luSW1hZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTM4NDkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWw7Ci0KLS8qKgotICogQnVuZGxlIG9mIG1vc3QgaW1hZ2VzIHVzZWQgYnkgdGhlIFhTTCBQbHVnaW5zCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xQbHVnaW5JbWFnZXMgewotCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX1hQQVRIX0ZVTkNUSU9OID0gImljb25zL2Z1bGwvZnVuY3Rpb24uZ2lmIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19YUEFUSF9BWElTID0gImljb25zL2Z1bGwvZGlyZWN0aW9uYWwuZ2lmIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19WQVJJQUJMRVMgPSAiaWNvbnMvZnVsbC92YXJpYWJsZS5naWYiOyAvLyROT04tTkxTLTEkCQotCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX09QRVJBVE9SID0gImljb25zL2Z1bGwvb3BlcmF0aW9uLmdpZiI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBQYXRoIHRvIHRoZSBYTUwgUHJlZml4IEltYWdlIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX1BSRUZJWCA9ICJpY29ucy9mdWxsL3BhY2thZ2Vfb2JqLmdpZiI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBQYXRoIHRvIHRoZSBYU0wgbW9kZSBJbWFnZSB1c2VkIGZvciBDb250ZW50IEFzc2lzdAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19NT0RFID0gImljb25zL2Z1bGwvbW9kZS5naWYiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFNMIEZpbGUgaW1hZ2UgdXNlIGZvciBDb250ZW50IEFzc2lzdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX1hTTF9GSUxFID0gImljb25zL2Z1bGwveHNsdF9maWxlLmdpZiI7IC8vJE5PTi1OTFMtMSQgCi0KLQkvKioKLQkgKiBQYXRoIHRvIHRoZSB4c2wgdGVtcGxhdGUgaW1hZ2UgdXNlIGZvciBDb250ZW50IEFzc2lzdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX1RFTVBMQVRFID0gImljb25zL2Z1bGwvdGVtcGxhdGUuZ2lmIjsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19FTE1fU1RZTEVTSEVUID0gImljb25zL2Z1bGwveHNsdF9sYXVuY2guZ2lmIjsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19FTE1fSU1QT1JUX0lOQ0xVREUgPSAiaWNvbnMvZnVsbC9pbXBvcnQuZ2lmIjsgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19FTE1fVEVNUExBVEUgPSAiaWNvbnMvZnVsbC9wYWNrYWdlX29iai5naWYiOyAvLyROT04tTkxTLTEkCi0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX0VMTV9URU1QTEFURV9OQU1FID0gImljb25zL2Z1bGwvdGVtcGxhdGVuYW1lZF9vYmouZ2lmIjsgLy8kTk9OLU5MUy0xJAotCi0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX0VMTV9WQVJJQUJMRSA9ICJpY29ucy9mdWxsL2ZpZWxkX2RlZmF1bHRfb2JqLmdpZiI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfRUxNX0ZVTkNUSU9OID0gImljb25zL2Z1bGwvZnVuY3Rpb24uZ2lmIjsgLy8kTk9OLU5MUy0xJAotCQotCQotCQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjNkZDAzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL0RlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gZXh0ZXJuYWxpemUgc3RyaW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5xdWlja2Fzc2lzdC5JUXVpY2tBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvbkZyYW1ld29yazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5WYWxpZGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEVkaXRvcjsKLQotLyoqCi0gKiBUaGlzIHBlcmZvcm1zIHRoZSBhcy15b3UtdHlwZSB2YWxpZGF0aW9uIGZvciB4c2wgZmlsZXMKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTCBleHRlbmRzIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3IKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMX1VJX1hTTF9FRElUT1JfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5YU0xFZGl0b3IiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIElkID0gIm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS54c2wiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUVVJQ0tBU1NJU1RQUk9DRVNTT1IgPSBJUXVpY2tBc3Npc3RQcm9jZXNzb3IuY2xhc3MuZ2V0TmFtZSgpOwotCQotCXByaXZhdGUgVmFsaWRhdG9yIF92YWxpZGF0b3I7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMKCkKLQl7Ci0JCXN1cGVyKCk7Ci0JfQotCQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVZhbGlkYXRpb25NZXNzYWdlcyhMaXN0IG1lc3NhZ2VzLCBJRE9NRG9jdW1lbnQgZG9jdW1lbnQsIElSZXBvcnRlciByZXBvcnRlcikKLQl7Ci0JCXN1cGVyLnVwZGF0ZVZhbGlkYXRpb25NZXNzYWdlcyhtZXNzYWdlcywgZG9jdW1lbnQsIHJlcG9ydGVyKTsKLQkJLy8gaW5zZXJ0IHRoZSBxdWljayBhc3Npc3QgaW5mb3JtYXRpb24gYXMgYW4gYXR0cmlidXRlIGZvciB0aGUgbWVzc2FnZXMKLS8vCQlmb3IgKE9iamVjdCBtc2cgOiByZXBvcnRlci5nZXRNZXNzYWdlcygpKQotLy8JCXsKLS8vCQkJSU1lc3NhZ2UgbWVzc2FnZSA9IChJTWVzc2FnZSltc2c7Ci0vLwotLy8JCQlWYWxpZGF0aW9uUXVpY2tBc3Npc3QgcHJvY2Vzc29yID0gbmV3IFZhbGlkYXRpb25RdWlja0Fzc2lzdCgpOwotLy8JCQkKLS8vCQkJU3RyaW5nIGlkID0gKFN0cmluZyltZXNzYWdlLmdldEF0dHJpYnV0ZSgidmFsaWRhdGlvbkVycm9ySWQiKTsKLS8vCQkJcHJvY2Vzc29yLnNldFByb2JsZW1JZChpZCk7Ci0vLwkJCQotLy8JCQltZXNzYWdlLnNldEF0dHJpYnV0ZShRVUlDS0FTU0lTVFBST0NFU1NPUiwgcHJvY2Vzc29yKTsKLS8vCQl9CQkKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyLCBJUmVwb3J0ZXIgcmVwb3J0ZXIpIHRocm93cyBWYWxpZGF0aW9uRXhjZXB0aW9uCi0JewotCQlzdXBlci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQkJCi0JCS8vIHZhbGlkYXRpbmcgd2lsbCByZWZyZXNoIHRoZSBtb2RlbCwgc28gbm93IGNhbGN1bGF0ZSB0aGUgb3ZlcnJpZGVzLgotCQkvLyAod2Ugb25seSBjYWxjdWxhdGUgb3ZlcnJpZGVzIGZvciBzb3VyY2UgdmFsaWRhdGlvbiBhcyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgZm9yIGZpbGVzIG9wZW4gaW4gYW4gZWRpdG9yKQotCQkvLyBUaGVyZSBmb2xsb3dzIGEgdmVyeSBjb21wbGljYXRlZCB3YXkgb2YgY3JlYXRpbmcgdGhlIHJlcXVpcmVkIGFubm90YXRpb25zIGluIGFuIGVkaXRvci4KLQkJLy8gVE9ETyByZXNvbHZlIHRoaXMgd2hlbiBidWcgMjQ3MjIyIGlzIHNvcnRlZAotCQkKLQkJU3RyaW5nW10gZGVsdGEgPSBoZWxwZXIuZ2V0VVJJcygpOwotCQlpZiAoZGVsdGEubGVuZ3RoID4gMCkKLQkJewotCQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoZGVsdGFbMF0pOwotCQkJLy8gZmluZCBhbnkgZmlsZXMgd2l0aCBvcGVuIGVkaXRvcnMuLi4KLQkJCUlXb3JrYmVuY2hXaW5kb3dbXSB3aW5kb3dzID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRXb3JrYmVuY2hXaW5kb3dzKCk7Ci0JCQlmb3IgKElXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93IDogd2luZG93cykKLQkJCXsKLQkJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQlpZiAocGFnZSAhPSBudWxsKQotCQkJCXsKLQkJCQkJSUVkaXRvclJlZmVyZW5jZVtdIHJlZnMgPSBwYWdlLmZpbmRFZGl0b3JzKG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSksIFhTTF9VSV9YU0xfRURJVE9SX0lELCBJV29ya2JlbmNoUGFnZS5NQVRDSF9JRCB8IElXb3JrYmVuY2hQYWdlLk1BVENIX0lOUFVUKTsKLQkJCQkJLy8gbGV0cyBob3BlIHdlIG9ubHkgaGF2ZSBvbmUgWFNMIGVkaXRvciBvcGVuIG9uIHRoZSBmaWxlLCBvciBlbHNlIHdlIGRvbid0IGtub3cgd2hpY2ggb25lIHN0YXJ0ZWQgdGhpcyB2YWxpZGF0aW9uLi4uCi0JCQkJCWlmIChyZWZzLmxlbmd0aCA9PSAxKQotCQkJCQl7Ci0JCQkJCQlYU0xFZGl0b3IgZWRpdG9yID0gKFhTTEVkaXRvcikgcmVmc1swXS5nZXRFZGl0b3IoZmFsc2UpOwotCQkJCQkJaWYgKGVkaXRvciAhPSBudWxsKQotCQkJCQkJey8vIGFsbCB0aGlzIHdvcmsganVzdCB0byBnZXQgaGVyZS4uLgotCQkJCQkJCWVkaXRvci5nZXRPdmVycmlkZUluZGljYXRvck1hbmFnZXIoKS51cGRhdGVBbm5vdGF0aW9ucygpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yKCkKLQl7Ci0JCWlmIChfdmFsaWRhdG9yID09IG51bGwpCi0JCQlfdmFsaWRhdG9yID0gVmFsaWRhdGlvbkZyYW1ld29yay5nZXREZWZhdWx0KCkuZ2V0VmFsaWRhdG9yKElkLCBudWxsKTsKLQkJcmV0dXJuIF92YWxpZGF0b3I7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElWYWxpZGF0b3IgZ2V0RGVsZWdhdGVWYWxpZGF0b3IoKQotCXsKLQkJVmFsaWRhdG9yIHYgPSBnZXRWYWxpZGF0b3IoKTsKLQkJaWYgKHYgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlyZXR1cm4gdi5hc0lWYWxpZGF0b3IoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0xFcnJvckxpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0xFcnJvckxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMTQ1NmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMRXJyb3JMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS4qOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLio7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBsaXN0ZW5zIGZvciBFcnJvcnMgdG9zc2VkIGJ5IGEgWFNMIFByb2Nlc3Nvci4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFhTTEVycm9yTGlzdGVuZXIgaW1wbGVtZW50cyBFcnJvckxpc3RlbmVyIHsKLQotCXByaXZhdGUgTG9nZ2VyIGxvZ2dlcjsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICogQHBhcmFtIGxvZ2dlcgotCSAqLwotCXB1YmxpYyBYU0xFcnJvckxpc3RlbmVyKExvZ2dlciBsb2dnZXIpIHsKLQkJdGhpcy5sb2dnZXIgPSBsb2dnZXI7Ci0JfQotCi0JLyoqCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgamF2YXgueG1sLnRyYW5zZm9ybS5FcnJvckxpc3RlbmVyI3dhcm5pbmcoamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCB3YXJuaW5nKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCi0JCWxvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQotCQkvLyBEb24ndCB0aHJvdyBhbiBleGNlcHRpb24gYW5kIHN0b3AgdGhlIHByb2Nlc3NvcgotCQkvLyBqdXN0IGZvciBhIHdhcm5pbmc7IGJ1dCBkbyBsb2cgdGhlIHByb2JsZW0KLQl9Ci0KLQkvKiogCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgamF2YXgueG1sLnRyYW5zZm9ybS5FcnJvckxpc3RlbmVyI2Vycm9yKGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb24pCi0JICovCi0JcHVibGljIHZvaWQgZXJyb3IoVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKQotCQkJdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQotCQlsb2dnZXIubG9nKExldmVsLlNFVkVSRSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQkJLy8gWFNMVCBpcyBub3QgYXMgZHJhY29uaWFuIGFzIFhNTC4gVGhlcmUgYXJlIG51bWVyb3VzIGVycm9ycwotCQkvLyB3aGljaCB0aGUgcHJvY2Vzc29yIG1heSBidXQgZG9lcyBub3QgaGF2ZSB0byByZWNvdmVyIGZyb207Ci0JCS8vIGUuZy4gbXVsdGlwbGUgdGVtcGxhdGVzIHRoYXQgbWF0Y2ggYSBub2RlIHdpdGggdGhlIHNhbWUKLQkJLy8gcHJpb3JpdHkuIEkgZG8gbm90IHdhbnQgdG8gYWxsb3cgdGhhdCBzbyBJIHRocm93IHRoaXMKLQkJLy8gZXhjZXB0aW9uIGhlcmUuCi0JCXRocm93IGV4Y2VwdGlvbjsKLQotCX0KLQotCS8qKgotCSAqICAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqYXZheC54bWwudHJhbnNmb3JtLkVycm9yTGlzdGVuZXIjZmF0YWxFcnJvcihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKQotCQkJdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uIHsKLQotCQlsb2dnZXIubG9nKExldmVsLlNFVkVSRSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQotCQkvLyBUaGlzIGlzIGFuIGVycm9yIHdoaWNoIHRoZSBwcm9jZXNzb3IgY2Fubm90IHJlY292ZXIgZnJvbTsKLQkJLy8gZS5nLiBhIG1hbGZvcm1lZCBzdHlsZXNoZWV0IG9yIGlucHV0IGRvY3VtZW50Ci0JCS8vIHNvIEkgbXVzdCB0aHJvdyB0aGlzIGV4Y2VwdGlvbiBoZXJlLgotCQl0aHJvdyBleGNlcHRpb247Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTE1hcmt1cFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMTWFya3VwVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODViOGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMTWFya3VwVmFsaWRhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuSVNvdXJjZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLlZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXJrdXBWYWxpZGF0b3I7Ci0KLS8qKgotICogQGF1dGhvciBkY2FydmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgWFNMTWFya3VwVmFsaWRhdG9yIGV4dGVuZHMgTWFya3VwVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvciwgSVNvdXJjZVZhbGlkYXRvciB7Ci0KLQotCS8qKgotCSAqICAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3IjY2xlYW51cChvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcikKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjbGVhbnVwKElSZXBvcnRlciByZXBvcnRlcikgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXN1cGVyLmNsZWFudXAocmVwb3J0ZXIpOwotCi0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGhlbHBlciAKLQkgKiBAcGFyYW0gcmVwb3J0ZXIgCi0JICogQHRocm93cyBWYWxpZGF0aW9uRXhjZXB0aW9uIAotCSAqIAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIsIElSZXBvcnRlciByZXBvcnRlcikKLQkJCXRocm93cyBWYWxpZGF0aW9uRXhjZXB0aW9uIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlzdXBlci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQl9Ci0KLQkvKioKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uTWFya3VwVmFsaWRhdG9yI2Nvbm5lY3Qob3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgY29ubmVjdChJRG9jdW1lbnQgZG9jdW1lbnQpIHsKLSAgICAgICAgc3VwZXIuY29ubmVjdChkb2N1bWVudCk7Ci0JfQotCi0JLyoqIAotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXJrdXBWYWxpZGF0b3IjZGlzY29ubmVjdChvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNjb25uZWN0KElEb2N1bWVudCBkb2N1bWVudCkgewotCQlzdXBlci5kaXNjb25uZWN0KGRvY3VtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiAgKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLk1hcmt1cFZhbGlkYXRvciN2YWxpZGF0ZShvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb24sIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRpb25Db250ZXh0LCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcikKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShJUmVnaW9uIGRpcnR5UmVnaW9uLCBJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyLAotCQkJSVJlcG9ydGVyIHJlcG9ydGVyKSB7Ci0JCXN1cGVyLnZhbGlkYXRlKGRpcnR5UmVnaW9uLCBoZWxwZXIsIHJlcG9ydGVyKTsKLQl9Ci0JCi0JLyoqIAotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXJrdXBWYWxpZGF0b3IjdmFsaWRhdGUob3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiwgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXIpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgdmFsaWRhdGUoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24sCi0JCQlJUmVwb3J0ZXIgcmVwb3J0ZXIpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlzdXBlci52YWxpZGF0ZShzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24sIHJlcG9ydGVyKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdmlld3Mvc3R5bGVzaGVldC9MaXN0V29ya2JlbmNoQWRhcHRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZpZXdzL3N0eWxlc2hlZXQvTGlzdFdvcmtiZW5jaEFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFlMzM0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdmlld3Mvc3R5bGVzaGVldC9MaXN0V29ya2JlbmNoQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuSVdvcmtiZW5jaEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIExpc3RXb3JrYmVuY2hBZGFwdGVyIGltcGxlbWVudHMgSVdvcmtiZW5jaEFkYXB0ZXIKLXsKLQlwcml2YXRlIE9iamVjdCBwYXJlbnQ7Ci0JcHJpdmF0ZSBPYmplY3RbXSBjaGlsZHJlbjsKLQlwcml2YXRlIFN0cmluZyB0ZXh0OwotCXByaXZhdGUgSW1hZ2VEZXNjcmlwdG9yIGltYWdlOwotCQotCXB1YmxpYyBMaXN0V29ya2JlbmNoQWRhcHRlcihTdHlsZXNoZWV0IHN0eWxlc2hlZXQsIExpc3QgbGlzdCwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgaW1nUGF0aCkKLQl7Ci0JCXBhcmVudCA9IHN0eWxlc2hlZXQ7Ci0JCWlmIChsaXN0ICE9IG51bGwpCi0JCQljaGlsZHJlbiA9IGxpc3QudG9BcnJheSgpOwotCQllbHNlCi0JCQljaGlsZHJlbiA9IG5ldyBPYmplY3RbMF07Ci0JCXRleHQgPSBsYWJlbDsKLQkJaWYgKGltZ1BhdGghPW51bGwpCi0JCQlpbWFnZSA9IEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihYU0xVSVBsdWdpbi5QTFVHSU5fSUQsIGltZ1BhdGgpOwotCX0KLQkKLQlwdWJsaWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KQotCXsKLQkJcmV0dXJuIGltYWdlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsKE9iamVjdCBvKQotCXsKLQkJcmV0dXJuIHRleHQ7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBvKQotCXsKLQkJcmV0dXJuIGNoaWxkcmVuOwotCX0KLQotCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvKQotCXsKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC92aWV3cy9zdHlsZXNoZWV0L1N0eWxlc2hlZXRNb2RlbFZpZXcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC92aWV3cy9zdHlsZXNoZWV0L1N0eWxlc2hlZXRNb2RlbFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmNzQwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdmlld3Mvc3R5bGVzaGVldC9TdHlsZXNoZWV0TW9kZWxWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBDaGFzZSBUZWNobm9sb2d5IEx0ZCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDQ2NzQgLSBFbmhhbmNlZCBhbmQgY2xlYW5lZCB1cCB2aWV3IAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRG91YmxlQ2xpY2tFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLkJhc2VXb3JrYmVuY2hDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZTsKLQotLyoqCi0gKiAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTdHlsZXNoZWV0TW9kZWxWaWV3IGV4dGVuZHMgVmlld1BhcnQKLXsKLQlwcml2YXRlIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvcjsKLQkvL3ByaXZhdGUgYm9vbGVhbiBpc0ZpcmluZ1NlbGVjdGlvbjsKLQlwcml2YXRlIFRyZWVWaWV3ZXIgdHY7Ci0JcHJpdmF0ZSBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9IG5ldyBJUGFydExpc3RlbmVyKCl7Ci0JCQotCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0JCXsKLQkJCWlmIChwYXJ0IGluc3RhbmNlb2YgSUVkaXRvclBhcnQpCi0JCQl7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gKElFZGl0b3JQYXJ0KXBhcnQ7Ci0JCQkJSUVkaXRvcklucHV0IGVkSW5wdXQgPSBlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKTsKLQkJCQlpZiAoZWRJbnB1dCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpCi0JCQkJewotCQkJCQlJRmlsZUVkaXRvcklucHV0IGVkRmlsZUlucHV0ID0gKElGaWxlRWRpdG9ySW5wdXQpZWRJbnB1dDsKLQkJCQkJaWYgKFhTTENvcmUuaXNYU0xGaWxlKGVkRmlsZUlucHV0LmdldEZpbGUoKSkpCi0JCQkJCXsKLQkJCQkJCWFjdGl2ZUVkaXRvciA9IGVkaXRvcjsKLQkJCQkJCVN0eWxlc2hlZXRNb2RlbCBtb2RlbCA9IFhTTENvcmUuZ2V0SW5zdGFuY2UoKS5nZXRTdHlsZXNoZWV0KGVkRmlsZUlucHV0LmdldEZpbGUoKSk7Ci0JCQkJCQl0di5zZXRJbnB1dChtb2RlbC5nZXRTdHlsZXNoZWV0KCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwYXJ0KQotCQl7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0JCXsKLQkJCWlmIChwYXJ0ID09IGFjdGl2ZUVkaXRvcikKLQkJCXsKLQkJCQl0di5zZXRJbnB1dChudWxsKTsKLQkJCQlhY3RpdmVFZGl0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpCi0JCXsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkKLQkJewotCQl9Ci0JCQotCX07IAotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uCi0JewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShwYXJlbnQsU1dULk5PTkUpOwotCQl0aGlzLnR2ID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7Ci0JCXR2LnNldENvbnRlbnRQcm92aWRlcihuZXcgQmFzZVdvcmtiZW5jaENvbnRlbnRQcm92aWRlcigpKTsKLQkJdHYuc2V0TGFiZWxQcm92aWRlcihuZXcgV29ya2JlbmNoTGFiZWxQcm92aWRlcigpKTsKLQkJdHYuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCl7Ci0KLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCWlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZVBhcnQoKSA9PSBTdHlsZXNoZWV0TW9kZWxWaWV3LnRoaXMpCi0JCQkJCWhhbmRsZVRyZWVTZWxlY3Rpb24oKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKWV2ZW50LmdldFNlbGVjdGlvbigpLGZhbHNlKTsKLQkJCX0KLQkJfSk7Ci0JCXR2LmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCl7Ci0KLQkJCXB1YmxpYyB2b2lkIGRvdWJsZUNsaWNrKERvdWJsZUNsaWNrRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJaGFuZGxlVHJlZVNlbGVjdGlvbigoSVN0cnVjdHVyZWRTZWxlY3Rpb24pZXZlbnQuZ2V0U2VsZWN0aW9uKCksdHJ1ZSk7Ci0JCQl9Ci0JCQkKLQkJfSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBoYW5kbGVUcmVlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwgYm9vbGVhbiByZXZlYWwpCi0JewotCQlpZiAoYWN0aXZlRWRpdG9yICE9IG51bGwpCi0JCXsKLS8vCQkJaXNGaXJpbmdTZWxlY3Rpb24gPSB0cnVlOwotCQkJaWYgKHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKSBpbnN0YW5jZW9mIFhTTE5vZGUpCi0JCQl7Ci0JCQkJWFNMTm9kZSBub2RlID0gKFhTTE5vZGUpc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCQotCQkJCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpYWN0aXZlRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpCi0JCQkJewotCQkJCQkvL2lmIChyZXZlYWwpCi0JCQkJCQl0ZXh0RWRpdG9yLnNlbGVjdEFuZFJldmVhbChub2RlLmdldE9mZnNldCgpLCAwKTsKLQkJCQkJLy9lbHNlCi0JCQkJCQkvLyB0ZXh0RWRpdG9yLnNldEhpZ2hsaWdodFJhbmdlKG5vZGUuZ2V0T2Zmc2V0KCksIDAsIHRydWUpOwotCQkJCX0KLQkJCX0KLS8vCQkJaXNGaXJpbmdTZWxlY3Rpb24gPSBmYWxzZTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkKLQl7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZpZXdzL3N0eWxlc2hlZXQvWFNMTW9kZWxBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3ZpZXdzL3N0eWxlc2hlZXQvWFNMTW9kZWxBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmNhNjdmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC92aWV3cy9zdHlsZXNoZWV0L1hTTE1vZGVsQWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuSVdvcmtiZW5jaEFkYXB0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBYU0xNb2RlbEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgSUFkYXB0ZXJGYWN0b3J5Ci17Ci0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBMSVNUID0gbmV3IENsYXNzW117SVdvcmtiZW5jaEFkYXB0ZXIuY2xhc3N9OwotCXByaXZhdGUgSVdvcmtiZW5jaEFkYXB0ZXIgYWRhcHRlciA9IG5ldyBYU0xXb3JrYmVuY2hBZGFwdGVyKCk7Ci0JCi0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKQotCXsKLQkJaWYgKElXb3JrYmVuY2hBZGFwdGVyLmNsYXNzLmVxdWFscyhhZGFwdGVyVHlwZSkpCi0JCQlyZXR1cm4gYWRhcHRlcjsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotCXB1YmxpYyBDbGFzc1tdIGdldEFkYXB0ZXJMaXN0KCkKLQl7Ci0JCXJldHVybiBMSVNUOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC92aWV3cy9zdHlsZXNoZWV0L1hTTFdvcmtiZW5jaEFkYXB0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC92aWV3cy9zdHlsZXNoZWV0L1hTTFdvcmtiZW5jaEFkYXB0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM4NmRmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvdmlld3Mvc3R5bGVzaGVldC9YU0xXb3JrYmVuY2hBZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDQ2NzQgLSBFbmhhbmNlZCBhbmQgY2xlYW5lZCB1cCB2aWV3IAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuSVdvcmtiZW5jaEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkltcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW5jbHVkZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzOwotCi1jbGFzcyBYU0xXb3JrYmVuY2hBZGFwdGVyIGltcGxlbWVudHMgSVdvcmtiZW5jaEFkYXB0ZXIgewotCXByaXZhdGUgZmluYWwgT2JqZWN0W10gRU1QVFkgPSBuZXcgT2JqZWN0WzBdOwotCi0JcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBvKSB7Ci0JCWlmIChvIGluc3RhbmNlb2YgWFNMTW9kZWxPYmplY3QpIHsKLQkJCVhTTE1vZGVsT2JqZWN0IG9iaiA9IChYU0xNb2RlbE9iamVjdCkgbzsKLQkJCXN3aXRjaCAob2JqLmdldE1vZGVsVHlwZSgpKSB7Ci0JCQljYXNlIFNUWUxFU0hFRVQ6Ci0JCQkJU3R5bGVzaGVldCBzdHlsZXNoZWV0ID0gKFN0eWxlc2hlZXQpIG9iajsKLQkJCQlBcnJheUxpc3QgbW9kZWxJdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQltb2RlbEl0ZW1zLmFkZChuZXcgTGlzdFdvcmtiZW5jaEFkYXB0ZXIoc3R5bGVzaGVldCwgbnVsbCwgc3R5bGVzaGVldC5nZXRWZXJzaW9uKCksIFhTTFBsdWdpbkltYWdlcy5JTUdfRUxNX1NUWUxFU0hFVCkpOwotCQkJCW1vZGVsSXRlbXMuYWRkKG5ldyBMaXN0V29ya2JlbmNoQWRhcHRlcihzdHlsZXNoZWV0LCBzdHlsZXNoZWV0LmdldEltcG9ydHMoKSwgIkltcG9ydHMiLCBYU0xQbHVnaW5JbWFnZXMuSU1HX0VMTV9JTVBPUlRfSU5DTFVERSkpOyAvLyROT04tTkxTLTEkCi0JCQkJbW9kZWxJdGVtcy5hZGQobmV3IExpc3RXb3JrYmVuY2hBZGFwdGVyKHN0eWxlc2hlZXQsIHN0eWxlc2hlZXQuZ2V0SW5jbHVkZXMoKSwgIkluY2x1ZGVzIiwgWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fSU1QT1JUX0lOQ0xVREUpKTsgLy8kTk9OLU5MUy0xJAotCQkJCW1vZGVsSXRlbXMuYWRkKG5ldyBMaXN0V29ya2JlbmNoQWRhcHRlcihzdHlsZXNoZWV0LCBzdHlsZXNoZWV0LmdldEdsb2JhbFZhcmlhYmxlcygpLCAiVmFyaWFibGVzIiwgWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fVkFSSUFCTEUpKTsgLy8kTk9OLU5MUy0xJAotCQkJCW1vZGVsSXRlbXMuYWRkKG5ldyBMaXN0V29ya2JlbmNoQWRhcHRlcihzdHlsZXNoZWV0LCBzdHlsZXNoZWV0LmdldFRlbXBsYXRlcygpLCAiVGVtcGxhdGVzIiwgWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fVEVNUExBVEUpKTsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChzdHlsZXNoZWV0LmdldEZ1bmN0aW9ucygpLnNpemUoKSA+IDApIHsKLQkJCQkJbW9kZWxJdGVtcy5hZGQobmV3IExpc3RXb3JrYmVuY2hBZGFwdGVyKHN0eWxlc2hlZXQsIHN0eWxlc2hlZXQuZ2V0VGVtcGxhdGVzKCksICJGdW5jdGlvbnMiLCBYU0xQbHVnaW5JbWFnZXMuSU1HX0VMTV9GVU5DVElPTikpOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJCXJldHVybiBtb2RlbEl0ZW1zLnRvQXJyYXkoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gRU1QVFk7Ci0JfQotCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgewotCQlYU0xNb2RlbE9iamVjdCBvYmogPSAoWFNMTW9kZWxPYmplY3QpIG9iamVjdDsKLQkJU3RyaW5nIHBhdGggPSBudWxsOwotCQlzd2l0Y2ggKG9iai5nZXRNb2RlbFR5cGUoKSkgewotCQljYXNlIFNUWUxFU0hFRVQ6Ci0JCQlwYXRoID0gWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fU1RZTEVTSEVUOyAKLQkJCWJyZWFrOwotCQljYXNlIElNUE9SVDoKLQkJY2FzZSBJTkNMVURFOgotCQkJcGF0aCA9IFhTTFBsdWdpbkltYWdlcy5JTUdfRUxNX0lNUE9SVF9JTkNMVURFOwotCQkJYnJlYWs7Ci0JCWNhc2UgVEVNUExBVEU6IHsKLQkJCVRlbXBsYXRlIHRlbXBsYXRlID0gKFRlbXBsYXRlKSBvYmo7Ci0JCQlpZiAodGVtcGxhdGUuZ2V0TmFtZSgpICE9IG51bGwpIHsKLQkJCQlwYXRoID0gWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fVEVNUExBVEVfTkFNRTsgCi0JCQl9IGVsc2UgewotCQkJCXBhdGggPSAgWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fVEVNUExBVEU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFZBUklBQkxFOgotCQkJcGF0aCA9IFhTTFBsdWdpbkltYWdlcy5JTUdfRUxNX1ZBUklBQkxFOwotCQkJYnJlYWs7Ci0JCWNhc2UgRlVOQ1RJT046Ci0JCQlwYXRoID0gWFNMUGx1Z2luSW1hZ2VzLklNR19FTE1fRlVOQ1RJT047Ci0JCQlicmVhazsKLQkJCQotCQl9Ci0JCXJldHVybiBwYXRoID09IG51bGwgPyBudWxsIDogQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAotCQkJCVhTTFVJUGx1Z2luLlBMVUdJTl9JRCwgcGF0aCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRMYWJlbChPYmplY3QgbykgewotCQlTdHJpbmcgbGFiZWwgPSBudWxsOwotCQlYU0xNb2RlbE9iamVjdCBvYmogPSAoWFNMTW9kZWxPYmplY3QpIG87Ci0JCXN3aXRjaCAob2JqLmdldE1vZGVsVHlwZSgpKSB7Ci0JCWNhc2UgU1RZTEVTSEVFVDoKLQkJCVN0eWxlc2hlZXQgc3R5bGVzaGVldCA9IChTdHlsZXNoZWV0KSBvYmo7Ci0JCQlsYWJlbCA9IHN0eWxlc2hlZXQuZ2V0VmVyc2lvbigpID09IG51bGwgPyAiPyIgOiBzdHlsZXNoZWV0IC8vJE5PTi1OTFMtMSQKLQkJCQkJLmdldFZlcnNpb24oKTsKLQkJCWJyZWFrOwotCQljYXNlIElNUE9SVDoKLQkJCUltcG9ydCBpbXAgPSAoSW1wb3J0KSBvYmo7Ci0JCQlsYWJlbCA9IGltcC5nZXRIcmVmKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBJTkNMVURFOgotCQkJSW5jbHVkZSBpbmMgPSAoSW5jbHVkZSkgb2JqOwotCQkJbGFiZWwgPSBpbmMuZ2V0SHJlZigpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVEVNUExBVEU6Ci0JCQlUZW1wbGF0ZSB0ID0gKFRlbXBsYXRlKSBvYmo7Ci0JCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQlpZiAodC5nZXROYW1lKCkgIT0gbnVsbCkKLQkJCQlzYi5hcHBlbmQodC5nZXROYW1lKCkpLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAodC5nZXRNYXRjaCgpICE9IG51bGwpCi0JCQkJc2IuYXBwZW5kKHQuZ2V0TWF0Y2goKSkuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJCWlmICh0LmdldE1vZGUoKSAhPSBudWxsKQotCQkJCXNiLmFwcGVuZCgiKCIpLmFwcGVuZCh0LmdldE1vZGUoKSkuYXBwZW5kKCIpIik7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQkJbGFiZWwgPSBzYi50b1N0cmluZygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVkFSSUFCTEU6Ci0JCQlWYXJpYWJsZSB2ID0gKFZhcmlhYmxlKSBvYmo7Ci0JCQlsYWJlbCA9IHYuZ2V0TmFtZSgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRlVOQ1RJT046Ci0JCQlGdW5jdGlvbiBmID0gKEZ1bmN0aW9uKSBvYmo7Ci0JCQlsYWJlbCA9IGYuZ2V0TmFtZSgpOwotCQl9Ci0JCXJldHVybiBsYWJlbDsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgbykgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvd2l6YXJkcy9OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiM2ZhOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvd2l6YXJkcy9OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoYnVnIDI3MTkxNikgU1RBUiAtIGV4dGVybmFsaXplIHN0cmluZ3MgZm9yIE5ldyBYU0wuCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODk3OTkgLSBSZWFjdCB0byB0aGUgJ2N1cnNvcicgdmFyaWFibGUgaW4gdGhlIHRlbXBsYXRlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5Eb2N1bWVudFRlbXBsYXRlQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5UZW1wbGF0ZVZhcmlhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLnBlcnNpc3RlbmNlLlRlbXBsYXRlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlclNvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpbms7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5QcmVmZXJlbmNlc1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTF9VSV9URU1QTEFURV9QUkVGRVJFTkNFX1BBR0UgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC51aS50ZW1wbGF0ZS5wcmVmZXJlbmNlUGFnZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXX1NUWUxFU0hFRVRfVEVNUExBVEVTX1dJWkFSRF9QQUdFID0gIk5ld1N0eWxlc2hlZXRUZW1wbGF0ZXNXaXphcmRQYWdlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgU3RyaW5nIGZMYXN0U2VsZWN0ZWRUZW1wbGF0ZU5hbWU7Ci0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgZlBhdHRlcm5WaWV3ZXI7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciBmVGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBUZW1wbGF0ZVN0b3JlIGZUZW1wbGF0ZVN0b3JlOwotCXByaXZhdGUgQnV0dG9uIGZVc2VUZW1wbGF0ZUJ1dHRvbjsKLQotCXB1YmxpYyBOZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZSgpCi0JewotCQlzdXBlcihORVdfU1RZTEVTSEVFVF9URU1QTEFURVNfV0laQVJEX1BBR0UsIE1lc3NhZ2VzLk5ld1hTTFNlbGVjdFRlbXBsYXRlLCBudWxsKTsgCi0JCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLk5ld1hTTFRlbXBsYXRlRGVzY3JpcHRpb24pOwotCX0KLQotCXByaXZhdGUgdm9pZCBjb25maWd1cmVUYWJsZVJlc2l6aW5nKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIFRhYmxlIHRhYmxlLCBmaW5hbCBUYWJsZUNvbHVtbiBjb2x1bW4xLCBmaW5hbCBUYWJsZUNvbHVtbiBjb2x1bW4yKQotCXsKLQkJcGFyZW50LmFkZENvbnRyb2xMaXN0ZW5lcihuZXcgQ29udHJvbEFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBlKQotCQkJewotCQkJCVJlY3RhbmdsZSBhcmVhID0gcGFyZW50LmdldENsaWVudEFyZWEoKTsKLQkJCQlQb2ludCBwcmVmZXJyZWRTaXplID0gdGFibGUuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLQkJCQlpbnQgd2lkdGggPSBhcmVhLndpZHRoIC0gMiAqIHRhYmxlLmdldEJvcmRlcldpZHRoKCk7Ci0JCQkJaWYgKHByZWZlcnJlZFNpemUueSA+IGFyZWEuaGVpZ2h0KQotCQkJCXsKLQkJCQkJLy8gU3VidHJhY3QgdGhlIHNjcm9sbGJhciB3aWR0aCBmcm9tIHRoZSB0b3RhbCBjb2x1bW4KLQkJCQkJLy8gd2lkdGgKLQkJCQkJLy8gaWYgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgd2lsbCBiZSByZXF1aXJlZAotCQkJCQlQb2ludCB2QmFyU2l6ZSA9IHRhYmxlLmdldFZlcnRpY2FsQmFyKCkuZ2V0U2l6ZSgpOwotCQkJCQl3aWR0aCAtPSB2QmFyU2l6ZS54OwotCQkJCX0KLQotCQkJCVBvaW50IG9sZFNpemUgPSB0YWJsZS5nZXRTaXplKCk7Ci0JCQkJaWYgKG9sZFNpemUueCA+IHdpZHRoKQotCQkJCXsKLQkJCQkJLy8gdGFibGUgaXMgZ2V0dGluZyBzbWFsbGVyIHNvIG1ha2UgdGhlIGNvbHVtbnMKLQkJCQkJLy8gc21hbGxlciBmaXJzdCBhbmQgdGhlbiByZXNpemUgdGhlIHRhYmxlIHRvCi0JCQkJCS8vIG1hdGNoIHRoZSBjbGllbnQgYXJlYSB3aWR0aAotCQkJCQljb2x1bW4xLnNldFdpZHRoKHdpZHRoIC8gMik7Ci0JCQkJCWNvbHVtbjIuc2V0V2lkdGgod2lkdGggLyAyKTsKLQkJCQkJdGFibGUuc2V0U2l6ZSh3aWR0aCwgYXJlYS5oZWlnaHQpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQkvLyB0YWJsZSBpcyBnZXR0aW5nIGJpZ2dlciBzbyBtYWtlIHRoZSB0YWJsZQotCQkJCQkvLyBiaWdnZXIgZmlyc3QgYW5kIHRoZW4gbWFrZSB0aGUgY29sdW1ucyB3aWRlcgotCQkJCQkvLyB0byBtYXRjaCB0aGUgY2xpZW50IGFyZWEgd2lkdGgKLQkJCQkJdGFibGUuc2V0U2l6ZSh3aWR0aCwgYXJlYS5oZWlnaHQpOwotCQkJCQljb2x1bW4xLnNldFdpZHRoKHdpZHRoIC8gMik7Ci0JCQkJCWNvbHVtbjIuc2V0V2lkdGgod2lkdGggLyAyKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCX0KLQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIGFuY2VzdG9yKQotCXsKLQkJQ29tcG9zaXRlIHBhcmVudCA9IG5ldyBDb21wb3NpdGUoYW5jZXN0b3IsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCXBhcmVudC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQkvLyBjcmVhdGUgY2hlY2tib3ggZm9yIHVzZXIgdG8gdXNlIEpTUCBUZW1wbGF0ZQotCQlmVXNlVGVtcGxhdGVCdXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLKTsKLQkJZlVzZVRlbXBsYXRlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuTmV3WFNMVXNlVGVtcGxhdGVCdXR0b25UZXh0KTsKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlLCAyLCAxKTsKLQkJZlVzZVRlbXBsYXRlQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7Ci0JCWZVc2VUZW1wbGF0ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQllbmFibGVUZW1wbGF0ZXMoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJLy8gY3JlYXRlIGNvbXBvc2l0ZSBmb3IgVGVtcGxhdGVzIHRhYmxlCi0JCUNvbXBvc2l0ZSBpbm5lclBhcmVudCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgaW5uZXJMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlpbm5lckxheW91dC5udW1Db2x1bW5zID0gMjsKLQkJaW5uZXJMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJaW5uZXJMYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlpbm5lclBhcmVudC5zZXRMYXlvdXQoaW5uZXJMYXlvdXQpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUsIDIsIDEpOwotCQlpbm5lclBhcmVudC5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQkvLyBDcmVhdGUgbGlua2VkIHRleHQgdG8ganVzdCB0byB0ZW1wbGF0ZXMgcHJlZmVyZW5jZSBwYWdlCi0JCUxpbmsgbGluayA9IG5ldyBMaW5rKGlubmVyUGFyZW50LCBTV1QuTk9ORSk7Ci0JCWxpbmsuc2V0VGV4dChNZXNzYWdlcy5OZXdYU0xMaW5rUHJlZmVyZW5jZVBhZ2UpOwotCQlkYXRhID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgZmFsc2UsIDIsIDEpOwotCQlsaW5rLnNldExheW91dERhdGEoZGF0YSk7Ci0JCWxpbmsuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJbGlua0NsaWNrZWQoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJLy8gY3JlYXRlIHRhYmxlIHRoYXQgZGlzcGxheXMgdGVtcGxhdGVzCi0JCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKGlubmVyUGFyZW50LCBTV1QuQk9SREVSIHwgU1dULkZVTExfU0VMRUNUSU9OKTsKLQotCQlkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWRhdGEud2lkdGhIaW50ID0gY29udmVydFdpZHRoSW5DaGFyc1RvUGl4ZWxzKDIpOwotCQlkYXRhLmhlaWdodEhpbnQgPSBjb252ZXJ0SGVpZ2h0SW5DaGFyc1RvUGl4ZWxzKDEwKTsKLQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXRhYmxlLnNldExheW91dERhdGEoZGF0YSk7Ci0JCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQkJVGFibGVMYXlvdXQgdGFibGVMYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKLQkJdGFibGUuc2V0TGF5b3V0KHRhYmxlTGF5b3V0KTsKLQotCQlUYWJsZUNvbHVtbiBjb2x1bW4xID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7Ci0JCWNvbHVtbjEuc2V0VGV4dChNZXNzYWdlcy5OZXdYU0xDb2x1bW5UZW1wbGF0ZU5hbWUpOwotCi0JCVRhYmxlQ29sdW1uIGNvbHVtbjIgPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKLQkJY29sdW1uMi5zZXRUZXh0KE1lc3NhZ2VzLk5ld1hTTENvbHVtblRlbXBsYXRlRGVzY3JpcHRpb24pOwotCi0JCWZUYWJsZVZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZSk7Ci0JCWZUYWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBUZW1wbGF0ZUxhYmVsUHJvdmlkZXIoKSk7Ci0JCWZUYWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFRlbXBsYXRlQ29udGVudFByb3ZpZGVyKCkpOwotCi0JCWZUYWJsZVZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBjb21wYXJlKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvYmplY3QxLCBPYmplY3Qgb2JqZWN0MikKLQkJCXsKLQkJCQlpZiAoKG9iamVjdDEgaW5zdGFuY2VvZiBUZW1wbGF0ZSkgJiYgKG9iamVjdDIgaW5zdGFuY2VvZiBUZW1wbGF0ZSkpCi0JCQkJewotCQkJCQlUZW1wbGF0ZSBsZWZ0ID0gKFRlbXBsYXRlKSBvYmplY3QxOwotCQkJCQlUZW1wbGF0ZSByaWdodCA9IChUZW1wbGF0ZSkgb2JqZWN0MjsKLQkJCQkJaW50IHJlc3VsdCA9IGxlZnQuZ2V0TmFtZSgpLmNvbXBhcmVUb0lnbm9yZUNhc2UocmlnaHQuZ2V0TmFtZSgpKTsKLQkJCQkJaWYgKHJlc3VsdCAhPSAwKQotCQkJCQkJcmV0dXJuIHJlc3VsdDsKLQkJCQkJcmV0dXJuIGxlZnQuZ2V0RGVzY3JpcHRpb24oKS5jb21wYXJlVG9JZ25vcmVDYXNlKHJpZ2h0LmdldERlc2NyaXB0aW9uKCkpOwotCQkJCX0KLQkJCQlyZXR1cm4gc3VwZXIuY29tcGFyZSh2aWV3ZXIsIG9iamVjdDEsIG9iamVjdDIpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBib29sZWFuIGlzU29ydGVyUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfSk7Ci0KLQkJZlRhYmxlVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGUpCi0JCQl7Ci0JCQkJdXBkYXRlVmlld2VySW5wdXQoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJLy8gY3JlYXRlIHZpZXdlciB0aGF0IGRpc3BsYXlzIGN1cnJlbnRseSBzZWxlY3RlZCB0ZW1wbGF0ZSdzIGNvbnRlbnRzCi0JCWZQYXR0ZXJuVmlld2VyID0gZG9DcmVhdGVWaWV3ZXIocGFyZW50KTsKLQotCQlmVGVtcGxhdGVTdG9yZSA9IFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRUZW1wbGF0ZVN0b3JlKCk7Ci0JCWZUYWJsZVZpZXdlci5zZXRJbnB1dChmVGVtcGxhdGVTdG9yZSk7Ci0KLQkJY29uZmlndXJlVGFibGVSZXNpemluZyhpbm5lclBhcmVudCwgdGFibGUsIGNvbHVtbjEsIGNvbHVtbjIpOwotCQlsb2FkTGFzdFNhdmVkUHJlZmVyZW5jZXMoKTsKLQotCQkvLyBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgSUhlbHBDb250ZXh0SWRzLkpTUF9ORVdXSVpBUkRfVEVNUExBVEVfSEVMUElEKTsKLQkJRGlhbG9nLmFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotCQlzZXRDb250cm9sKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIHNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQkJU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGJhc2VDb25maWd1cmF0aW9uID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTCgpOwotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmdbXSBnZXRDb25maWd1cmVkQ29udGVudFR5cGVzKElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKSB7Ci0JCQkJcmV0dXJuIGJhc2VDb25maWd1cmF0aW9uLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoc291cmNlVmlld2VyKTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgTGluZVN0eWxlUHJvdmlkZXJbXSBnZXRMaW5lU3R5bGVQcm92aWRlcnMoSVNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIsIFN0cmluZyBwYXJ0aXRpb25UeXBlKSB7Ci0JCQkJcmV0dXJuIGJhc2VDb25maWd1cmF0aW9uLmdldExpbmVTdHlsZVByb3ZpZGVycyhzb3VyY2VWaWV3ZXIsIHBhcnRpdGlvblR5cGUpOwotCQkJfQotCQl9OwotCQlTb3VyY2VWaWV3ZXIgdmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotCQl2aWV3ZXIuZ2V0VGV4dFdpZGdldCgpLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udCgib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCIpKTsgLy8kTk9OLU5MUy0xJAotCQlJU3RydWN0dXJlZE1vZGVsIHNjcmF0Y2hNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBzY3JhdGNoTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXZpZXdlci5jb25maWd1cmUoc291cmNlVmlld2VyQ29uZmlndXJhdGlvbik7Ci0JCXZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JCXJldHVybiB2aWV3ZXI7Ci0JfQotCi0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgZG9DcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLk5ld1hTTFRlbXBsYXRlUHJldmlld1RpdGxlKTsKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotCQlkYXRhLmhvcml6b250YWxTcGFuID0gMjsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQlTb3VyY2VWaWV3ZXIgdmlld2VyID0gY3JlYXRlVmlld2VyKHBhcmVudCk7Ci0JCXZpZXdlci5zZXRFZGl0YWJsZShmYWxzZSk7Ci0KLQkJQ29udHJvbCBjb250cm9sID0gdmlld2VyLmdldENvbnRyb2woKTsKLQkJZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCQlkYXRhLmhvcml6b250YWxTcGFuID0gMjsKLQkJZGF0YS5oZWlnaHRIaW50ID0gY29udmVydEhlaWdodEluQ2hhcnNUb1BpeGVscyg1KTsKLQkJY29udHJvbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCXJldHVybiB2aWV3ZXI7Ci0JfQotCi0Jdm9pZCBlbmFibGVUZW1wbGF0ZXMoKQotCXsKLQkJYm9vbGVhbiBlbmFibGVkID0gZlVzZVRlbXBsYXRlQnV0dG9uLmdldFNlbGVjdGlvbigpOwotCi0JCWlmIChlbmFibGVkKQotCQl7Ci0JCQlzZXRTZWxlY3RlZFRlbXBsYXRlKGZMYXN0U2VsZWN0ZWRUZW1wbGF0ZU5hbWUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLy8gc2F2ZSBsYXN0IHNlbGVjdGVkIHRlbXBsYXRlCi0JCQlUZW1wbGF0ZSB0ZW1wbGF0ZSA9IGdldFNlbGVjdGVkVGVtcGxhdGUoKTsKLQkJCWlmICh0ZW1wbGF0ZSAhPSBudWxsKQotCQkJCWZMYXN0U2VsZWN0ZWRUZW1wbGF0ZU5hbWUgPSB0ZW1wbGF0ZS5nZXROYW1lKCk7Ci0JCQllbHNlCi0JCQkJZkxhc3RTZWxlY3RlZFRlbXBsYXRlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0KLQkJCWZUYWJsZVZpZXdlci5zZXRTZWxlY3Rpb24obnVsbCk7Ci0JCX0KLQotCQlmVGFibGVWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCWZQYXR0ZXJuVmlld2VyLmdldENvbnRyb2woKS5zZXRFbmFibGVkKGVuYWJsZWQpOwotCX0KLQotCXByaXZhdGUgVGVtcGxhdGUgZ2V0U2VsZWN0ZWRUZW1wbGF0ZSgpCi0JewotCQlUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZlRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpOwotCi0JCWlmIChzZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0JCXsKLQkJCXRlbXBsYXRlID0gKFRlbXBsYXRlKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCX0KLQkJcmV0dXJuIHRlbXBsYXRlOwotCX0KLQotCVN0cmluZyBnZXRUZW1wbGF0ZVN0cmluZyhpbnRbXSBvZmZzZXQpCi0JewotCQlTdHJpbmcgdGVtcGxhdGVTdHJpbmcgPSBudWxsOwotCQlvZmZzZXRbMF0gPSAwOwotCi0JCVRlbXBsYXRlIHRlbXBsYXRlID0gZ2V0U2VsZWN0ZWRUZW1wbGF0ZSgpOwotCQlpZiAodGVtcGxhdGUgIT0gbnVsbCkKLQkJewotCQkJVGVtcGxhdGVDb250ZXh0VHlwZSBjb250ZXh0VHlwZSA9IFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSgpLmdldENvbnRleHRUeXBlKFhTTFVJQ29uc3RhbnRzLlRFTVBMQVRFX0NPTlRFWFRfWFNMX05FVyk7Ci0JCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQoKTsKLQkJCVRlbXBsYXRlQ29udGV4dCBjb250ZXh0ID0gbmV3IERvY3VtZW50VGVtcGxhdGVDb250ZXh0KGNvbnRleHRUeXBlLCBkb2N1bWVudCwgMCwgMCk7Ci0JCQl0cnkKLQkJCXsKLQkJCQlUZW1wbGF0ZUJ1ZmZlciBidWZmZXIgPSBjb250ZXh0LmV2YWx1YXRlKHRlbXBsYXRlKTsKLQkJCQl0ZW1wbGF0ZVN0cmluZyA9IGJ1ZmZlci5nZXRTdHJpbmcoKTsKLQkJCQlmb3IoVGVtcGxhdGVWYXJpYWJsZSB0IDogYnVmZmVyLmdldFZhcmlhYmxlcygpKQotCQkJCXsKLQkJCQkJaWYgKHQuZ2V0TmFtZSgpLmVxdWFscyhvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5HbG9iYWxUZW1wbGF0ZVZhcmlhYmxlcy5DdXJzb3IuTkFNRSkpIHsKLQkJCQkJCWlmICh0LmdldE9mZnNldHMoKS5sZW5ndGggPiAwKSBvZmZzZXRbMF0gPSB0LmdldE9mZnNldHMoKVswXTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlYU0xVSVBsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdGVtcGxhdGVTdHJpbmc7Ci0JfQotCi0Jdm9pZCBsaW5rQ2xpY2tlZCgpCi0JewotCQlTdHJpbmcgcGFnZUlkID0gWFNMX1VJX1RFTVBMQVRFX1BSRUZFUkVOQ0VfUEFHRTsKLQkJUHJlZmVyZW5jZURpYWxvZyBkaWFsb2cgPSBQcmVmZXJlbmNlc1V0aWwuY3JlYXRlUHJlZmVyZW5jZURpYWxvZ09uKGdldFNoZWxsKCksIHBhZ2VJZCwgbmV3IFN0cmluZ1tdIHsgcGFnZUlkIH0sIG51bGwpOwotCQlkaWFsb2cub3BlbigpOwotCQlmVGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBsb2FkTGFzdFNhdmVkUHJlZmVyZW5jZXMoKQotCXsKLQkJU3RyaW5nIHRlbXBsYXRlTmFtZSA9IFhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoWFNMVUlDb25zdGFudHMuTkVXX0ZJTEVfVEVNUExBVEVfTkFNRSk7Ci0JCWlmICh0ZW1wbGF0ZU5hbWUgPT0gbnVsbCB8fCB0ZW1wbGF0ZU5hbWUubGVuZ3RoKCkgPT0gMCkKLQkJewotCQkJZkxhc3RTZWxlY3RlZFRlbXBsYXRlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlmVXNlVGVtcGxhdGVCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWZMYXN0U2VsZWN0ZWRUZW1wbGF0ZU5hbWUgPSB0ZW1wbGF0ZU5hbWU7Ci0JCQlmVXNlVGVtcGxhdGVCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOwotCQl9Ci0JCWVuYWJsZVRlbXBsYXRlcygpOwotCX0KLQotCXZvaWQgc2F2ZUxhc3RTYXZlZFByZWZlcmVuY2VzKCkKLQl7Ci0JCVN0cmluZyB0ZW1wbGF0ZU5hbWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCi0JCVRlbXBsYXRlIHRlbXBsYXRlID0gZ2V0U2VsZWN0ZWRUZW1wbGF0ZSgpOwotCQlpZiAodGVtcGxhdGUgIT0gbnVsbCkKLQkJewotCQkJdGVtcGxhdGVOYW1lID0gdGVtcGxhdGUuZ2V0TmFtZSgpOwotCQl9Ci0KLQkJWFNMVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKFhTTFVJQ29uc3RhbnRzLk5FV19GSUxFX1RFTVBMQVRFX05BTUUsIHRlbXBsYXRlTmFtZSk7Ci0JCVhTTFVJUGx1Z2luLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0U2VsZWN0ZWRUZW1wbGF0ZShTdHJpbmcgdGVtcGxhdGVOYW1lKQotCXsKLQkJT2JqZWN0IHRlbXBsYXRlID0gbnVsbDsKLQotCQlpZiAodGVtcGxhdGVOYW1lICE9IG51bGwgJiYgdGVtcGxhdGVOYW1lLmxlbmd0aCgpID4gMCkKLQkJewotCQkJLy8gcGljayB0aGUgbGFzdCB1c2VkIHRlbXBsYXRlCi0JCQl0ZW1wbGF0ZSA9IGZUZW1wbGF0ZVN0b3JlLmZpbmRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIFhTTFVJQ29uc3RhbnRzLlRFTVBMQVRFX0NPTlRFWFRfWFNMX05FVyk7Ci0JCX0KLQotCQkvLyBubyByZWNvcmQgb2YgbGFzdCB1c2VkIHRlbXBsYXRlIHNvIGp1c3QgcGljayBmaXJzdCBlbGVtZW50Ci0JCWlmICh0ZW1wbGF0ZSA9PSBudWxsKQotCQl7Ci0JCQkvLyBqdXN0IHBpY2sgZmlyc3QgZWxlbWVudAotCQkJdGVtcGxhdGUgPSBmVGFibGVWaWV3ZXIuZ2V0RWxlbWVudEF0KDApOwotCQl9Ci0KLQkJaWYgKHRlbXBsYXRlICE9IG51bGwpCi0JCXsKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRlbXBsYXRlKTsKLQkJCWZUYWJsZVZpZXdlci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB0cnVlKTsKLQkJfQotCX0KLQotCXZvaWQgdXBkYXRlVmlld2VySW5wdXQoKQotCXsKLQkJVGVtcGxhdGUgdGVtcGxhdGUgPSBnZXRTZWxlY3RlZFRlbXBsYXRlKCk7Ci0JCWlmICh0ZW1wbGF0ZSAhPSBudWxsKQotCQl7Ci0JCQlmUGF0dGVyblZpZXdlci5nZXREb2N1bWVudCgpLnNldCh0ZW1wbGF0ZS5nZXRQYXR0ZXJuKCkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJZlBhdHRlcm5WaWV3ZXIuZ2V0RG9jdW1lbnQoKS5zZXQoIiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0JCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1hTTEZpbGVXaXphcmQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1hTTEZpbGVXaXphcmQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk4MWZiMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvd2l6YXJkcy9OZXdYU0xGaWxlV2l6YXJkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNzE4ODMgLSBBcnJheUluZGV4T3V0T2ZCb3VuZHMgb24gTmV3IFhTTCB3aXRoIG5vIHByb2plY3RzCi0gKiAgICAgSmVzcGVyIFN0ZWVuIE1vbGxlciAtIGJ1ZyAyODk3OTkgLSBSZWFjdCB0byB0aGUgJ2N1cnNvcicgdmFyaWFibGUgaW4gdGhlIHRlbXBsYXRlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIE5ld1hTTEZpbGVXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkCi17Ci0JcHJpdmF0ZSBOZXdYU0xGaWxlV2l6YXJkUGFnZSBmTmV3RmlsZVBhZ2U7Ci0JcHJpdmF0ZSBOZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZSBmTmV3RmlsZVRlbXBsYXRlc1BhZ2U7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBmU2VsZWN0aW9uOwotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgYWRkUGFnZXMoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3NlbCA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKElERS5jb21wdXRlU2VsZWN0ZWRSZXNvdXJjZXMoZlNlbGVjdGlvbikpOwotCQkKLQkJZk5ld0ZpbGVQYWdlID0gbmV3IE5ld1hTTEZpbGVXaXphcmRQYWdlKCJOZXdGaWxlQ3JlYXRpb25QYWdlIiwgc3NlbCk7IC8vJE5PTi1OTFMtMSQgCi0JCWZOZXdGaWxlUGFnZS5zZXRUaXRsZShNZXNzYWdlcy5OZXdYU0xGaWxlUGFnZVRpdGxlKTsKLQkJZk5ld0ZpbGVQYWdlLnNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLk5ld1hTTEZpbGVQYWdlRGVzY3JpcHRpb24pOwotCQlhZGRQYWdlKGZOZXdGaWxlUGFnZSk7Ci0KLQkJZk5ld0ZpbGVUZW1wbGF0ZXNQYWdlID0gbmV3IE5ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlKCk7Ci0JCWFkZFBhZ2UoZk5ld0ZpbGVUZW1wbGF0ZXNQYWdlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggYVdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gYVNlbGVjdGlvbikKLQl7Ci0JCWZTZWxlY3Rpb24gPSBhU2VsZWN0aW9uOwotCQlzZXRXaW5kb3dUaXRsZShNZXNzYWdlcy5OZXdYU0xGaWxlUGFnZVdpbmRvd1RpdGxlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkKLQl7Ci0JCWJvb2xlYW4gcGVyZm9ybWVkT0sgPSBmYWxzZTsKLQotCQkvLyBzYXZlIHVzZXIgb3B0aW9ucyBmb3IgbmV4dCB1c2UKLQkJZk5ld0ZpbGVUZW1wbGF0ZXNQYWdlLnNhdmVMYXN0U2F2ZWRQcmVmZXJlbmNlcygpOwotCi0JCS8vIG5vIGZpbGUgZXh0ZW5zaW9uIHNwZWNpZmllZCBzbyBhZGQgZGVmYXVsdCBleHRlbnNpb24KLQkJU3RyaW5nIGZpbGVOYW1lID0gZk5ld0ZpbGVQYWdlLmdldEZpbGVOYW1lKCk7Ci0JCWlmIChmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpID09IC0xKQotCQl7Ci0JCQlTdHJpbmcgbmV3RmlsZU5hbWUgPSBmTmV3RmlsZVBhZ2UuYWRkRGVmYXVsdEV4dGVuc2lvbihmaWxlTmFtZSk7Ci0JCQlmTmV3RmlsZVBhZ2Uuc2V0RmlsZU5hbWUobmV3RmlsZU5hbWUpOwotCQl9Ci0KLQkJLy8gY3JlYXRlIGEgbmV3IGVtcHR5IGZpbGUKLQkJSUZpbGUgZmlsZSA9IGZOZXdGaWxlUGFnZS5jcmVhdGVOZXdGaWxlKCk7Ci0KLQkJaW50IG9mZnNldFtdID0gbmV3IGludFsxXTsKLQkJLy8gaWYgdGhlcmUgd2FzIHByb2JsZW0gd2l0aCBjcmVhdGluZyBmaWxlLCBpdCB3aWxsIGJlIG51bGwsIHNvIG1ha2UKLQkJLy8gc3VyZSB0byBjaGVjawotCQlpZiAoZmlsZSAhPSBudWxsKQotCQl7Ci0JCQkvLyBwdXQgdGVtcGxhdGUgY29udGVudHMgaW50byBmaWxlCi0JCQlTdHJpbmcgdGVtcGxhdGVTdHJpbmcgPSBmTmV3RmlsZVRlbXBsYXRlc1BhZ2UuZ2V0VGVtcGxhdGVTdHJpbmcob2Zmc2V0KTsKLQkJCWlmICh0ZW1wbGF0ZVN0cmluZyAhPSBudWxsKQotCQkJewotCQkJCS8vIGRldGVybWluZSB0aGUgZW5jb2RpbmcgZm9yIHRoZSBuZXcgZmlsZQotCQkJCVByZWZlcmVuY2VzIHByZWZlcmVuY2UgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQkJCVN0cmluZyBjaGFyU2V0ID0gcHJlZmVyZW5jZS5nZXRTdHJpbmcoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuT1VUUFVUX0NPREVTRVQpOwotCi0JCQkJdHJ5Ci0JCQkJewotCQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCQlPdXRwdXRTdHJlYW1Xcml0ZXIgb3V0cHV0U3RyZWFtV3JpdGVyID0gbnVsbDsKLQkJCQkJaWYgKGNoYXJTZXQgPT0gbnVsbCB8fCBjaGFyU2V0LnRyaW0oKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCS8vIGp1c3QgdXNlIGRlZmF1bHQgZW5jb2RpbmcKLQkJCQkJCW91dHB1dFN0cmVhbVdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCW91dHB1dFN0cmVhbVdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtLCBjaGFyU2V0KTsKLQkJCQkJfQotCQkJCQlvdXRwdXRTdHJlYW1Xcml0ZXIud3JpdGUodGVtcGxhdGVTdHJpbmcpOwotCQkJCQlvdXRwdXRTdHJlYW1Xcml0ZXIuZmx1c2goKTsKLQkJCQkJb3V0cHV0U3RyZWFtV3JpdGVyLmNsb3NlKCk7Ci0JCQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dFN0cmVhbS50b0J5dGVBcnJheSgpKTsKLQkJCQkJZmlsZS5zZXRDb250ZW50cyhpbnB1dFN0cmVhbSwgdHJ1ZSwgZmFsc2UsIG51bGwpOwotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQlYU0xVSVBsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBvcGVuIHRoZSBmaWxlIGluIGVkaXRvcgotCQkJb3BlbkVkaXRvcihmaWxlLCBvZmZzZXRbMF0pOwotCi0JCQkvLyBldmVyeXRoaW5nJ3MgZmluZQotCQkJcGVyZm9ybWVkT0sgPSB0cnVlOwotCQl9Ci0JCXJldHVybiBwZXJmb3JtZWRPSzsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkVkaXRvcihmaW5hbCBJRmlsZSBmaWxlLCBmaW5hbCBpbnQgY3Vyc29yT2Zmc2V0KQotCXsKLQkJLy8gT3BlbiBlZGl0b3Igb24gbmV3IGZpbGUuCi0JCVN0cmluZyBlZGl0b3JJZCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJRWRpdG9yRGVzY3JpcHRvciBlZGl0b3IgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgZmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKS5nZXRDb250ZW50VHlwZSgpKTsKLQkJCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJCWVkaXRvcklkID0gZWRpdG9yLmdldElkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZTEpIHsKLQkJCS8vIGVkaXRvciBpZCBjb3VsZCBub3QgYmUgcmV0cmlldmVkLCBzbyB3ZSBjYW4gbm90IG9wZW4gZWRpdG9yCi0JCQlyZXR1cm47Ci0JCX0KLQkJZmluYWwgU3RyaW5nIGZpbmFsRWRpdG9ySWQgPSBlZGl0b3JJZDsKLQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlJV29ya2JlbmNoV2luZG93IGR3ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCQl0cnkgewotCQkJCQlpZiAoZHcgIT0gbnVsbCkgewotCQkJCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IGR3LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCQkJCWlmIChwYWdlICE9IG51bGwpIHsKLQkJCQkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBwYWdlLm9wZW5FZGl0b3IobmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSwgZmluYWxFZGl0b3JJZCwgdHJ1ZSk7Ci0JCQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcillZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCQkJCQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkgdGV4dEVkaXRvci5zZWxlY3RBbmRSZXZlYWwoY3Vyc29yT2Zmc2V0LCAwKTsKLQkJCQkJCQllZGl0b3Iuc2V0Rm9jdXMoKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQkvLyBlZGl0b3IgY2FuIG5vdCBvcGVuIGZvciBzb21lIHJlYXNvbgotCQkJCQlYU0xVSVBsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3WFNMRmlsZVdpemFyZFBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC93aXphcmRzL05ld1hTTEZpbGVXaXphcmRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMWM1NDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3dpemFyZHMvTmV3WFNMRmlsZVdpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXM7Ci0KLWNsYXNzIE5ld1hTTEZpbGVXaXphcmRQYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0xFeHRlbnNpb24gPSAiLnhzbCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIElDb250ZW50VHlwZSBmQ29udGVudFR5cGU7Ci0JcHJpdmF0ZSBMaXN0IGZWYWxpZEV4dGVuc2lvbnMgPSBudWxsOwotCi0JcHVibGljIE5ld1hTTEZpbGVXaXphcmRQYWdlKFN0cmluZyBwYWdlTmFtZSwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJc3VwZXIocGFnZU5hbWUsIHNlbGVjdGlvbik7Ci0JCS8vIGZpbmQgYW4gdW51c2VkIGZpbGUgbmFtZQotCQlzZXRGaWxlTmFtZShnZXRVbnVzZWRGaWxlbmFtZSgiTmV3U3R5bGVzaGVldCIsc2VsZWN0aW9uKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0VW51c2VkRmlsZW5hbWUoU3RyaW5nIHByZWZpeCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKQotCXsKLQkJU3RyaW5nIG5hbWUgPSBwcmVmaXgrWFNMRXh0ZW5zaW9uOwotCQlpZiAoc2VsZWN0aW9uLmlzRW1wdHkoKSkKLQkJCXJldHVybiBuYW1lOwotCQlPYmplY3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotCQl7Ci0JCQlJQ29udGFpbmVyIGMgPSAoSUNvbnRhaW5lcillbGVtZW50OwotCQkJaW50IGk9MDsKLQkJCWRvCi0JCQl7Ci0JCQkJaWYgKGMuZmluZE1lbWJlcihuYW1lKSA9PSBudWxsKQotCQkJCQlyZXR1cm4gbmFtZTsKLQkJCQlpKys7Ci0JCQkJbmFtZSA9IHByZWZpeCtpK1hTTEV4dGVuc2lvbjsKLQkJCX0KLQkJCXdoaWxlKHRydWUpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpCi0JewotCQlzZXRNZXNzYWdlKG51bGwpOwotCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7Ci0KLQkJaWYgKCFzdXBlci52YWxpZGF0ZVBhZ2UoKSkKLQkJewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJU3RyaW5nIGZpbGVOYW1lID0gZ2V0RmlsZU5hbWUoKTsKLQkJSVBhdGggZnVsbFBhdGggPSBnZXRDb250YWluZXJGdWxsUGF0aCgpOwotCQlpZiAoKGZ1bGxQYXRoICE9IG51bGwpICYmIChmdWxsUGF0aC5pc0VtcHR5KCkgPT0gZmFsc2UpICYmIChmaWxlTmFtZSAhPSBudWxsKSkKLQkJewotCQkJLy8gY2hlY2sgdGhhdCBmaWxlbmFtZSBkb2VzIG5vdCBjb250YWluIGludmFsaWQgZXh0ZW5zaW9uCi0JCQlpZiAoIWV4dGVuc2lvblZhbGlkRm9yQ29udGVudFR5cGUoZmlsZU5hbWUpKQotCQkJewotCQkJCXNldEVycm9yTWVzc2FnZShOTFMuYmluZChNZXNzYWdlcy5OZXdYU0xGaWxlV2l6YXJkRXh0ZW5zaW9uRXJyb3IsIGdldFZhbGlkRXh0ZW5zaW9ucygpLnRvU3RyaW5nKCkpKTsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQkvLyBubyBmaWxlIGV4dGVuc2lvbiBzcGVjaWZpZWQgc28gY2hlY2sgYWRkaW5nIGRlZmF1bHQKLQkJCS8vIGV4dGVuc2lvbiBkb2Vzbid0IGVxdWFsIGEgZmlsZSB0aGF0IGFscmVhZHkgZXhpc3RzCi0JCQlpZiAoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSA9PSAtMSkKLQkJCXsKLQkJCQlTdHJpbmcgbmV3RmlsZU5hbWUgPSBhZGREZWZhdWx0RXh0ZW5zaW9uKGZpbGVOYW1lKTsKLQkJCQlJUGF0aCByZXNvdXJjZVBhdGggPSBmdWxsUGF0aC5hcHBlbmQobmV3RmlsZU5hbWUpOwotCi0JCQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCQkJSVN0YXR1cyByZXN1bHQgPSB3b3Jrc3BhY2UudmFsaWRhdGVQYXRoKHJlc291cmNlUGF0aC50b1N0cmluZygpLCBJUmVzb3VyY2UuRk9MREVSKTsKLQkJCQlpZiAoIXJlc3VsdC5pc09LKCkpCi0JCQkJewotCQkJCQkvLyBwYXRoIGludmFsaWQKLQkJCQkJc2V0RXJyb3JNZXNzYWdlKHJlc3VsdC5nZXRNZXNzYWdlKCkpOwotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCi0JCQkJaWYgKCh3b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldEZvbGRlcihyZXNvdXJjZVBhdGgpLmV4aXN0cygpIHx8IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0RmlsZShyZXNvdXJjZVBhdGgpLmV4aXN0cygpKSkKLQkJCQl7Ci0JCQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5OZXdYU0xGaWxlQWxyZWFkRXhpc3RzRXJyb3IpOwotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlTdHJpbmcgYWRkRGVmYXVsdEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpCi0JewotCQlTdHJpbmdCdWZmZXIgbmV3RmlsZU5hbWUgPSBuZXcgU3RyaW5nQnVmZmVyKGZpbGVuYW1lKTsKLQotCQlTdHJpbmcgZXh0ID0gInhzbCI7IC8vJE5PTi1OTFMtMSQKLQkJbmV3RmlsZU5hbWUuYXBwZW5kKCIuIik7IC8vJE5PTi1OTFMtMSQKLQkJbmV3RmlsZU5hbWUuYXBwZW5kKGV4dCk7Ci0KLQkJcmV0dXJuIG5ld0ZpbGVOYW1lLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogR2V0IGNvbnRlbnQgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBuZXcgZmlsZSB3aXphcmQKLQkgKiAKLQkgKiBAcmV0dXJuIElDb250ZW50VHlwZQotCSAqLwotCXByaXZhdGUgSUNvbnRlbnRUeXBlIGdldENvbnRlbnRUeXBlKCkKLQl7Ci0JCWlmIChmQ29udGVudFR5cGUgPT0gbnVsbCkKLQkJCWZDb250ZW50VHlwZSA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldENvbnRlbnRUeXBlKFhTTENvcmUuWFNMX0NPTlRFTlRfVFlQRSk7Ci0JCXJldHVybiBmQ29udGVudFR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0IGdldFZhbGlkRXh0ZW5zaW9ucygpCi0JewotCQlpZiAoZlZhbGlkRXh0ZW5zaW9ucyA9PSBudWxsKQotCQl7Ci0JCQlJQ29udGVudFR5cGUgdHlwZSA9IGdldENvbnRlbnRUeXBlKCk7Ci0JCQlmVmFsaWRFeHRlbnNpb25zID0gbmV3IEFycmF5TGlzdChBcnJheXMuYXNMaXN0KHR5cGUuZ2V0RmlsZVNwZWNzKElDb250ZW50VHlwZS5GSUxFX0VYVEVOU0lPTl9TUEVDKSkpOwotCQl9Ci0JCXJldHVybiBmVmFsaWRFeHRlbnNpb25zOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBleHRlbnNpb25WYWxpZEZvckNvbnRlbnRUeXBlKFN0cmluZyBmaWxlTmFtZSkKLQl7Ci0JCWJvb2xlYW4gdmFsaWQgPSBmYWxzZTsKLQotCQlJQ29udGVudFR5cGUgdHlwZSA9IGdldENvbnRlbnRUeXBlKCk7Ci0JCS8vIHRoZXJlIGlzIGN1cnJlbnRseSBhbiBleHRlbnNpb24KLQkJaWYgKGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykgIT0gLTEpCi0JCXsKLQkJCS8vIGNoZWNrIHdoYXQgY29udGVudCB0eXBlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIGN1cnJlbnQgZXh0ZW5zaW9uCi0JCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZXNGb3IoZmlsZU5hbWUpOwotCQkJaW50IGkgPSAwOwotCQkJd2hpbGUgKGkgPCB0eXBlcy5sZW5ndGggJiYgIXZhbGlkKQotCQkJewotCQkJCXZhbGlkID0gdHlwZXNbaV0uaXNLaW5kT2YodHlwZSk7Ci0JCQkJKytpOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCXZhbGlkID0gdHJ1ZTsgLy8gbm8gZXh0ZW5zaW9uIHNvIHZhbGlkCi0JCXJldHVybiB2YWxpZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvd2l6YXJkcy9UZW1wbGF0ZUNvbnRlbnRQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3dpemFyZHMvVGVtcGxhdGVDb250ZW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjNDVjYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvd2l6YXJkcy9UZW1wbGF0ZUNvbnRlbnRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlbXBsYXRlcy5wZXJzaXN0ZW5jZS5UZW1wbGF0ZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50czsKLQotY2xhc3MgVGVtcGxhdGVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotewotCXByaXZhdGUgVGVtcGxhdGVTdG9yZSBmU3RvcmU7Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCWZTdG9yZSA9IG51bGw7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dCkKLQl7Ci0JCXJldHVybiBmU3RvcmUuZ2V0VGVtcGxhdGVzKFhTTFVJQ29uc3RhbnRzLlRFTVBMQVRFX0NPTlRFWFRfWFNMX05FVyk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCXsKLQkJZlN0b3JlID0gKFRlbXBsYXRlU3RvcmUpIG5ld0lucHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9pbnRlcm5hbC93aXphcmRzL1RlbXBsYXRlTGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3dpemFyZHMvVGVtcGxhdGVMYWJlbFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OTUyNjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL2ludGVybmFsL3dpemFyZHMvVGVtcGxhdGVMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVtcGxhdGVzLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotCi1jbGFzcyBUZW1wbGF0ZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlcgotewotCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KQotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpCi0JewotCQlUZW1wbGF0ZSB0ZW1wbGF0ZSA9IChUZW1wbGF0ZSkgZWxlbWVudDsKLQotCQlzd2l0Y2ggKGNvbHVtbkluZGV4KQotCQl7Ci0JCWNhc2UgMDoKLQkJCXJldHVybiB0ZW1wbGF0ZS5nZXROYW1lKCk7Ci0JCWNhc2UgMToKLQkJCXJldHVybiB0ZW1wbGF0ZS5nZXREZXNjcmlwdGlvbigpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL3Byb3Zpc2lvbmFsL2NvbnRlbnRhc3Npc3QvQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JjZDA1OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKkNvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICphcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKkNvbnRyaWJ1dG9yczoKLSAqICAgIERhdmlkIENhcnZlciAoU1RBUikgIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWE1MUmVsZXZhbmNlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZWRpdG9yLkNNSW1hZ2VVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZWRpdG9yLlhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZWRpdG9yLlhNTEVkaXRvclBsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhZ2luZm8uTWFya3VwVGFnSW5mb1Byb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsLlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQWRvcHRlcnMgY2FuIGV4dGVuZCB0aGlzIGNsYXNzIHRvIGltcGxlbWVudCB0aGVpciBvd24gY29udGVudCBhc3Npc3RhbmNlIGZvciBFbGVtZW50Ci0gKiBwcm9wb3NhbHMgdXNpbmcgdGhlIFhNTCBDb250ZW50IE1vZGVsLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogQHNpbmNlIDEuMQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QgZXh0ZW5kcyBBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0IHsKLQotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX0ZJUlNUX1hTTEFOQ0VTVE9SX05PREUgPSAiYW5jZXN0b3I6OnhzbDoqWzFdIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBNYXJrdXBUYWdJbmZvUHJvdmlkZXIgaW5mb1Byb3ZpZGVyID0gbnVsbDsKLQlwcm90ZWN0ZWQgWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yIGNvbnRlbnRNb2RlbDsKLQkKLQkvKioKLQkgKgotCSAqIEBwYXJhbSBub2RlCi0JICogQHBhcmFtIGRvY3VtZW50UmVnaW9uCi0JICogQHBhcmFtIGNvbXBsZXRpb25SZWdpb24KLQkgKiBAcGFyYW0gYmVnaW4KLQkgKiBAcGFyYW0gbGVuZ3RoCi0JICogQHBhcmFtIGZpbHRlcgotCSAqIEBwYXJhbSB0ZXh0Vmlld2VyCi0JICovCi0JcHVibGljIEFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXN1cGVyKG5vZGUsIGRvY3VtZW50UmVnaW9uLCBjb21wbGV0aW9uUmVnaW9uLCBiZWdpbiwgbGVuZ3RoLCBmaWx0ZXIsIHRleHRWaWV3ZXIpOwotCX0KLQotCXByb3RlY3RlZCBJdGVyYXRvcjxDTU5vZGU+IGdldEF2YWlsYWJsZUNvbnRlbnROb2RlcyhJRE9NRG9jdW1lbnQgZG9tRG9jdW1lbnQsIE5vZGUgYW5jZXN0b3JOb2RlLCBpbnQgaW5jbHVkZU9wdGlvbnMpIHsKLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShkb21Eb2N1bWVudCk7Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlYyA9IG1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oKEVsZW1lbnQpYW5jZXN0b3JOb2RlKTsKLQkJTGlzdCA8Q01Ob2RlPiBjbU5vZGVMaXN0ID0gbW9kZWxRdWVyeS5nZXRBdmFpbGFibGVDb250ZW50KChFbGVtZW50KWFuY2VzdG9yTm9kZSwgY21FbGVtZW50RGVjLCBpbmNsdWRlT3B0aW9ucyk7Ci0JCUl0ZXJhdG9yIDxDTU5vZGU+IGNtTm9kZUl0ID0gY21Ob2RlTGlzdC5pdGVyYXRvcigpOwotCQlyZXR1cm4gY21Ob2RlSXQ7Ci0JfQotCi0JcHJvdGVjdGVkIEN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBjcmVhdGVQcm9wb3NhbChTdHJpbmcgcHJvcG9zZWRUZXh0LCBTdHJpbmcgYWRkaXRpb25hbEluZm8sIGludCBvZmZzZXQsCi0JCQlJbWFnZSBpbWFnZSwgaW50IHN0YXJ0TGVuZ3RoKSB7Ci0JCQkJQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIHByb3Bvc2FsID0gbmV3IEN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCgKLQkJCQkJCXByb3Bvc2VkVGV4dCwgb2Zmc2V0LCAwLCBzdGFydExlbmd0aCArIHByb3Bvc2VkVGV4dC5sZW5ndGgoKSAtIGdldE1hdGNoU3RyaW5nKCkubGVuZ3RoKCksIAotCQkJCQkJaW1hZ2UsIHByb3Bvc2VkVGV4dCwgbnVsbCwgYWRkaXRpb25hbEluZm8sIDAsIHRydWUpOwotCQkJCXJldHVybiBwcm9wb3NhbDsKLQkJCX0KLQotCXByb3RlY3RlZCBJbWFnZSBnZXRDTU5vZGVJbWFnZShDTU5vZGUgY21Ob2RlKSB7Ci0JCUltYWdlIGltYWdlID0gQ01JbWFnZVV0aWwuZ2V0SW1hZ2UoY21Ob2RlKTsKLQkJaWYgKGltYWdlID09IG51bGwpIHsKLQkJCWltYWdlID0gWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJLmdldEluc3RhbmNlKCkKLQkJCQkJLmdldEltYWdlKAotCQkJCQkJCVhNTEVkaXRvclBsdWdpbkltYWdlcy5JTUdfT0JKX1RBR19HRU5FUklDKTsKLQkJfQotCQlyZXR1cm4gaW1hZ2U7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRSZXF1aXJlZE5hbWUoTm9kZSBvd25lck5vZGUsIENNTm9kZSBjbW5vZGUpIHsKLQkJaWYgKG93bmVyTm9kZSAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gRE9NTmFtZXNwYWNlSGVscGVyLmNvbXB1dGVOYW1lKGNtbm9kZSwgb3duZXJOb2RlLCBudWxsKTsKLQkJfQotCQlyZXR1cm4gY21ub2RlLmdldE5vZGVOYW1lKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIGNtbm9kZSdzIGRvY3VtZW50YXRpb24gdG8gZGlzcGxheSBpbiB0aGUgY29tcGxldGlvbiBwcm9wb3NhbCdzCi0JICogYWRkaXRpb25hbCBpbmZvLiBJZiBubyBkb2N1bWVudGF0aW9uIGV4aXN0cyBmb3IgY21ub2RlLCB0cnkgZGlzcGxheWluZwotCSAqIHBhcmVudE9yT3duZXIncyBkb2N1bWVudGF0aW9uCi0JICogCi0JICogU3RyaW5nIGFueSBkb2N1bWVudGF0aW9uIGluZm9ybWF0aW9uIHRvIGRpc3BsYXkgZm9yIGNtbm9kZS4KLQkgKiA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkuCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRBZGRpdGlvbmFsSW5mbyhDTU5vZGUgcGFyZW50T3JPd25lciwgQ01Ob2RlIGNtbm9kZSkgewotCQlTdHJpbmcgYWRkbEluZm8gPSBudWxsOwotCQotCQlpZiAoY21ub2RlID09IG51bGwpIHsKLQkJCWlmIChEZWJ1Zy5kaXNwbGF5V2FybmluZ3MpIHsKLQkJCQluZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOdWxsIGRlY2xhcmF0aW9uISIpLnByaW50U3RhY2tUcmFjZSgpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQotCQlhZGRsSW5mbyA9IGdldEluZm9Qcm92aWRlcigpLmdldEluZm8oY21ub2RlKTsKLQkJaWYgKChhZGRsSW5mbyA9PSBudWxsKSAmJiAocGFyZW50T3JPd25lciAhPSBudWxsKSkgewotCQkJYWRkbEluZm8gPSBnZXRJbmZvUHJvdmlkZXIoKS5nZXRJbmZvKHBhcmVudE9yT3duZXIpOwotCQl9Ci0JCXJldHVybiBhZGRsSW5mbzsKLQl9Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBpbmZvUHJvdmlkZXIuCi0JICogCi0JICogZkluZm9Qcm92aWRlciBhbmQgaWYgZkluZm9Qcm92aWRlciB3YXMgPGNvZGU+bnVsbDwvY29kZT4gY3JlYXRlIGEgbmV3Ci0JICogaW5zdGFuY2UKLQkgKi8KLQlwcm90ZWN0ZWQgTWFya3VwVGFnSW5mb1Byb3ZpZGVyIGdldEluZm9Qcm92aWRlcigpIHsKLQkJaWYgKGluZm9Qcm92aWRlciA9PSBudWxsKSB7Ci0JCQlpbmZvUHJvdmlkZXIgPSBuZXcgTWFya3VwVGFnSW5mb1Byb3ZpZGVyKCk7Ci0JCX0KLQkJcmV0dXJuIGluZm9Qcm92aWRlcjsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBiZWdpbnNXaXRoKFN0cmluZyBhU3RyaW5nLCBTdHJpbmcgcHJlZml4KSB7Ci0JCWlmICgoYVN0cmluZyA9PSBudWxsKSB8fCAocHJlZml4ID09IG51bGwpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gYVN0cmluZy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZml4LnRvTG93ZXJDYXNlKCkpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBpbiBhbiBBdHRyaWJ1dGUgUmVnaW9uIGlmIHNvLAotCSAqIHJldHVybiB0cnVlIG90aGVyd2lzZSBmYWxzZQotCSAqIEByZXR1cm4gVHJ1ZSBpZiBpbiBhdHRyaWJ1dGUgcmVnaW9uLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHJvdGVjdGVkIGJvb2xlYW4gaW5BdHRyaWJ1dGVSZWdpb24oKSB7Ci0JCXJldHVybiByZXBsYWNlbWVudEJlZ2luUG9zaXRpb24gPiBkb2N1bWVudFJlZ2lvbi5nZXRTdGFydE9mZnNldChyZWdpb24pICsgcmVnaW9uLmdldExlbmd0aCgpOwotCX0KLQotCS8qKgotCSAqIEFkZHMgcHJvcG9zYWxzIGZvciB0aGUgWE1MX1RBR19OQU1FIHJlZ2lvbi4KLQkgKiBAcGFyYW0gcG9zaXRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBhZGRUYWdOYW1lUHJvcG9zYWxzKGludCBwb3NpdGlvbikgewotCQotCQlOb2RlIGFuY2VzdG9yTm9kZSA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlhbmNlc3Rvck5vZGUgPSBYU0xUWFBhdGhIZWxwZXIuc2VsZWN0U2luZ2xlTm9kZShnZXROb2RlKCksCi0JCQkJCVhQQVRIX0ZJUlNUX1hTTEFOQ0VTVE9SX05PREUpOwotCQl9IGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBleCkgewotCQkJCi0JCX0KLQkJaWYgKGFuY2VzdG9yTm9kZSA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkKLQkJTGlzdDxDTU5vZGU+IGNtbm9kZXMgPSBudWxsOwotCQotCQlpZiAoYW5jZXN0b3JOb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCWNtbm9kZXMgPSBnZXRBdmFpbGFibGVDaGlsZEVsZW1lbnREZWNsYXJhdGlvbnMoCi0JCQkJCShFbGVtZW50KSBhbmNlc3Rvck5vZGUsIDApOwotCQkJSXRlcmF0b3I8Q01Ob2RlPiBub2RlSXRlcmF0b3IgPSBjbW5vZGVzLml0ZXJhdG9yKCk7Ci0JCQkvLyBjaG9wIG9mZiBhbnkgbGVhZGluZyA8J3MgYW5kIHdoaXRlc3BhY2UgZnJvbSB0aGUgbWF0Y2hzdHJpbmcKLQkJCXdoaWxlICgobWF0Y2hTdHJpbmcubGVuZ3RoKCkgPiAwKQotCQkJCQkmJiAoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShtYXRjaFN0cmluZy5jaGFyQXQoMCkpIHx8IGJlZ2luc1dpdGgoCi0JCQkJCQkJbWF0Y2hTdHJpbmcsICI8IikpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCQkvLyROT04tTkxTLTEkCi0JCQkJbWF0Y2hTdHJpbmcgPSBtYXRjaFN0cmluZy5zdWJzdHJpbmcoMSk7Ci0JCQl9Ci0JCQlpZiAoIW5vZGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQl3aGlsZSAobm9kZUl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCUNNTm9kZSBlbGVtZW50RGVjbCA9IG5vZGVJdGVyYXRvci5uZXh0KCk7Ci0JCQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCQkJLy8gb25seSBhZGQgcHJvcG9zYWxzIGZvciB0aGUgY2hpbGQgZWxlbWVudCdzIHRoYXQgYmVnaW4KLQkJCQkJLy8gd2l0aCB0aGUgbWF0Y2hzdHJpbmcKLQkJCQkJU3RyaW5nIHByb3Bvc2VkVGV4dCA9IG51bGw7Ci0JCi0JCQkJCXByb3Bvc2VkVGV4dCA9IGNvbnRlbnRNb2RlbC5nZXRSZXF1aXJlZE5hbWUoYW5jZXN0b3JOb2RlLAotCQkJCQkJCWVsZW1lbnREZWNsKTsKLQkJCQkJaW50IGN1cnNvckFkanVzdG1lbnQgPSBwcm9wb3NlZFRleHQubGVuZ3RoKCk7Ci0JCi0JCQkJCWlmIChlbGVtZW50RGVjbCBpbnN0YW5jZW9mIENNRWxlbWVudERlY2xhcmF0aW9uKSB7Ci0JCQkJCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBlZCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbikgZWxlbWVudERlY2w7Ci0JCQkJCQlpZiAoZWQuZ2V0Q29udGVudFR5cGUoKSA9PSBDTUVsZW1lbnREZWNsYXJhdGlvbi5FTVBUWSkgewotCQkJCQkJCXByb3Bvc2VkVGV4dCArPSBjb250ZW50TW9kZWwuZ2V0U3RhcnRUYWdDbG9zZSgKLQkJCQkJCQkJCWFuY2VzdG9yTm9kZSwgZWQpOwotCQkJCQkJCWN1cnNvckFkanVzdG1lbnQgPSBwcm9wb3NlZFRleHQubGVuZ3RoKCk7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQkJCQljb250ZW50TW9kZWwuZ2VuZXJhdGVUYWcoYW5jZXN0b3JOb2RlLCBlZCwgc2IpOwotCQkJCQkJCS8vIHNpbmNlIGl0J3MgYSBuYW1lIHByb3Bvc2FsLCBhc3N1bWUgJzwnIGlzCi0JCQkJCQkJLy8gYWxyZWFkeSB0aGVyZQotCQkJCQkJCS8vIG9ubHkgcmV0dXJuIHRoZSByZXN0IG9mIHRoZSB0YWcKLQkJCQkJCQlwcm9wb3NlZFRleHQgPSBzYi50b1N0cmluZygpLnN1YnN0cmluZygxKTsKLQkJCQkJCQljdXJzb3JBZGp1c3RtZW50ID0gZ2V0Q3Vyc29yUG9zaXRpb25Gb3JQcm9wb3NlZFRleHQocHJvcG9zZWRUZXh0KTsKLQkKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAoYmVnaW5zV2l0aChwcm9wb3NlZFRleHQsIG1hdGNoU3RyaW5nKSkgewotCQkJCQkJSW1hZ2UgaW1hZ2UgPSBDTUltYWdlVXRpbC5nZXRJbWFnZShlbGVtZW50RGVjbCk7Ci0JCQkJCQlpZiAoaW1hZ2UgPT0gbnVsbCkgewotCQkJCQkJCWltYWdlID0gWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCQkJCS5nZXRJbnN0YW5jZSgpCi0JCQkJCQkJCQkuZ2V0SW1hZ2UoCi0JCQkJCQkJCQkJCVhNTEVkaXRvclBsdWdpbkltYWdlcy5JTUdfT0JKX1RBR19HRU5FUklDKTsKLQkJCQkJCX0KLQkJCQkJCVN0cmluZyBwcm9wb3NlZEluZm8gPSBnZXRBZGRpdGlvbmFsSW5mbygKLQkJCQkJCQkJZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oZ2V0UGFyZW50KCkpLCBlbGVtZW50RGVjbCk7Ci0JCQkJCQlDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBuZXcgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsKAotCQkJCQkJCQlwcm9wb3NlZFRleHQsIGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpLAotCQkJCQkJCQlnZXRSZXBsYWNlbWVudExlbmd0aCgpLCBjdXJzb3JBZGp1c3RtZW50LAotCQkJCQkJCQlpbWFnZSwgY29udGVudE1vZGVsLmdldFJlcXVpcmVkTmFtZShnZXRQYXJlbnQoKSwKLQkJCQkJCQkJCQllbGVtZW50RGVjbCksIG51bGwsIHByb3Bvc2VkSW5mbywKLQkJCQkJCQkJWE1MUmVsZXZhbmNlQ29uc3RhbnRzLlJfVEFHX05BTUUpOwotCQkJCQkJYWRkUHJvcG9zYWwocHJvcG9zYWwpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCi0JfQotCi0JLyoqIFJldHVybnMgYSBsaXN0IG9mIENNTm9kZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIHBhcmVudCBjb250ZXh0Ci0JICogR2l2ZW4gdGhlIGdyYW1tYXIgc2hvd24gYmVsb3cgYW5kIGEgc25pcHBldCBvZiBYTUwgY29kZSAod2hlcmUgdGhlICd8JwotCSAqIGluZGljYXRlZCB0aGUgY3Vyc29yIHBvc2l0aW9uKQotCSAqIHRoZSBsaXN0IHdvdWxkIHJldHVybiBhbGwgb2YgdGhlIGVsZW1lbnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlCi0JICogcG90ZW50aWFsIGNoaWxkIGVsZW1lbnRzIG9mIEZvby4KLQkgKgotCSAqIGdyYW1tYXIgOiBGb28gLT4gKEEsIEIsIEMpCi0JICogc25pcHBldCA6IDxGb28+PEE+fAotCSAqIHJlc3VsdCA6IHtBLCBCLCBDfQotCSAqIAotCSAqIEBwYXJhbSBwYXJlbnQKLQkgKiBAcGFyYW0gY2hpbGRQb3NpdGlvbgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgTGlzdDxDTU5vZGU+IGdldEF2YWlsYWJsZUNoaWxkRWxlbWVudERlY2xhcmF0aW9ucyhFbGVtZW50IHBhcmVudCwKLQkJCWludCBjaGlsZFBvc2l0aW9uKSB7Ci0JCQkJTGlzdCBtb2RlbFF1ZXJ5QWN0aW9ucyA9IGdldEF2YWlsYWJsZUNoaWxkcmVuQXRJbmRleChwYXJlbnQsCi0JCQkJCQljaGlsZFBvc2l0aW9uLCBNb2RlbFF1ZXJ5LlZBTElESVRZX05PTkUpOwotCQkJCUl0ZXJhdG9yIGl0ZXJhdG9yID0gbW9kZWxRdWVyeUFjdGlvbnMuaXRlcmF0b3IoKTsKLQkJCQlMaXN0PENNTm9kZT4gY21ub2RlcyA9IG5ldyBWZWN0b3IoKTsKLQkJCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0JCQkJCU1vZGVsUXVlcnlBY3Rpb24gYWN0aW9uID0gKE1vZGVsUXVlcnlBY3Rpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQkJaWYgKChjaGlsZFBvc2l0aW9uIDwgMCkKLQkJCQkJCQl8fCAoKChhY3Rpb24uZ2V0U3RhcnRJbmRleCgpIDw9IGNoaWxkUG9zaXRpb24pICYmIChjaGlsZFBvc2l0aW9uIDw9IGFjdGlvbgotCQkJCQkJCQkJLmdldEVuZEluZGV4KCkpKSkpIHsKLQkJCQkJCUNNTm9kZSBhY3Rpb25DTU5vZGUgPSBhY3Rpb24uZ2V0Q01Ob2RlKCk7Ci0JCQkJCQlpZiAoKGFjdGlvbkNNTm9kZSAhPSBudWxsKSAmJiAhY21ub2Rlcy5jb250YWlucyhhY3Rpb25DTU5vZGUpKSB7Ci0JCQkJCQkJY21ub2Rlcy5hZGQoYWN0aW9uQ01Ob2RlKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQlyZXR1cm4gY21ub2RlczsKLQkJCX0KLQotCXByb3RlY3RlZCBMaXN0IGdldEF2YWlsYWJsZUNoaWxkcmVuQXRJbmRleChFbGVtZW50IHBhcmVudCwgaW50IGluZGV4LAotCQkJaW50IHZhbGlkaXR5Q2hlY2tpbmcpIHsKLQkJCQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQkJQ01FbGVtZW50RGVjbGFyYXRpb24gcGFyZW50RGVjbCA9IGdldENNRWxlbWVudERlY2xhcmF0aW9uKHBhcmVudCk7Ci0JCQkJaWYgKHBhcmVudERlY2wgIT0gbnVsbCkgewotCQkJCQlNb2RlbFF1ZXJ5IG1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KHBhcmVudAotCQkJCQkJCS5nZXRPd25lckRvY3VtZW50KCkpOwotCQkJCQkvLyB0YWtlbiBmcm9tIEFjdGlvbk1hbmFnZXJzCi0JCQkJCS8vIGludCBlZGl0TW9kZSA9IG1vZGVsUXVlcnkuZ2V0RWRpdE1vZGUoKTsKLQkJCQkJaW50IGVkaXRNb2RlID0gTW9kZWxRdWVyeS5FRElUX01PREVfVU5DT05TVFJBSU5FRDsKLQkJCQkJaW50IGljID0gKGVkaXRNb2RlID09IE1vZGVsUXVlcnkuRURJVF9NT0RFX0NPTlNUUkFJTkVEX1NUUklDVCkgPyBNb2RlbFF1ZXJ5LklOQ0xVREVfQ0hJTERfTk9ERVMKLQkJCQkJCQl8IE1vZGVsUXVlcnkuSU5DTFVERV9TRVFVRU5DRV9HUk9VUFMKLQkJCQkJCQk6IE1vZGVsUXVlcnkuSU5DTFVERV9DSElMRF9OT0RFUzsKLQkJCQkJbW9kZWxRdWVyeS5nZXRJbnNlcnRBY3Rpb25zKHBhcmVudCwgcGFyZW50RGVjbCwgaW5kZXgsIGljLAotCQkJCQkJCXZhbGlkaXR5Q2hlY2tpbmcsIGxpc3QpOwotCQkJCX0KLQkJCQlyZXR1cm4gbGlzdDsKLQkJCX0KLQotCXByb3RlY3RlZCBDTUVsZW1lbnREZWNsYXJhdGlvbiBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihOb2RlIG5vZGUpIHsKLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gcmVzdWx0ID0gbnVsbDsKLQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotCQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShub2RlCi0JCQkJCS5nZXRPd25lckRvY3VtZW50KCkpOwotCQkJaWYgKG1vZGVsUXVlcnkgIT0gbnVsbCkgewotCQkJCXJlc3VsdCA9IG1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oKEVsZW1lbnQpIG5vZGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJvdGVjdGVkIGludCBnZXRFbGVtZW50UG9zaXRpb24oTm9kZSBjaGlsZCkgewotCQlOb2RlIHBhcmVudCA9IGNoaWxkLmdldFBhcmVudE5vZGUoKTsKLQkJaWYgKHBhcmVudCA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQotCQlOb2RlTGlzdCBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWlmIChjaGlsZHJlbiA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpbnQgY291bnQgPSAwOwotCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCWlmIChjaGlsZHJlbi5pdGVtKGkpID09IGNoaWxkKSB7Ci0JCQkJcmV0dXJuIGNvdW50OwotCQkJfSBlbHNlIHsKLQkJCQkvLyBpZiAoY2hpbGRyZW4uaXRlbShpKS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKQotCQkJCWNvdW50Kys7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBpcyB0aGUgcG9zaXRpb24gdGhlIGN1cnNvciBzaG91bGQgYmUgaW4gYWZ0ZXIgdGhlIHByb3Bvc2FsIGlzCi0JICogYXBwbGllZAotCSAqIAotCSAqIEBwYXJhbSBwcm9wb3NlZFRleHQKLQkgKiBAcmV0dXJuIHRoZSBwb3NpdGlvbiB0aGUgY3Vyc29yIHNob3VsZCBiZSBpbiBhZnRlciB0aGUgcHJvcG9zYWwgaXMKLQkgKiAgICAgICAgIGFwcGxpZWQKLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGdldEN1cnNvclBvc2l0aW9uRm9yUHJvcG9zZWRUZXh0KFN0cmluZyBwcm9wb3NlZFRleHQpIHsKLQkJaW50IGN1cnNvckFkanVzdG1lbnQ7Ci0JCWN1cnNvckFkanVzdG1lbnQgPSBwcm9wb3NlZFRleHQuaW5kZXhPZigiXCJcIiIpICsgMTsgLy8kTk9OLU5MUy0xJAotCQkvLyBvdGhlcndpc2UsIGFmdGVyIHRoZSBmaXJzdCB0YWcKLQkJaWYgKGN1cnNvckFkanVzdG1lbnQgPT0gMCkgewotCQkJY3Vyc29yQWRqdXN0bWVudCA9IHByb3Bvc2VkVGV4dC5pbmRleE9mKCc+JykgKyAxOwotCQl9Ci0JCWlmIChjdXJzb3JBZGp1c3RtZW50ID09IDApIHsKLQkJCWN1cnNvckFkanVzdG1lbnQgPSBwcm9wb3NlZFRleHQubGVuZ3RoKCkgKyAxOwotCQl9Ci0JCi0JCXJldHVybiBjdXJzb3JBZGp1c3RtZW50OwotCX0KLQotCXByb3RlY3RlZCBJVGV4dFJlZ2lvbiBnZXROYW1lUmVnaW9uKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZmxhdE5vZGUpIHsKLQkJaWYgKGZsYXROb2RlID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCUl0ZXJhdG9yIHJlZ2lvbkxpc3QgPSBmbGF0Tm9kZS5nZXRSZWdpb25zKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKHJlZ2lvbkxpc3QuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIHJlZ2lvbkxpc3QubmV4dCgpOwotCQkJaWYgKGlzTmFtZVJlZ2lvbihyZWdpb24pKSB7Ci0JCQkJcmV0dXJuIHJlZ2lvbjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3MgdG8gdGhlIHNlZSBpZiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgY29ycmVjdCByZWdpb24uCi0JICogQHBhcmFtIHJlZ2lvbgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc05hbWVSZWdpb24oSVRleHRSZWdpb24gcmVnaW9uKSB7Ci0JCVN0cmluZyB0eXBlID0gcmVnaW9uLmdldFR5cGUoKTsKLQkJcmV0dXJuICgodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSkKLQkJCQl8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9FTEVNRU5UX0RFQ0xfTkFNRSkKLQkJCQl8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9ET0NUWVBFX05BTUUpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0FUVExJU1RfREVDTF9OQU1FKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0Fic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDAyYjQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0Fic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBUaGlzIGlzIGFuIEFic3RyYWN0IGNsYXNzIHRoYXQgaW1wbGVtZW50b3JzIHNob3VsZCBleHRlbmQgZm9yIGltcGxlbWVudGluZwotICogWFNMIENvbnRlbnQgQXNzaXN0IFByb2Nlc3NvcnMuICAgSXQgcHJvdmlkZXMgY29tbW9uIGNvbnZpZW5jZSBtZXRob2RzIGZvcgotICogaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gY29uc3RydWN0IGEgY29udGVudCBhc3Npc3QgcHJvY2Vzc29yLgotICogCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciBpbXBsZW1lbnRzIElYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yIHsKLQotCXByb3RlY3RlZCBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgSVRleHRWaWV3ZXIgdGV4dFZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBJbmRleGVkUmVnaW9uIHRyZWVOb2RlOwotCXByaXZhdGUgTm9kZSBub2RlOwotCXByb3RlY3RlZCBJRE9NTm9kZSB4bWxOb2RlOwotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNkUmVnaW9uOwotCXByb3RlY3RlZCBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uOwotCXByb3RlY3RlZCBTdHJpbmcgbWF0Y2hTdHJpbmc7Ci0JcHJvdGVjdGVkIGludCBjdXJzb3JQb3NpdGlvbjsKLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Vmlld2VyCi0JICogQHBhcmFtIGRvY3VtZW50UG9zaXRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplUHJvcG9zYWxWYXJpYWJsZXMoSVRleHRWaWV3ZXIgdGV4dFZpZXdlciwgaW50IGRvY3VtZW50UG9zaXRpb24pIHsKLQkJdGhpcy50ZXh0Vmlld2VyID0gdGV4dFZpZXdlcjsKLQkJY3Vyc29yUG9zaXRpb24gPSBkb2N1bWVudFBvc2l0aW9uOwotCQl0cmVlTm9kZSA9IENvbnRlbnRBc3Npc3RVdGlscy5nZXROb2RlQXQodGV4dFZpZXdlciwgY3Vyc29yUG9zaXRpb24pOwotCQlub2RlID0gZ2V0QWN0dWFsRE9NTm9kZSgoTm9kZSkgdHJlZU5vZGUpOwotCQl4bWxOb2RlID0gKElET01Ob2RlKSBub2RlOwotCQlzZFJlZ2lvbiA9IGdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQljb21wbGV0aW9uUmVnaW9uID0gZ2V0Q29tcGxldGlvblJlZ2lvbihjdXJzb3JQb3NpdGlvbiwgbm9kZSk7Ci0JCW1hdGNoU3RyaW5nID0gZ2V0TWF0Y2hTdHJpbmcoc2RSZWdpb24sIGNvbXBsZXRpb25SZWdpb24sIGN1cnNvclBvc2l0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbm9kZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIE5vZGUgZ2V0QWN0dWFsRE9NTm9kZShOb2RlIG5vZGUpIHsKLQkJd2hpbGUgKChub2RlICE9IG51bGwpICYmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpCi0JCQkJJiYgKG5vZGUuZ2V0UGFyZW50Tm9kZSgpICE9IG51bGwpKSB7Ci0JCQlub2RlID0gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0JCX0KLQkJcmV0dXJuIG5vZGU7Ci0JfQotCi0JLyoqCi0JICogU3RydWN0dXJlZFRleHRWaWV3ZXIgbXVzdCBiZSBzZXQgYmVmb3JlIHVzaW5nIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHBvcwotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkgewotCQlyZXR1cm4gQ29udGVudEFzc2lzdFV0aWxzLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbih0ZXh0Vmlld2VyLAotCQkJCWN1cnNvclBvc2l0aW9uKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHJlZ2lvbiB3aG9zZSBjb250ZW50J3MgcmVxdWlyZSBjb21wbGV0aW9uLiBUaGlzIGlzIHNvbWV0aGluZwotCSAqIG9mIGEgbWlzbm9tZXIgYXMgc29tZXRpbWVzIHRoZSB1c2VyIHdhbnRzIHRvIGJlIHByb21wdGVkIGZvciBjb250ZW50cyBvZgotCSAqIGEgbm9uLWV4aXN0ZW50IElUZXh0UmVnaW9uLCBzdWNoIGFzIGZvciBlbnVtZXJhdGVkIGF0dHJpYnV0ZSB2YWx1ZXMKLQkgKiBmb2xsb3dpbmcgYW4gJz0nIHNpZ24uCi0JICogCi0JICogQ29waWVkIGZyb20gQWJzdHJhY3RDb250ZW50QXNzaXN0IFByb2Nlc3Nvci4KLQkgKi8KLQlwcm90ZWN0ZWQgSVRleHRSZWdpb24gZ2V0Q29tcGxldGlvblJlZ2lvbihpbnQgZG9jdW1lbnRQb3NpdGlvbiwgTm9kZSBkb21ub2RlKSB7Ci0JCWlmIChkb21ub2RlID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCi0JCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IG51bGw7Ci0JCWludCBvZmZzZXQgPSBkb2N1bWVudFBvc2l0aW9uOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXROb2RlID0gbnVsbDsKLQkJSURPTU5vZGUgbm9kZSA9IChJRE9NTm9kZSkgZG9tbm9kZTsKLQkKLQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkRPQ1VNRU5UX05PREUpIHsKLQkJCWlmIChub2RlLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldExlbmd0aCgpID09IDApIHsKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJCUlUZXh0UmVnaW9uIHJlc3VsdCA9IG5vZGUuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkKLQkJCQkJLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KG9mZnNldCkKLQkJCQkJLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KG9mZnNldCk7Ci0JCQl3aGlsZSAocmVzdWx0ID09IG51bGwpIHsKLQkJCQlvZmZzZXQtLTsKLQkJCQlyZXN1bHQgPSBub2RlLmdldFN0cnVjdHVyZWREb2N1bWVudCgpCi0JCQkJCQkuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQob2Zmc2V0KQotCQkJCQkJLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KG9mZnNldCk7Ci0JCQl9Ci0JCQlyZXR1cm4gcmVzdWx0OwotCQl9Ci0JCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RhcnRUYWcgPSBub2RlCi0JCQkJLmdldFN0YXJ0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZW5kVGFnID0gbm9kZQotCQkJCS5nZXRFbmRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkKLQkJaWYgKChzdGFydFRhZyAhPSBudWxsKSAmJiAoc3RhcnRUYWcuZ2V0U3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQpCi0JCQkJJiYgKG9mZnNldCA8IHN0YXJ0VGFnLmdldFN0YXJ0T2Zmc2V0KCkgKyBzdGFydFRhZy5nZXRMZW5ndGgoKSkpIHsKLQkJCWZsYXROb2RlID0gc3RhcnRUYWc7Ci0JCX0gZWxzZSBpZiAoKGVuZFRhZyAhPSBudWxsKSAmJiAoZW5kVGFnLmdldFN0YXJ0T2Zmc2V0KCkgPD0gb2Zmc2V0KQotCQkJCSYmIChvZmZzZXQgPCBlbmRUYWcuZ2V0U3RhcnRPZmZzZXQoKSArIGVuZFRhZy5nZXRMZW5ndGgoKSkpIHsKLQkJCWZsYXROb2RlID0gZW5kVGFnOwotCQl9Ci0JCi0JCWlmIChmbGF0Tm9kZSAhPSBudWxsKSB7Ci0JCQlyZWdpb24gPSBnZXRDb21wbGV0aW9uUmVnaW9uKG9mZnNldCwgZmxhdE5vZGUpOwotCQl9IGVsc2UgewotCQkJZmxhdE5vZGUgPSBub2RlLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KAotCQkJCQlvZmZzZXQpOwotCQkJaWYgKChmbGF0Tm9kZS5nZXRTdGFydE9mZnNldCgpIDw9IGRvY3VtZW50UG9zaXRpb24pCi0JCQkJCSYmIChmbGF0Tm9kZS5nZXRFbmRPZmZzZXQoKSA+PSBkb2N1bWVudFBvc2l0aW9uKSkgewotCQkJCWlmICgob2Zmc2V0ID09IGZsYXROb2RlLmdldFN0YXJ0T2Zmc2V0KCkpCi0JCQkJCQkmJiAoZmxhdE5vZGUuZ2V0UHJldmlvdXMoKSAhPSBudWxsKQotCQkJCQkJJiYgKCgoZmxhdE5vZGUKLQkJCQkJCQkJLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KGRvY3VtZW50UG9zaXRpb24pICE9IG51bGwpICYmIChmbGF0Tm9kZQotCQkJCQkJCQkuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoZG9jdW1lbnRQb3NpdGlvbikKLQkJCQkJCQkJLmdldFR5cGUoKSAhPSBET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UKSkKLQkJCQkJCQkJfHwgKGZsYXROb2RlLmdldFByZXZpb3VzKCkuZ2V0TGFzdFJlZ2lvbigpCi0JCQkJCQkJCQkJLmdldFR5cGUoKSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTikgfHwgKGZsYXROb2RlCi0JCQkJCQkJCS5nZXRQcmV2aW91cygpLmdldExhc3RSZWdpb24oKS5nZXRUeXBlKCkgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOKSkpIHsKLQkJCQkJcmVnaW9uID0gZmxhdE5vZGUuZ2V0UHJldmlvdXMoKS5nZXRMYXN0UmVnaW9uKCk7Ci0JCQkJfSBlbHNlIGlmIChmbGF0Tm9kZS5nZXRFbmRPZmZzZXQoKSA9PSBkb2N1bWVudFBvc2l0aW9uKSB7Ci0JCQkJCXJlZ2lvbiA9IGZsYXROb2RlLmdldExhc3RSZWdpb24oKTsKLQkJCQl9IGVsc2UgewotCQkJCQlyZWdpb24gPSBmbGF0Tm9kZS5nZXRGaXJzdFJlZ2lvbigpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcmVnaW9uID0gZmxhdE5vZGUuZ2V0TGFzdFJlZ2lvbigpOwotCQkJfQotCQl9Ci0JCi0JCXJldHVybiByZWdpb247Ci0JfQotCi0JcHJvdGVjdGVkIElUZXh0UmVnaW9uIGdldENvbXBsZXRpb25SZWdpb24oaW50IG9mZnNldCwgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzZFJlZ2lvbikgewotCQlJVGV4dFJlZ2lvbiByZWdpb24gPSBzZFJlZ2lvbi5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChvZmZzZXQpOwotCQlpZiAocmVnaW9uID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCi0JCWlmIChzZFJlZ2lvbi5nZXRTdGFydE9mZnNldChyZWdpb24pID09IG9mZnNldCkgewotCQkJLy8gVGhlIG9mZnNldCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWdpb24KLQkJCWlmICgoc2RSZWdpb24uZ2V0U3RhcnRPZmZzZXQocmVnaW9uKSA9PSBzZFJlZ2lvbi5nZXRTdGFydE9mZnNldCgpKQotCQkJCQkmJiAoc2RSZWdpb24uZ2V0UHJldmlvdXMoKSAhPSBudWxsKQotCQkJCQkmJiAoIXNkUmVnaW9uLmdldFByZXZpb3VzKCkuaXNFbmRlZCgpKSkgewotCQkJCXJlZ2lvbiA9IHNkUmVnaW9uLmdldFByZXZpb3VzKCkuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoCi0JCQkJCQlvZmZzZXQgLSAxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gSXMgdGhlcmUgbm8gc2VwYXJhdGluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIHByZXZpb3VzIHJlZ2lvbj8KLQkJCQkvLyBJZiBub3QsCi0JCQkJLy8gdGhlbiB0aGF0IHJlZ2lvbiBpcyB0aGUgaW1wb3J0YW50IG9uZQotCQkJCUlUZXh0UmVnaW9uIHByZXZpb3VzUmVnaW9uID0gc2RSZWdpb24KLQkJCQkJCS5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChvZmZzZXQgLSAxKTsKLQkJCQlpZiAoKHByZXZpb3VzUmVnaW9uICE9IG51bGwpCi0JCQkJCQkmJiAocHJldmlvdXNSZWdpb24gIT0gcmVnaW9uKQotCQkJCQkJJiYgKHByZXZpb3VzUmVnaW9uLmdldFRleHRMZW5ndGgoKSA9PSBwcmV2aW91c1JlZ2lvbgotCQkJCQkJCQkuZ2V0TGVuZ3RoKCkpKSB7Ci0JCQkJCXJlZ2lvbiA9IHByZXZpb3VzUmVnaW9uOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8vIFRoZSBvZmZzZXQgaXMgTk9UIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZ2lvbgotCQkJaWYgKG9mZnNldCA+IHNkUmVnaW9uLmdldFN0YXJ0T2Zmc2V0KHJlZ2lvbikKLQkJCQkJKyByZWdpb24uZ2V0VGV4dExlbmd0aCgpKSB7Ci0JCQkJLy8gSXMgdGhlIG9mZnNldCB3aXRoaW4gdGhlIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIHRleHQgaW4gdGhpcwotCQkJCS8vIHJlZ2lvbj8KLQkJCQkvLyBJZiBzbywgdXNlIHRoZSBuZXh0IHJlZ2lvbgotCQkJCUlUZXh0UmVnaW9uIG5leHRSZWdpb24gPSBzZFJlZ2lvbgotCQkJCQkJLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KHNkUmVnaW9uCi0JCQkJCQkJCS5nZXRTdGFydE9mZnNldChyZWdpb24pCi0JCQkJCQkJCSsgcmVnaW9uLmdldExlbmd0aCgpKTsKLQkJCQlpZiAobmV4dFJlZ2lvbiAhPSBudWxsKSB7Ci0JCQkJCXJlZ2lvbiA9IG5leHRSZWdpb247Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyBJcyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgaW1wb3J0YW50IHRleHQgZm9yIHRoaXMgcmVnaW9uPwotCQkJCS8vIElmIHNvLCB0aGVuIHdlJ3ZlIGFscmVhZHkgZ290IHRoZSByaWdodCBvbmUuCi0JCQl9Ci0JCX0KLQkKLQkJLy8gdmFsaWQgV0hJVEVfU1BBQ0UgcmVnaW9uIGhhbmRsZXIgKCMxNzk5MjQpCi0JCWlmICgocmVnaW9uICE9IG51bGwpCi0JCQkJJiYgKHJlZ2lvbi5nZXRUeXBlKCkgPT0gRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRSkpIHsKLQkJCUlUZXh0UmVnaW9uIHByZXZpb3VzUmVnaW9uID0gc2RSZWdpb24KLQkJCQkJLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KHNkUmVnaW9uLmdldFN0YXJ0T2Zmc2V0KHJlZ2lvbikgLSAxKTsKLQkJCWlmIChwcmV2aW91c1JlZ2lvbiAhPSBudWxsKSB7Ci0JCQkJcmVnaW9uID0gcHJldmlvdXNSZWdpb247Ci0JCQl9Ci0JCX0KLQkKLQkJcmV0dXJuIHJlZ2lvbjsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRNYXRjaFN0cmluZyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHBhcmVudCwgSVRleHRSZWdpb24gYVJlZ2lvbiwgaW50IG9mZnNldCkgewotCQlTdHJpbmcgbWF0Y2hTdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkKLQkJaWYgKGlzTm90TWF0Y2hTdHJpbmdSZWdpb24ocGFyZW50LCBhUmVnaW9uLCBvZmZzZXQpKSB7Ci0JCQlyZXR1cm4gbWF0Y2hTdHJpbmc7IAotCQl9Ci0JCi0JCWlmIChoYXNNYXRjaFN0cmluZyhwYXJlbnQsIGFSZWdpb24sIG9mZnNldCkpIHsKLQkJCW1hdGNoU3RyaW5nID0gZXh0cmFjdE1hdGNoU3RyaW5nKHBhcmVudCwgYVJlZ2lvbiwgb2Zmc2V0KTsKLQkJfQotCQlyZXR1cm4gbWF0Y2hTdHJpbmc7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTm90TWF0Y2hTdHJpbmdSZWdpb24oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwYXJlbnQsIElUZXh0UmVnaW9uIGFSZWdpb24sIGludCBvZmZzZXQpIHsKLQkJaWYgKGFSZWdpb24gPT0gbnVsbCB8fCBwYXJlbnQgPT0gbnVsbCkKLQkJCXJldHVybiB0cnVlOwotCQkKLQkJU3RyaW5nIHJlZ2lvblR5cGUgPSBhUmVnaW9uLmdldFR5cGUoKTsKLQkJaW50IHRvdGFsUmVnaW9uT2Zmc2V0ID0gcGFyZW50LmdldFN0YXJ0T2Zmc2V0KGFSZWdpb24pCi0JCQkJKyBhUmVnaW9uLmdldFRleHRMZW5ndGgoKTsKLQkJcmV0dXJuIChpc0Nsb3NlUmVnaW9uKGFSZWdpb24pCi0JCQkJfHwgaGFzTm9NYXRjaFN0cmluZyhvZmZzZXQsIHJlZ2lvblR5cGUsIHRvdGFsUmVnaW9uT2Zmc2V0KSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VSZWdpb24oSVRleHRSZWdpb24gcmVnaW9uKSB7Ci0JCVN0cmluZyB0eXBlID0gcmVnaW9uLmdldFR5cGUoKTsKLQkJcmV0dXJuICgodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRSkKLQkJCQl8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UpCi0JCQkJfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFKQotCQkJCXx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX0NMT1NFKQotCQkJCXx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0UpCi0JCQkJfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfQVRUTElTVF9ERUNMX0NMT1NFKQotCQkJCXx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0VMRU1FTlRfREVDTF9DTE9TRSkKLQkJCQl8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9ET0NUWVBFX0RFQ0xBUkFUSU9OX0NMT1NFKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9ERUNMQVJBVElPTl9DTE9TRSkpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBoYXNNYXRjaFN0cmluZyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHBhcmVudCwgSVRleHRSZWdpb24gYVJlZ2lvbiwgaW50IG9mZnNldCkgewotCQlyZXR1cm4gKHBhcmVudC5nZXRUZXh0KGFSZWdpb24pLmxlbmd0aCgpID4gMCkKLQkJCQkmJiAocGFyZW50LmdldFN0YXJ0T2Zmc2V0KGFSZWdpb24pIDwgb2Zmc2V0KTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaGFzTm9NYXRjaFN0cmluZyhpbnQgb2Zmc2V0LCBTdHJpbmcgcmVnaW9uVHlwZSwgaW50IHRvdGFsUmVnaW9uT2Zmc2V0KSB7Ci0JCXJldHVybiByZWdpb25UeXBlLmVxdWFscyhET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UKQotCQkJCXx8IHJlZ2lvblR5cGUuZXF1YWxzKERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTKQotCQkJCXx8IHJlZ2lvblR5cGUuZXF1YWxzKERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOKQotCQkJCXx8IG9mZnNldCA+IHRvdGFsUmVnaW9uT2Zmc2V0OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGV4dHJhY3RNYXRjaFN0cmluZyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHBhcmVudCwgSVRleHRSZWdpb24gYVJlZ2lvbiwgaW50IG9mZnNldCkgewotCQlTdHJpbmcgbWF0Y2hTdHJpbmc7Ci0JCW1hdGNoU3RyaW5nID0gcGFyZW50LmdldFRleHQoYVJlZ2lvbikuc3Vic3RyaW5nKDAsCi0JCQkJb2Zmc2V0IC0gcGFyZW50LmdldFN0YXJ0T2Zmc2V0KGFSZWdpb24pKTsKLQkJaWYgKG1hdGNoU3RyaW5nLnN0YXJ0c1dpdGgoIlwiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJbWF0Y2hTdHJpbmcgPSBtYXRjaFN0cmluZy5zdWJzdHJpbmcoMSk7Ci0JCX0KLQkJcmV0dXJuIG1hdGNoU3RyaW5nOwotCX0KLQotCS8qKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb2Nlc3NvciNnZXRFcnJvck1lc3NhZ2UoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgewotCQlyZXR1cm4gZXJyb3JNZXNzYWdlOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHdoeSBjb250ZW50IGFzc2lzdGFuY2UgZGlkbid0IGNvbXBsZXRlLgotCSAqIAotCSAqIEBwYXJhbSBlcnJvck1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotCQl0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXJzIHdoaWNoIHdoZW4gZW50ZXJlZCBieSB0aGUgdXNlciBzaG91bGQKLQkgKiBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgdGhlIHByZXNlbnRhdGlvbiBvZiBwb3NzaWJsZSBjb21wbGV0aW9ucy4KLQkgKiAKLQkgKiB0aGUgYXV0byBhY3RpdmF0aW9uIGNoYXJhY3RlcnMgZm9yIGNvbXBsZXRpb24gcHJvcG9zYWwgb3IKLQkgKiA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyBhdXRvIGFjdGl2YXRpb24gaXMgZGVzaXJlZAotCSAqIAotCSAqIEByZXR1cm4gYW4gYXJyYXkgb2YgYWN0aXZhdGlvbiBjaGFyYWN0ZXJzCi0JICovCi0JcHVibGljIGNoYXJbXSBnZXRDb21wbGV0aW9uUHJvcG9zYWxBdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnMoKSB7Ci0JCWNoYXJbXSBjb21wbGV0aW9uUHJvcG9zYWxzID0geyAnIicsICdcJycsICc6JywgJ1snLCAneycsICc8JyB9OwotCQotCQlyZXR1cm4gY29tcGxldGlvblByb3Bvc2FsczsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0Fic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0Fic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI5Y2ExNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db2xsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlByb3Bvc2FsQ29tcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBYTUwgQ29udGVudEFzc2lzdFJlcXVlc3QgY2xhc3MuICBUaGlzIHByb3ZpZGVzCi0gKiBhIGJhc2lzIGZvciB0aGUgWFNMIGNvbnRlbnQgYXNzaXN0YW5jZS4gIENsYXNzZXMgbWF5IHN1YmNsYXNzIHRoaXMKLSAqIGNsYXNzIGFuZCBpbXBsZW1lbnQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KLSAqIAotICogQGF1dGhvciBkY2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0IGltcGxlbWVudHMgSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QgewotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uID0gbnVsbDsKLQlwcm90ZWN0ZWQgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IG1hY3JvcyA9IG5ldyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4oKTsKLQlwcm90ZWN0ZWQgU3RyaW5nIG1hdGNoU3RyaW5nOwotCXByb3RlY3RlZCBOb2RlIG5vZGUgPSBudWxsOwotCXByb3RlY3RlZCBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gcHJvcG9zYWxzID0gbmV3IEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPigpOwotCXByb3RlY3RlZCBJVGV4dFJlZ2lvbiByZWdpb24gPSBudWxsOwotCXByb3RlY3RlZCBpbnQgcmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uOwotCXByb3RlY3RlZCBpbnQgcmVwbGFjZW1lbnRMZW5ndGg7Ci0JcHJvdGVjdGVkIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIgPSBudWxsOwotCi0KLQkvKioKLQkgKiBIYW5kbGVzIENvbnRlbnQgQXNzaXN0YW5jZSByZXF1ZXN0cyBmb3IgU2VsZWN0IEF0dHJpYnV0ZXMuICBUaGlzIGlzIGNhbGxlZCBhbiBpbnN0YW50aWF0ZWQKLQkgKiB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIGNvbXB1dGVQcm9wb3NhbHMgbWV0aG9kIGZyb20gdGhlIFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuICBJdCB3aWxsCi0JICogY2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgcHJvcG9zYWxzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIFhTTCBzZWxlY3QgYXR0cmlidXRlLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogQHBhcmFtIHBhcmVudAotCSAqIEBwYXJhbSBkb2N1bWVudFJlZ2lvbgotCSAqIEBwYXJhbSBjb21wbGV0aW9uUmVnaW9uCi0JICogQHBhcmFtIGJlZ2luCi0JICogQHBhcmFtIGxlbmd0aAotCSAqIEBwYXJhbSBmaWx0ZXIKLQkgKiBAcGFyYW0gdGV4dFZpZXdlcgotCSAqLwotCQotCXB1YmxpYyBBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0KE5vZGUgbm9kZSwKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sCi0JCQlJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLCBpbnQgYmVnaW4sIGludCBsZW5ndGgsIFN0cmluZyBmaWx0ZXIsCi0JCQlJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKSB7Ci0JCXNldE5vZGUobm9kZSk7Ci0JCXNldERvY3VtZW50UmVnaW9uKGRvY3VtZW50UmVnaW9uKTsKLQkJc2V0UmVnaW9uKGNvbXBsZXRpb25SZWdpb24pOwotCQlzZXRNYXRjaFN0cmluZyhmaWx0ZXIpOwotCQlzZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb24oYmVnaW4pOwotCQlzZXRSZXBsYWNlbWVudExlbmd0aChsZW5ndGgpOwotCQl0aGlzLnRleHRWaWV3ZXIgPSB0ZXh0Vmlld2VyOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYSBsaXN0IG9mIHByb3Bvc2Fscy4gIEltcGxlbWVudGF0aW9ucyBhcmUgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUKLQkgKiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHByb3Bvc2FscyB0aGV5IHdvdWxkIGxpa2UgdG8gcmV0dXJuLiAgIFVzZSBvZiB0aGUgZ2V0QWxsQ29tcGxldGlvblByb3Bvc2FscwotCSAqIHNob3VsZCBiZSB1c2VkIHRvIHJldHVybiB0aGUgYWN0dWFsIHByb3Bvc2FscyBmcm9tIHRoaXMgbWV0aG9kLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IGdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkKLQlwcm90ZWN0ZWQgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMoKSB7Ci0JCUFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBhbGxQcm9wb3NhbHMgPSBuZXcgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+KCk7Ci0JCWlmICgoZ2V0UHJvcG9zYWxzKCkuc2l6ZSgpID4gMCkgfHwgKGdldE1hY3JvcygpLnNpemUoKSA+IDApKSB7Ci0JCQlhbGxQcm9wb3NhbHMuYWRkQWxsKGdldFByb3Bvc2FscygpKTsKLQkJCWFsbFByb3Bvc2Fscy5hZGRBbGwoZ2V0TWFjcm9zKCkpOwotCQkJYWxsUHJvcG9zYWxzID0gc29ydFByb3Bvc2FscyhhbGxQcm9wb3NhbHMpOwotCQl9Ci0JCXJldHVybiBhbGxQcm9wb3NhbHM7Ci0JfQotCi0JCi0JLyoqCi0JICogQ2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBOb2RlTGlzdCBoYXMgZGF0YQotCSAqIEBwYXJhbSBub2RlcyBBIE5vZGVMaXN0IG9iamVjdAotCSAqIEByZXR1cm4gVHJ1ZSBpZiBoYXMgZGF0YSwgZmFsc2UgaWYgZW1wdHkKLQkgKi8KLQlwcm90ZWN0ZWQgYm9vbGVhbiBoYXNOb2RlcyhOb2RlTGlzdCBub2RlcykgewotCQlyZXR1cm4gbm9kZXMgIT0gbnVsbCAmJiBub2Rlcy5nZXRMZW5ndGgoKSA+IDA7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBjdXJzb3IgcG9zaXRpb24gd2l0aGluIHRoZSBUZXh0IFZpZXdlcgotCSAqIEByZXR1cm4gQW4gaW50IHZhbHVlIGNvbnRhaW5pbmcgdGhlIGN1cnNvciBwb3NpdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZ2V0Q3Vyc29yUG9zaXRpb24oKSB7Ci0JCXJldHVybiB0ZXh0Vmlld2VyLmdldFRleHRXaWRnZXQoKS5nZXRDYXJldE9mZnNldCgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxOYW1lc3BhY2VJbmZvPiBnZXROYW1lc3BhY2VzKElET01FbGVtZW50IGVsZW1lbnQpIHsKLQkJIE5hbWVzcGFjZVRhYmxlIHRhYmxlID0gbmV3IE5hbWVzcGFjZVRhYmxlKGVsZW1lbnQuZ2V0T3duZXJEb2N1bWVudCgpKTsKLQkJIHRhYmxlLnZpc2l0RWxlbWVudChlbGVtZW50KTsKLQkJIAotCQkgQ29sbGVjdGlvbjxOYW1lc3BhY2VJbmZvPiBuYW1lc3BhY2VJbmZvTGlzdCA9ICB0YWJsZS5nZXROYW1lc3BhY2VJbmZvQ29sbGVjdGlvbigpOwotCQkgCi0JCSByZXR1cm4gbmFtZXNwYWNlSW5mb0xpc3Q7Ci0JfQotCi0JLyoqCi0JICogUmV0cmlldmVzIHRoZSBiYXNlIGxvY2F0aW9uIGZvciB0aGUgSURPTURvY3VtZW50IGZvciB0aGlzIGNsYXNzLiBUaGlzIGlzCi0JICogdXNlZCB0byBwb3B1bGF0ZSBhIG5ldyBQYXRoIGNsYXNzIGZvciByZXRyaWV2aW5nIGFuIElGaWxlIGluc3RhbmNlLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldExvY2F0aW9uKCkgewotCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSAoSURPTURvY3VtZW50KSBub2RlLmdldE93bmVyRG9jdW1lbnQoKTsKLQkJcmV0dXJuIGRvY3VtZW50LmdldE1vZGVsKCkuZ2V0QmFzZUxvY2F0aW9uKCk7CQkKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIG5ld1Byb3Bvc2FsCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgYWRkTWFjcm8oSUNvbXBsZXRpb25Qcm9wb3NhbCBuZXdQcm9wb3NhbCkgewotCQltYWNyb3MuYWRkKG5ld1Byb3Bvc2FsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRQcm9wb3NhbChJQ29tcGxldGlvblByb3Bvc2FsIG5ld1Byb3Bvc2FsKSB7Ci0JCXByb3Bvc2Fscy5hZGQobmV3UHJvcG9zYWwpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGdldERvY3VtZW50UmVnaW9uKCkgewotCQlyZXR1cm4gZG9jdW1lbnRSZWdpb247Ci0JfQotCi0JcHJvdGVjdGVkIExpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0TWFjcm9zKCkgewotCQlyZXR1cm4gbWFjcm9zOwotCX0KLQotCXByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIGdldE1hdGNoU3RyaW5nKCkgewotCQlyZXR1cm4gbWF0Y2hTdHJpbmc7Ci0JfQotCi0JcHJvdGVjdGVkIG9yZy53M2MuZG9tLk5vZGUgZ2V0Tm9kZSgpIHsKLQkJcmV0dXJuIG5vZGU7Ci0JfQotCi0JcHJvdGVjdGVkIG9yZy53M2MuZG9tLk5vZGUgZ2V0UGFyZW50KCkgewotCQlyZXR1cm4gbm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0UHJvcG9zYWxzKCkgewotCQlyZXR1cm4gcHJvcG9zYWxzOwotCX0KLQotCXByb3RlY3RlZCBJVGV4dFJlZ2lvbiBnZXRSZWdpb24oKSB7Ci0JCXJldHVybiByZWdpb247Ci0JfQotCi0JcHJvdGVjdGVkIGludCBnZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb24oKSB7Ci0JCXJldHVybiByZXBsYWNlbWVudEJlZ2luUG9zaXRpb247Ci0JfQotCi0JcHJvdGVjdGVkIGludCBnZXRSZXBsYWNlbWVudExlbmd0aCgpIHsKLQkJcmV0dXJuIHJlcGxhY2VtZW50TGVuZ3RoOwotCX0KLQotCXByb3RlY3RlZCBpbnQgZ2V0U3RhcnRPZmZzZXQoKSB7Ci0JCWlmICgoZ2V0RG9jdW1lbnRSZWdpb24oKSAhPSBudWxsKSAmJiAoZ2V0UmVnaW9uKCkgIT0gbnVsbCkpIHsKLQkJCXJldHVybiAoKElUZXh0UmVnaW9uQ29sbGVjdGlvbikgZ2V0RG9jdW1lbnRSZWdpb24oKSkuZ2V0U3RhcnRPZmZzZXQoZ2V0UmVnaW9uKCkpOwotCQl9Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFRleHQoKSB7Ci0JCWlmICgoZ2V0RG9jdW1lbnRSZWdpb24oKSAhPSBudWxsKSAmJiAoZ2V0UmVnaW9uKCkgIT0gbnVsbCkpIHsKLQkJCXJldHVybiAoKElUZXh0UmVnaW9uQ29sbGVjdGlvbikgZ2V0RG9jdW1lbnRSZWdpb24oKSkuZ2V0VGV4dChnZXRSZWdpb24oKSk7Ci0JCX0KLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJvdGVjdGVkIGludCBnZXRUZXh0RW5kT2Zmc2V0KCkgewotCQlpZiAoKGdldERvY3VtZW50UmVnaW9uKCkgIT0gbnVsbCkgJiYgKGdldFJlZ2lvbigpICE9IG51bGwpKSB7Ci0JCQlyZXR1cm4gKChJVGV4dFJlZ2lvbkNvbGxlY3Rpb24pIGdldERvY3VtZW50UmVnaW9uKCkpLmdldFRleHRFbmRPZmZzZXQoZ2V0UmVnaW9uKCkpOwotCQl9Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXREb2N1bWVudFJlZ2lvbihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQlkb2N1bWVudFJlZ2lvbiA9IHJlZ2lvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRNYXRjaFN0cmluZyhqYXZhLmxhbmcuU3RyaW5nIG5ld01hdGNoU3RyaW5nKSB7Ci0JCW1hdGNoU3RyaW5nID0gbmV3TWF0Y2hTdHJpbmc7Ci0JfQotCi0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0Tm9kZShvcmcudzNjLmRvbS5Ob2RlIG5ld05vZGUpIHsKLQkJbm9kZSA9IG5ld05vZGU7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRSZWdpb24oSVRleHRSZWdpb24gbmV3UmVnaW9uKSB7Ci0JCXJlZ2lvbiA9IG5ld1JlZ2lvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb24oaW50IG5ld1JlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbikgewotCQlyZXBsYWNlbWVudEJlZ2luUG9zaXRpb24gPSBuZXdSZXBsYWNlbWVudEJlZ2luUG9zaXRpb247Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRSZXBsYWNlbWVudExlbmd0aChpbnQgbmV3UmVwbGFjZW1lbnRMZW5ndGgpIHsKLQkJcmVwbGFjZW1lbnRMZW5ndGggPSBuZXdSZXBsYWNlbWVudExlbmd0aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IHNvcnRQcm9wb3NhbHMoQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IHByb3Bvc2Fsc0luKSB7Ci0JCUNvbGxlY3Rpb25zLnNvcnQocHJvcG9zYWxzSW4sIG5ldyBQcm9wb3NhbENvbXBhcmF0b3IoKSk7Ci0JCXJldHVybiBwcm9wb3NhbHNJbjsKLQotCX0KLQotCS8qKgotCSAqIAotCSAqIEByZXR1cm4gamF2YS5sYW5nLlN0cmluZwotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHRvU3RyaW5nKCkgewotCQlyZXR1cm4gIk5vZGU6ICIgKyBnZXROb2RlKCkgLy8kTk9OLU5MUy0xJAotCQkJCQkrICJcblBhcmVudDogIiArIGdldFBhcmVudCgpIC8vJE5PTi1OTFMtMSQKLQkJCQkJKyAiXG5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246ICIgKyBTdHJpbmdVdGlscy5lc2NhcGUoZ2V0RG9jdW1lbnRSZWdpb24oKS50b1N0cmluZygpKSAvLyROT04tTkxTLTEkCi0JCQkJCSsgIlxuUmVnaW9uOiAiICsgZ2V0UmVnaW9uKCkgLy8kTk9OLU5MUy0xJAotCQkJCQkrICJcbk1hdGNoIHN0cmluZzogJyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoZ2V0TWF0Y2hTdHJpbmcoKSkgKyAiJyIgLy8kTk9OLU5MUy0yJC8vJE5PTi1OTFMtMSQKLQkJCQkJKyAiXG5PZmZzZXRzOiBbIiArIGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpICsgIi0iICsgKGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpICsgZ2V0UmVwbGFjZW1lbnRMZW5ndGgoKSkgKyAiXVxuIjsgLy8kTk9OLU5MUy0zJC8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JfQotCi0JcHJvdGVjdGVkIFN0eWxlc2hlZXRNb2RlbCBnZXRTdHlsZXNoZWV0TW9kZWwoKSB7Ci0JCUlGaWxlIGVkaXRvckZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZ2V0TG9jYXRpb24oKSkpOwotCQlTdHlsZXNoZWV0TW9kZWwgbW9kZWwgPSBYU0xDb3JlLmdldEluc3RhbmNlKCkuZ2V0U3R5bGVzaGVldChlZGl0b3JGaWxlKTsKLQkJcmV0dXJuIG1vZGVsOwotCX0KLQkKLQkJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0N1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjkzYWIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0N1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbEV4dGVuc2lvbjQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZXh0SW5mb3JtYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotCi0vKioKLSAqIEFkb3B0ZXJzIGNhbiB1c2UgdGhlIGNsYXNzIHRvIGhlbHAgYnVpbGQgYSBjdXN0b20gY29udGVudCBjb21wbGV0aW9uIHByb3Bvc2FsLiAgCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqIEBzaW5jZSAxLjEKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgZXh0ZW5kcwotCQlvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsCi0JCWltcGxlbWVudHMgSUNvbXBsZXRpb25Qcm9wb3NhbEV4dGVuc2lvbjQgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHRoZSBDdXN0b20gQ29tcGxldGlvbiBQcm9wb3NhbAotCSAqIEBwYXJhbSByZXBsYWNlbWVudFN0cmluZyAKLQkgKiBAcGFyYW0gcmVwbGFjZW1lbnRPZmZzZXQgCi0JICogQHBhcmFtIHJlcGxhY2VtZW50TGVuZ3RoIAotCSAqIEBwYXJhbSBjdXJzb3JQb3NpdGlvbgotCSAqIEBwYXJhbSBpbWFnZQotCSAqIEBwYXJhbSBkaXNwbGF5U3RyaW5nCi0JICogQHBhcmFtIGNvbnRleHRJbmZvcm1hdGlvbgotCSAqIEBwYXJhbSBhZGRpdGlvbmFsUHJvcG9zYWxJbmZvCi0JICogQHBhcmFtIHJlbGV2YW5jZQotCSAqLwotCXB1YmxpYyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwoU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nLAotCQkJaW50IHJlcGxhY2VtZW50T2Zmc2V0LCBpbnQgcmVwbGFjZW1lbnRMZW5ndGgsIGludCBjdXJzb3JQb3NpdGlvbiwKLQkJCUltYWdlIGltYWdlLCBTdHJpbmcgZGlzcGxheVN0cmluZywKLQkJCUlDb250ZXh0SW5mb3JtYXRpb24gY29udGV4dEluZm9ybWF0aW9uLAotCQkJU3RyaW5nIGFkZGl0aW9uYWxQcm9wb3NhbEluZm8sIGludCByZWxldmFuY2UpIHsKLQkJc3VwZXIocmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VtZW50T2Zmc2V0LCByZXBsYWNlbWVudExlbmd0aCwKLQkJCQljdXJzb3JQb3NpdGlvbiwgaW1hZ2UsIGRpc3BsYXlTdHJpbmcsIGNvbnRleHRJbmZvcm1hdGlvbiwKLQkJCQlhZGRpdGlvbmFsUHJvcG9zYWxJbmZvLCByZWxldmFuY2UpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByZXBsYWNlbWVudFN0cmluZwotCSAqIEBwYXJhbSByZXBsYWNlbWVudE9mZnNldAotCSAqIEBwYXJhbSByZXBsYWNlbWVudExlbmd0aAotCSAqIEBwYXJhbSBjdXJzb3JQb3NpdGlvbgotCSAqIEBwYXJhbSBpbWFnZQotCSAqIEBwYXJhbSBkaXNwbGF5U3RyaW5nCi0JICogQHBhcmFtIGNvbnRleHRJbmZvcm1hdGlvbgotCSAqIEBwYXJhbSBhZGRpdGlvbmFsUHJvcG9zYWxJbmZvCi0JICogQHBhcmFtIHJlbGV2YW5jZQotCSAqIEBwYXJhbSB1cGRhdGVSZXBsYWNlbWVudExlbmd0aE9uVmFsaWRhdGUKLQkgKi8KLQlwdWJsaWMgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsKFN0cmluZyByZXBsYWNlbWVudFN0cmluZywKLQkJCWludCByZXBsYWNlbWVudE9mZnNldCwgaW50IHJlcGxhY2VtZW50TGVuZ3RoLCBpbnQgY3Vyc29yUG9zaXRpb24sCi0JCQlJbWFnZSBpbWFnZSwgU3RyaW5nIGRpc3BsYXlTdHJpbmcsCi0JCQlJQ29udGV4dEluZm9ybWF0aW9uIGNvbnRleHRJbmZvcm1hdGlvbiwKLQkJCVN0cmluZyBhZGRpdGlvbmFsUHJvcG9zYWxJbmZvLCBpbnQgcmVsZXZhbmNlLAotCQkJYm9vbGVhbiB1cGRhdGVSZXBsYWNlbWVudExlbmd0aE9uVmFsaWRhdGUpIHsKLQkJc3VwZXIocmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VtZW50T2Zmc2V0LCByZXBsYWNlbWVudExlbmd0aCwKLQkJCQljdXJzb3JQb3NpdGlvbiwgaW1hZ2UsIGRpc3BsYXlTdHJpbmcsIGNvbnRleHRJbmZvcm1hdGlvbiwKLQkJCQlhZGRpdGlvbmFsUHJvcG9zYWxJbmZvLCByZWxldmFuY2UsCi0JCQkJdXBkYXRlUmVwbGFjZW1lbnRMZW5ndGhPblZhbGlkYXRlKTsKLQl9Ci0KLQkvKiogCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWxFeHRlbnNpb240I2lzQXV0b0luc2VydGFibGUoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQXV0b0luc2VydGFibGUoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0lDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjJmMmQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L0lDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLQotLyoqCi0gKiBQcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgSUNvbXBsZXRpb25Qcm9wb3NhbHMuCi0gKiAKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QgewotCi0JLyoqCi0JICogQ29tcGxldGlvbiBQcm9wb3NhbHMgZm9yIGEgQ29udGVudCBBc3Npc3QgUmVxdWVzdC4KLQkgKiBAcmV0dXJuIEFycmF5TGxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4KLQkgKi8KLQlwdWJsaWMgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IGdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9JWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL3Byb3Zpc2lvbmFsL2NvbnRlbnRhc3Npc3QvSVhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjYmU3My4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvdWkvcHJvdmlzaW9uYWwvY29udGVudGFzc2lzdC9JWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi0vKioKLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGludGVyZmFjZSBJWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciB7Ci0KLQkvKioKLQkgKiBBcnJheUxpc3Qgb2YgU3RyaW5ncyBmb3IgdGhlIG5hbWVzcGFjZXMgdGhpcyBwcm9jZXNzb3IgYWN0aXZhdGVzIGFnYWluc3QuCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBBcnJheUxpc3Q8U3RyaW5nPiBnZXROYW1lc3BhY2VzKCk7Ci0JCi0JcHVibGljIFN0cmluZyBnZXRNaW5pbXVtVmVyc2lvbigpOwotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TWF4aW11bVZlcnNpb24oKTsKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC91aS9wcm92aXNpb25hbC9jb250ZW50YXNzaXN0L051bGxDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL3Byb3Zpc2lvbmFsL2NvbnRlbnRhc3Npc3QvTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjkyODUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3VpL3Byb3Zpc2lvbmFsL2NvbnRlbnRhc3Npc3QvTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQW4gZW1wdHkgY29udGVudCBhc3Npc3QgcmVxdWVzdC4KLSAqIEBhdXRob3IgZGNhcnZlcgotICogQHNpbmNlIDEuMQotICoKLSAqLwotcHVibGljIGNsYXNzIE51bGxDb250ZW50QXNzaXN0UmVxdWVzdCBleHRlbmRzIEFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QgewotCXByaXZhdGUgQXJyYXlMaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+IGVtcHR5UHJvcG9zYWxzID0gbmV3IEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPigpOwotCi0JLyoqCi0JICogQSBOVUxMIENvbnRlbnRBc3Npc3RSZXF1ZXN0IGhhcyBubyBwcm9wb3NhbHMuCi0JICogQHBhcmFtIG5vZGUKLQkgKiBAcGFyYW0gZG9jdW1lbnRSZWdpb24KLQkgKiBAcGFyYW0gY29tcGxldGlvblJlZ2lvbgotCSAqIEBwYXJhbSBiZWdpbgotCSAqIEBwYXJhbSBsZW5ndGgKLQkgKiBAcGFyYW0gZmlsdGVyCi0JICogQHBhcmFtIHRleHRWaWV3ZXIKLQkgKi8KLQlwdWJsaWMgTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0KE5vZGUgbm9kZSwgCi0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uLAotCQkJSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbiwgaW50IGJlZ2luLCBpbnQgbGVuZ3RoLCBTdHJpbmcgZmlsdGVyLAotCQkJSVRleHRWaWV3ZXIgdGV4dFZpZXdlcikgewotCQlzdXBlcihub2RlLCBkb2N1bWVudFJlZ2lvbiwgY29tcGxldGlvblJlZ2lvbiwgYmVnaW4sIGxlbmd0aCwKLQkJCQlmaWx0ZXIsIHRleHRWaWV3ZXIpOwotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWIKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKCkgewotCQlyZXR1cm4gZW1wdHlQcm9wb3NhbHM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkvdGVtcGxhdGVzL2ZpbGVfdGVtcGxhdGVzLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS90ZW1wbGF0ZXMvZmlsZV90ZW1wbGF0ZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2QyOTE5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS90ZW1wbGF0ZXMvZmlsZV90ZW1wbGF0ZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0ZW1wbGF0ZXM+Ci08dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54c2xfYmFzaWMiCi0gICAgICAgbmFtZT0iQmFzaWMgc3R5bGVzaGVldCIKLSAgICAgICBjb250ZXh0PSJ4c2xfbmV3IgotICAgICAgIGF1dG9pbnNlcnQ9InRydWUiCi0gICAgICAgZGVsZXRlZD0iZmFsc2UiCi0gICAgICAgZW5hYmxlZD0idHJ1ZSIKLSAgICAgICBkZXNjcmlwdGlvbj0iTWF0Y2hlcyB0aGUgcm9vdCBvZiB0aGUgaW5wdXQiPjwhW0NEQVRBWzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiR7ZW5jb2Rpbmd9Ij8+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iJHt4c2xfdmVyc2lvbn0iIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLQkJPCEtLSBUT0RPOiBBdXRvLWdlbmVyYXRlZCB0ZW1wbGF0ZSAtLT4ke2N1cnNvcn0KLQk8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+XV0+PC90ZW1wbGF0ZT4KLTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhzbF9iYXNpYy54c2x0MiIKLSAgICAgICBuYW1lPSJCYXNpYyBzdHlsZXNoZWV0IC0gWFNMVCAyLjAiCi0gICAgICAgY29udGV4dD0ieHNsX25ldyIKLSAgICAgICBhdXRvaW5zZXJ0PSJ0cnVlIgotICAgICAgIGRlbGV0ZWQ9ImZhbHNlIgotICAgICAgIGVuYWJsZWQ9InRydWUiCi0gICAgICAgZGVzY3JpcHRpb249IlhTTFQgMi4wIC0gTWF0Y2hlcyB0aGUgcm9vdCBvZiB0aGUgaW5wdXQiPjwhW0NEQVRBWzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiR7ZW5jb2Rpbmd9Ij8+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMi4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0JCTwhLS0gVE9ETzogQXV0by1nZW5lcmF0ZWQgdGVtcGxhdGUgLS0+JHtjdXJzb3J9Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0Pl1dPjwvdGVtcGxhdGU+Ci0KLTx0ZW1wbGF0ZSBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbHQudGVtcGxhdGVzLnhzbF9jb3B5IgotICAgICBuYW1lPSJDb3B5IHN0eWxlc2hlZXQiCi0gICAgIGNvbnRleHQ9InhzbF9uZXciCi0gICAgIGF1dG9pbnNlcnQ9InRydWUiCi0gICAgIGRlbGV0ZWQ9ImZhbHNlIgotICAgICBlbmFibGVkPSJ0cnVlIgotICAgICBkZXNjcmlwdGlvbj0iTWFrZXMgYSBjb3B5IG9mIHRoZSBpbnB1dCI+PCFbQ0RBVEFbPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iJHtlbmNvZGluZ30iPz4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIke3hzbF92ZXJzaW9ufSIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9IiR7Y3Vyc29yfSI+Ci0JCTwhLS0gVE9ETzogQXV0by1nZW5lcmF0ZWQgdGVtcGxhdGUgLS0+Ci0JPC94c2w6dGVtcGxhdGU+Ci0JPCEtLSBzdGFuZGFyZCBjb3B5IHRlbXBsYXRlIC0tPgotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9IkAqfG5vZGUoKSI+Ci0JCTx4c2w6Y29weT4KLQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iQCoiLz4KLQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KLQkJPC94c2w6Y29weT4KLQk8L3hzbDp0ZW1wbGF0ZT4JCi08L3hzbDpzdHlsZXNoZWV0Pl1dPjwvdGVtcGxhdGU+Ci08dGVtcGxhdGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2x0LnRlbXBsYXRlcy54c2xfY29weS54c2x0MiIKLSAgICAgbmFtZT0iWFNMVCAyLjAgQ29weSBzdHlsZXNoZWV0IgotICAgICBjb250ZXh0PSJ4c2xfbmV3IgotICAgICBhdXRvaW5zZXJ0PSJ0cnVlIgotICAgICBkZWxldGVkPSJmYWxzZSIKLSAgICAgZW5hYmxlZD0idHJ1ZSIKLSAgICAgZGVzY3JpcHRpb249Ik1ha2VzIGEgY29weSBvZiB0aGUgaW5wdXQiPjwhW0NEQVRBWzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiR7ZW5jb2Rpbmd9Ij8+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMi4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iJHtjdXJzb3J9Ij4KLQkJPCEtLSBUT0RPOiBBdXRvLWdlbmVyYXRlZCB0ZW1wbGF0ZSAtLT4KLQk8L3hzbDp0ZW1wbGF0ZT4KLQk8IS0tIHN0YW5kYXJkIGNvcHkgdGVtcGxhdGUgLS0+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iQCp8bm9kZSgpIj4KLQkJPHhzbDpjb3B5PgotCQkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJAKiIvPgotCQkJPHhzbDphcHBseS10ZW1wbGF0ZXMvPgotCQk8L3hzbDpjb3B5PgotCTwveHNsOnRlbXBsYXRlPgkKLTwveHNsOnN0eWxlc2hlZXQ+XV0+PC90ZW1wbGF0ZT4KLTwvdGVtcGxhdGVzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS94c2xmaWxlcy9zeW50YXhjb2xvcmluZy54c2wgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wudWkveHNsZmlsZXMvc3ludGF4Y29sb3JpbmcueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWM4YjU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS94c2xmaWxlcy9zeW50YXhjb2xvcmluZy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KLSAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InNvbXZlVmFsdWUiPjEyMzQ8L3hzbDp2YXJpYWJsZT4KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgICAgICAgIDx4c2w6aWYgdGVzdD0iJHNvbWVWYWx1ZSI+Ci0gICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyAvPgotICAgICAgICAgPC94c2w6aWY+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZGY4ZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtZGVidWdnZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiNzZiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotamF2YUNvbXBpbGVyLnhhbGFuLWRlYnVnZ2VyLmphci5hcmdzCi1idWlsZC54bWwKLXhhbGFuLWRlYnVnZ2VyLmphcgotdGVtcC5mb2xkZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M1NmJjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhMTMwOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVGh1IEphbiAwMyAyMjoyNDo1MCBFU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiYzM0Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI1N1biBEZWMgMTYgMDg6NDg6NTIgR01UIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZTY4YjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jV2VkIEp1bCAzMCAyMDo1NzoxNSBCU1QgMjAwOAotY29tcGlsZXJzLmYudW5yZXNvbHZlZC1mZWF0dXJlcz0xCi1jb21waWxlcnMuZi51bnJlc29sdmVkLXBsdWdpbnM9MQotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmRpc2NvdXJhZ2VkLWNsYXNzPTEKLWNvbXBpbGVycy5wLmludGVybmFsPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctYnVuZGxlLWNsYXNzcGF0aC1lbnRyaWVzPTAKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MQotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24taWRlbnRpZmllcj0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTEKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5zLmNyZWF0ZS1kb2NzPWZhbHNlCi1jb21waWxlcnMucy5kb2MtZm9sZGVyPWRvYwotY29tcGlsZXJzLnMub3Blbi10YWdzPTEKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2QyOWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4xLnF1YWxpZmllcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotICB1c2VzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlciwKLSAgIG9yZy5hcGFjaGUueHBhdGgsCi0gICBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLAotICAgamF2YXgueG1sLnRyYW5zZm9ybSwKLSAgIG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUueGFsYW47YnVuZGxlLXZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXI7YnVuZGxlLXZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZztidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSI7cmVzb2x1dGlvbjo9b3B0aW9uYWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9YYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9YYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxYjVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vWGFsYW5BdHRyaWJ1dGVzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotT1BUSU1JWkU9aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuL2ZlYXR1cmVzL29wdGltaXplCi1PUFRJTUlaRS5UWVBFPWJvb2xlYW4KLU9QVElNSVpFLkRFU0M9T3B0aW1pemUgc3R5bGVzaGVldCBwcm9jZXNzaW5nLiBCeSBkZWZhdWx0LCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZS4gWW91IG1heSBuZWVkIHRvIHNldCBpdCB0byBmYWxzZSBmb3IgdG9vbGluZyBhcHBsaWNhdGlvbnMuCi0KLUlOQ1JFTUVOVEFMPWh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9pbmNyZW1lbnRhbAotSU5DUkVNRU5UQUwuVFlQRT1ib29sZWFuCi1JTkNSRU1FTlRBTC5ERVNDPVByb2R1Y2Ugb3V0cHV0IGluY3JlbWVudGFsbHksIHJhdGhlciB0aGFuIHdhaXRpbmcgdG8gZmluaXNoIHBhcnNpbmcgdGhlIGlucHV0IGJlZm9yZSBnZW5lcmF0aW5nIGFueSBvdXRwdXQuIEJ5IGRlZmF1bHQgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvIGZhbHNlLiBZb3UgY2FuIHR1cm4gdGhpcyBhdHRyaWJ1dGUgb24gdG8gdHJhbnNmb3JtIGxhcmdlIGRvY3VtZW50cyB3aGVyZSB0aGUgc3R5bGVzaGVldCBzdHJ1Y3R1cmUgaXMgb3B0aW1pemVkIHRvIGV4ZWN1dGUgaW5kaXZpZHVhbCB0ZW1wbGF0ZXMgd2l0aG91dCBoYXZpbmcgdG8gcGFyc2UgdGhlIGVudGlyZSBkb2N1bWVudC4KLQotU09VUkNFX0xPQ0FUSU9OPWh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9zb3VyY2VfbG9jYXRpb24KLVNPVVJDRV9MT0NBVElPTi5UWVBFPWJvb2xlYW4KLVNPVVJDRV9MT0NBVElPTi5ERVNDPUJ5IGRlZmF1bHQsIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byBmYWxzZS4gU2V0dGluZyB0aGlzIGF0dHJpYnV0ZSB0byB0cnVlIGludm9sdmVzIGEgc3Vic3RhbnRpYWwgaW5jcmVhc2UgaW4gc3RvcmFnZSBjb3N0IHBlciBzb3VyY2UgZG9jdW1lbnQgbm9kZS4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBOb2RlSW5mbyBleHRlbnNpb24gZnVuY3Rpb25zIChvciBzb21lIG90aGVyIG1lY2hhbmlzbSkgdG8gcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGR1cmluZyBhIHRyYW5zZm9ybSwgeW91IG11c3Qgc2V0IHRoZSBhdHRyaWJ1dGUgdG8gdHJ1ZSBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgVHJhbnNmb3JtZXIgYW5kIHByb2Nlc3NpbmcgdGhlIHN0eWxlc2hlZXQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL1hhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL1hhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWViMDcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9YYWxhbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1TX0tFWV9JTkRFTlRfQU1PVU5UPXtodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW59aW5kZW50LWFtb3VudAotU19LRVlfSU5ERU5UX0FNT1VOVC5ERVNDPVRoZSBub24tc3RhbmRhcmQgcHJvcGVydHkga2V5IHRvIHVzZSB0byBzZXQgdGhlXG5cCi0JbnVtYmVyIG9mIHdoaXRlcGFjZXMgdG8gaW5kZW50IGJ5LCBwZXIgaW5kZW50YXRpb24gbGV2ZWwsXG5cCi0gICAgaWYgaW5kZW50PSJ5ZXMiCi0KLVNfS0VZX0xJTkVfU0VQQVJBVE9SPXtodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW59bGluZS1zZXBhcmF0b3IKLVNfS0VZX0xJTkVfU0VQQVJBVE9SLkRFU0M9VGhlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgdG8gdXNlIHRvIHNldCB0aGUgY2hhcmFjdGVycyB0byB3cml0ZSBvdXQgYXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUsXG5cCi0JcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lcyBmcm9tIHRoZSBydW50aW1lLgotCi1TX0tFWV9DT05URU5UX0hBTkRMRVI9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1jb250ZW50LWhhbmRsZXIKLVNfS0VZX0NPTlRFTlRfSEFORExFUi5ERVNDPVRoaXMgbm9uLXN0YW5kYXJkIHByb3BlcnR5IGtleSBpcyB1c2VkIHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkXG5cCi0gICAgIEphdmEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBDb250ZW50SGFuZGxlciBpbnRlcmZhY2UuXG5cCi0gICAgIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIGNsYXNzIHdpdGggYSBkZWZhdWx0IGNvbnN0cnVjdG9yIHRoYXRcblwKLSAgICAgaW1wbGVtZW50cyB0aGUgQ29udGVudEhhbmRsZXIgaW50ZXJmYWNlLCB3aGVyZSB0aGUgcmVzdWx0IHRyZWUgZXZlbnRzXG5cCi0gICAgIHdpbGwgYmUgc2VudCB0by4KLQotU19LRVlfRU5USVRJRVM9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1lbnRpdGllcwotU19LRVlfRU5USVRJRVMuREVTQz1UaGlzIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmaWxlXG5cCi0gICAgIHRoYXQgc3BlY2lmaWVzIGNoYXJhY3RlciB0byBlbnRpdHkgcmVmZXJlbmNlIG1hcHBpbmdzLgotCi1TX1VTRV9VUkxfRVNDQVBJTkc9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn11c2UtdXJsLWVzY2FwaW5nCi1TX1VTRV9VUkxfRVNDQVBJTkcuREVTQz1UaGlzIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgaXMgdXNlZCB0byBzZXQgYSB2YWx1ZSBvZiAieWVzIiBpZiB0aGUgaHJlZiB2YWx1ZXMgZm9yIEhUTUwgc2VyaWFsaXphdGlvbiBzaG91bGRcblwKLSAgICAgdXNlICV4eCBlc2NhcGluZy4KLSAgICAgCi1TX09NSVRfTUVUQV9UQUc9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1vbWl0LW1ldGEtdGFnCi1TX09NSVRfTUVUQV9UQUcuREVTQz1UaGlzIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgaXMgdXNlZCB0byBzZXQgYSB2YWx1ZSBvZiAieWVzIiBpZiB0aGUgTUVUQSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQgd2hlcmUgaXQgd291bGRcblwKLSAgICAgb3RoZXJ3aXNlIGJlIHN1cHBsaWVkLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNTZjODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy1kZWJ1Z2dlci8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBYYWxhbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBYYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxYzBmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4KLUJ1bmRsZS1OYW1lLjAgPSBYU0wgWGFsYW4gU3VwcG9ydAotcHJvY2Vzc29yVHlwZS5sYWJlbC4wID0gWGFsYW4KLXByb2Nlc3Nvci5sYWJlbC4wID0gWGFsYW4gMi41LjEKLXByb2Nlc3Nvci5sYWJlbC4xID0gWGFsYW4gMi43LjEKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi10cmFuc2Zvcm1lckZhY3RvcnlOYW1lWGFsYW4gPSBJbnRlcnByZXRpdmUKLXRyYW5zZm9ybWVyRmFjdG9yeU5hbWVYYWxhblhTTFRDID0gQ29tcGlsaW5nCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTYwMjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlIj4KLSAgICAgIDxwcm9jZXNzb3JUeXBlCi0gICAgICAgICAgICBhdHRyaWJ1dGVQcm9wZXJ0aWVzPSJYYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3NvclR5cGUubGFiZWwuMCIKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9IlhhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIj4KLSAgICAgICAgIDx0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0ib3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIKLSAgICAgICAgICAgICAgIG5hbWU9IiV0cmFuc2Zvcm1lckZhY3RvcnlOYW1lWGFsYW4iPgotICAgICAgICAgPC90cmFuc2Zvcm1lckZhY3Rvcnk+Ci0gICAgICAgICA8dHJhbnNmb3JtZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICBmYWN0b3J5Q2xhc3M9Im9yZy5hcGFjaGUueGFsYW4ueHNsdGMudHJheC5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIgotICAgICAgICAgICAgICAgbmFtZT0iJXRyYW5zZm9ybWVyRmFjdG9yeU5hbWVYYWxhblhTTFRDIj4KLSAgICAgICAgIDwvdHJhbnNmb3JtZXJGYWN0b3J5PgotICAgICAgPC9wcm9jZXNzb3JUeXBlPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5kZWJ1Z2dlciI+Ci0gICAgICA8ZGVidWdnZXIKLSAgICAgICAgICAgIGNsYXNzTmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2VjbGlwc2Vfb3JiaXQ6b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbn0iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlciIKLSAgICAgICAgICAgIG5hbWU9IlhhbGFuIDIuNS4xIG9yIGdyZWF0ZXIiCi0gICAgICAgICAgICBwcm9jZXNzb3JUeXBlSWQ9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4ucHJvY2Vzc29yVHlwZSIKLSAgICAgICAgICAgIHRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIj4KLSAgICAgIDwvZGVidWdnZXI+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvciI+Ci0gICAgICA8IS0tIEFuIGFkb3B0ZXIgY2FuIHNwZWNpZnkgdGhlICR7ZWNsaXBzZV9vcmJpdDogfSB2YXJpYWJsZSB0byBpbmRpY2F0ZSB3aGljaCBlY2xpcHNlCi0gICAgICAgICAgIGJ1bmRsZSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHBhdGguIC0tPgotICAgICAgPHByb2Nlc3NvcgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS54YWxhbn07JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXJ9OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLmJjZWx9OyR7ZWNsaXBzZV9vcmJpdDpqYXZhX2N1cC5ydW50aW1lfSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3IiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3Nvci5sYWJlbC4xIgotICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBkZWJ1Z2dlcklkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyIgotICAgICAgICAgICAgc3VwcG9ydHM9IjEuMCI+Ci0gICAgICA8L3Byb2Nlc3Nvcj4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5EZWJ1Z2dlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuRGVidWdnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyZWFiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5EZWJ1Z2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEudXRpbC5Ub29NYW55TGlzdGVuZXJzRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFuc2Zvcm1lci5UcmFuc2Zvcm1lckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLkFic3RyYWN0RGVidWdnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLkJyZWFrUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFhhbGFuRGVidWdnZXIgZXh0ZW5kcyBBYnN0cmFjdERlYnVnZ2VyCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFhhbGFuRGVidWdnZXIuY2xhc3MpOwotCXByaXZhdGUgWGFsYW5UcmFjZUxpc3RlbmVyIGN1cnJlbnRUcmFjZUxpc3RlbmVyOwotCXByaXZhdGUgVHJhbnNmb3JtZXJJbXBsIGxhc3RUcmFuc2Zvcm1lckluQ2hhaW47Ci0JCi0JcHVibGljIHZvaWQgc2V0VHJhbnNmb3JtZXJGYWN0b3J5KFRyYW5zZm9ybWVyRmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCB0ZmkgPSAoVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCkgZmFjdG9yeTsKLQkJdGZpLnNldEF0dHJpYnV0ZShUcmFuc2Zvcm1lckZhY3RvcnlJbXBsLkZFQVRVUkVfU09VUkNFX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOwotCQl0Zmkuc2V0QXR0cmlidXRlKFRyYW5zZm9ybWVyRmFjdG9yeUltcGwuRkVBVFVSRV9PUFRJTUlaRSwgQm9vbGVhbi5GQUxTRSk7Ci0JfQotCQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkZWJ1Z2dlclN1c3BlbmRlZChCcmVha1BvaW50IGJyZWFrcG9pbnQpCi0JewotCQkvLyBmbHVzaCB0aGUgc2VyaWFsaXplciAod2hpY2ggaXMgYnVmZmVyZWQgYnkgWGFsYW4gaXRzZWxmKQotCQl0cnkKLQkJewotCQkJbGFzdFRyYW5zZm9ybWVySW5DaGFpbi5nZXRTZXJpYWxpemF0aW9uSGFuZGxlcigpLmZsdXNoUGVuZGluZygpOwotCQl9Ci0JCWNhdGNoIChTQVhFeGNlcHRpb24gZSkKLQkJewotCQkJbG9nLmVycm9yKCJFcnJvciBmbHVzaGluZyBzZXJpYWxpemVyIiwgZSk7Ci0JCX0KLQkJc3VwZXIuZGVidWdnZXJTdXNwZW5kZWQoYnJlYWtwb2ludCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVHJhbnNmb3JtZXIoVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpCi0JewotCQlUcmFuc2Zvcm1lckltcGwgdHJhbnNmb3JtZXJJbXBsID0gKFRyYW5zZm9ybWVySW1wbCkgdHJhbnNmb3JtZXI7Ci0JCQotCQlsYXN0VHJhbnNmb3JtZXJJbkNoYWluID0gdHJhbnNmb3JtZXJJbXBsOwotCQkKLQkJVHJhY2VNYW5hZ2VyIHRyTWdyID0gdHJhbnNmb3JtZXJJbXBsLmdldFRyYWNlTWFuYWdlcigpOwotCQl0cnkKLQkJewotLy8JCQlYYWxhblByaW50VHJhY2VMaXN0ZW5lciBwcmludGVyID0gbmV3IFhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyKG5ldyBQcmludFdyaXRlcihTeXN0ZW0uZXJyKSk7Ci0vLwkJCXByaW50ZXIubV90cmFjZUVsZW1lbnRzID0gdHJ1ZTsKLS8vCQkJcHJpbnRlci5tX3RyYWNlU2VsZWN0aW9uID0gdHJ1ZTsKLS8vCQkJcHJpbnRlci5tX3RyYWNlVGVtcGxhdGVzID0gdHJ1ZTsKLS8vCQkJdHJNZ3IuYWRkVHJhY2VMaXN0ZW5lcihwcmludGVyKTsKLQkJCQotCQkJWGFsYW5UcmFjZUxpc3RlbmVyIHRyYWNlTGlzdGVuZXIgPSBuZXcgWGFsYW5UcmFjZUxpc3RlbmVyKHRoaXMpOwotCQkJdHJNZ3IuYWRkVHJhY2VMaXN0ZW5lcih0cmFjZUxpc3RlbmVyKTsKLQkJfQotCQljYXRjaCAoVG9vTWFueUxpc3RlbmVyc0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQotCS8qKgotCSAqIEdldHMgYSB2YXJpYWJsZSBieSBJRAotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IGlkKQotCXsKLQkJcmV0dXJuIGN1cnJlbnRUcmFjZUxpc3RlbmVyLmdldFZhcmlhYmxlKGlkKTsKLQl9Ci0KLQl2b2lkIHNldEN1cnJlbnRUcmFjZUxpc3RlbmVyKFhhbGFuVHJhY2VMaXN0ZW5lciBjdXJyZW50VHJhY2VMaXN0ZW5lcikKLQl7Ci0JCWxvZy5kZWJ1ZygiU2V0dGluZyBuZXcgWGFsYW5UcmFjZUxpc3RlbmVyIik7Ci0JCXRoaXMuY3VycmVudFRyYWNlTGlzdGVuZXIgPSBjdXJyZW50VHJhY2VMaXN0ZW5lcjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5QcmludFRyYWNlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblByaW50VHJhY2VMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDZjMDdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblByaW50VHJhY2VMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVRleHRMaXRlcmFsOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5QcmludFRyYWNlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50OwotCi1wdWJsaWMgY2xhc3MgWGFsYW5QcmludFRyYWNlTGlzdGVuZXIgZXh0ZW5kcyBQcmludFRyYWNlTGlzdGVuZXIKLXsKLQlwcml2YXRlIGZpbmFsIFByaW50V3JpdGVyIHdyaXRlcjsKLQotCXB1YmxpYyBYYWxhblByaW50VHJhY2VMaXN0ZW5lcihQcmludFdyaXRlciBwdykKLQl7Ci0JCXN1cGVyKHB3KTsKLQkJdGhpcy53cml0ZXIgPSBwdzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQlzd2l0Y2ggKGV2Lm1fc3R5bGVOb2RlLmdldFhTTFRva2VuKCkpCi0JCXsKLQkJCWNhc2UgQ29uc3RhbnRzLkVMRU1OQU1FX1RFWFRMSVRFUkFMUkVTVUxUOgotCQkJCWlmIChtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQl3cml0ZXIucHJpbnQoZXYubV9zdHlsZU5vZGUuZ2V0U3lzdGVtSWQoKSArICIgTGluZSAjIiArIGV2Lm1fc3R5bGVOb2RlLmdldExpbmVOdW1iZXIoKSArICIsICIgKyAiQ29sdW1uICMiICsgZXYubV9zdHlsZU5vZGUuZ2V0Q29sdW1uTnVtYmVyKCkgKyAiIC0tICIgKyBldi5tX3N0eWxlTm9kZS5nZXROb2RlTmFtZSgpCi0JCQkJCQkJKyAiOiAiKTsKLQotCQkJCQlFbGVtVGV4dExpdGVyYWwgZXRsID0gKEVsZW1UZXh0TGl0ZXJhbCkgZXYubV9zdHlsZU5vZGU7Ci0JCQkJCVN0cmluZyBjaGFycyA9IG5ldyBTdHJpbmcoZXRsLmdldENoYXJzKCksIDAsIGV0bC5nZXRDaGFycygpLmxlbmd0aCk7Ci0KLQkJCQkJd3JpdGVyLnByaW50bG4oIiAgICAiICsgY2hhcnMudHJpbSgpKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENvbnN0YW50cy5FTEVNTkFNRV9URU1QTEFURToKLQkJCQlpZiAobV90cmFjZVRlbXBsYXRlcyB8fCBtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQlFbGVtVGVtcGxhdGUgZXQgPSAoRWxlbVRlbXBsYXRlKSBldi5tX3N0eWxlTm9kZTsKLQotCQkJCQl3cml0ZXIucHJpbnQoZXQuZ2V0U3lzdGVtSWQoKSArICIgTGluZSAjIiArIGV0LmdldExpbmVOdW1iZXIoKSArICIsICIgKyAiQ29sdW1uICMiICsgZXQuZ2V0Q29sdW1uTnVtYmVyKCkgKyAiOiAiICsgZXQuZ2V0Tm9kZU5hbWUoKSArICIgIik7Ci0KLQkJCQkJaWYgKG51bGwgIT0gZXQuZ2V0TWF0Y2goKSkKLQkJCQkJewotCQkJCQkJd3JpdGVyLnByaW50KCJtYXRjaD0nIiArIGV0LmdldE1hdGNoKCkuZ2V0UGF0dGVyblN0cmluZygpICsgIicgIik7Ci0JCQkJCX0KLQotCQkJCQlpZiAobnVsbCAhPSBldC5nZXROYW1lKCkpCi0JCQkJCXsKLQkJCQkJCXdyaXRlci5wcmludCgibmFtZT0nIiArIGV0LmdldE5hbWUoKSArICInICIpOwotCQkJCQl9Ci0KLQkJCQkJd3JpdGVyLnByaW50bG4oKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWlmIChtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQl3cml0ZXIKLQkJCQkJCQkucHJpbnRsbihldi5tX3N0eWxlTm9kZS5nZXRTeXN0ZW1JZCgpICsgIiBMaW5lICMiICsgZXYubV9zdHlsZU5vZGUuZ2V0TGluZU51bWJlcigpICsgIiwgIiArICJDb2x1bW4gIyIgKyBldi5tX3N0eWxlTm9kZS5nZXRDb2x1bW5OdW1iZXIoKSArICI6ICIKLQkJCQkJCQkJCSsgZXYubV9zdHlsZU5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0JCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXYpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJd3JpdGVyLnByaW50KCJzZWxlY3RlZDogIik7Ci0JCXN1cGVyLnNlbGVjdGVkKGV2KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2VsZWN0RW5kKEVuZFNlbGVjdGlvbkV2ZW50IGV2KSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCXdyaXRlci5wcmludCgic2VsZWN0RW5kOiAiKTsKLQkJc3VwZXIuc2VsZWN0RW5kKGV2KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQl3cml0ZXIucHJpbnQoInRyYWNlOiAiKTsKLQkJc3VwZXIudHJhY2UoZXYpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0cmFjZUVuZChUcmFjZXJFdmVudCBldikKLQl7Ci0JCXdyaXRlci5wcmludCgidHJhY2VFbmQ6ICIpOwotCQlfdHJhY2UoZXYpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblJvb3RTdHlsZUZyYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5Sb290U3R5bGVGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjViNzFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblJvb3RTdHlsZUZyYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVmFyaWFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuU3R5bGVzaGVldFJvb3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlZhcmlhYmxlU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5Sb290U3R5bGVGcmFtZSBleHRlbmRzIFhhbGFuU3R5bGVGcmFtZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhYYWxhblJvb3RTdHlsZUZyYW1lLmNsYXNzKTsKLQlwcml2YXRlIE1hcCB2YXJpYWJsZXM7Ci0JcHJpdmF0ZSBBcnJheUxpc3QgZ2xvYmFsczsKLQotCXB1YmxpYyBYYWxhblJvb3RTdHlsZUZyYW1lKFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIobnVsbCwgZXZlbnQpOwotCQlmaWxsR2xvYmFscyhldmVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0R2xvYmFscygpCi0JewotCQlyZXR1cm4gZ2xvYmFsczsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGZpbGxHbG9iYWxzKFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJVmFyaWFibGVTdGFjayB2cyA9IGV2ZW50Lm1fcHJvY2Vzc29yLmdldFhQYXRoQ29udGV4dCgpLmdldFZhclN0YWNrKCk7Ci0JICAgIFN0eWxlc2hlZXRSb290IHNyID0gZXZlbnQubV9zdHlsZU5vZGUuZ2V0U3R5bGVzaGVldFJvb3QoKTsKLQkgICAgVmVjdG9yIHZhcnMgPSBzci5nZXRWYXJpYWJsZXNBbmRQYXJhbXNDb21wb3NlZCgpOwotCQl2YXJpYWJsZXMgPSBuZXcgSGFzaE1hcCh2YXJzLnNpemUoKSk7Ci0JCWdsb2JhbHMgPSBuZXcgQXJyYXlMaXN0KHZhcnMuc2l6ZSgpKTsKLQkgICAgaW50IGkgPSB2YXJzLnNpemUoKTsKLQkgICAgd2hpbGUgKC0taSA+PSAwKQotCQl7Ci0JCQlFbGVtVmFyaWFibGUgdmFyaWFibGUgPSAoRWxlbVZhcmlhYmxlKSB2YXJzLmVsZW1lbnRBdChpKTsKLQkJCVhhbGFuVmFyaWFibGUgeHZhciA9IG5ldyBYYWxhblZhcmlhYmxlKHRoaXMsdnMsVmFyaWFibGUuR0xPQkFMX1NDT1BFLGksdmFyaWFibGUpOwotCQkJYWRkVmFyaWFibGUoeHZhcik7Ci0JCQlnbG9iYWxzLmFkZCh4dmFyKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdldHMgYSBWYXJpYWJsZSBieSBJRAotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IGlkKQotCXsKLS8vCQlsb2cuZGVidWcoIkdldHRpbmcgdmFyaWFibGUgd2l0aCBpZCAiK2lkKyIgZnJvbSB2YXJpYWJsZXMgIit2YXJpYWJsZXMuc2l6ZSgpKTsKLQkJcmV0dXJuIChWYXJpYWJsZSl2YXJpYWJsZXMuZ2V0KG5ldyBJbnRlZ2VyKGlkKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVmFyaWFibGUoWGFsYW5WYXJpYWJsZSB4dmFyKQotCXsKLS8vCQlsb2cuZGVidWcoIkFkZGluZyB2YXJpYWJsZSBpbmRleD0iK3h2YXIuZ2V0U2xvdE51bWJlcigpKyIgdmFsPSIreHZhcik7Ci0vLwkJdmFyaWFibGVzLmFkZCh4dmFyLmdldFNsb3ROdW1iZXIoKSx4dmFyKTsKLQkJbG9nLmRlYnVnKCJBZGRpbmcgdmFyaWFibGUgaWQ9Iit4dmFyLmdldElkKCkpOwotCQl2YXJpYWJsZXMucHV0KG5ldyBJbnRlZ2VyKHh2YXIuZ2V0SWQoKSkseHZhcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuU3R5bGVGcmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuU3R5bGVGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI1ZGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblN0eWxlRnJhbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZUxvY2F0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtQ2FsbFRlbXBsYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1UZW1wbGF0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVGVtcGxhdGVFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1WYXJpYWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLmR0bS5yZWYuRFRNTm9kZVByb3h5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnV0aWxzLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguVmFyaWFibGVTdGFjazsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5TdHlsZUZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5WYXJpYWJsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5TdHlsZUZyYW1lIGV4dGVuZHMgU3R5bGVGcmFtZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhYYWxhblN0eWxlRnJhbWUuY2xhc3MpOwotCi0JcHJpdmF0ZSBmaW5hbCBNYXAgdmFyTmFtZXM7Ci0JcHJpdmF0ZSBmaW5hbCBTdGFjayBldmVudFN0YWNrID0gbmV3IFN0YWNrKCk7Ci0JZmluYWwgVHJhY2VyRXZlbnQgZXZlbnQ7Ci0JcHJpdmF0ZSBpbnQgY3VycmVudExpbmU7Ci0JcHJpdmF0ZSBYYWxhblJvb3RTdHlsZUZyYW1lIHJvb3RTdHlsZUZyYW1lOwotCi0JLyoqCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBYYWxhblN0eWxlRnJhbWUoU3R5bGVGcmFtZSBwYXJlbnQsIFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIocGFyZW50KTsKLQkJdGhpcy5ldmVudCA9IGV2ZW50OwotCQlpZiAocGFyZW50ICE9IG51bGwpCi0JCQl0aGlzLnZhck5hbWVzID0gbmV3IEhhc2hNYXAoKChYYWxhblN0eWxlRnJhbWUpIHBhcmVudCkudmFyTmFtZXMpOwotCQllbHNlCi0JCQl0aGlzLnZhck5hbWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJcHVzaEVsZW1lbnQoZXZlbnQpOwotCQlmaW5kUm9vdFN0eWxlRnJhbWUoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZmluZFJvb3RTdHlsZUZyYW1lKCkKLQl7Ci0JCVhhbGFuU3R5bGVGcmFtZSBmcmFtZSA9IHRoaXM7Ci0JCWRvCi0JCXsKLQkJCWlmIChmcmFtZSBpbnN0YW5jZW9mIFhhbGFuUm9vdFN0eWxlRnJhbWUpCi0JCQkJcm9vdFN0eWxlRnJhbWUgPSAoWGFsYW5Sb290U3R5bGVGcmFtZSkgZnJhbWU7Ci0JCX0KLQkJd2hpbGUgKChmcmFtZSA9IChYYWxhblN0eWxlRnJhbWUpIGZyYW1lLmdldFBhcmVudCgpKSAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEZpbGVuYW1lKCkKLQl7Ci0JCXJldHVybiBldmVudC5tX3N0eWxlTm9kZS5nZXRTdHlsZXNoZWV0KCkuZ2V0U3lzdGVtSWQoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJU3RyaW5nIG5hbWUgPSBldmVudC5tX3N0eWxlTm9kZS5nZXROb2RlTmFtZSgpOwotCQlpZiAoZXZlbnQubV9zdHlsZU5vZGUgaW5zdGFuY2VvZiBFbGVtVGVtcGxhdGUpCi0JCXsKLQkJCUVsZW1UZW1wbGF0ZSBldCA9IChFbGVtVGVtcGxhdGUpIGV2ZW50Lm1fc3R5bGVOb2RlOwotCQkJUU5hbWUgcSA9IGV0LmdldE5hbWUoKTsKLQkJCWlmIChxICE9IG51bGwpCi0JCQl7Ci0JCQkJbmFtZSArPSAiIG5hbWU9XCIiICsgcS5nZXRMb2NhbE5hbWUoKSArICJcIiI7Ci0JCQl9Ci0JCQlYUGF0aCB4cCA9IGV0LmdldE1hdGNoKCk7Ci0JCQlpZiAoeHAgIT0gbnVsbCkKLQkJCXsKLQkJCQluYW1lICs9ICIgbWF0Y2g9XCIiICsgeHAuZ2V0UGF0dGVyblN0cmluZygpICsgIlwiIjsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChldmVudC5tX3N0eWxlTm9kZSBpbnN0YW5jZW9mIEVsZW1DYWxsVGVtcGxhdGUpCi0JCXsKLQkJCUVsZW1DYWxsVGVtcGxhdGUgZXQgPSAoRWxlbUNhbGxUZW1wbGF0ZSkgZXZlbnQubV9zdHlsZU5vZGU7Ci0JCQlRTmFtZSBxID0gZXQuZ2V0TmFtZSgpOwotCQkJaWYgKHEgIT0gbnVsbCkKLQkJCXsKLQkJCQluYW1lICs9ICIgbmFtZT1cIiIgKyBxLmdldExvY2FsTmFtZSgpICsgIlwiIjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRWYXJpYWJsZVN0YWNrKCkKLQl7Ci0JCUxpc3QgdmFycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdmFycy5hZGRBbGwoZ2V0TG9jYWxzKCkpOwotCQl2YXJzLmFkZEFsbChnZXRHbG9iYWxzKCkpOwotCQlyZXR1cm4gdmFyczsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldEN1cnJlbnRMaW5lKCkKLQl7Ci0JCXJldHVybiBjdXJyZW50TGluZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwdXNoRWxlbWVudChUcmFjZXJFdmVudCBlKQotCXsKLQkJY3VycmVudExpbmUgPSBlLm1fc3R5bGVOb2RlLmdldExpbmVOdW1iZXIoKTsKLQkJZXZlbnRTdGFjay5wdXNoKGUpOwotCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpCi0JCQlsb2cuZGVidWcoIlB1c2hlZCBlbGVtZW50ICIgKyBUcmFjZXJFdmVudC5wcmludE5vZGUoZS5tX3N0eWxlTm9kZSkgKyAiIGF0IGxpbmUgIiArIGN1cnJlbnRMaW5lKTsKLQl9Ci0KLQlwdWJsaWMgVHJhY2VyRXZlbnQgcG9wRWxlbWVudCgpCi0JewotCQlUcmFjZXJFdmVudCBlID0gKFRyYWNlckV2ZW50KSBldmVudFN0YWNrLnBvcCgpOwotCQljdXJyZW50TGluZSA9IGUubV9zdHlsZU5vZGUuZ2V0RW5kTGluZU51bWJlcigpOwotCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpCi0JCQlsb2cuZGVidWcoIlBvcHBlZCBlbGVtZW50ICIgKyBUcmFjZXJFdmVudC5wcmludE5vZGUoZS5tX3N0eWxlTm9kZSkgKyAiIGF0IGxpbmUgIiArIGN1cnJlbnRMaW5lKTsKLQotCQlFbGVtVGVtcGxhdGVFbGVtZW50IGVsZW1lbnQgPSBlLm1fc3R5bGVOb2RlOwotCQlTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0Tm9kZU5hbWUoKTsKLQkJbG9nLmRlYnVnKCIgbmFtZSAiICsgbmFtZSk7Ci0JCWlmIChuYW1lLmVxdWFscygicGFyYW0iKSB8fCBuYW1lLmVxdWFscygidmFyaWFibGUiKSkKLQkJCWFkZFZhcmlhYmxlKChFbGVtVmFyaWFibGUpIGUubV9zdHlsZU5vZGUpOwotCi0JCXJldHVybiBlOwotCX0KLQotCXB1YmxpYyBUcmFjZXJFdmVudCBwZWVrRWxlbWVudCgpCi0JewotCQlpZiAoZXZlbnRTdGFjay5pc0VtcHR5KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJcmV0dXJuIChUcmFjZXJFdmVudCkgZXZlbnRTdGFjay5wZWVrKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFZhcmlhYmxlKEVsZW1WYXJpYWJsZSB2YXJpYWJsZSkKLQl7Ci0JCVN0cmluZyBzY29wZSA9IHZhcmlhYmxlLmdldElzVG9wTGV2ZWwoKSA/IFZhcmlhYmxlLkdMT0JBTF9TQ09QRSA6IFZhcmlhYmxlLkxPQ0FMX1NDT1BFOwotCQlWYXJpYWJsZVN0YWNrIHZzID0gZXZlbnQubV9wcm9jZXNzb3IuZ2V0WFBhdGhDb250ZXh0KCkuZ2V0VmFyU3RhY2soKTsKLQkJWGFsYW5WYXJpYWJsZSB4dmFyID0gbmV3IFhhbGFuVmFyaWFibGUodGhpcywgdnMsIHNjb3BlLCB2YXJpYWJsZS5nZXRJbmRleCgpLCB2YXJpYWJsZSk7Ci0JCXJvb3RTdHlsZUZyYW1lLmFkZFZhcmlhYmxlKHh2YXIpOwotCQl2YXJOYW1lcy5wdXQodmFyaWFibGUuZ2V0TmFtZSgpLCB4dmFyKTsKLQl9Ci0KLQlwcml2YXRlIExpc3QgZ2V0TG9jYWxzKCkKLQl7Ci0JCUxpc3QgbG9jYWxzID0gbmV3IEFycmF5TGlzdCh2YXJOYW1lcy52YWx1ZXMoKSk7Ci0JCS8vIHNvcnQgYnkgc2xvdE51bWJlcgotCQlDb2xsZWN0aW9ucy5zb3J0KGxvY2Fscyk7Ci0JCXJldHVybiBuZXcgQXJyYXlMaXN0KHZhck5hbWVzLnZhbHVlcygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRHbG9iYWxzKCkKLQl7Ci0JCXJldHVybiByb290U3R5bGVGcmFtZS5nZXRHbG9iYWxzKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTb3VyY2VGaWxlbmFtZSgpCi0JewotCQlTb3VyY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTb3VyY2VMb2NhdG9yKCk7Ci0JCWlmIChsb2NhdG9yICE9IG51bGwpCi0JCQlyZXR1cm4gbG9jYXRvci5nZXRTeXN0ZW1JZCgpOwotCQlyZXR1cm4gIiI7Ci0JfQotCi0JcHVibGljIGludCBnZXRTb3VyY2VDdXJyZW50TGluZSgpCi0JewotCQlTb3VyY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTb3VyY2VMb2NhdG9yKCk7Ci0JCWlmIChsb2NhdG9yICE9IG51bGwpCi0JCQlyZXR1cm4gbG9jYXRvci5nZXRMaW5lTnVtYmVyKCk7Ci0JCXJldHVybiAwOwotCX0KLQkKLQlwcml2YXRlIFNvdXJjZUxvY2F0b3IgZ2V0U291cmNlTG9jYXRvcigpCi0JewotCQlOb2RlIHNvdXJjZU5vZGUgPSBldmVudC5tX3NvdXJjZU5vZGU7Ci0gICAgICAgIFNvdXJjZUxvY2F0b3IgbG9jYXRvciA9IG51bGw7Ci0JCWlmIChzb3VyY2VOb2RlIGluc3RhbmNlb2YgRFRNTm9kZVByb3h5KQotCQl7Ci0JCQlpbnQgbm9kZUhhbmRsZXIgPSAoKERUTU5vZGVQcm94eSkgc291cmNlTm9kZSkuZ2V0RFRNTm9kZU51bWJlcigpOwotCQkJcmV0dXJuICgoRFRNTm9kZVByb3h5KSBzb3VyY2VOb2RlKS5nZXREVE0oKS5nZXRTb3VyY2VMb2NhdG9yRm9yKG5vZGVIYW5kbGVyKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5UcmFjZUxpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5UcmFjZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4OWIzMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuVHJhY2VMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5FeHRlbnNpb25FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkdlbmVyYXRlRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlTGlzdGVuZXJFeDI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuQnJlYWtQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuVmFyaWFibGU7Ci0KLXB1YmxpYyBjbGFzcyBYYWxhblRyYWNlTGlzdGVuZXIgaW1wbGVtZW50cyBUcmFjZUxpc3RlbmVyRXgyIC8vIFRyYWNlTGlzdGVuZXJFeDMKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coWGFsYW5UcmFjZUxpc3RlbmVyLmNsYXNzKTsKLQotCXByaXZhdGUgZmluYWwgWGFsYW5EZWJ1Z2dlciBkZWJ1Z2dlcjsKLQlwcml2YXRlIFhhbGFuUm9vdFN0eWxlRnJhbWUgcm9vdFN0eWxlRnJhbWU7Ci0KLQlwdWJsaWMgWGFsYW5UcmFjZUxpc3RlbmVyKFhhbGFuRGVidWdnZXIgZGVidWdnZXIpCi0JewotCQl0aGlzLmRlYnVnZ2VyID0gZGVidWdnZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQlYYWxhblN0eWxlRnJhbWUgc3R5bGVGcmFtZSA9IG51bGw7Ci0JCWlmIChyb290U3R5bGVGcmFtZSA9PSBudWxsKQotCQl7Ly8gdGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgc3RhY2sKLQkJCWRlYnVnZ2VyLmRlYnVnZ2VyVHJhbnNmb3JtU3RhcnRlZCgpOwotCQkJZGVidWdnZXIuc2V0Q3VycmVudFRyYWNlTGlzdGVuZXIodGhpcyk7Ci0JCQlyb290U3R5bGVGcmFtZSA9IG5ldyBYYWxhblJvb3RTdHlsZUZyYW1lKGV2KTsKLQkJCXN0eWxlRnJhbWUgPSByb290U3R5bGVGcmFtZTsKLQkJCWRlYnVnZ2VyLnB1c2hTdHlsZUZyYW1lKHN0eWxlRnJhbWUpOwotCQl9Ci0JCWVsc2UgaWYgKGV2Lm1fc3R5bGVOb2RlLmdldE93bmVyWFNMVGVtcGxhdGUoKSA9PSBldi5tX3N0eWxlTm9kZSkKLQkJey8vIHRoaXMgaXMgYW4geHNsOnRlbXBsYXRlLCBzbyBhZGQgdG8gdGVtcGxhdGUgc3RhY2sKLQkJCXN0eWxlRnJhbWUgPSBuZXcgWGFsYW5TdHlsZUZyYW1lKGRlYnVnZ2VyLnBlZWtTdHlsZUZyYW1lKCksIGV2KTsKLQkJCWRlYnVnZ2VyLnB1c2hTdHlsZUZyYW1lKHN0eWxlRnJhbWUpOwotCQl9Ci0JCWVsc2UgaWYgKGV2Lm1fc3R5bGVOb2RlLmdldFhTTFRva2VuKCkgIT0gQ29uc3RhbnRzLkVMRU1OQU1FX1RFWFRMSVRFUkFMUkVTVUxUKQotCQl7Ly8gYWRkIHRvIGN1cnJlbnQgdGVtcGxhdGUgZWxlbWVudCBzdGFjawotCQkJc3R5bGVGcmFtZSA9IChYYWxhblN0eWxlRnJhbWUpIGRlYnVnZ2VyLnBlZWtTdHlsZUZyYW1lKCk7Ci0JCQlzdHlsZUZyYW1lLnB1c2hFbGVtZW50KGV2KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWxvZy5kZWJ1ZygiU2tpcHBlZCBwdXNoIGZvciBlbGVtZW50ICIgKyBldi5tX3N0eWxlTm9kZS5nZXRMb2NhbE5hbWUoKSk7Ci0JCX0KLQkJY2hlY2soc3R5bGVGcmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdHJhY2VFbmQoVHJhY2VyRXZlbnQgZXYpCi0JewotCQlYYWxhblN0eWxlRnJhbWUgc3R5bGVGcmFtZSA9IChYYWxhblN0eWxlRnJhbWUpIGRlYnVnZ2VyLnBlZWtTdHlsZUZyYW1lKCk7Ci0JCWlmIChzdHlsZUZyYW1lICE9IG51bGwpCi0JCXsKLQkJCWlmIChldi5tX3N0eWxlTm9kZS5nZXRPd25lclhTTFRlbXBsYXRlKCkgPT0gZXYubV9zdHlsZU5vZGUpCi0JCQl7Ly8gcmVtb3ZlIGZyb20gY3VycmVudCB0ZW1wbGF0ZSBlbGVtZW50IHN0YWNrCi0JCQkJc3R5bGVGcmFtZS5wb3BFbGVtZW50KCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChldi5tX3N0eWxlTm9kZS5nZXRYU0xUb2tlbigpICE9IENvbnN0YW50cy5FTEVNTkFNRV9URVhUTElURVJBTFJFU1VMVCkKLQkJCXsvLyByZW1vdmUgZnJvbSBjdXJyZW50IHRlbXBsYXRlIGVsZW1lbnQgc3RhY2sKLQkJCQlzdHlsZUZyYW1lLnBvcEVsZW1lbnQoKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlsb2cuZGVidWcoIlNraXBwZWQgcG9wIGZvciBlbGVtZW50ICIgKyBldi5tX3N0eWxlTm9kZS5nZXRMb2NhbE5hbWUoKSk7Ci0JCQl9Ci0JCQljaGVjayhzdHlsZUZyYW1lKTsKLQkJCWlmIChldi5tX3N0eWxlTm9kZS5nZXRPd25lclhTTFRlbXBsYXRlKCkgPT0gZXYubV9zdHlsZU5vZGUpCi0JCQl7Ly8gZW5kIG9mIHRlbXBsYXRlLCBzbyByZW1vdmUgZnJvbSBzdGFjawotCQkJCWRlYnVnZ2VyLnBvcFN0eWxlRnJhbWUoKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsvLyBiZWNhdXNlIHdlIGRvbid0IGdldCBzZWxlY3RFbmQgZXZlbnRzLCB3ZSBuZWVkIHRvIGRvIHRoaXMgY2hlY2sKLQkJCQlUcmFjZXJFdmVudCB0ZWwgPSBzdHlsZUZyYW1lLnBlZWtFbGVtZW50KCk7Ci0JCQkJLy8gaWYgdGhlIHBhcmVudCBpcyBhIGNob29zZSwgbW92ZSBvbiB0byBpdAotCQkJCXN3aXRjaCAodGVsLm1fc3R5bGVOb2RlLmdldFhTTFRva2VuKCkpCi0JCQkJewotCQkJCQljYXNlIENvbnN0YW50cy5FTEVNTkFNRV9DSE9PU0U6Ci0JCQkJCQlzdHlsZUZyYW1lLnBvcEVsZW1lbnQoKTsKLQkJCQkJCWNoZWNrKHN0eWxlRnJhbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVjayhYYWxhblN0eWxlRnJhbWUgc3R5bGVGcmFtZSkKLQl7Ci0JCWRlYnVnZ2VyLmNoZWNrU3RvcHBlZCgpOwotCQlpZiAoc3R5bGVGcmFtZSAhPSBudWxsKQotCQl7Ci0JCQkvLyBjaGVjayBicmVha3BvaW50IGluIHN0eWxlc2hlZXQKLQkJCUJyZWFrUG9pbnQgYnJlYWtwb2ludCA9IG5ldyBCcmVha1BvaW50KHN0eWxlRnJhbWUuZ2V0RmlsZW5hbWUoKSwgc3R5bGVGcmFtZS5nZXRDdXJyZW50TGluZSgpKTsKLQkJCWRlYnVnZ2VyLmNoZWNrU3VzcGVuZGVkKHN0eWxlRnJhbWUsIGJyZWFrcG9pbnQpOwotCQkJLy8gVE9ETyBjaGVjayBicmVha3BvaW50IGluIHNvdXJjZQotCQkJLyoKLQkJCSAqIGJyZWFrcG9pbnQgPSBuZXcgQnJlYWtQb2ludChzdHlsZUZyYW1lLmdldFNvdXJjZUZpbGVuYW1lKCksIHN0eWxlRnJhbWUuZ2V0U291cmNlQ3VycmVudExpbmUoKSk7IFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tIiticmVha3BvaW50KTsgaWYgKGJyZWFrcG9pbnQuZ2V0RmlsZSgpICE9IG51bGwpCi0JCQkgKiBkZWJ1Z2dlci5jaGVja1N1c3BlbmRlZChzdHlsZUZyYW1lLCBicmVha3BvaW50KTsKLQkJCSAqL30KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldikgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdEVuZChFbmRTZWxlY3Rpb25FdmVudCBldikgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGdlbmVyYXRlZChHZW5lcmF0ZUV2ZW50IGV2KQotCXsKLS8vCQlYU0xHZW5lcmF0ZUV2ZW50IGV2ZW50ID0gbmV3IFhTTEdlbmVyYXRlRXZlbnQoKTsKLS8vCQlldmVudC5tX2NoYXJhY3RlcnMgPSBldi5tX2NoYXJhY3RlcnM7Ci0vLwkJZXZlbnQubV9kYXRhID0gZXYubV9kYXRhOwotLy8JCWV2ZW50Lm1fZXZlbnR0eXBlID0gZXYubV9ldmVudHR5cGU7Ci0vLwkJZXZlbnQubV9sZW5ndGggPSBldi5tX2xlbmd0aDsKLS8vCQlldmVudC5tX25hbWUgPSBldi5tX25hbWU7Ci0vLwkJZXZlbnQubV9zdGFydCA9IGV2Lm1fc3RhcnQ7Ci0vLwkJCi0vLwkJaWYgKGV2Lm1fYXR0cyAhPSBudWxsKQotLy8JCXsKLS8vCQkJZXZlbnQubV9hdHRzID0gbmV3IEFycmF5TGlzdCgpOwotLy8JCQlmb3IgKGludCBpID0gMDsgaSA8IGV2Lm1fYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotLy8JCQl7Ci0vLwkJCQlTdHJpbmcgYXR0TmFtZSA9IGV2Lm1fYXR0cy5nZXRRTmFtZShpKTsKLS8vCQkJCVN0cmluZyBhdHRWYWx1ZSA9IGV2Lm1fYXR0cy5nZXRWYWx1ZShpKTsKLS8vCQkJCVhTTEVsZW1lbnRBdHRyaWJ1dGUgeGF0dCA9IG5ldyBYU0xFbGVtZW50QXR0cmlidXRlKGF0dE5hbWUsYXR0VmFsdWUpOwotLy8JCQkJZXZlbnQubV9hdHRzLmFkZCh4YXR0KTsKLS8vCQkJfQkJCQotLy8JCX0KLS8vCQkKLS8vCQlkZWJ1Z2dlci5nZW5lcmF0ZWQoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGV4dGVuc2lvbihFeHRlbnNpb25FdmVudCBlZSkKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgZXh0ZW5zaW9uRW5kKEV4dGVuc2lvbkV2ZW50IGVlKQotCXsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIFZhcmlhYmxlIGdldFZhcmlhYmxlKGludCBpZCkKLQl7Ci0JCXJldHVybiByb290U3R5bGVGcmFtZS5nZXRWYXJpYWJsZShpZCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5WYXJpYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuVmFyaWFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5ZjgyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5WYXJpYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjE0MjM1IC0gQWxsb3dzIG5vZGVzIHRvIGJlIGV4cGFuZGVkLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVZhcmlhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguVmFyaWFibGVTdGFjazsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE5vZGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5WYXJpYWJsZSBleHRlbmRzIFZhcmlhYmxlIGltcGxlbWVudHMgQ29tcGFyYWJsZSB7Ci0JcHJpdmF0ZSBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coWGFsYW5WYXJpYWJsZS5jbGFzcyk7Ci0JcHJpdmF0ZSBmaW5hbCBFbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlOwotCXByaXZhdGUgZmluYWwgVmFyaWFibGVTdGFjayB2YXJTdGFjazsKLQlwcml2YXRlIGludCBzdGFja0ZyYW1lOwotCXByaXZhdGUgWE9iamVjdCB4b2JqZWN0OwotCi0JcHVibGljIFhhbGFuVmFyaWFibGUoWGFsYW5TdHlsZUZyYW1lIHhhbGFuU3R5bGVGcmFtZSwKLQkJCVZhcmlhYmxlU3RhY2sgdmFyU3RhY2ssIFN0cmluZyBzY29wZSwgaW50IHNsb3ROdW1iZXIsCi0JCQlFbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlKSB7Ci0JCXN1cGVyKGdldE5hbWUoZWxlbVZhcmlhYmxlLCBzY29wZSwgeGFsYW5TdHlsZUZyYW1lKSwgc2NvcGUsIHNsb3ROdW1iZXIKLQkJCQkrIHZhclN0YWNrLmdldFN0YWNrRnJhbWUoKSk7Ci0JCXRoaXMuZWxlbVZhcmlhYmxlID0gZWxlbVZhcmlhYmxlOwotCQl0aGlzLnZhclN0YWNrID0gdmFyU3RhY2s7Ci0JCS8vIGdldCB0aGUgc3RhY2sgZnJhbWUgYXQgdGhpcyBjdXJyZW50IHBvaW50IGluIHRpbWUKLQkJdGhpcy5zdGFja0ZyYW1lID0gdmFyU3RhY2suZ2V0U3RhY2tGcmFtZSgpOwotCQl0cnkgewotCQkJeG9iamVjdCA9IGdldFhPYmplY3QoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXROYW1lKEVsZW1WYXJpYWJsZSBlbGVtVmFyaWFibGUsIFN0cmluZyBzY29wZSwKLQkJCVhhbGFuU3R5bGVGcmFtZSB4YWxhblN0eWxlRnJhbWUpIHsKLQkJU3RyaW5nIG5hbWUgPSBlbGVtVmFyaWFibGUuZ2V0TmFtZSgpLmdldExvY2FsTmFtZSgpOwotCQlTdHJpbmcgc3lzdGVtSWQgPSBlbGVtVmFyaWFibGUuZ2V0U3R5bGVzaGVldCgpLmdldFN5c3RlbUlkKCk7Ci0JCWlmIChHTE9CQUxfU0NPUEUuZXF1YWxzKHNjb3BlKSAmJiBzeXN0ZW1JZCAhPSBudWxsKSB7Ci0JCQlpbnQgaW5kZXg7Ci0JCQlpZiAoKGluZGV4ID0gc3lzdGVtSWQubGFzdEluZGV4T2YoJy8nKSkgPiAwKQotCQkJCW5hbWUgKz0gIiAoIiArIHN5c3RlbUlkLnN1YnN0cmluZyhpbmRleCArIDEpICsgIikiOwotCQkJZWxzZQotCQkJCW5hbWUgKz0gIiAoIiArIHN5c3RlbUlkICsgIikiOwotCQl9Ci0JCS8vIGVsc2UgaWYgKExPQ0FMX1NDT1BFLmVxdWFscyhzY29wZSkpCi0JCS8vIHsKLQkJLy8gbmFtZSArPSAiICgiICsgeGFsYW5TdHlsZUZyYW1lLmdldE5hbWUoKSArICIpIjsKLQkJLy8gfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7Ci0JCVN0cmluZyB2YWx1ZSA9IFVOS05PV047Ci0JCS8vIFhPYmplY3QgeG9iamVjdCA9IGdldFhPYmplY3QoKTsKLQkJaWYgKHhvYmplY3QgIT0gbnVsbCkgewotCQkJaW50IHhhbGFuVHlwZSA9IHhvYmplY3QuZ2V0VHlwZSgpOwotCQkJc3dpdGNoICh4YWxhblR5cGUpIHsKLQkJCWNhc2UgWE9iamVjdC5DTEFTU19VTlJFU09MVkVEVkFSSUFCTEU6Ci0JCQkJdmFsdWUgPSBVTlJFU09MVkVEOwotCQkJCWJyZWFrOwotCQkJY2FzZSBYT2JqZWN0LkNMQVNTX05PREVTRVQ6Ci0JCQkJdmFsdWUgPSBOT0RFU0VUOwotCQkJCWJyZWFrOwotCQkJY2FzZSBYT2JqZWN0LkNMQVNTX0JPT0xFQU46Ci0JCQkJdmFsdWUgPSBCT09MRUFOOwotCQkJCWJyZWFrOwotCQkJY2FzZSBYT2JqZWN0LkNMQVNTX05VTUJFUjoKLQkJCQl2YWx1ZSA9IE5VTUJFUjsKLQkJCQlicmVhazsKLQkJCWNhc2UgWE9iamVjdC5DTEFTU19VTktOT1dOOgotCQkJCXZhbHVlID0gVU5LTk9XTjsKLQkJCQlicmVhazsKLQkJCWNhc2UgWE9iamVjdC5DTEFTU19TVFJJTkc6Ci0JCQlkZWZhdWx0OgotCQkJCXZhbHVlID0gU1RSSU5HOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8vIGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKQotCQkvLyB7Ci0JCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vIH0KLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICI/Pz8iOwotCQl0cnkgewotCQkJeG9iamVjdCA9IGdldFhPYmplY3QoKTsKLQkJCWlmICh4b2JqZWN0ICE9IG51bGwpIHsKLQkJCQlpbnQgeGFsYW5UeXBlID0geG9iamVjdC5nZXRUeXBlKCk7Ci0JCQkJc3dpdGNoICh4YWxhblR5cGUpIHsKLQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfVU5SRVNPTFZFRFZBUklBQkxFOgotCQkJCQl2YWx1ZSA9ICIiOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfTk9ERVNFVDoKLQkJCQkJWE5vZGVTZXQgeG5zID0gKFhOb2RlU2V0KSB4b2JqZWN0OwotCQkJCQlpZiAoeG5zLm5vZGVsaXN0KCkuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQkJCSAgICB2YWx1ZSA9IGNvbnZlcnROb2RlKHhucyk7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQkJdmFsdWUgPSAiPEVNUFRZIE5PREVTRVQ+IjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBYT2JqZWN0LkNMQVNTX0JPT0xFQU46Ci0JCQkJY2FzZSBYT2JqZWN0LkNMQVNTX05VTUJFUjoKLQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfU1RSSU5HOgotCQkJCWNhc2UgWE9iamVjdC5DTEFTU19VTktOT1dOOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXZhbHVlID0geG9iamVjdC50b1N0cmluZygpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJLy8gdmFsdWUgPSBnZXRTY29wZSgpKyIuIitnZXRTbG90TnVtYmVyKCkrIikiK2dldE5hbWUoKTsKLQkJLy8gbG9nLmRlYnVnKGdldFNjb3BlKCkrIi4iK2dldFNsb3ROdW1iZXIoKSsiKSIrZ2V0TmFtZSgpICsgIj0iICsKLQkJLy8gdmFsdWUpOwotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgY29udmVydE5vZGUoWE5vZGVTZXQgeG5zKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24gewotCQlOb2RlTGlzdCBub2RlTGlzdCA9IHhucy5ub2RlbGlzdCgpOwotCQlTdHJpbmcgdmFsdWUgPSBwcm9jZXNzTm9kZUxpc3Qobm9kZUxpc3QpOwotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcHJvY2Vzc05vZGVMaXN0KE5vZGVMaXN0IG5vZGVMaXN0KSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICIiOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCU5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oaSk7Ci0JCQlpZiAobm9kZSAhPSBudWxsKSB7Ci0JCQkJaW50IG5vZGVUeXBlID0gbm9kZS5nZXROb2RlVHlwZSgpOwotCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQkJdmFsdWUgPSBjcmVhdGVFbGVtZW50KHZhbHVlLCBub2RlKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGVUeXBlID09IE5vZGUuQ09NTUVOVF9OT0RFICkgewotCQkJCQl2YWx1ZSA9IHZhbHVlICsgIjwhLS0gIiArIG5vZGUuZ2V0Tm9kZVZhbHVlKCkgKyAiIC0tPiI7Ci0JCQkJfQotCQkJCWlmIChub2RlVHlwZSA9PSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewotCQkJCQlQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkgPSAoUHJvY2Vzc2luZ0luc3RydWN0aW9uKSBub2RlOwotCQkJCQl2YWx1ZSA9IHZhbHVlICsgIjw/IiArIHBpLmdldERhdGEoKSArICIgPz4iOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlRWxlbWVudChTdHJpbmcgdmFsdWUsIE5vZGUgbm9kZSkgewotCQl2YWx1ZSA9IHZhbHVlICsgIjwiOwotLy8JCWlmIChub2RlLmdldFByZWZpeCgpICE9IG51bGwgJiYgbm9kZS5nZXRQcmVmaXgoKS5sZW5ndGgoKSA+IDApIHsKLS8vCQkJdmFsdWUgPSB2YWx1ZSArIG5vZGUuZ2V0UHJlZml4KCkgKyAiOiI7Ci0vLwkJfQotCQlpZiAobm9kZS5nZXROb2RlTmFtZSgpICE9IG51bGwpIHsKLQkJCXZhbHVlID0gdmFsdWUgKyBub2RlLmdldE5vZGVOYW1lKCk7Ci0JCQlpZiAobm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHsKLQkJCQlOYW1lZE5vZGVNYXAgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQkJCXZhbHVlID0gdmFsdWUgKyBidWlsZEF0dHJpYnV0ZXMoYXR0cik7Ci0JCQl9Ci0JCQl2YWx1ZSA9IHZhbHVlICsgIj4iOwotCQkJaWYgKG5vZGUuZ2V0Tm9kZVZhbHVlKCkgIT0gbnVsbCkgewotCQkJCXZhbHVlID0gdmFsdWUgKyBub2RlLmdldE5vZGVWYWx1ZSgpOwotCQkJfQotCQl9Ci0JCWlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkgewotCQkJdmFsdWUgPSB2YWx1ZSArIHByb2Nlc3NOb2RlTGlzdChub2RlLmdldENoaWxkTm9kZXMoKSk7Ci0JCX0KLQkJdmFsdWUgPSB2YWx1ZSArICI8LyIgKyBub2RlLmdldE5vZGVOYW1lKCkgKyAiPiI7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRBdHRyaWJ1dGVzKE5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICIgIjsKLQkJZm9yIChpbnQgYSA9IDA7IGEgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBhKyspIHsKLQkJCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpYXR0cmlidXRlcy5pdGVtKGEpOwotLy8JCQlpZiAoYXR0cmlidXRlLmdldFByZWZpeCgpICE9IG51bGwpIHsKLS8vCQkJCXZhbHVlID0gdmFsdWUgKyBhdHRyaWJ1dGUuZ2V0UHJlZml4KCkgKyAiOiI7Ci0vLwkJCX0KLQkJCXZhbHVlID0gdmFsdWUgKyBhdHRyaWJ1dGUuZ2V0TmFtZSgpICsgIj1cIiIgKyBhdHRyaWJ1dGUuZ2V0VmFsdWUoKSArICJcIiAiOwotCQl9Ci0JCXZhbHVlID0gdmFsdWUgKyAiICI7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQlwcml2YXRlIFhPYmplY3QgZ2V0WE9iamVjdCgpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0JCVhPYmplY3QgeHZhbHVlOwotCQlpZiAoZWxlbVZhcmlhYmxlLmdldElzVG9wTGV2ZWwoKSkKLQkJCXh2YWx1ZSA9IHZhclN0YWNrLmVsZW1lbnRBdChzbG90TnVtYmVyKTsKLQkJZWxzZQotCQkJeHZhbHVlID0gdmFyU3RhY2suZ2V0TG9jYWxWYXJpYWJsZShlbGVtVmFyaWFibGUuZ2V0SW5kZXgoKSwKLQkJCQkJc3RhY2tGcmFtZSk7Ci0JCXJldHVybiB4dmFsdWU7Ci0JfQotCi0JcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IGFyZzApIHsKLQkJWGFsYW5WYXJpYWJsZSB4dmFyID0gKFhhbGFuVmFyaWFibGUpIGFyZzA7Ci0JCWludCBjb21wID0geHZhci5zdGFja0ZyYW1lIC0gc3RhY2tGcmFtZTsKLQkJaWYgKGNvbXAgPT0gMCkKLQkJCWNvbXAgPSBzbG90TnVtYmVyIC0geHZhci5zbG90TnVtYmVyOwotCQlyZXR1cm4gY29tcDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNWEzY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiNGFlNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5pbmkgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDkwYzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT1pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQubWFwcGluZ3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLTA9QGJ1aWxkQApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVmMzJhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPUVjbGlwc2UgWFNMIERldmVsb3BlciBUb29sc1xuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHRcblwKLSAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSxcblwKLSAgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwpXG5cCi0gIGFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjk0OTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5pbmksXAotICAgICAgICAgICAgICAgYWJvdXQubWFwcGluZ3MsXAotICAgICAgICAgICAgICAgYWJvdXQucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBpY29ucy8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2ljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDljMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2ljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDBlNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IEVjbGlwc2UgWFNMIERldmVsb3BlciBUb29scwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU5M2RmZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXhpbmNsdWRlCi10ZXN0LnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjY5MTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuZG9jPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg0M2YwZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI01vbiBNYXIgMTAgMTk6NDE6NTAgR01ULTA1OjAwIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YTlhMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU2F0IFNlcCAyMCAxNzowMzowOSBHTVQgMjAwOAotREVMRUdBVEVTX1BSRUZFUkVOQ0U9ZGVsZWdhdGVWYWxpZGF0b3JMaXN0Ci1VU0VSX0JVSUxEX1BSRUZFUkVOQ0U9ZW5hYmxlZEJ1aWxkVmFsaWRhdG9yTGlzdAotVVNFUl9NQU5VQUxfUFJFRkVSRU5DRT1lbmFibGVkTWFudWFsVmFsaWRhdG9yTGlzdAotVVNFUl9QUkVGRVJFTkNFPW92ZXJyaWRlR2xvYmFsUHJlZmVyZW5jZXN0cnVlZGlzYWJsZUFsbFZhbGlkYXRpb25mYWxzZXZlcnNpb24xLjIuMC52MjAwODA3MjExNDUwCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3ZlcnJpZGU9dHJ1ZQotc3VzcGVuZD1mYWxzZQotdmFscy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuSlNQQmF0Y2hWYWxpZGF0b3IvZ2xvYmFsPUZGMDEKLXZhbHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLkpTUENvbnRlbnRWYWxpZGF0b3IvZ2xvYmFsPUZGMDEKLXZhbHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuSFRNTFZhbGlkYXRvci9nbG9iYWw9RkYwMQotdmFscy9vcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLndzZGwvZ2xvYmFsPUZGMDIxNThvcmcuZWNsaXBzZS53c3Qud3NkbC52YWxpZGF0aW9uLmludGVybmFsLmVjbGlwc2UuVmFsaWRhdG9yCi12YWxzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWwvZ3JvdXBzPTAxMDdpbmNsdWRlMDcxMTFjb250ZW50VHlwZTEyOG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWxUMTExY29udGVudFR5cGUxMzRvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlVDExMWNvbnRlbnRUeXBlMTM0b3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZVQxMTFjb250ZW50VHlwZTEzNG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50bGRzb3VyY2VUMDdmaWxlZXh0MDN4bWxGMDdmaWxlZXh0MDNncGhGMDdmaWxlZXh0MTE1d2RvLWNvbm5lY3Rpb25zRjAxMDdleGNsdWRlMDYxMTNwcm9qZWN0TmF0dXJlMTM0b3JnLmVjbGlwc2UuanN0LmoyZWUuZWpiLkVKQk5hdHVyZTExM3Byb2plY3ROYXR1cmUxMzBvcmcuZWNsaXBzZS5qc3QuajJlZS5FQVJOYXR1cmUwNGZpbGUwOC5wcm9qZWN0VDAxMDRmaWxlMTEwLmNsYXNzcGF0aFQwMTA0ZmlsZTExMC5zZXR0aW5ncy9UMDIwNGZpbGUxMTJjb25jZXB0cy54bWxGMDEKLXZhbHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnhzZC9nbG9iYWw9RkYwMjE2Mm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yCi12Zi52ZXJzaW9uPTMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDliMjYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2M7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtVmVuZG9yOiAldmVuZG9yTmFtZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZDUwNTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgaHRtbC8sXAotICAgICAgICAgICAgICAgKi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvYnVpbGQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYjI5MDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IGRlZmF1bHQ9ImNyZWF0ZS1kb2MiIGJhc2VkaXI9Ii4iPgotCi0JPHByb3BlcnR5IG5hbWU9ImN1cnJlbnQtbG9jIiBsb2NhdGlvbj0iLiIgLz4KLQk8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlIiBsb2NhdGlvbj0iLi4iIC8+Ci0JPHByb3BlcnR5IG5hbWU9Imh0bWxkaXIiIHZhbHVlPSIke2N1cnJlbnQtbG9jfS9odG1sIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJkb2Nib29rZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2V9L0NvbW1vblV0aWxpdGllcy9kb2Nib29rLXhzbC9lY2xpcHNlIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJkb2Nib29rc291cmNlIiB2YWx1ZT0iJHtjdXJyZW50LWxvY30vZG9jYm9vayIvPgotCTxwcm9wZXJ0eSBuYW1lPSJ4YWxhbiIgdmFsdWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiIC8+Ci0KLSAgICAKLQk8IS0tIFhTTFQgQ2h1bmtpbmcgUHJvcGVydGllcyAtLT4KLQk8cHJvcGVydHkgbmFtZT0iYmFzZS5kaXIiIHZhbHVlPSIke2h0bWxkaXJ9Ii8+Ci0JCi0JPHRhc2tkZWYgbmFtZT0ieHNsLmluY2x1ZGUiIGNsYXNzbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudC5YSW5jbHVkZVRhc2siLz4KLQkKLQk8dGFyZ2V0IG5hbWU9Im1lcmdlIj4KLQkJPHhzbC54aW5jbHVkZSBpbj0iJHtkb2Nib29rc291cmNlfS94c2xoZWxwLmRiayIKLQkJICAgICAgICAgICAgICBvdXQ9IiR7ZG9jYm9va3NvdXJjZX0veHNsaGVscGNvbWJpbmVkLmRiayIvPgotCTwvdGFyZ2V0PgotCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtZG9jIiBkZXBlbmRzPSJtZXJnZSI+Ci0KLQkJPHhzbHQgZm9yY2U9InRydWUiIHN0eWxlPSIke2RvY2Jvb2tkaXJ9L2VjbGlwc2UzMy54c2wiIGluPSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHBjb21iaW5lZC5kYmsiIG91dD0idGVzdC54bWwiPgotCQkJPGZhY3RvcnkgbmFtZT0iJHt4YWxhbn0iIC8+Ci0JCQk8cGFyYW0gbmFtZT0ibWFuaWZlc3QiIGV4cHJlc3Npb249IjEiLz4KLQkJCTxwYXJhbSBuYW1lPSJiYXNlLmRpciIgZXhwcmVzc2lvbj0iJHtodG1sZGlyfS8iLz4KLQkJCTxwYXJhbSBuYW1lPSJjcmVhdGUucGx1Z2luLnhtbCIgZXhwcmVzc2lvbj0iMCIvPgotCQkJPHBhcmFtIG5hbWU9ImNodW5rZXIub3V0cHV0LmluZGVudCIgZXhwcmVzc2lvbj0ieWVzIi8+Ci0JCQk8cGFyYW0gbmFtZT0ibmF2aWcuc2hvd3RpdGxlcyIgZXhwcmVzc2lvbj0iMCIvPgotCQkJPHBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIGV4cHJlc3Npb249IjEiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIGV4cHJlc3Npb249ImJvb2sgICAgICB0b2MsdGl0bGUKLWNoYXB0ZXIgICB0b2MsdGl0bGUKLXNlY3Rpb24gICB0aXRsZSIgLz4KLQkJCTxwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgZXhwcmVzc2lvbj0iMCIvPgotCQkJPHBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBleHByZXNzaW9uPSIwIi8+Ci0JCQk8cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBleHByZXNzaW9uPSJib29rLmNzcyAuLi9ib29rLmNzcyIvPgotCQkJPHBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIGV4cHJlc3Npb249IjMiLz4KLQkJCTxwYXJhbSBuYW1lPSJ0b2Muc2VjdGlvbi5kZXB0aCIgZXhwcmVzc2lvbj0iNSIvPgotCQkJPHBhcmFtIG5hbWU9InRvYy5saXN0LnR5cGUiIGV4cHJlc3Npb249InVsIi8+Ci0JCTwveHNsdD4KLQkJCi0JCTxyZXBsYWNlIGZpbGU9IiR7Y3VycmVudC1sb2N9L3RvYy54bWwiIHRva2VuPSIke2N1cnJlbnQtbG9jfS8iIHZhbHVlPSIiLz4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA5NThiMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXhzbGhlbHBjb21iaW5lZC5kYmsKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9jb25jZXB0cy9SZXNjdWluZ1hTTFRmcm9tTmljaGVTdGF0dXMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2NvbmNlcHRzL1Jlc2N1aW5nWFNMVGZyb21OaWNoZVN0YXR1cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYzkwNTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2NvbmNlcHRzL1Jlc2N1aW5nWFNMVGZyb21OaWNoZVN0YXR1cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzZWN0aW9uIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC41Ly9FTiIKLSAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIj4KLTxzZWN0aW9uIGlkPSJSZXN1Y2luZ1hTTFQiPgotICAgPHRpdGxlPlJlc2N1aW5nIFhTTFQgRnJvbSBOaWNoZSBTdGF0dXM8L3RpdGxlPgotICAgPHN1YnRpdGxlPkEgR2VudGxlIEludHJvZHVjdGlvbiB0byBYU0xUIHRocm91Z2ggSFRNTCBUZW1wbGF0ZXM8L3N1YnRpdGxlPgotICAgPG5vdGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIDxlbXBoYXNpcz4KLSAgICAgICAgICAgIEVkaXRvcnMgTm90ZTogVGhpcyBvcmlnaW5hbGx5IGFwcGVhcmVkIGF0Ci0gICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lnhmcm9udC5jb20vcmVzY3VpbmcteHNsdC5odG1sIj5YRnJvbnQuY29tPC91bGluaz4KLSAgICAgICAgICAgICwgYW5kIGlzIHJlcHVibGlzaGVkIGhlcmUgd2l0aCBwZXJtaXNzaW9uLiBUaGUgYXJ0aWNsZSBpcyB3cml0dGVuIGJ5IERhdmlkIEphY29icy4KLSAgICAgICAgIDwvZW1waGFzaXM+Ci0gICAgICA8L3BhcmE+Ci0gICA8L25vdGU+Ci0gICA8YWJzdHJhY3Q+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIFhTTFQgaXMgb25lIG9mIHRoZSBtb3N0IGV4Y2l0aW5nIHRlY2hub2xvZ2llcyB0byBjb21lIG91dCBvZiB0aGUgWE1MIGZhbWlseS4gVW5mb3J0dW5hdGVseSwgaXRzIGluY3JlZGlibGUKLSAgICAgICAgIHBvd2VyIGFuZCBhc3NvY2lhdGVkIGNvbXBsZXhpdHkgY2FuIGJlIG92ZXJ3aGVsbWluZyB0byBuZXcgdXNlcnMgcHJldmVudGluZyBtYW55IGZyb20gZXhwZXJpbWVudGluZyB3aXRoIGl0IG9yCi0gICAgICAgICBjYXVzaW5nIHRoZW0gdG8gcXVpY2tseSBnaXZlIHVwIGluIGRpc2d1c3QuIEluIGZhY3QsIHVubGVzcyB0aGUgbWV0aG9kIG9mIHRlYWNoaW5nIGFuZCB0aGUgY29tbW9uIHN0eWxlIG9mIHVzZQotICAgICAgICAgZm9yIFhTTFQgaXMgcmFkaWNhbGx5IGNoYW5nZWQgdG8gbWFrZSBpdCBtb3JlIGFjY2Vzc2libGUsIFhTTFQgd2lsbCBiZSByZWxlZ2F0ZWQgdG8gbmljaGUgc3RhdHVzIGxpa2UgU0dNTCBhbmQKLSAgICAgICAgIG90aGVyIHBvd2VyZnVsIHRlY2hub2xvZ2llcy4KLSAgICAgIDwvcGFyYT4KLSAgIDwvYWJzdHJhY3Q+Ci0gICA8c2VjdGlvbj4KLSAgICAgIDx0aXRsZT5UaGUgUHJvYmxlbTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIFRoZSAxOTkw4oCZcyBzYXcgYW4gaW5jcmVkaWJsZSBwcm9saWZlcmF0aW9uIG9mIG5ldyB3ZWIgcmVsYXRlZCBsYW5ndWFnZXMuIExvb2tpbmcgYmFjayB3ZSBjYW4gc2VlIHdoYXQKLSAgICAgICAgIGZlYXR1cmVzIHNlcGFyYXRlZCB0aGUgd2lubmVycyBhbmQgbG9zZXJzLiBUaGUgYmlnZ2VzdCBrZXkgaGFzIGJlZW4gaGF2aW5nIGEgdmVyeSBsb3cgYmFycmllciB0byBlbnRyeS4gTWFueQotICAgICAgICAgbGFuZ3VhZ2VzIGFjY29tcGxpc2hlZCB0aGlzIGJ5IGZvbGxvd2luZyB0aGUgZm9sbG93aW5nIHJ1bGVzLgotICAgICAgPC9wYXJhPgotICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgTGV2ZXJhZ2UgYXMgbXVjaCBleGlzdGluZyBrbm93bGVkZ2UgYXMgcG9zc2libGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICBNYWtlIGl0IGVhc3kgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCAiaGVsbG8gd29ybGQiIHN0eWxlIGV4YW1wbGUuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gYW5kIHVzZWZ1bCBsYW5ndWFnZSBjb25zdHJ1Y3RzIHNob3VsZCBiZSBlYXNpbHkgY29udmV5ZWQgd2l0aCBhIGZldyBzbWFsbCBleGFtcGxlcy4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgIENvbXBsZXggcHJvZ3JhbW1pbmcgY29uc3RydWN0cyBzaG91bGQgb25seSBiZSByZXF1aXJlZCB3aGVuIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGFjY29tcGxpc2hlZCBpcwotICAgICAgICAgICAgICAgY29tcGxleC4gICAgICAgICAgICAKLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICA8L2l0ZW1pemVkbGlzdD4KLSAgICAgIDxwYXJhPgotICAgICAgICAgRnJvbSB0aGVzZSBydWxlcyB3ZSBjYW4gc2VlIHdoeSBlbWJlZGRlZCB3ZWIgc2NyaXB0aW5nIGxhbmd1YWdlcyBsaWtlIEFjdGl2ZSBTZXJ2ZXIgUGFnZXMgKEFTUHMpLCBDb2xkCi0gICAgICAgICBGdXNpb24sIFBIUCBhbmQKLSAgICAgICAgIEphdmEgU2VydmVyIFBhZ2VzIChKU1BzKSBhcmUgc28gcG9wdWxhci4gVGhleSBhbGwgbGV2ZXJhZ2UgYSB1c2Vy4oCZcyBrbm93bGVkZ2Ugb2YgSFRNTC4gVGhleSBhbHNvCi0gICAgICAgICBhbGxvdyB0aGUKLSAgICAgICAgIG1pbmltdW0gYW1vdW50IG9mIHNjcmlwdGluZyB0byBiZSBhZGRlZCB0byBhY2NvbXBsaXNoIHRoZSBkeW5hbWljIGZlYXR1cmUgYSBkZXZlbG9wZXIgaXMgbG9va2luZyBmb3IuCi0gICAgICAgICBUaGlzIGhhcwotICAgICAgICAgYWxsb3dlZCBudW1lcm91cyB3ZWIgZGV2ZWxvcGVycyB0byBzdGFydCBvZmYgd2l0aCB2ZXJ5IHNtYWxsIHByb2plY3RzIGFuZCB0aGVuIHRocm91Z2ggY29udGludW9zCi0gICAgICAgICBlbmhhbmNlbWVudAotICAgICAgICAgYW5kIGxlYXJuaW5nLCBmaW5kIHRoZW1zZWx2ZXMgdXNpbmcgdGhlIGZ1bGwgcG93ZXIgb2YgYSBjb21wbGV4IHByb2dyYW1taW5nIGxhbmd1YWdlLiBGdXJ0aGVybW9yZSwKLSAgICAgICAgIGJlY2F1c2Ugb2YKLSAgICAgICAgIHRoZSB2ZXJ5IGluY3JlbWVudGFsIG5hdHVyZSBvZiB0aGF0IGxlYXJuaW5nIHRoZSBkZXZlbG9wZXIgd2FzIG5ldmVyIHNjYXJlZCBvZmYuICAgICAgICAgCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIEhUTUwgaGFzIGFsc28gZm9zdGVyZWQgdGhlIHRlY2huaXF1ZSBvZiBsZWFybmluZyBieSBleGFtcGxlLiBXaGVuIGEgd2ViIGF1dGhvciBzZWVzIGFub3RoZXIgc2l0ZSB3aXRoIGEKLSAgICAgICAgIGZlYXR1cmUgdGhleQotICAgICAgICAgbGlrZSwgdGhleSBpbW1lZGlhdGVseSBicmluZyB1cCB0aGUgc291cmNlIHRvIHNlZSBob3cgaXQgd2FzIGltcGxlbWVudGVkLiBJbiB0aGlzIHdheSBtYW55IHdlYgotICAgICAgICAgYXV0aG9ycyB3ZXJlCi0gICAgICAgICBhYmxlIHRvIGxlYXJuIGNvbXBsZXggSFRNTCB0cmlja3Mgd2l0aCBubyBmb3JtYWwgdHJhaW5pbmcuIFdoaWxlIHNlcnZlci1zaWRlIHNjcmlwdHMgYXJlIG5vdCBhcwotICAgICAgICAgZWFzeSB0byBjb21lCi0gICAgICAgICBieSwgdGhlcmUgYXJlIHN0aWxsIG51bWVyb3VzIHNpdGVzIHRoYXQgaG91c2UgdGhvdXNhbmRzIG9mIGV4YW1wbGUgc2NyaXB0cyBmb3IgYSBibG9zc29taW5nCi0gICAgICAgICBkZXZlbG9wZXIgdG8KLSAgICAgICAgIGV4YW1pbmUuICAgICAgICAgCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIFRyYWRpdGlvbmFsbHkgWFNMVCBoYXMgYmVlbiBwcmVzZW50ZWQgYXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgdHJhbnNsYXRpbmcgWE1MIGRvY3VtZW50cyBpbnRvIGFub3RoZXIKLSAgICAgICAgIGZvcm1hdCwgb2Z0ZW4gZm9yIHByZXNlbnRhdGlvbi4gVGhpcyBmcmFtZXMgdGhlIHByb2JsZW0sIHN1Y2ggdGhhdCBmb3IgZWFjaCBlbGVtZW50LCB0aGUgcHJvZ3JhbW1lciBoYXMgdGhlCi0gICAgICAgICB0YXNrIG9mIGZpZ3VyaW5nIG91dCBob3cgdGhhdCBlbGVtZW50IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQuIEFzIGxvbmcgYXMgdGhlcmUgYXJlIG9uZSB0byBvbmUgbWFwcGluZ3Mgb3Igb25lCi0gICAgICAgICB0byB6ZXJvIG1hcHBpbmdzIHRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBGb3IgZXhhbXBsZSwgaWYgZXZlcnkgb2NjdXJyZW5jZSBvZiBhIDwhW0NEQVRBWwotICAgICAgICAgPG5hbWU+XV0+Ci0gICAgICAgICBlbGVtZW50IGlzIGdvaW5nIHRvCi0gICAgICAgICBiZWNvbWUgYW4gSFRNTCBoZWFkZXIuIEl0IGlzIGEgc2ltcGxlIG1hdHRlciB0byB3cml0ZSBhIG1hdGNoaW5nIHRlbXBsYXRlIHRvIGFjY29tcGxpc2gKLSAgICAgICAgIHRoaXMuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3RpbmcgaWQ9InBsX05hbWVUZW1wbGF0ZSI+Ci08IVtDREFUQVsKLTx4c2w6dGVtcGxhdGUgbWF0Y2g9Im5hbWUiPgotICA8aDE+PHhzbDphcHBseS10ZW1wbGF0ZXMvPjwvaDE+Ci08L3hzbDp0ZW1wbGF0ZT4KLV1dPiAgICAgIAotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxwYXJhPgotICAgICAgICAgSG93ZXZlciB3aGVuIGFkZGluZyBvbmUgdG8gbWFueSBtYXBwaW5ncyAoaS5lLiB3aGVuIGFuIGVsZW1lbnTigJlzIGNvbnRlbnRzIHdpbGwgYXBwZWFyIG11bHRpcGxlIHRpbWVzIGluIHRoZQotICAgICAgICAgdGFyZ2V0IGRvY3VtZW50IHdpdGggZGlmZmVyZW50IGZvcm1hdHRpbmcpLCBrZWVwaW5nIHRyYWNrIG9mIGFsbCB0aGUgcmVsYXRpb25zaGlwcyBxdWlja2x5IGdyb3dzIGluIGNvbXBsZXhpdHkKLSAgICAgICAgIGFuZCBiZWNvbWVzIGNvbmZ1c2luZy4gRm9yIGV4YW1wbGUsIGlmLCBhZnRlciB3cml0aW5nIHRoZSBwcmV2aW91cyB0ZW1wbGF0ZSwgdGhlIHByb2dyYW1tZXIgZGlzY292ZXJzIHRoYXQgdGhlCi0gICAgICAgICBuYW1lIGFsc28gbmVlZHMgdG8gYmUgcGxhY2VkIGluIHRoZSB0aXRsZSB0aGUgcHJvZ3JhbW1lciBtaWdodCBhZGQgdGhlIHRlbXBsYXRlCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cHJvZ3JhbWxpc3RpbmcgaWQ9InBsX3ZhbHVlT2YiPgotPCFbQ0RBVEFbCi08eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgPHRpdGxlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIi8+PC90aXRsZT4KLTwveHNsOnRlbXBsYXRlPgotXV0+ICAgICAgCi0gICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgICBOb3RpY2UgdGhlIHVzZSBvZiB0aGUgPCFbQ0RBVEFbPHhzbDp2YWx1ZS1vZj5dXT4KLSAgICAgICAgIGZ1bmN0aW9uIGluIHRoaXMgdGVtcGxhdGUgYmVjYXVzZSB1c2luZyA8IVtDREFUQVs8YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibmFtZSI+XV0+Ci0gICAgICAgICB3b3VsZCBoYXZlIGNhdXNlZCBhIHRyaWdnZXJpbmcgb2YgdGhlIHByZXZpb3VzIHRlbXBsYXRlIGFkZGluZyB1bmRlc2lyZWQgaGVhZGVyIHRhZ3MgdG8gbXkgY29udGVudC4gVGhpcyBtZWFucwotICAgICAgICAgYmVmb3JlIGFkZGluZyBhIHRyYW5zbGF0aW9uIHRvIGFuIGVsZW1lbnQgdGhlIHByb2dyYW1tZXIgbXVzdCBmaXJzdCBiZSBhd2FyZSBvZiBhbGwgdGhlIGV4aXN0aW5nIHRyYW5zbGF0aW9ucwotICAgICAgICAgKHVnaCEpLiBPZiBjb3Vyc2UgaWYgdGhlIHByb2dyYW1tZXIgYmVjYW1lIGF3YXJlIG9mIHRoZQotICAgICAgICAgPCFbQ0RBVEFbPHRpdGxlPl1dPgotICAgICAgICAgcmVxdWlyZW1lbnQgZmlyc3QsIHRoZSBjb250ZW50cyBvZiB0aGVzZSB0ZW1wbGF0ZXMgY291bGQgaGF2ZSBiZWVuIHJldmVyc2VkLiBPbmUgY2FuIHF1aWNrbHkgc2VlIGhvdwotICAgICAgICAgdGhlCi0gICAgICAgICBhcmJpdHJhcnkgZGVjaXNpb25zIG9mIGRldmVsb3BtZW50IGFuZCBkaXNjb3Zlcnkgb2YgcmVxdWlyZW1lbnRzIGNhbiBsZWFkIHRvIGEgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IGFyZQotICAgICAgICAgbm8KLSAgICAgICAgIGxvbmdlciBpbnR1aXRpdmUuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIEFzIGEgcHJvZ3JhbW1lciB3aXRoIG1vcmUgdGhhbiAyMCB5ZWFycyBleHBlcmllbmNlIHdpdGggb3ZlciBhIGRvemVuIGxhbmd1YWdlcywgWFNMVCB0ZW1wbGF0ZXMgYW5kIGRlZmF1bHQKLSAgICAgICAgIHJ1bGVzIHdlcmUKLSAgICAgICAgIG5vdCBvYnZpb3VzIHRvIG1lLiBPdmVyIHRoZSBwYXN0IHllYXIgb3IgdHdvIEkgaGFkIGxvb2tlZCBhdCBudW1lcm91cyBleGFtcGxlcyB0cnlpbmcgdG8gZGlzY2VybiBob3cKLSAgICAgICAgIHRoZXkKLSAgICAgICAgIHdvcmtlZC4gV2hpbGUgSSBjb3VsZCB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsIGdpc3Qgb2Ygd2hhdCB3YXMgb2NjdXJyaW5nLCB0aGVyZSB3YXMgdG9vIG11Y2ggaW1wbGllZAotICAgICAgICAgYmVoYXZpb3IKLSAgICAgICAgIHRoYXQgSSBkaWQgbm90IHBpY2sgdXAuIEl0IHdhcyBub3QgdW50aWwgZ29pbmcgdGhyb3VnaCBmb3JtYWwgWFNMVCB0cmFpbmluZyB0aGF0IEkgZnVsbHkgdW5kZXJzdG9vZCBob3cKLSAgICAgICAgIFhTTFQKLSAgICAgICAgIHdvcmtlZC4gQ2xlYXJseSwgaWYgdGhlIGJhcnJpZXIgdG8gZW50cnkgaXMgdGhhdCBoaWdoIGZvciBhbiBleHBlcmllbmNlZCBwcm9ncmFtbWVyLCB0aGUgYXZlcmFnZSB3ZWIKLSAgICAgICAgIGRldmVsb3BlcgotICAgICAgICAgd2FzIG5vdCBnb2luZyB0byBmaW5kIHRoaXMgdGVjaG5vbG9neSB2ZXJ5IHVzZWZ1bC4gICAgICAgICAgCi0gICAgICA8L3BhcmE+Ci0gICA8L3NlY3Rpb24+Ci0gICA8c2VjdGlvbj4KLSAgICAgIDx0aXRsZT5UaGUgU29sdXRpb248L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgICBTbyBob3cgZG8gd2Ugc29sdmUgdGhpcyBwcm9ibGVtIGFuZCBoZWxwIGRlbGl2ZXIgWFNMVOKAmXMgcHJvbWlzZSB0byB0aGUgbWFzc2VzPyBGb3IgWFNMVCB0byBiZSBzdWNjZXNzZnVsIGl0Ci0gICAgICAgICBtdXN0IGJlCi0gICAgICAgICBwcmVzZW50ZWQgYW5kIHVzZWQgaW4gYSB3YXkgdGhhdCBhZG9wdHMgdGhvc2UgYXR0cmlidXRlcyBkaXNjdXNzZWQgZWFybGllciAocmV1c2Ugb2Yga25vd2xlZGdlLCBmYXN0Ci0gICAgICAgICBzdGFydCwgYW5kCi0gICAgICAgICBncmFkdWFsaXNtKS4gVGhpcyB0dXRvcmlhbCB3aWxsIGF0dGVtcHQgdG8gZWFzZSBYU0xU4oCZcyBpbnRyb2R1Y3Rpb24gYnkgZm9jdXNpbmcgb24gdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgICAgIEZpcnN0LCBpdAotICAgICAgICAgaXMgb25seSBnb2luZyB0byBmb2N1cyBvbiB0aGUgZ2VuZXJhdGlvbiBvZiBIVE1MIGRvY3VtZW50cyBhbmQgdXNlcnMgd2hvIGFyZSBmYW1pbGlhciB3aXRoIEhUTUwuIElmCi0gICAgICAgICB5b3VyIGdvYWwKLSAgICAgICAgIGlzIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRyYW5zZm9ybWluZyBvbmUgWE1MIGRvY3VtZW50IGludG8gYW5vdGhlciBYTUwgZG9jdW1lbnQgdGhpcyB0dXRvcmlhbCBpcyBub3QKLSAgICAgICAgIGZvciB5b3UuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIFRoZSBzZWNvbmQgaXMgdG8gcmVmcmFtZSB0aGUgcHJvYmxlbSBzbyB0aGUgWFNMVCBzb2x1dGlvbnMgcHJvZ3JhbW1lcnMgd3JpdGUgYXJlIG1vcmUgbmF0dXJhbGx5IGV4dGVuc2libGUKLSAgICAgICAgIGFuZAotICAgICAgICAgaW50dWl0aXZlLiBJbnN0ZWFkIG9mIHRyeWluZyB0byB0cmFuc2xhdGUgYW4gWE1MIHNvdXJjZSBkb2N1bWVudCBpbnRvIGFuIEhUTUwgcHJlc2VudGF0aW9uIGRvY3VtZW50LCB0aGUKLSAgICAgICAgIHByb2dyYW1tZXIgc2hvdWxkIHNlZSB0aGUgWE1MIGRvY3VtZW50IGFzIGEgY29tcGxleCBkYXRhIHN0cnVjdHVyZSB3aXRoIFhTTFQgcHJvdmlkaW5nIHBvd2VyZnVsIHRvb2xzIGZvcgotICAgICAgICAgZXh0cmFjdGluZyB0aGF0IGluZm9ybWF0aW9uIGludG8gdGhlaXIgSFRNTCBkb2N1bWVudHMuIFRoaXMgYWxsb3dzIHVzIHRvIGxldmVyYWdlIHRoZSBleHBlcmllbmNlIG1vc3QgcGVvcGxlCi0gICAgICAgICBoYXZlIHdpdGggdXNpbmcgYW4gSFRNTCB0ZW1wbGF0aW5nIGxhbmd1YWdlIChlLmcuIEFTUCwgUEhQLCBKU1AsIENvbGQgRnVzaW9uLCBXZWIgTWFjcm8sIGV0YykuIFRoZXNlIHRlbXBsYXRpbmcKLSAgICAgICAgIGxhbmd1YWdlcyBhcmUgYWxsIGJhc2VkIG9uIHRoZSBiYXNpYyBwcmVtaXNlIHRoYXQgSFRNTCBjb21lcyBmaXJzdCBhbmQgYWxsIGVuaGFuY2VtZW50cyBhcmUgdGhlbiBlbWJlZGRlZCBpbgotICAgICAgICAgc3BlY2lhbCB0YWdzLiAgICAgICAgIAotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgICBXaXRoIHNvbWUgY2F2ZWF0cywgdGhpcyB0dXRvcmlhbCB3aWxsIHNob3cgaG93IFhTTFQgY2FuIGJlIHVzZWQgaW4gdGhpcyBzYW1lIHdheS4gVGhlIGJlbmVmaXQgb2YgdGhpcwotICAgICAgICAgYXBwcm9hY2ggaXMgaXQKLSAgICAgICAgIGFsbG93cyB0aGUgcXVpY2sgdXNlIG9mIG1hbnkgb2YgWFNMVOKAmXMgcG93ZXJmdWwgZnVuY3Rpb25zIHdoaWxlIGxldHRpbmcgeW91IGxlYXJuIGl0cyBtb3JlCi0gICAgICAgICBlc290ZXJpYwotICAgICAgICAgY2FwYWJpbGl0aWVzIGFzIHRoZSBuZWVkIGFyaXNlcy4gSW4gYWRkaXRpb24gdGhlIHJlc3VsdGluZyBYU0xUIGZpbGVzIGFyZSBtb3JlIGludHVpdGl2ZSBhbmQKLSAgICAgICAgIG1haW50YWluYWJsZS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTxlbXBoYXNpcyByb2xlPSJib2xkIj48IVtDREFUQVs8eHNsOnZhbHVlLW9mPiBhbmQge31dXT48L2VtcGhhc2lzPiAgICAgICAgIAotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxwYXJhPgotICAgICAgICAgT24gdG8gYW4gZXhhbXBsZS4gSGVyZSBpcyBhIHZlcnkgc2ltcGxlIHdlbGNvbWUgcGFnZS4gICAgICAgICAKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotPGh0bWw+Ci0gIDxoZWFkPgotICAgIDx0aXRsZT5XZWxjb21lPC90aXRsZT4KLSAgPC9oZWFkPgotICA8Ym9keT4KLSAgICBXZWxjb21lIQotICA8L2JvZHk+Ci08L2h0bWw+Ci1dXT4gICAgICAgICAKLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIEFuZCBoZXJlIGlzIGFuIFhNTCBkb2N1bWVudCB3aXRoIGluZm9ybWF0aW9uIG9uIG1lbWJlci4gICAgICAKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08bWVtYmVyIGxldmVsPSJwbGF0aW51bSI+Ci0gIDxuYW1lPkplZmY8L25hbWU+Ci0gIDxwaG9uZSB0eXBlPSJob21lIj41NTUtMTIzNDwvcGhvbmU+Ci0gIDxwaG9uZSB0eXBlPSJ3b3JrIj41NTUtNDMyMTwvcGhvbmU+Ci0gIDxmYXZvcml0ZUNvbG9yPmJsdWU8L2Zhdm9yaXRlQ29sb3I+Ci08L21lbWJlcj5dXT4gICAgICAKLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIHBvaW50ZWQgb3V0IHJpZ2h0IGF3YXkuIEZpcnN0IHRoaXMgaXMgYSB3ZWxsLWZvcm1lZCBYTUwKLSAgICAgICAgIGRvY3VtZW50LiBUaGlzIG1lYW4gYWxsIEhUTUwgdXNlZCBtdXN0IGNvbmZvcm0gdG8gdGhlIFhIVE1MIHNwZWNpZmljYXRpb24gKGkuZS4gYWxsIHRhZ3MgbXVzdCBiZSBjbG9zZWQgYW5kCi0gICAgICAgICBsb3dlcmNhc2UpLgotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgICBUaGUgbGluZXMgYmVmb3JlIHRoZSA8IVtDREFUQVs8aHRtbD5dXT4KLSAgICAgICAgIHRhZyBhbmQgYWZ0ZXIgdGhlIDwhW0NEQVRBWzwvaHRtbD5dXT4KLSAgICAgICAgIHRhZyB3aWxsIGJlIHNlZW4gaW4gYWxsIHRoZSBleGFtcGxlcy4gRm9yIG5vdywgb3RoZXIgdGhhbiByZWFsaXppbmcgdGhhdCB0aGV5IGFyZSByZXF1aXJlZCBpbiBhbnkgc3R5bGUgc2hlZXQKLSAgICAgICAgIGNyZWF0ZWQsIGp1c3QgZ28gYWhlYWQgYW5kIGZvcmdldCB0aGV5IGFyZSB0aGVyZS4gWW91IGRvbuKAmXQgTkVFRCB0byB1bmRlcnN0YW5kIHRoZW0gcmlnaHQgbm93IHRvIGdldCB1c2VmdWwKLSAgICAgICAgIHdvcmsgb3V0IG9mIFhTTFQuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIE5vdGljZSB0aGUgSFRNTCBpcyBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsIGV4Y2VwdCBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyB0YWcKLSAgICAgICAgIDwhW0NEQVRBWzx4c2w6dmFsdWUtb2Y+XV0+LgotICAgICAgICAgVGhpcyB0YWcgaXMgdGhlIGtleSB0byBleHRyYWN0aW5nIGFueSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBvdXQgYW4gWE1MIGRvY3VtZW50LiBJdCBoYXMgYSAic2VsZWN0IgotICAgICAgICAgYXR0cmlidXRlIHRoYXQKLSAgICAgICAgIHByb3ZpZGVzIHRoZSBwYXRoIHRocm91Z2ggdGhlIFhNTCBkb2N1bWVudCB0byB0aGUgaW5mb3JtYXRpb24gd2Ugc2Vlay4gSW4gdGhpcyBjYXNlCi0gICAgICAgICAgICA8IVtDREFUQVs8bWVtYmVyPl1dPgotICAgICAgICAgaXMgdGhlIG91dGVyIG1vc3QgdGFnIGFuZAotICAgICAgICAgPCFbQ0RBVEFbPG5hbWU+XV0+Ci0gICAgICAgICBpcyB0aGUgdGFnIHVuZGVybmVhdGggaXQuIFNsYXNoIGNoYXJhY3RlcnMgKCIvIikgYXJlIHVzZWQgdG8gZGVzaWduYXRlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXBzCi0gICAgICAgICBiZXR3ZWVuIHRhZ3MuCi0gICAgICAgICBJZiB5b3UgYXJlIHVzZWQgdG8gbmF2aWdhdGluZyBhcm91bmQgYSBVbml4IGZpbGUgc3lzdGVtIHRoaXMgc2hvdWxkIGZlZWwgZmFtaWxpYXIuCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIE5vdyBsZXTigJlzIGNvbnNpZGVyIGZ1cnRoZXIgY3VzdG9taXppbmcgdGhpcyBwYWdlIGJ5IG1ha2luZyB0aGUgd2VsY29tZSBpbiB0aGUgcGVyc29u4oCZcyBmYXZvcml0ZSBjb2xvciB1c2luZyB0aGUKLSAgICAgICAgIDwhW0NEQVRBWzxmb250Pl1dPgotICAgICAgICAgdGFnIHdpdGggdGhlICJiZ2NvbG9yIiBhdHRyaWJ1dGUuIEJlY2F1c2UKLSAgICAgICAgICAgIDwhW0NEQVRBWzx4c2w6dmFsdWUtb2Y+XV0+Ci0gICAgICAgICBpcyBhbiBYTUwgdGFnIGl0IGlzIG5vdCB2YWxpZCB0byBpbnNlcnQgaXQgaW4gYW4gSFRNTCBhdHRyaWJ1dGUgdmFsdWUuIFNvIGFub3RoZXIgbWVjaGFuaXNtCi0gICAgICAgICBpcyBuZWVkZWQgdG8gaW5zZXJ0Ci0gICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIG91ciBYTUwgZmlsZSB0aGVyZS4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gICAgICAgICAgICAgICAgdmVyc2lvbj0iMS4wIj4KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0gICAgPGh0bWw+Ci0gICAgICA8aGVhZD4KLSAgICAgICAgPHRpdGxlPldlbGNvbWU8L3RpdGxlPgotICAgICAgPC9oZWFkPgotICAgICAgPGJvZHk+Ci0gICAgICAgIDxmb250IGJnY29sb3I9InttZW1iZXIvZmF2b3JpdGVDb2xvcn0iPgotICAgICAgICAgIFdlbGNvbWUgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im1lbWJlci9uYW1lIi8+IQotICAgICAgICA8L2ZvbnQ+Ci0gICAgICA8L2JvZHk+Ci0gICAgPC9odG1sPgotICA8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+Ci1dXT4KLSAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIE5vdGljZSB0aGUgdXNlIG9mIHRoZSBjdXJseSBicmFja2V0cyAoInt9IikuIFdoZW4gdXNlZCB3aXRoaW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgIntwYXRofSIgaGFzIHRoZSBleGFjdAotICAgICAgICAgc2FtZSBlZmZlY3QgYXMKLSAgICAgICAgIDwhW0NEQVRBWzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJwYXRoIiAvPl1dPgotICAgICAgICAgdXNlZCBvdXRzaWRlIG9mIGF0dHJpYnV0ZSBhc3NpZ25tZW50cy4KLSAgICAgIDwvcGFyYT4KLSAgIDwvc2VjdGlvbj4KLSAgIDxzZWN0aW9uPgotICAgICAgPHRpdGxlPlF1ZXJpZXM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgICBOb3QgYWxsIHBhdGhzIGxlYWQgdG8gYSBzaW5nbGUgbm9kZS4gRm9yIGV4YW1wbGUsIHdoYXQgaWYgd2Ugd2FudGVkIHRvIHB1dCBhIHBlcnNvbuKAmXMgaG9tZSBwaG9uZSBudW1iZXIgb24gdGhlCi0gICAgICAgICBwYWdlPyBOb3RpY2UgdGhhdCB0aGUgWE1MIGRvY3VtZW50IGNvbnRhaW5zIHR3byBwaG9uZSBlbnRyaWVzLiBJZiB3ZSBzaW1wbHkgdXNlZAotICAgICAgICAgPCFbQ0RBVEFbPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im1lbWJlci9waG9uZSIgLz5dXT4KLSAgICAgICAgIGJvdGggZW50cmllcyB3b3VsZCBiZSByZXR1cm5lZC4gV2Ugb2J2aW91c2x5IG5lZWQgYSB3YXkgdG8gYmUgbW9yZSBzcGVjaWZpYy4gTHVja2lseSwgWFNMVCBhbGxvd3MgdGhlIGZ1bGwKLSAgICAgICAgIHBvd2VyIG9mIFhQYXRoIHRvIGRlc2NyaWJlIHRoZSB2YWx1ZShzKSBvZiBpbnRlcmVzdC4gWFBhdGggYWxsb3dzIGNvbmRpdGlvbnMgb24gYW55IGF0dHJpYnV0ZSBvciB0YWcgdG8gYmUKLSAgICAgICAgIHBsYWNlZCBpbiBzcXVhcmUgYnJhY2tldHMgKCJbXSIpIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gcmVzdHJpY3QgdGhlIHZhbHVlcyByZXR1cm5lZC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotICAgICAgICAgU28gdG8gcmV0cmlldmUgdGhlIGhvbWUgcGhvbmUgbnVtYmVyIHdlIHdvdWxkIHVzZSB0aGUgcGF0aCAibWVtYmVyL3Bob25lW0B0eXBlPeKAmWhvbWXigJldIi4gTm90aWNlIHRoZSAiQCIKLSAgICAgICAgIHN5bWJvbCBpbiBmcm9udAotICAgICAgICAgb2YgInR5cGUiLiBUaGUgIkAiIHN5bWJvbCBzaWduaWZpZXMgdGhhdCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGFuIGF0dHJpYnV0ZS4gU28gb3VyIG5ldyBIVE1MCi0gICAgICAgICB0ZW1wbGF0ZSBsb29rcyBsaWtlOgotICAgICAgPC9wYXJhPgotICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbICAgICAgCi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiPgotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgICA8aHRtbD4KLSAgICAgIDxoZWFkPgotICAgICAgICA8dGl0bGU+V2VsY29tZTwvdGl0bGU+Ci0gICAgICA8L2hlYWQ+Ci0gICAgICA8Ym9keT4KLSAgICAgICAgPGZvbnQgYmdjb2xvcj0ie21lbWJlci9mYXZvcml0ZUNvbG9yfSI+Ci0gICAgICAgICAgV2VsY29tZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibWVtYmVyL25hbWUiLz4hCi0gICAgICAgICAgPGJyLz4KLSAgICAgICAgICBZb3VyIGhvbWUgcGhvbmUgbnVtYmVyIGlzOgotXV0+ICAgICAgICAgIDxlbXBoYXNpcyByb2xlPSJib2xkIj48IVtDREFUQVs8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibWVtYmVyL3Bob25lW0B0eXBlPeKAmWhvbWXigJldIi8+XV0+PC9lbXBoYXNpcz4KLTwhW0NEQVRBWyAgICAgICAgPC9mb250PgotICAgICAgPC9ib2R5Ci0gICAgPC9odG1sCi0gIDwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KLV1dPgotICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDxzZWN0aW9uPgotICAgICAgICAgPHRpdGxlPnhzbDpmb3ItZWFjaDwvdGl0bGU+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGJyaW5ncyB1cCBhbm90aGVyIGlzc3VlLiBXaGF0IGlmIHRoaXMKLSAgICAgICAgICAgIDwhW0NEQVRBWzxtZW1iZXI+XV0+Ci0gICAgICAgICAgICBlbnRyeSBoYWQgbnVtZXJvdXMgcGhvbmUgbnVtYmVycyBhbmQgd2Ugd2FudGVkIHRvIHByaW50IHRoZW0gYWxsIG9uIHRoZSB3ZWIgcGFnZS4gV2UgY291bGQgc2ltcGx5IHVzZQotICAgICAgICAgICAgICAgPCFbQ0RBVEFbPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im1lbWJlci9waG9uZSIgLz5dXT4KLSAgICAgICAgICAgIGJ1dCB0aGlzIHdvdWxkIG5vdCBlbmFibGUgdXMgdG8gZm9ybWF0IHRoZSBwaG9uZSBudW1iZXIgaW50byBhIG5pY2UgbGlzdCB0aGF0IGRlc2NyaWJlcyB0aGUgdHlwZSBvZiBlYWNoCi0gICAgICAgICAgICBudW1iZXIuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyByZXF1aXJlcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZQotICAgICAgICAgICAgPCFbQ0RBVEFbPHhzbDpmb3ItZWFjaD5dXT4KLSAgICAgICAgICAgIHRhZyB3aGljaCBhbGxvd3MgdXMgdG8gbG9vcCB0aHJvdWdoIGVhY2ggb2YgdGhlIGVsZW1lbnRzIHRoYXQgbWF0Y2ggYSBnaXZlbiBwYXRoLiBTbyB0bwotICAgICAgICAgICAgY3JlYXRlIGEgdGFibGUgdGhhdAotICAgICAgICAgICAgY29udGFpbnMgdGhlIHBob25lIG51bWJlciB0eXBlIGluIHRoZSBmaXJzdCBjb2x1bW4gYW5kIHRoZSBwaG9uZSBudW1iZXIgaW4gdGhlIHNlY29uZAotICAgICAgICAgICAgY29sdW1uLCB0aGUgZm9sbG93aW5nCi0gICAgICAgICAgICBzdHlsZXNoZWV0IGNvdWxkIGJlIHVzZWQuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHZlcnNpb249IjEuMCI+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgIDxodG1sPgotICAgICAgPGhlYWQ+Ci0gICAgICAgIDx0aXRsZT5XZWxjb21lPC90aXRsZT4KLSAgICAgIDwvaGVhZD4KLSAgICAgIDxib2R5PgotICAgICAgICA8Zm9udCBiZ2NvbG9yPSJ7bWVtYmVyL2Zhdm9yaXRlQ29sb3J9Ij4KLSAgICAgICAgICBXZWxjb21lIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJtZW1iZXIvbmFtZSIvPiEKLSAgICAgICAgPC9mb250PgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPjx0aD5UeXBlPC90aD48dGg+TnVtYmVyPC90aD48L3RyPgotICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJtZW1iZXIvcGhvbmUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+PC90ZD4KLSAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC94c2w6Zm9yLWVhY2g+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2JvZHk+Ci0gICAgPC9odG1sPgotICA8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+Ci1dXT4gICAgICAgICAKLSAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBicmluZ3MgdXAgYSBudW1iZXIgb2YgaXNzdWVzLiBGaXJzdCwgd2hpbGUgaW4gdGhlIGxvb3AsIGFsbAotICAgICAgICAgICAgPCFbQ0RBVEFbPHhzbDp2YWx1ZS1vZiAvPl1dPgotICAgICAgICAgICAgYWNjZXNzZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQgYmVpbmcgaXRlcmF0ZWQgb3ZlciAoaW4gdGhpcyBjYXNlCi0gICAgICAgICAgICA8IVtDREFUQVs8cGhvbmU+KV1dPi4KLSAgICAgICAgICAgIE5vdGljZSB0aGUgdXNlIG9mIHRoZSBwZXJpb2QgKCIuIiksIHdoaWNoIGxpa2UgaW4gYSBVbml4IGZpbGUgc3lzdGVtIG1lYW5zIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgICAgICAgICBTbyBpbiB0aGlzCi0gICAgICAgICAgICBjYXNlIHRoZSBwZXJpb2QgKCIuIikgcmVmZXJzIHRvIGVhY2ggcGhvbmUgZWxlbWVudCBhcyB0aGUgbG9vcCBpdGVyYXRlcy4gQWxzbyBsaWtlIGluIGEgZmlsZQotICAgICAgICAgICAgc3lzdGVtIHlvdSBjYW4KLSAgICAgICAgICAgIGFkZHJlc3MgYSBwYXJlbnQgZWxlbWVudCB1c2luZyBhIGRvdWJsZSBwZXJpb2QgKCIuLiIpIGFuZCBjYW4gYWNjZXNzIGFueSBlbGVtZW50IGluIHRoZQotICAgICAgICAgICAgZG9jdW1lbnQgYnkgc3RhcnRpbmcKLSAgICAgICAgICAgIG92ZXIgYXQgdGhlIHJvb3QgZWxlbWVudCB1c2luZyBhIHNsYXNoICgiLyIpLgotICAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgICAgPHNlY3Rpb24+Ci0gICAgICAgICA8dGl0bGU+eHNsOmlmPC90aXRsZT4KLSAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgQXMgYSBsYXN0IGVuaGFuY2VtZW50IHRvIG91ciBwYWdlIGxldOKAmXMgYWRkIGEgc3BlY2lhbCBvZmZlciB0byAicGxhdGludW0iIGxldmVsIG1lbWJlcnMuIFRvIGRvIHRoaXMgcmVxdWlyZXMKLSAgICAgICAgICAgIHRoZSB1c2Ugb2YgYSBuZXcgdGFnCi0gICAgICAgICAgICA8IVtDREFUQVs8eHNsOmlmPl1dPgotICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHVzIHRvIGluc2VydCBjb250ZW50IGJhc2VkIG9uIGEgY29uZGl0aW9uIG9mIHRoZSBkYXRhIGluIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHZlcnNpb249IjEuMCI+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgIDxodG1sPgotICAgICAgPGhlYWQ+Ci0gICAgICAgIDx0aXRsZT5XZWxjb21lPC90aXRsZT4KLSAgICAgIDwvaGVhZD4KLSAgICAgIDxib2R5PgotICAgICAgICA8Zm9udCBiZ2NvbG9yPSJ7bWVtYmVyL2Zhdm9yaXRlQ29sb3J9Ij4KLSAgICAgICAgICBXZWxjb21lIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJtZW1iZXIvbmFtZSIvPiEKLSAgICAgICAgPC9mb250PgotICAgICAgICA8eHNsOmlmIHRlc3Q9Im1lbWJlcltAbGV2ZWw9J3BsYXRpbnVtJ10iPgotICAgICAgICAgIE91ciBzcGVjaWFsIG9mZmVyIHRvIHBsYXRpbnVtIG1lbWJlcnMgdG9kYXkgaXMgc29tZXRoaW5nIGdyZWF0Ci0gICAgICAgIDwveHNsOmlmPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPjx0aD5UeXBlPC90aD48dGg+TnVtYmVyPC90aD48L3RyPgotICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJtZW1iZXIvcGhvbmUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+PC90ZD4KLSAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC94c2w6Zm9yLWVhY2g+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2JvZHk+Ci0gICAgPC9odG1sPgotICA8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+Ci1dXT4gICAgICAgICAKLSAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFdpdGhpbiB0aGUgInRlc3QiIGF0dHJpYnV0ZSB0aGUgZnVsbCBhcnJheSBvZiBCb29sZWFuIGFuZCByZWxhdGl2ZSBvcGVyYXRvcnMgYXJlIGF2YWlsYWJsZS4gVGhlIG9ubHkgY2F2ZWF0Ci0gICAgICAgICAgICBpcyB0aGF0IHNpbmNlIHRoaXMgaXMgYW4gWE1MIGRvY3VtZW50IGxlc3MgdGhhbiBhbmQgZ3JlYXRlciB0aGFuICg8IVtDREFUQVsiPCJdXT4sCi0gICAgICAgICAgICAiPiIpIHNpZ25zIG11c3QgYmUgZXNjYXBlZCBhcyA8IVtDREFUQVsiJmx0OyIgYW5kICImZ3Q7Il1dPi4KLSAgICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgICAgIDxzZWN0aW9uPgotICAgICAgICAgPHRpdGxlPnhzbDpjaG9vc2U8L3RpdGxlPgotICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBPbmUgbnVhbmNlIG9mIHRoZQotICAgICAgICAgICAgPCFbQ0RBVEFbPHhzbDppZj5dXT4KLSAgICAgICAgICAgIHRhZyB0aGF0IGlzIG5vdCBhbHdheXMgb2J2aW91cyBhdCBmaXJzdCBnbGFuY2UgaXMgdGhlIGxhY2sgb2YgYW4gImVsc2UiIHN0YXRlbWVudC4gVGhpcyBtZWFucyB0byBoYXZlIGFuCi0gICAgICAgICAgICBlbHNlIHN0YXRlbWVudCByZXF1aXJlcyB0d28gaWZzLiBUaGUgZmlyc3Qgb25lIHNheWluZyAiaWYgY29uZGl0aW9uIiBhbmQgdGhlIHNlY29uZCBvbmUgc2F5aW5nIOKAnGlmIG5vdAotICAgICAgICAgICAgY29uZGl0aW9u4oCdLiBUaGlzIHNjaGVtZSBxdWlja2x5IGJlY29tZXMgdW53b3JrYWJsZSB3aXRoIGVtYmVkZGVkIGlmIHRoZW4gZWxzZSBsb2dpYy4gTHVja2lseSBYU0xUCi0gICAgICAgICAgICBzdXBwb3J0cyBhbgotICAgICAgICAgICAgYWRkaXRpb25hbCB0ZXN0IG9wZXJhdG9yIGNhbGxlZAotICAgICAgICAgICAgPCFbQ0RBVEFbPHhzbDpjaG9vc2U+XV0+Ci0gICAgICAgICAgICB3aGljaCB3b3JrcyBsaWtlIGEgc3dpdGNoL2Nhc2Ugc3RhdGVtZW50LgotICAgICAgICAgPC9wYXJhPgotICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiPgotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgICA8aHRtbD4KLSAgICAgIDxoZWFkPgotICAgICAgICA8dGl0bGU+V2VsY29tZTwvdGl0bGU+Ci0gICAgICA8L2hlYWQ+Ci0gICAgICA8Ym9keT4KLSAgICAgICAgPGZvbnQgYmdjb2xvcj0ie21lbWJlci9mYXZvcml0ZUNvbG9yfSI+Ci0gICAgICAgICAgV2VsY29tZSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibWVtYmVyL25hbWUiLz4hCi0gICAgICAgIDwvZm9udD4KLSAgICAgICAgPHhzbDpjaG9vc2U+Ci0gICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9Im1lbWJlcltAbGV2ZWw9J3BsYXRpbnVtJ10iPgotICAgICAgICAgICAgT3VyIHNwZWNpYWwgb2ZmZXIgdG8gcGxhdGludW0gbWVtYmVycyB0b2RheSBpcyBzb21ldGhpbmcgZ3JlYXQKLSAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgICAgICAgQmVjb21lIGEgcGxhdGludW0gbWVtYmVyIHRvZGF5IQotICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4KLSAgICAgICAgPC94c2w6Y2hvb3NlPgotICAgICAgICA8dGFibGU+Ci0gICAgICAgICAgPHRyPjx0aD5UeXBlPC90aD48dGg+TnVtYmVyPC90aD48L3RyPgotICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJtZW1iZXIvcGhvbmUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+PC90ZD4KLSAgICAgICAgICAgICAgPHRkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgPC94c2w6Zm9yLWVhY2g+Ci0gICAgICAgIDwvdGFibGU+Ci0gICAgICA8L2JvZHk+Ci0gICAgPC9odG1sPgotICA8L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+Ci1dXT4gICAgICAgICAKLSAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZSDigJx0ZXN04oCdIGF0dHJpYnV0ZSBoYXMgdGhlIHNhbWUgY2FwYWJpbGl0aWVzLyBjb25zdHJhaW50cyBhcyB0aGUg4oCcdGVzdOKAnSBhdHRyaWJ1dGUgaW4gdGhlCi0gICAgICAgICAgICA8IVtDREFUQVs8eHNsOmlmPl1dPgotICAgICAgICAgICAgdGFnLiBNdWx0aXBsZQotICAgICAgICAgICAgPCFbQ0RBVEFbPHhzbDp3aGVuPl1dPgotICAgICAgICAgICAgYmxvY2tzIGFyZSBhbGxvd2VkLiBBcyBzb29uIGFzIG9uZSDigJx3aGVuIHRlc3TigJ0gaXMgbWFjaGVkLCBpdCB3aWxsIG5vdCBldmFsdWF0ZSBhbnkgZnVydGhlciDigJx4c2w6d2hlbgotICAgICAgICAgICAgdGVzdHPigJ0KLSAgICAgICAgICAgIGluIHRoZQotICAgICAgICAgICAgPCFbQ0RBVEFbPHhzbDpjaG9vc2U+XV0+Ci0gICAgICAgICAgICBibG9jay4KLSAgICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgIDwvc2VjdGlvbj4KLSAgIDxzZWN0aW9uPgotICAgICAgPHRpdGxlPkNvbmNsdXNpb248L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgICBXaXRoIGp1c3QgdGhlc2UgZmV3IGNvbW1hbmRzIChhbiBhZG1pdHRlZGx5IHNtYWxsIHN1YnNldCBvZiBYU0xUKSBhbmQgYSBzdHJvbmcgYmFja2dyb3VuZCBpbiBIVE1MIChESFRNTCBhbmQKLSAgICAgICAgIEphdmFTY3JpcHQKLSAgICAgICAgIGluY2x1ZGVkKSwgSSBiZWxpZXZlIHdlYiBkZXZlbG9wZXJzIGNvdWxkIG1lZXQgdGhlIG1ham9yaXR5IG9mIHRoZWlyIHByZXNlbnRhdGlvbiBuZWVkcy4gT2J2aW91c2x5Ci0gICAgICAgICB0aGVyZSB3aWxsCi0gICAgICAgICBiZSBjYXNlcyB3aGVyZSBncmVhdGVyIGZsZXhpYmlsaXR5IGlzIHJlcXVpcmVkLCBidXQgdGhlIGFkdmFudGFnZSBvZiB0aGlzIHRlY2huaXF1ZSBpcyB0aGF0IG9ubHkKLSAgICAgICAgIHRoZW4sIGRvZXMgdGhlCi0gICAgICAgICBkZXZlbG9wZXIgbmVlZCB0byBsZWFybiB0aG9zZSBjb25zdHJ1Y3RzLiAgICAgICAgIAotICAgICAgPC9wYXJhPgotICAgICAgPHBhcmE+Ci0gICAgICAgICBBcyBhIGZ1cnRoZXIgYmVuZWZpdCwgdGhpcyB0ZWNobmlxdWUgbWluaW1pemVkIHRoZSBpbnRlcmRlcGVuZGVuY2Ugb2Ygb25lIFhMU1QgY29uc3RydWN0IG9uIGFub3RoZXIuIExvY2FsCi0gICAgICAgICBjaGFuZ2VzIHN0YXkKLSAgICAgICAgIGxvY2FsIHRoZXJlYnkgcmVkdWNpbmcgdGhlIGJyaXR0bGVuZXNzIG9mIHNvbHV0aW9ucy4gVGhlIGRldmVsb3BlciBhbHNvIG5vIGxvbmdlciBoYXMgdG8gcmVtZW1iZXIKLSAgICAgICAgIGFuZCBhY2NvdW50Ci0gICAgICAgICBmb3IgWFNMVOKAmXMgZGVmYXVsdCBiZWhhdmlvcnMuICAgICAgICAgCi0gICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgIEkgaG9wZSBmcm9tIHRoZXNlIGZldyBleGFtcGxlcywgSSBoYXZlIG9wZW5lZCBhIGZldyBleWVzIHRvIHRoZSBwb3dlciBvZiBYU0xUIGFuZCBob3cgYSBzbWFsbCBjaGFuZ2UgaW4gaG93Ci0gICAgICAgICBYU0xUIGlzIGZyYW1lZCBjYW4gbWFrZSBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBpdHMgdW5kZXJzdGFuZGFiaWxpdHkgYW5kIGFjY2Vzc2liaWxpdHkgdG8gd2ViIGRldmVsb3BlcnMuIElmCi0gICAgICAgICBub3RoaW5nIGVsc2UsIEkgaG9wZSB0byBlbmNvdXJhZ2Ugc29tZSBnb29kIGRpc2N1c3Npb25zLiAKLSAgICAgIDwvcGFyYT4KLSAgIDwvc2VjdGlvbj4KLTwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9jb25jZXB0cy9jb25jZXB0cy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svY29uY2VwdHMvY29uY2VwdHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGUzNDAwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9jb25jZXB0cy9jb25jZXB0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgotICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiPgotPGNoYXB0ZXI+Ci0gICA8P2RiaHRtbCBmaWxlbmFtZT0iY29uY2VwdHMvY29uY2VwdHMuaHRtbCIgPz4KLSAgIDx0aXRsZT5YU0xUIENvbmNlcHRzPC90aXRsZT4KLSAgIDxwYXJhPgotICAgICAgICAgSWYgeW91IGFyZSBuZXcgdG8gWFNMVCBvciBqdXN0IG5lZWQgYSByZWZyZXNoZXIgdGhlbiB0aGlzIHNlY3Rpb24gbWF5Ci0gICAgICAgICBoZWxwIGdldCB5b3UgZ29pbmcuCi0gICA8L3BhcmE+Ci0gICA8eGk6aW5jbHVkZSB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIgaHJlZj0iUmVzY3VpbmdYU0xUZnJvbU5pY2hlU3RhdHVzLnhtbCIvPgotICAgPHNlY3Rpb24gaWQ9ImNvbmNlcHRzX1Jlc291cmNlcyI+Ci0gICAgICA8P2RiaHRtbCBmaWxlbmFtZT0iY29uY2VwdHMvcmVzb3VyY2VzLmh0bWwiID8+Ci0gICAgICA8dGl0bGU+UmVzb3VyY2VzPC90aXRsZT4KLSAgICAgIDxpdGVtaXplZGxpc3Q+Ci0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPlhTTFQgMS4wIFNwZWNpZmljYXRpb248L3VsaW5rPiAtIFRoZSBvZmZpY2lhbCBXM0MgWFNMVCAxLjAgU3BlY2lmaWNhdGlvbi4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cuZHBhd3Nvbi5jby51ay94c2wvaW5kZXguaHRtbCI+WFNMVCBGQVE8L3VsaW5rPiAtIG1haW50YWluZWQgYnkgRGF2ZSBQYXdzb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgPHBhcmE+PHVsaW5rIHVybD0iaHR0cDovL3d3dy54ZnJvbnQuY29tL3Jlc2N1aW5nLXhzbHQuaHRtbCI+UmVzY3VpbmcgWFNMVCBmcm9tIE5pY2hlIFN0YXR1czwvdWxpbms+IC0gYnkgRGF2aWQgSmFjb2JzLjwvcGFyYT4KLSAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT48dWxpbmsgdXJsPSJodHRwOi8vd3d3LnhtbC5jb20vcHViL2EvMjAwMy8xMS8yNi9sZWFyblhTTFQuaHRtbCI+Rml2ZSBYU0xUIEJhc2ljczwvdWxpbms+IC0gYnkgTWljaGFlbCBGaXR6Z2VyYWxkIGF1dGhvciBvZiBMZWFybmluZyBYU0xULjwvcGFyYT4KLSAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICA8cGFyYT48dWxpbmsgdXJsPSJodHRwOi8vd3d3Lnhmcm9udC5jb20vZmlsZXMvdHV0b3JpYWxzLmh0bWwiPlhGcm9udCBUdXRvcmlhbHM8L3VsaW5rPiAtIHByb3ZpZGVzIHNldmVyYWwgdHV0b3JpYWxzIGluY2x1ZGUgWFNMVCAxLjAuPC9wYXJhPgotICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgIDxwYXJhPjx1bGluayB1cmw9Imh0dHA6Ly93d3cuY2FmZWNvbmxlY2hlLm9yZy9ib29rcy9iaWJsZTIvY2hhcHRlcnMvY2gxNy5odG1sIj5YU0wgVHJhbnNmb3JtYXRpb25zPC91bGluaz4gLSBDaGFwdGVyIDE3IG9mIHRoZSBYTUwgQmlibGUgMm5kIEVkaXRpb24uPC9wYXJhPgotICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgPC9zZWN0aW9uPgotICAgCi08L2NoYXB0ZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2NvbmNlcHRzL2dldHRpbmdzdGFydGVkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9jb25jZXB0cy9nZXR0aW5nc3RhcnRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMTUzMTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2NvbmNlcHRzL2dldHRpbmdzdGFydGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iCi0gICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L2RvY2Jvb2t4LmR0ZCI+Ci08Y2hhcHRlcj4KLSAgIDw/ZGJodG1sIGZpbGVuYW1lPSJpbnRyb2R1Y3Rpb24vZ2V0dGluZ3N0YXJ0ZWQuaHRtbCIgPz4KLSAgIDx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQ8L3RpdGxlPgotICAgPHBhcmE+ICAKLSAgICAgIFhTTFQgc3RhbmRzIGZvciB0aGUgZVh0ZW5zaWJsZSBTdHlsZXNoZWV0IExhbmd1YWdlIFRyYW5zZm9ybWF0aW9ucy4gSXQgaXMKLSAgICAgIHBhcnQgb2YgdGhlIFhTTCBzcGVjaWZpY2F0aW9uIHdoaWNoIGluY2x1ZGVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBhbmQgZm9ybWF0dGluZyBvYmplY3RzCi0gICAgICAoWFNMLUZPKS4gICBYU0wgVG9vbHMgcHJpbWFyaWx5IGRlYWxzIHdpdGggdGhlIGVkaXRpbmcsIGxhdW5jaGluZywgYW5kIGRlYnVnZ2luZwotICAgICAgb2YgWFNMIFN0eWxlIHNoZWV0cy4KLSAgIDwvcGFyYT4KLSAgIDxpdGVtaXplZGxpc3Q+Ci0gICAJCTx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQ8L3RpdGxlPgotICAgCQk8bGlzdGl0ZW0+Ci0gICAJCQk8cGFyYT48dWxpbmsgdXJsPSIuLi9jb25jZXB0cy9jb25jZXB0cy5odG1sIj5SZXNjdWluZyBYU0xUIEZyb20gTmljaGUgU3RhdHVzPC91bGluaz4gLSBnaXZlcyBhIGJhc2ljIGludHJvZHVjdGlvbiB0byBYU0xUIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgY3JlYXRpbmcgSFRNTCBvdXRwdXQuPC9wYXJhPgotICAgCQk8L2xpc3RpdGVtPgotICAgCQk8bGlzdGl0ZW0+Ci0gICAJCQk8cGFyYT48dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm11bGJlcnJ5dGVjaC5jb20vcXVpY2tyZWYvIj5YU0xUIGFuZCBYUGF0aCBRdWljayBSZWZlcmVuY2UgQ2FyZHM8L3VsaW5rPiAtIGEgc2V0IG9mIFBERiBmaWxlcyB0aGF0IGNhbiBiZSBwcmludGVkIHRvIHByb3ZpZGUgcXVpY2sgcmVmZXJlbmNlcyB0byB0aGUgWFNMVCBhbmQgWFBhdGggY29tbWFuZHMuPC9wYXJhPgotICAgCQk8L2xpc3RpdGVtPgotICAgPC9pdGVtaXplZGxpc3Q+Ci08L2NoYXB0ZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2VkaXRvci9lZGl0b3IueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2VkaXRvci9lZGl0b3IueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTI4YWJkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9lZGl0b3IvZWRpdG9yLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnPz4KLTwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC41Ly9FTiIKLSAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiPgotPGNoYXB0ZXI+Ci0JPD9kYmh0bWwgZmlsZW5hbWU9ImVkaXRvci94c2xlZGl0b3IuaHRtbCIgPz4KLSAgICA8dGl0bGU+WFNMIEVkaXRpbmc8L3RpdGxlPgotICAgIDxwYXJhPlRoZSBYU0wgVG9vbHMgcGx1Z2lucyBleHRlbmQgdGhlIGFiaWxpdHkgb2YgdGhlIFdlYiBTdGFuZGFyZCBUb29scyBYTUwKLSAgICAgICAgZWRpdG9yLiBUaGlzIGV4dGVuc2lvbiBhZGRzIHNwZWNpZmljIHN1cHBvcnQgYW5kIGZ1bmN0aW9uYWxpdHkgZm9yIHdvcmtpbmcgd2l0aAotICAgICAgICBhbmQgZGVidWdnaW5nIFhTTCBmaWxlcy48L3BhcmE+Ci0gICAgPHNlY3Rpb24gaWQ9IlZhbGlkYXRpb24iPgotICA8P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl92YWxpZGF0aW9uLmh0bWwiID8+Ci0gICAgICAgIDx0aXRsZT5WYWxpZGF0aW9uPC90aXRsZT4KLSAgICAgICAgPHBhcmE+VGhlIFhTTCBleHRlbnNpb25zIGZvciB0aGUgZWNsaXBzZSBYTUwgZWRpdG9yIGluY2x1ZGUgYXMgeW91IHR5cGUKLSAgICAgICAgICAgIHZhbGlkYXRpb24gZm9yIFhTTCBzcGVjaWZpYyBmZWF0dXJlcy4gVGhpcyBpbmNsdWRlcyBub3Qgb25seSB0aGUgYWJpbGl0eSB0bwotICAgICAgICAgICAgc3ludGF4IGNoZWNrIHRoZSBncmFtbWFyLCBidXQgdG8gYWxzbyB0byB2YWxpZGF0ZSBzcGVjaWZpYyBYU0wgc3BlY2lmaWNhdGlvbgotICAgICAgICAgICAgcnVsZXMuIEdyYW1tYXIgdmFsaWRhdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBiYXNlZCBvbiB0aGUgdmVyc2lvbiBhdHRyaWJ1dGUgZm9yCi0gICAgICAgICAgICB0aGUgc3R5bGUgc2hlZXQgdGhhdCBpcyBiZWluZyBlZGl0ZWQuIFZhbGlkIHZlcnNpb24gbnVtYmVycyBhcmUgMS4wLCBhbmQgMi4wLgotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJDb250ZW50QXNzaXN0Ij4KLTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCIgPz4KLSAgICAgICAgPHRpdGxlPkNvbnRlbnQgQXNzaXN0PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBYU0wgVG9vbHMgZXh0ZW5kcyB0aGUgZXhpc3RpbmcgY29udGVudCBhc3Npc3RhbmNlIHN1cHBvcnQgb2YgdGhlIFhNTCBFZGl0b3IgdG8KLSAgICAgICAgICAgIHByb3ZpZGUgY29udGVudCBhc3Npc3RhbmNlIGZvciBzZXZlcmFsIFhTTCBuYW1lc3BhY2UgYXR0cmlidXRlcy4gVGhlIGNvbnRlbnQKLSAgICAgICAgICAgIGFzc2lzdGFuY2UgcHJvdmlkZWQgY292ZXJzIHRoZSBhdmFpbGFibGUgWFBhdGggc3RhdGVtZW50cyBhcyBkZWZpbmVkIGluIHRoZQotICAgICAgICAgICAgPGVtcGhhc2lzPlhQYXRoIFRlbXBsYXRlczwvZW1waGFzaXM+Ci0gICAgICAgICAgICBwcmVmZXJlbmNlIHBhZ2UuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPGltcG9ydGFudD4KLSAgICAgICAgICAgIDx0aXRsZT5YUGF0aCAyLjAgU3VwcG9ydDwvdGl0bGU+Ci0gICAgICAgICAgICA8cGFyYT5DdXJyZW50bHkgWFBhdGggMi4wIGlzIG5vdCBzdXBwb3J0ZWQgZGlyZWN0bHkuIEhvd2V2ZXIsIGEgdXNlcgotICAgICAgICAgICAgICAgIGNhbiBhZGQgdGhpcyBzdXBwb3J0IGlmIHRoZXkgbmVlZCBpdCBieSBhZGRpbmcgdGhlIG1pc3NpbmcgWFBhdGggZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgdG8gdGhlIFhQYXRoIFRlbXBsYXRlcy48L3BhcmE+Ci0gICAgICAgIDwvaW1wb3J0YW50PgotICAgICAgICA8cGFyYT5UbyBpbml0aWF0ZSBjb250ZW50IGFzc2lzdGFuY2UgcHJlc3MgQ1RSTCArIFNQQUNFIG9yIENNRCArIFNQQUNFLiBUaGlzCi0gICAgICAgICAgICB3aWxsIGJyaW5nIHVwIGEgZGlhbG9nIHRoYXQgd2lsbCBjb250YWluIGFueSBwcm9wb3NhbHMgdGhhdCBhcmUgYXZhaWxhYmxlLiBJZgotICAgICAgICAgICAgbm8gcHJvcG9zYWxzIGFyZSBhdmFpbGFibGUgYW4gbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgc3RhdHVzIGJhci4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8c2VjdGlvbiBpZD0iZWRfWFNMUHJvcG9zYWxzIj4KLTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfeHNsLmh0bWwiID8+Ci0gICAgICAgIAotICAgICAgICAgICAgPHRpdGxlPlhTTFQgRWxlbWVudCBQcm9wb3NhbHM8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgU2luY2UgWFNMVCBpcyBhIHRlbXBsYXRpbmcgbGFuZ3VhZ2UsIGl0J3MgZWxlbWVudHMgbXVzdCBiZSBhYmxlIHRvIGJlCi0gICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIHZhcmlvdXMgbWFya3VwIGl0IGluY2x1ZGVzLiBUaGUgWFNMVCBFZGl0b3Igd2lsbCBwcm92aWRlCi0gICAgICAgICAgICAgICAgY29udGVudCBhc3Npc3RhbmNlIGFuZCBwcm9wb3NhbHMgZm9yIFhTTFQgZWxlbWVudHMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvCi0gICAgICAgICAgICAgICAgYmUgdXNlZCB3aXRoaW4gbm9uLVhTTFQgbmFtZXNwYWNlZCBlbGVtZW50cy4gVGhpcyBpcyBkZXBpY3RlZCBpbgotICAgICAgICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImZpZ19YU0xQcm9wb3NhbHMiLz4KLSAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8ZmlndXJlIGlkPSJmaWdfWFNMUHJvcG9zYWxzIj4KLSAgICAgICAgICAgICAgICA8dGl0bGU+WFNMVCBQcm9wb3NhbHMgd2l0aGluIE5vbi1YU0xUIGVsZW1lbnRzPC90aXRsZT4KLSAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgYWxpZ249ImNlbnRlciIgZmlsZXJlZj0iLi4vaW1hZ2VzL2VkaXRvci94c2xwcm9wb3NhbHMucG5nIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KLSAgICAgICAgICAgIDwvZmlndXJlPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgIDxzZWN0aW9uIGlkPSJTZWxlY3RUZXN0Ij4KLTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3Rfc2VsZWN0dGVzdC5odG1sIiA/PgotICAgICAgICAgICAgPHRpdGxlPlNlbGVjdCwgVGVzdCwgYW5kIE1hdGNoIEF0dHJpYnV0ZXM8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgV2hlcmUgZXZlciBhbiB4c2wgZWxlbWVudCBzdXBwb3J0cyBhCi0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPnNlbGVjdDwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgIDxlbXBoYXNpcz50ZXN0PC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAsIG9yCi0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPm1hdGNoPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsIGNvbnRlbnQgYXNzaXN0YW5jZSBpcyBhdmFpbGFibGUuIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgZm9sbG93aW5nOgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICAgICAgICA8dGl0bGU+U2VsZWN0LCBNYXRjaCBhbmQgVGVzdCBBc3Npc3RhbmNlPC90aXRsZT4KLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlZhcmlhYmxlczwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAtIGJvdGggbG9jYWwgYW5kIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZCB3aXRoaW4gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuIEFueSBsb2NhbCBvciBnbG9iYWwgdmFyaWFibGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBuYW1lIGlzIHByZWZpeGVkIHdpdGggYSBkb2xsYXIgc2lnbiAkIHN5bWJvbC4KLSAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5YUGF0aCAxLjA8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAgICAgLSBYUGF0aCAxLjAgaXMgc3VwcG9ydGVkIHRocm91Z2ggdGhlIHVzZSBvZiB0ZW1wbGF0ZXMuIEFsbCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoIDEuMCBhbmQgWFNMVCB4cGF0aCBleHRlbnNpb24gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUsIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICB3ZWxsIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+YXhpczwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLiBDdXJyZW50bHkgWFBhdGggMi4wIGlzIG5vdCBzdXBwb3J0ZWQgZGlyZWN0bHksIGJ1dAotICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPHBhcmE+Q29udGVudCBhc3Npc3RhbmNlIGZvciB0aGUgc2VsZWN0IGFuZCB0ZXN0IGF0dHJpYnV0ZXMgaXMKLSAgICAgICAgICAgICAgICBpbnRlbGxpZ2VudCBlbm91Z2ggdG8ga25vdyB0aGF0IGl0IGlzIHdpdGhpbiBhbiBYUGF0aCBleHByZXNzaW9uLCBhbmQgd2lsbAotICAgICAgICAgICAgICAgIHRyeSB0byBkZXRlcm1pbmUgYW5kIHByb3ZpZGUgY29udGVudCBhc3Npc3RhbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgY3Vyc29yIHBvc2l0aW9uLiBJZiBhIHdvcmQgaGFzIGJlZW4gcGFydGlhbGx5IHR5cGVkIGl0IHdpbGwgZmlsdGVyIHRoZQotICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBhc3Npc3RhbmNlLjwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICA8c2VjdGlvbiBpZD0iRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdCI+Ci08P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X2V4Y2x1ZGUuaHRtbCIgPz4KLSAgICAgICAgCi0gICAgICAgICAgICA8dGl0bGU+RXhjbHVkZS1SZXN1bHQtUHJlZml4ZXM8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlCi0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPmV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgaW4gYm90aCBYU0xUIDEuMCBhbmQgWFNMVCAyLjAgYWxsb3dzIGZvciB0aGUgZXhjbHVzaW9uIG9mCi0gICAgICAgICAgICAgICAgY2VydGFpbiBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGluIHRoZSBvdXRwdXQgZG9jdW1lbnQuIFRoZSBjb250ZW50Ci0gICAgICAgICAgICAgICAgYXNzaXN0YW5jZSBwb3B1bGF0ZXMgYSBsaXN0IG9mIGF2YWlsYWJsZSBuYW1lc3BhY2VzIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQKLSAgICAgICAgICAgICAgICBpbiB0aGUgc3R5bHNlaGVldCBhbmQgcHJvdmlkZXMgdGhlbSBhcyBwcm9wb3NhbHMgYXMgc2hvd24gaW4KLSAgICAgICAgICAgICAgICA8eHJlZiBsaW5rZW5kPSJmaWdfRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDEiLz4KLSAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8ZmlndXJlIGlkPSJmaWdfRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDEiPgotICAgICAgICAgICAgICAgIDx0aXRsZT5FeGNsdWRlLXJlc3VsdC1wcmVmaXhlcyBDb250ZW50IEFzc2lzdGFuY2UKLSAgICAgICAgICAgICAgICA8L3RpdGxlPgotICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVyZWY9Ii4uL2ltYWdlcy9lZGl0b3IvRXhjbHVkZUNvbnRlbnRBc3Npc3QxLnBuZyIvPgotICAgICAgICAgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8L2ZpZ3VyZT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIElmIHRoZSBhdHRyaWJ1dGUgaGFzIG5vIHZhbHVlcyBkZWZpbmVkLCB0aGVuIHRoZQotICAgICAgICAgICAgICAgIDxlbXBoYXNpcz4jYWxsPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC4gSWYgI2FsbCBpcyBhbHJlYWR5IGluIHRoZSBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgdmFsdWUsIHRoZW4gbm8gY29udGVudCBhc3Npc3RhbmNlIHdpbGwgYmUgYXZhaWxhYmxlLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPGZpZ3VyZSBpZD0iZmlnX0V4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QyIj4KLSAgICAgICAgICAgICAgICA8dGl0bGU+RmlsdGVyZWQgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMgcHJvcG9zYWxzPC90aXRsZT4KLSAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgYWxpZ249ImNlbnRlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmVmPSIuLi9pbWFnZXMvZWRpdG9yL0V4Y2x1ZGVDb250ZW50QXNzaXN0Mi5wbmciLz4KLSAgICAgICAgICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgICAgICAgPC9maWd1cmU+Ci0gICAgICAgICAgICA8cGFyYT5Db250ZW50IGFzc2lzdGFuY2UgaXMgaW50ZWxsaWdlbnQgZW5vdWdoIHRvIGtub3cgd2hlbiBhIG5hbWVzcGFjZQotICAgICAgICAgICAgICAgIHByZWZpeCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0IG9mIGV4Y2x1ZGVkIG5hbWVzcGFjZXMuIEluIHRoaXMgY2FzZSBpdCB3aWxsCi0gICAgICAgICAgICAgICAgbm90IHNob3cgdGhlIG5hbWVzcGFjZSBpbiB0aGUgcHJvcG9zYWwgbGlzdC48L3BhcmE+Ci0gICAgICAgICAgICA8bm90ZT4KLSAgICAgICAgICAgICAgICA8dGl0bGU+IFdoeSBpc24ndCB0aGUgWFNMIE5hbWVzcGFjZSBwcmVmaXggaW4gdGhlIHByb3Bvc2Fscz88L3RpdGxlPgotICAgICAgICAgICAgICAgIDxwYXJhPkN1cnJlbnRseSB0aGUgeHNsIHByZWZpeCBvciBhbnkgcHJlZml4IHRoYXQgdXNlcyB0aGUgWFNMCi0gICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBsaXN0LiBUaGlzIG1heSBiZSBjaGFuZ2VkIGF0IGEgZnV0dXJlCi0gICAgICAgICAgICAgICAgICAgIGRhdGUuIFRoaXMgd2lsbCBkZXBlbmQgb24gdXNlciBmZWVkYmFjay48L3BhcmE+Ci0gICAgICAgICAgICA8L25vdGU+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPHNlY3Rpb24gaWQ9ImVkX01vZGVBc3Npc3QiPgotPD9kYmh0bWwgZmlsZW5hbWU9ImVkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9tb2RlYXNzaXN0Lmh0bWwiID8+Ci0gICAgICAgIAotICAgICAgICAgICAgPHRpdGxlPk1vZGUgYXR0cmlidXRlIGFzc2lzdGFuY2U8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQ29udGVudCBhc3Npc3RhbmNlIGlzIGF2YWlsYWJsZSBmb3IgdGhvc2UgeHNsIGVsZW1lbnRzIHRoYXQgc3VwcG9ydCB0aGUKLSAgICAgICAgICAgICAgICBtb2RlIGF0dHJpYnV0ZS4gRm9yIFhTTFQgMS4wIHRoZXNlIGVsZW1lbnRzIGFyZQotICAgICAgICAgICAgICAgIDxlbXBoYXNpcz50ZW1wbGF0ZTwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5hcHBseS10ZW1wbGF0ZXM8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICwgYW5kCi0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPmFwcGx5LWltcG9ydHM8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDxmaWd1cmUgaWQ9ImZpZ19Nb2RlQXNzaXN0YW5jZSI+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPk1vZGUgYXR0cmlidXRlIGFzc2lzdGFuY2U8L3RpdGxlPgotICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIiBmaWxlcmVmPSIuLi9pbWFnZXMvZWRpdG9yL21vZGVBc3Npc3RhbmNlLnBuZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9IlBORyIvPgotICAgICAgICAgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8L2ZpZ3VyZT4KLSAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgIFRoZSBwcm9wb3NhbCBsaXN0IGlzIHBvcHVsYXRlZCBieSB0aG9zZSBtb2RlcyBkZWZpbmVkIG9uIHRlbXBsYXRlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICBjdXJyZW50IHN0eWxlc2hlZXQsIGFuZCBhbnkgb2YgdGhlIHRlbXBsYXRlcyB0aGF0IGFyZQotICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5pbmNsdWRlZDwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICA8ZW1waGFzaXM+aW1wb3J0ZWQ8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICA8c2VjdGlvbiBpZD0iZWRfTmFtZWRUZW1wbGF0ZUFzc2lzdCI+Ci08P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X25hbWVkdGVtcGxhdGUuaHRtbCIgPz4KLSAgICAgICAgCi0gICAgICAgICAgICA8dGl0bGU+TmFtZWQgVGVtcGxhdGUgQXNzaXN0YW5jZTwvdGl0bGU+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBDYWxsIE5hbWVkIHRlbXBsYXRlcyBoYXZlIGNvbnRlbnQgYXNzaXN0YW5jZSBhdmFpbGFibGUgZm9yIHRoZWlyCi0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPm5hbWU8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuIFRoaXMgd2lsbCBwcm92aWRlIGEgbGlzdCBvZiBjYWxsZWQtdGVtcGxhdGVzIHRoYXQgaGF2ZSBiZWVuCi0gICAgICAgICAgICAgICAgdXNlZCwgYnV0IGhhdmUgbm90IHlldCBiZWVuIGRlZmluZWQgb3Igb3ZlcnJpZGRlbiB3aXRoaW4gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPGZpZ3VyZSBpZD0iZmlnX05hbWVkVGVtcGxhdGVzIj4KLSAgICAgICAgICAgICAgICA8dGl0bGU+TmFtZWQgVGVtcGxhdGUgQXNzaXN0YW5jZTwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZpbGVyZWY9Ii4uL2ltYWdlcy9lZGl0b3IvbmFtZWRUZW1wbGF0ZS5wbmciLz4KLSAgICAgICAgICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgICAgICAgPC9maWd1cmU+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPHNlY3Rpb24gaWQ9ImVkX0NhbGxUZW1wbGF0ZUFzc2lzdCI+Ci08P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X2NhbGx0ZW1wbGF0ZS5odG1sIiA/PgotICAgICAgICAKLSAgICAgICAgICAgIDx0aXRsZT5DYWxsLVRlbXBsYXRlIEFzc2lzdGFuY2U8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgQW55Ci0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPmNhbGwtdGVtcGxhdGU8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIHhzbHQgZWxlbWVudCBoYXMgY29udGVudCBhc3Npc3RhbmNlIGF2YWlsYWJsZSBmb3IgaXQncyBuYW1lIGF0dHJpYnV0ZS4KLSAgICAgICAgICAgICAgICBUaGlzIHdpbGwgcHJvdmlkZSBhIGxpc3Qgb2YgcG9zc2libGUgWFNMVCBuYW1lZCB0ZW1wbGF0ZXMgdGhhdCBjYW4gYmUKLSAgICAgICAgICAgICAgICBjYWxsZWQgZnJvbSB0aGUgY3VycmVudCBzdHlsZXNoZWV0LiBUaGlzIHRha2VzIGludG8gZWZmZWN0IGFsbCBpbmNsdWRlZAotICAgICAgICAgICAgICAgIGFuZCBpbXBvcnRlZCBzdHlsZXNoZWV0cyBhcyB3ZWxsIGFzIHRob3NlIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPGZpZ3VyZSBpZD0iZmlnX0NhbGxUZW1wbGF0ZUFzc2lzdCI+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPkNhbGwtVGVtcGxhdGUgQXNzaXN0YW5jZTwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZpbGVyZWY9Ii4uL2ltYWdlcy9lZGl0b3IvY2FsbHRlbXBsYXRlLnBuZyIvPgotICAgICAgICAgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8L2ZpZ3VyZT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICA8c2VjdGlvbiBpZD0iZWRfaHJlZiI+Ci08P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X2luY2x1ZGUuaHRtbCIgPz4KLSAgICAgICAgCi0gICAgICAgICAgICA8dGl0bGU+Ci0gICAgICAgICAgICAgICAgSW5jbHVkZSBhbmQgSW1wb3J0Ci0gICAgICAgICAgICAgICAgPGVtcGhhc2lzPmhyZWY8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgIEFzc2lzdGFuY2UKLSAgICAgICAgICAgIDwvdGl0bGU+Ci0gICAgICAgICAgICA8cGFyYT5YU0xUIHN0eWxlc2hlZXRzIGhhdmUgdGhlIGFiaWxpdHkgdG8gaW1wb3J0IGFuZCBpbmNsdWRlIG90aGVyCi0gICAgICAgICAgICAgICAgc3R5bGVzaGVldHMuIFRoaXMgYWxsb3dzIGZvciBhIG1vZHVsYXIgc3RydWN0dXJlIGZvciB0aGUgdGVtcGxhdGVzIHRvIGJlCi0gICAgICAgICAgICAgICAgY3JlYXRlZC4gSXQgYWxzbyBhbGxvd3MgZm9yIGVhc2llciBtYWludGVuYW5jZS4gSG93ZXZlciwgaWYgb25lIGlzIHdvcmtpbmcKLSAgICAgICAgICAgICAgICB3aXRoIGEgbGFyZ2UgcHJvamVjdCBsaWtlIHRoZSBEb2NCb29rIFByb2plY3RzIHN0eWxlc2hlZXRzIGl0IGNhbiBiZQotICAgICAgICAgICAgICAgIGRpZmZpY3VsdCB0byByZW1lbWJlciB0aGUgbmFtZXMgYW5kIGxvY2F0aW9ucyBvZiBhbGwgdGhlIHN0eWxlc2hlZXRzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVG8gdGhpcyBlbmQsIHRoZSBYU0xUIGVkaXRvciBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHRoZQotICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5ocmVmPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuIFRoZSBzY29wZSBvZiB0aGUgYXNzaXN0YW5jZSBpcyByZXN0cmljdGVkIHRvIHRoZSBwcm9qZWN0IHRoYXQKLSAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBzdHlsZXNoZWV0IHRoYXQgaXMgYmVpbmcgZWRpdHRlZCByZXNpZGVzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPGZpZ3VyZSBpZD0iZmlnX0hSRUZBc3Npc3RhbmNlIj4KLSAgICAgICAgICAgICAgICA8dGl0bGU+SW5jbHVkZS9JbXBvcnQgaHJlZiBBc3Npc3RhbmNlPC90aXRsZT4KLSAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgYWxpZ249ImNlbnRlciIgZmlsZXJlZj0iLi4vaW1hZ2VzL2VkaXRvci9ocmVmQXNzaXN0YW5jZS5wbmciLz4KLSAgICAgICAgICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgICAgICAgPC9maWd1cmU+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0gICAgPHNlY3Rpb24gaWQ9IlhTTEVkaXRvclRlbXBsYXRlcyI+Ci08P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl90ZW1wbGF0ZXMuaHRtbCIgPz4KLSAgICAgICAgPHRpdGxlPlRlbXBsYXRlczwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPlNwZWNpZmljIFhTTCBjb2RlIGNvbXBsZXRpb24gdGVtcGxhdGVzIGNhbiBiZSBhZGRlZCB0byB0aGUgWE1MCi0gICAgICAgICAgICBlZGl0b3IncyBUZW1wbGF0ZXMuIFRoaXMgYWxsb3dzIGEgdXNlciB0byBkZWZpbmUgc3BlY2lmaWMgbWFya3VwIGNvbXBsZXRpb24KLSAgICAgICAgICAgIHRlbXBsYXRlcyB0aGF0IGFyZSBjb21tb25seSB1c2VkLiBJbiBhZGRpdGlvbiwgdGhlIFhQYXRoIFRlbXBsYXRlcyBwYWdlIGNhbiBiZQotICAgICAgICAgICAgZW5oYW5jZWQgdG8gYWxsb3cgY29tbW9ubHkgdXNlZCBYUGF0aCB0ZW1wbGF0ZXMgdG8gYmUgaW5jbHVkZWQsIGluIGFkZGl0aW9uIHRvCi0gICAgICAgICAgICB0aG9zZSBpbnN0YWxsZWQgYnkgZGVmYXVsdC4gVGhpcyBhbGxvd3MgYSB1c2VyIHRoZSBhYmlsaXR5IHRvIGFkZCBjdXN0b20KLSAgICAgICAgICAgIGV4dGVuc2lvbiBmdW5jdGlvbnMgZm9yIFhTTFQgdGhhdCBtYXkgYmUgcHJvY2Vzc29yIHNwZWNpZmljLiBBZG9wdGVycyBtYXkgYWxzbwotICAgICAgICAgICAgdXNlIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBleHRlbnNpb24gcG9pbnQgdG8gYWRkIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8c2VjdGlvbj4KLSAgICAgICAgICAgIDx0aXRsZT5YUGF0aCBUZW1wbGF0ZXM8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+VGhlIFhTTCBYUGF0aCBUZW1wbGF0ZXMgcHJlZmVyZW5jZSBwYWdlIGFsbG93cyBmb3IgYSB1c2VyIG9yIGFkb3B0ZXIKLSAgICAgICAgICAgICAgICB0byBhZGQgc3BlY2lmaWMgeHBhdGggZXh0ZW5zaW9ucyBzbyB0aGF0IHRoZXkgc2hvdyB1cCBpbiB0aGUgY29udGVudAotICAgICAgICAgICAgICAgIGFzc2lzdGFuY2UuIFNlZSB0aGUgWFBhdGggVGVtcGxhdGVzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0gICAgPHNlY3Rpb24gaWQ9InhzbHRTeW50YXhDb2xvcmluZyI+Ci08P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl9jb2xvcmluZy5odG1sIiA/PgotICAgICAgICA8dGl0bGU+WFNMVCBTeW50YXggQ29sb3Jpbmc8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFhTTCBUb29scyBFZGl0b3IgY2FuIGhhdmUgc3ludGF4IGNvbG9yaW5nIHRoYXQgaXMgc3BlY2lmaWMganVzdCBmb3IgdGhlIHRoZQotICAgICAgICAgICAgWFNMVCBOYW1lc3BhY2UgYXMgc2hvd2luZyBpbgotICAgICAgICAgICAgPHhyZWYgbGlua2VuZD0iZmlnX2VkaXRvclN5bnRheENvbG9yaW5nIi8+Ci0gICAgICAgICAgICAuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgICAgPGZpZ3VyZSBpZD0iZmlnX2VkaXRvclN5bnRheENvbG9yaW5nIj4KLSAgICAgICAgICAgIDx0aXRsZT5YU0xUIFNwZWNpZmljIFN5bnRheCBDb2xvcmluZzwvdGl0bGU+Ci0gICAgICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZpbGVyZWY9Ii4uL2ltYWdlcy9lZGl0b3Ivc3ludGF4Q29sb3JpbmcucG5nIgotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSJQTkciLz4KLSAgICAgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KLSAgICAgICAgPC9maWd1cmU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgVGhlIGRlZmF1bHQgY29sb3Jpbmcgc2hvd24gaXMgdG8gbWFrZSBhbGwgWFNMVCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBib2xkLgotICAgICAgICAgICAgVGhlIHNldHRpbmdzIGFyZSBjb250cm9sZWQgaW4KLSAgICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9IlhTTFByZWZlcmVuY2VzIi8+Ci0gICAgICAgICAgICAuCi0gICAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0gICAgPHNlY3Rpb24gaWQ9InhzbHRNYXJrZXJzIj4KLTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX21hcmtlcnMuaHRtbCIgPz4KLSAgICAgICAgPHRpdGxlPlhTTFQgTWFya2VycyBhbmQgQW5ub3RhdGlvbnM8L3RpdGxlPgotICAgICAgICA8cGFyYT5UaGUgWFNMIGVkaXRvciBzdXBwb3J0cyB0aGUgYWJpbGl0eSB0byBhbm5vdGF0ZSBvciBwcm92aWRlIG1hcmtlcnMuIFRoZXNlCi0gICAgICAgICAgICBhbm5vdGF0aW9ucyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlbXBsYXRlcyBhbmQgWFNMVAotICAgICAgICAgICAgZWxlbWVudHMgaW4gdGhlIHN0eWxlc2hlZXQuPC9wYXJhPgotICAgICAgICA8c2VjdGlvbiBpZD0ieHNsdE92ZXJSaWRlIj4KLTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfeHNsdE92ZXJyaWRlLmh0bWwiID8+Ci0gICAgICAgIAotICAgICAgICAgICAgPHRpdGxlPlRlbXBsYXRlIE92ZXJyaWRlPC90aXRsZT4KLSAgICAgICAgICAgIDxwYXJhPlRoZSBYU0xUIGVkaXRvciB3aWxsIG1hcmsgdGVtcGxhdGVzIHRoYXQgaGF2ZSBvdmVycmlkZW4gYW4gaW1wb3J0ZWQKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBvZiB0aGUgc2FtZSBuYW1lLjwvcGFyYT4KLSAgICAgICAgICAgIDxmaWd1cmUgaWQ9ImZpZ19PdmVyUmlkZTEiPgotICAgICAgICAgICAgICAgIDx0aXRsZT5PdmVycmlkZW4gVGVtcGxhdGU8L3RpdGxlPgotICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIiBmaWxlcmVmPSIuLi9pbWFnZXMvZWRpdG9yL292ZXJyaWRlMS5wbmciLz4KLSAgICAgICAgICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgICAgICAgPC9maWd1cmU+Ci0gICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICBJbgotICAgICAgICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImZpZ19PdmVyUmlkZTEiLz4KLSAgICAgICAgICAgICAgICAsIHRoZSB0ZW1wbGF0ZQotICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UZW1wQjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgb3ZlcnJpZGVzIGFuIGltcG9ydGVkIHRlbXBsYXRlLiBCeSBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIgb3ZlciB0aGUKLSAgICAgICAgICAgICAgICB0cmlhbmdsZSBpY29uIGluIHRoZSBydWxlIGJhciwgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggZmlsZSB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSByZXNpZGVzLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPGZpZ3VyZSBpZD0iZmlnX092ZXJSaWRlMiI+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPk92ZXJyaWRlbiBUZW1wbGF0ZSBJbmZvcm1hdGlvbjwvdGl0bGU+Ci0gICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZpbGVyZWY9Ii4uL2ltYWdlcy9lZGl0b3Ivb3ZlcnJpZGUyLnBuZyIvPgotICAgICAgICAgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8L2ZpZ3VyZT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLSAgICA8c2VjdGlvbiBpZD0iWFNMRWRpdG9yRGVidWdnaW5nIj4KLTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX2RlYnVnZ2luZy5odG1sIiA/PgotICAgICAgICA8dGl0bGU+WFNMIERlYnVnZ2luZzwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPlRoZSBYU0wgRWRpdG9yIHN1cHBvcnRzIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgYnJlYWsgcG9pbnRzIHdpdGhpbiBhbiBYU0wKLSAgICAgICAgICAgIEZpbGUuIElmIHRoZSBmaWxlIGlzIGluY2x1ZGVkIG9yIGltcG9ydGVkIGFuZCB0aGUgYnJlYWsgcG9pbnQgaXMgZW5jb3VudGVyZWQKLSAgICAgICAgICAgIGR1cmluZyBhIHRyYW5zZm9ybWF0aW9uIHNjZW5hcmlvIGl0IHdpbGwgYmUgcmVzcGVjdGVkLiBBIGJyZWFrIHBvaW50IG1heSBiZQotICAgICAgICAgICAgc2V0IGF0IGFueSB2YWxpZCBYU0wgZWxlbWVudCBvciBvdGhlciB4bWwgZWxlbWVudCB3aXRoaW4gdGhlIFhTTFQgc3R5bGVzaGVldC4KLSAgICAgICAgICAgIFNlZSB0aGUgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmcgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBkZWJ1Z2dpbmcgWFNMVAotICAgICAgICAgICAgc3R5bGVzaGVldHMuPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLSAgICA8c2VjdGlvbj4KLTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX2RlYnVnZ2luZy5odG1sIiA/PgotICAgICAgICA8dGl0bGU+TmF2aWdhdGlvbjwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgICAgTWFueSBvZiB0aGUgdmFyaWFibGVzLCBpbXBvcnRzL2luY2x1ZGVzLCBhbmQgdGVtcGxhdGVzIGNhbiBiZSBuYXZpZ2F0ZWQgdG8KLSAgICAgICAgICAgIHVzaW5nIHRoZQotICAgICAgICAgICAgPGVtcGhhc2lzPk9wZW4gRGVjbGFyYXRpb24gKEYzKTwvZW1waGFzaXM+Ci0gICAgICAgICAgICBwb3B1cCBtZW51IG9wdGlvbi4gVGhleSBjYW4gYWxzbyBiZSBuYXZpZ2F0ZWQgdG8gZGlyZWN0bHkgYnkgQ1RSTC1DbGlja2luZyBvbgotICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLCBpbXBvcnQvaW5jbHVkZSwgb3IgdGVtcGxhdGUuIEl0ZW1zIHRoYXQgY3VycmVudGx5Ci0gICAgICAgICAgICBoYXZlIGh5cGVybGlua2luZyBuYXZpZ2F0aW9uIGFyZToKLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxwYXJhPkNhbGxlZC1UZW1wbGF0ZXM8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxwYXJhPmhyZWZzIGZvciBJbXBvcnQgYW5kIEluY2x1ZGVzPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8cGFyYT5XaXRoLVBhcmFtIHZhcmlhYmxlczwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8dGlwPgotICAgICAgICAgICAgPHRpdGxlPk5hdmlnYXRpb24gdG8gYSBOYW1lZCBUZW1wbGF0ZSBpbiBhbiBpbmNsdWRlZC9pbXBvcnRlZAotICAgICAgICAgICAgICAgIHN0eWxzaGVldDwvdGl0bGU+Ci0gICAgICAgICAgICA8cGFyYT4gVGhlIGh5cGVybGlua2luZyBhYmlsaXR5IHdpbGwgbmF2aWdhdGUgeW91IHRvIHdoZXJlIGV2ZXIgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgZGVmaW5pdGlvbiBvZiB0aGUgdGVtcGxhdGUgaXMgZGVmaW5lZC4gU28gaWYgdGhlIHRlbXBsYXRlIGlzIGRlZmluZWQKLSAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGN1cnJlbnQgc3R5bGVzaGVldCBpdCB3aWxsIG5hdmlnYXRlIHRvIHRoYXQgZGVmaW5pdGlvbi4gSG93ZXZlcgotICAgICAgICAgICAgICAgIGlmIGl0IGlzIGRlZmluZWQgaW4gYW4gaW1wb3J0ZWQgb3IgaW5jbHVkZWQgc3R5bGVzaGVldCwgb3IgYW55IG9mIHRob3NlCi0gICAgICAgICAgICAgICAgaW1wb3J0ZWQgb3IgaW5jbHVkZWQgc3R5bGVzaGVldHMgaXQgd2lsbCB0YWtlIHlvdSB0byB0aGF0IGRlZmluaXRpb24uIFVzZQotICAgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCBuYXZpZ2F0aW9uIGVycm9ycyB0byBtb3ZlIGJhY2sgYW5kIGZvcnRoIGR1cmluZyB0aGlzCi0gICAgICAgICAgICAgICAgaHlwZXJsaW5raW5nLjwvcGFyYT4KLSAgICAgICAgPC90aXA+Ci0gICAgPC9zZWN0aW9uPgotPC9jaGFwdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9nZW5lcmFsL2dlbmVyYWwueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2dlbmVyYWwvZ2VuZXJhbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MmM0NWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2dlbmVyYWwvZ2VuZXJhbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgotICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiPgotPGNoYXB0ZXI+Ci0JPD9kYmh0bWwgZmlsZW5hbWU9ImdlbmVyYWwvZ2VuZXJhbC5odG1sIiA/PgotCTx0aXRsZT5HZW5lcmFsPC90aXRsZT4KLQk8cGFyYT5UaGlzIHNlY3Rpb24gY292ZXJzIHRvcGljcyB0aGF0IGRvbid0IGhhdmUgYW55IG90aGVyIHBhcnRpY3VsYXIgcGxhY2UgdG8gZ28uPC9wYXJhPgotCTxzZWN0aW9uIGlkPSJYSW5jbHVkZSI+Ci0JICAgIDw/ZGJodG1sIGZpbGVuYW1lPSJnZW5lcmFsL3hpbmNsdWRlLmh0bWwiID8+Ci0JCTx0aXRsZT5YSW5jbHVkZTwvdGl0bGU+Ci0JCTxwYXJhPgotICAgICAgCVhJbmNsdWRlIGFsbG93cyBhIHVzZXIgdG8gaW1wb3J0IG9yIGluY2x1ZGUgb3RoZXIgWE1MIGZpbGVzIGludG8gb25lIHhtbCBmaWxlLgotICAgICAgICBJdCBpcyB1c2VkIHByaW1hcmlseSB3aXRoIGRvY3VtZW50YXRpb24gZmlsZSBmb3JtYXRzIGxpa2UgRG9jYm9vayBhbmQgRElUQS4gIEl0Ci0gICAgICAgIGFsbG93cyBmb3Igc2VwYXJhdGluZyBvdXQgbGFyZ2UgeG1sIGRvY3VtZW50cyBpbnRvIG1vcmUgbWFuYWdlYWJsZSBjaHVua3Mgb2YgaW5mb3JtYXRpb24uCi0gICAgICA8L3BhcmE+Ci0JCTxwYXJhPgotICAgICAgCVRoZSBYU0wgVG9vbHMgcHJvamVjdCBpbmNsdWRlcyBhbiBBTlQgdGFzayB0aGF0IGNhbiBiZSBydW4gd2l0aCBpbiBlY2xpcHNlLCBlY2xpcHNlCi0gICAgICAJaGVhZGxlc3MsIGFuZCB3aXRob3V0IGVjbGlwc2UgYXQgYWxsLiAgIElmIHJ1bm5pbmcgb3V0c2lkZSBvZiBlY2xpcHNlLCB5b3Ugd2lsbCBuZWVkCi0gICAgICAJdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGphciBmaWxlIHhpbmNsdWRlLmphciBpbiB0aGUgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmphciBmaWxlCi0gICAgICAJaXMgbWFkZSBhdmFpYWJsZSBvbiB5b3VyIGNsYXNzIHBhdGguCi0gICAgICA8L3BhcmE+Ci0JCTxtZWRpYW9iamVjdD4KLQkJCTxvYmplY3RpbmZvIGlkPSJYaW5jbHVkZSI+Ci0JCQkJPHRpdGxlPlhJbmNsdWRlIFRhc2s8L3RpdGxlPgotCQkJPC9vYmplY3RpbmZvPgotCQkJPGltYWdlb2JqZWN0PgotCQkJCTxpbWFnZWRhdGEgYWxpZ249ImNlbnRlciIgZmlsZXJlZj0iLi4vaW1hZ2VzL2dlbmVyYWwveGluY2x1ZGUucG5nIgotCQkJCQlmb3JtYXQ9IlBORyIgLz4KLQkJCTwvaW1hZ2VvYmplY3Q+Ci0JCTwvbWVkaWFvYmplY3Q+Ci0JCTxwYXJhPgotICAgICAgCVRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlIG9uIHRoZSB4c2wueGluY2x1ZGUgQU5UIHRhc2s6Ci0gICAgICA8L3BhcmE+Ci0JCTxpdGVtaXplZGxpc3Q+Ci0JCQk8bGlzdGl0ZW0+Ci0JCQkJPHBhcmE+Ci0gICAgICAJCQk8ZW1waGFzaXMgcm9sZT0iYm9sZCI+Ci0JCQkJCWluCi0JCQkJPC9lbXBoYXNpcz4gLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBpbnB1dCBmaWxlIHRoYXQgY29udGFpbnMKLSAgICAgIAkJCXRoZSBmaWxlIHdpdGggdGhlIFhJbmNsdWRlcy4gICBJZiB0aGUgZmlsZXMgdGhhdCBpdCBpbmNsdWRlcyBoYXZlIGluY2x1ZGVzLCB0aGVuCi0gICAgICAJCQl0aG9zZSB3aWxsIGJlIGJyb3VnaHQgaW4gYW4gZXhwYW5kZWQgYXMgd2VsbC4KLSAgICAgIAkJPC9wYXJhPgotCQkJPC9saXN0aXRlbT4KLQkJCTxsaXN0aXRlbT4KLQkJCQk8cGFyYT4KLQkJCQkJPGVtcGhhc2lzIHJvbGU9ImJvbGQiPm91dDwvZW1waGFzaXM+IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGUgCi0JCQkJCXRvIGJlIHdyaXR0ZW4gd2l0aCBhbGwgaW5jbHVkZXMgZXhwYW5kZWQuICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGFzIHRoZQotCQkJCQlpbnB1dCB0byBhIHN0eWxlc2hlZXQgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcy4KLQkJCQk8L3BhcmE+Ci0JCQk8L2xpc3RpdGVtPgotCQk8L2l0ZW1pemVkbGlzdD4KLQkgICAgPGV4YW1wbGU+Ci0JICAgIAk8dGl0bGU+WEluY2x1ZGUgRXhhbXBsZTwvdGl0bGU+Ci0JICAgIAk8cHJvZ3JhbWxpc3RpbmcgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Ci0mbHQ7dGFyZ2V0IG5hbWU9Im1lcmdlIj4KLSAgICAmbHQ7eHNsLnhpbmNsdWRlIGluPSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHAuZGJrIgotICAgICAgICAgICAgICAgICAgb3V0PSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHBjb21iaW5lZC5kYmsiLz4KLSZsdDsvdGFyZ2V0PgkgICAgCQkgICAgCQotCSAgICAJPC9wcm9ncmFtbGlzdGluZz4KLQkgICAgPC9leGFtcGxlPgotCTwvc2VjdGlvbj4KLTwvY2hhcHRlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9FeGNsdWRlQ29udGVudEFzc2lzdDEucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvRXhjbHVkZUNvbnRlbnRBc3Npc3QxLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYwZjJjYi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9FeGNsdWRlQ29udGVudEFzc2lzdDEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvRXhjbHVkZUNvbnRlbnRBc3Npc3QyLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL0V4Y2x1ZGVDb250ZW50QXNzaXN0Mi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNTM2NzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvRXhjbHVkZUNvbnRlbnRBc3Npc3QyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL2NhbGx0ZW1wbGF0ZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9jYWxsdGVtcGxhdGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTEzZjA3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL2NhbGx0ZW1wbGF0ZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9ocmVmQXNzaXN0YW5jZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9ocmVmQXNzaXN0YW5jZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNDQ5ODYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvaHJlZkFzc2lzdGFuY2UucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvbW9kZUFzc2lzdGFuY2UucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvbW9kZUFzc2lzdGFuY2UucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWE5ODc1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL21vZGVBc3Npc3RhbmNlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL25hbWVkVGVtcGxhdGUucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvbmFtZWRUZW1wbGF0ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YmQ5MjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IvbmFtZWRUZW1wbGF0ZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9vdmVycmlkZTEucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3Ivb3ZlcnJpZGUxLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiODc4Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9vdmVycmlkZTEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3Ivb3ZlcnJpZGUyLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL292ZXJyaWRlMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYzQxNWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3Ivb3ZlcnJpZGUyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL3N5bnRheENvbG9yaW5nLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL3N5bnRheENvbG9yaW5nLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlMGViZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci9zeW50YXhDb2xvcmluZy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2VkaXRvci90ZW1wbGF0ZXNWaWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL3RlbXBsYXRlc1ZpZXcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWUyMGQ5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL3RlbXBsYXRlc1ZpZXcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IveHNscHJvcG9zYWxzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvZWRpdG9yL3hzbHByb3Bvc2Fscy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzEyN2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9lZGl0b3IveHNscHJvcG9zYWxzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL1hTTERlYnVnZ2luZy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2xhdW5jaGluZy9YU0xEZWJ1Z2dpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2I0NTZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL1hTTERlYnVnZ2luZy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2xhdW5jaGluZy9YU0xPdXRwdXRUYWIucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvWFNMT3V0cHV0VGFiLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwZTU1ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2xhdW5jaGluZy9YU0xPdXRwdXRUYWIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvWFNMUHJvY2Vzc29yVGFiLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL1hTTFByb2Nlc3NvclRhYi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NmY5NzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvWFNMUHJvY2Vzc29yVGFiLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL1hTTFJ1bkRlYnVnQ29uZmlndXJhdGlvbnMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvWFNMUnVuRGVidWdDb25maWd1cmF0aW9ucy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NWE2NGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvWFNMUnVuRGVidWdDb25maWd1cmF0aW9ucy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL2xhdW5jaGluZy9sYXVuY2hTaG9ydGN0LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3QucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODE4MTNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvbm9kZXNldFZhcmlhYmxlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL25vZGVzZXRWYXJpYWJsZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzY2E3ZmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvbm9kZXNldFZhcmlhYmxlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL3Jlc3VsdFZpZXcucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvcmVzdWx0Vmlldy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZDFiOTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvcmVzdWx0Vmlldy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL1hQYXRoVGVtcGxhdGVzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjg5MzA0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy9wcm9qZWN0TGV2ZWxWYWxpZGF0aW9uLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMvcHJvamVjdExldmVsVmFsaWRhdGlvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZmU4NjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy9wcm9qZWN0TGV2ZWxWYWxpZGF0aW9uLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveG1fdGVtcGxhdGVfeHNsbmV3ZmlsZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3htX3RlbXBsYXRlX3hzbG5ld2ZpbGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjQ2YTZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveG1fdGVtcGxhdGVfeHNsbmV3ZmlsZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbFN5bnRheENvbG9yaW5nLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsU3ludGF4Q29sb3JpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmViZWYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsU3ludGF4Q29sb3JpbmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfSW5zdGFsbGVkUHJvY2Vzc29ycy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9JbnN0YWxsZWRQcm9jZXNzb3JzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5NTA3OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9JbnN0YWxsZWRQcm9jZXNzb3JzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfb3V0cHV0cHJvcGVydGllcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDBhNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfb3V0cHV0cHJvcGVydGllcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbGZlYXR1cmVzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWRiZWM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiNzE4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9sYXVuY2hpbmcvbGF1bmNoaW5nLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9sYXVuY2hpbmcvbGF1bmNoaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQxYTYyZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svbGF1bmNoaW5nL2xhdW5jaGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC41Ly9FTiIKLSAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjUvZG9jYm9va3guZHRkIj4KLTxjaGFwdGVyPgotCTw/ZGJodG1sIGZpbGVuYW1lPSJsYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwiID8+Ci0JPHRpdGxlPlhTTCBMYXVuY2hpbmcgYW5kIERlYnVnZ2luZzwvdGl0bGU+Ci0JPHBhcmE+IFhTTCBUb29scyBhZGRzIHN1cHBvcnQgZm9yIFhTTCBMYXVuY2ggYW5kIERlYnVnZ2luZwotCQljb25maWd1cmF0aW9ucy4gVGhlc2UgYWxsb3cgeW91IHRvIHNldHVwIFhTTCBjb25maWd1cmF0aW9ucyBmb3IKLQkJdmFyaW91cyBqb2JzLCBhbmQgdG8gYWxzbyBkZWJ1ZyB4c2wgc3R5bHNoZWV0IHRyYW5zZm9ybWF0aW9ucy48L3BhcmE+Ci0JPHNlY3Rpb24KLQkJaWQ9IlhTTExhdW5jaCI+Ci0JCTw/ZGJodG1sIGZpbGVuYW1lPSJsYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwiID8+Ci0JCTx0aXRsZT5YU0wgTGF1bmNoaW5nPC90aXRsZT4KLQkJPHBhcmE+Ci0JCQlJbiB0aGUgUHJvamVjdCBFeHBsb3Jlciwgc2ltcGx5IHNlbGVjdCB0aGUgaW5wdXQgWE1MIGZpbGUgYW5kIHRoZQotCQkJc3R5bGVzaGVldChzKSB0byB0cmFuc2Zvcm0gaXQsIGFuZCB0aGVuIHJpZ2h0LWNsaWNrIGFuZCBzZWxlY3QKLQkJCTxlbXBoYXNpcz5SdW4gQXMgPiBYU0wgVHJhbnNmb3JtYXRpb248L2VtcGhhc2lzPgotCQkJLgotCQk8L3BhcmE+Ci0JCTxmaWd1cmUKLQkJCWlkPSJmaWdfWFNMUnVuIj4KLQkJCTx0aXRsZT5YU0xUIFJ1bi9EZWJ1ZzwvdGl0bGU+Ci0JCQk8bWVkaWFvYmplY3Q+Ci0JCQkJPGltYWdlb2JqZWN0PgotCQkJCQk8aW1hZ2VkYXRhCi0JCQkJCQlhbGlnbj0iY2VudGVyIgotCQkJCQkJZm9ybWF0PSJQTkciCi0JCQkJCQlmaWxlcmVmPSIuLi9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3QucG5nIiAvPgotCQkJCTwvaW1hZ2VvYmplY3Q+Ci0JCQk8L21lZGlhb2JqZWN0PgotCQk8L2ZpZ3VyZT4KLQkJPG5vdGU+Ci0JCQk8dGl0bGU+U2VsZWN0aW5nIG9ubHkgdGhlIFhTTCBTdHlsZXNoZWV0PC90aXRsZT4KLQkJCTxwYXJhPgotCQkJCUlmIG9ubHkgdGhlIFhTTCBTdHlsZXNoZWV0IGlzIHNlbGVjdGVkIHRoZW4gYSBkaWFsb2cgYm94IHdpbGwgcHJvbXB0IHlvdSBmb3IgdGhlIGlucHV0IGZpbGUgdG8gdXNlLgotCQkJPC9wYXJhPgotCQk8L25vdGU+Ci0JCTxwYXJhPgotCQkJTGF1bmNoIGNhbiBhbHNvIGJlIGRvbmUgdGhyb3VnaCB0aGUgTGF1bmNoIENvbmZpZ3VyYXRpb25zIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGJvdGggZGVidWdnaW5nIGFuZCBub3JtYWwgdHJhbnNmb3JtYXRpb25zLgotCQkJVGhlc2UgY29uZmlndXJhdGlvbnMgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggPGVtcGhhc2lzPlJ1bi0+UnVuIENvbmZpZ3VyYXRpb25zPC9lbXBoYXNpcz4gbWVudSBiYXIgb3B0aW9uLgotCQk8L3BhcmE+Ci0JCTxzZWN0aW9uCi0JCQlpZD0iWFNMTGF1bmNoQ29uZmlnIj4KLQkJCTx0aXRsZT5MYXVuY2ggQ29uZmlndXJhdGlvbjwvdGl0bGU+Ci0JCQk8cGFyYT4KLQkJCQlDdXJyZW50bHksIFhTTCBUb29scyBvbmx5IHN1cHBvcnRzIHRoZSBsYXVuY2hpbmcgb2YgamF2YSBiYXNlZAotCQkJCXByb2Nlc3NvcnMgdGhyb3VnaCB0aGUgUnVuIGFuZCBEZWJ1ZyBmcmFtZXdvcmsuIFRvIHRoaXMgcG9pbnQsIGl0Ci0JCQkJbGV2ZXJhZ2VzIGFuZCBleHRlbmRzIHNvbWUgb2YgdGhlIHN1cHBvcnQgcHJvdmlkZWQgYnkgdGhlIEphdmEKLQkJCQlsYXVuY2ggY29uZmlndXJhdGlvbnMuIFhTTCBUb29scyBkb2VzIGFkZCBpdCdzIG93biBzcGVjaWZpYyBmZWF0dXJlcwotCQkJCWZvciBsYXVuY2hpbmcuCi0JCQk8L3BhcmE+Ci0JCQk8ZmlndXJlCi0JCQkJaWQ9ImZpZ19YU0xMYXVuY2hDb25maWciPgotCQkJCTx0aXRsZT5KYXZhIFhTTFQgTGF1bmNoIENvbmZpZ3VyYXRpb248L3RpdGxlPgotCQkJCTxtZWRpYW9iamVjdD4KLQkJCQkJPGltYWdlb2JqZWN0PgotCQkJCQkJPGltYWdlZGF0YQotCQkJCQkJCWFsaWduPSJjZW50ZXIiCi0JCQkJCQkJZm9ybWF0PSJQTkciCi0JCQkJCQkJZmlsZXJlZj0iLi4vaW1hZ2VzL2xhdW5jaGluZy9YU0xSdW5EZWJ1Z0NvbmZpZ3VyYXRpb25zLnBuZyIgLz4KLQkJCQkJPC9pbWFnZW9iamVjdD4KLQkJCQk8L21lZGlhb2JqZWN0PgotCQkJPC9maWd1cmU+Ci0JCQk8cGFyYT4KLQkJCQlUaGUgdGFicyBNYWluLCBPdXRwdXQsIGFuZCBQcm9jZXNzb3IgY29udHJvbCBzcGVjaWZpY3MgZm9yIHRoZSBYU0xUIHByb2Nlc3NvciBhbmQgZmlsZXMgdG8gYmUgcnVuIHRocm91Z2gKLQkJCQl0aGUgdHJhbnNmb3JtYXRpb24uCi0JCQk8L3BhcmE+Ci0JCQk8bm90ZT4KLQkJCQk8dGl0bGU+WFNMVCBFeHRlbnNpb25zPC90aXRsZT4KLQkJCQk8cGFyYT5JZiB0aGUgdHJhbnNmb3JtYXRpb24gbmVlZHMgb3IgbWFrZXMgdXNlIG9mIGV4dGVuc2lvbgotCQkJCQlmdW5jdGlvbnMgdGhlbiB0aG9zZSBqYXIgZmlsZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBDbGFzc3BhdGggdGFiCi0JCQkJCXNvIHRoYXQgdGhleSBhcmUgcGlja2VkIHVwIGR1cmluZyB0aGUgdHJhbnNmb3JtYXRpb24uIE90aGVyd2lzZSB0aGUKLQkJCQkJdHJhbnNmb3JtYXRpb24gd2lsbCBmYWlsLjwvcGFyYT4KLQkJCTwvbm90ZT4KLQkJCTxzZWN0aW9uIGlkPSJYU0xMYXVuY2hfTWFpbiI+Ci0JCQkJPHRpdGxlPk1haW4gVGFiPC90aXRsZT4KLQkJCQk8cGFyYT4KLQkJCQkJQXMgc2hvd24gaW4gPHhyZWYgbGlua2VuZD0iZmlnX1hTTExhdW5jaENvbmZpZyIvPiwgdGhlIE1haW4gVGFiIGlzIHdoZXJlIHRoZSBpbnB1dCBYTUwgZmlsZSBpcyBzcGVjaWZpZWQuICBJZiBhIHBhcnRpY3VsYXIKLQkJCQkJWE1MIGZpbGUgaXMgbm90IHNob3duIGluIHRoZSBhdmFpbGFibGUgbGlzdCB3aGVuIGJyb3dzaW5nIHRoZSBXb3Jrc3BhY2UsIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIGFkZGVkIHRvIHVuZGVyIHRoZSBYTUwgQ29udGVudAotCQkJCQlUeXBlIGluIHRoZSBHZW5lcmFsIHByZWZlcmVuY2UgcGFnZS4gIFN0YW5kYXJkIGVjbGlwc2UgbGF1bmNoaW5nIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5wdXQgZmlsZS4KLQkJCQk8L3BhcmE+Ci0JCQkJPHBhcmE+Ci0JCQkJCUEgcnVuIGNvbmZpZ3VyYXRpb24gY2FuIGFsc28gdXNlIGEgc2ltcGxlIHBpcGVsaW5lIHRyYW5zZm9ybWF0aW9uLiAgTWVhbmluZyB0aGF0IHRoZSBvdXRwdXQgZnJvbSBvbmUgc3R5bGVzaGVldCBpcyB1c2VkIGFzIGlucHV0Ci0JCQkJCXRvIHRoZSBuZXh0IHN0eWxlc2hlZXQuICAgVGhlIFN0eWxlc2hlZXQgaW5wdXQgYm94IGNhbiBoYXZlIG9uZSB0byBtYW55IHN0eWxlc2hlZXRzIHNwZWNpZmllZC4gIEF0IGxlYXN0IG9uZSBzdHlsZXNoZWV0IGlzIHJlcXVpcmVkCi0JCQkJCWZvciBhIHRyYW5zZm9ybWF0aW9uLgotCQkJCTwvcGFyYT4KLQkJCQk8cGFyYT4KLQkJCQkJVGhlIGxhc3Qgb3B0aW9uYWwgaXRlbSBhcmUgcGFyYW1ldGVycy4gICBTdHlsZXNoZWV0cyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHBhc3NlZCBpbnRvIHRoZW0gdG8gc2V0dXAgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gIEFuCi0JCQkJCWV4YW1wbGUgd291bGQgYmUgdGhlIG51bWVyb3VzIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc2V0IGZvciBhIERvY0Jvb2sgc3R5bGVzaGVldCB0cmFuc2Zvcm1hdGlvbi4gICBJZiB0aGUgcGFyYW1ldGVycyBhcmUgbm90Ci0JCQkJCXNwZWNpZmllZCB0aGUgZGVmYXVsdHMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3R5bGVzaGVldCB3aWxsIHRha2UgcHJlY2VkZW5jZS4gCi0JCQkJPC9wYXJhPgotCQkJPC9zZWN0aW9uPgotCQkJPHNlY3Rpb24gaWQ9IlhTTExhdW5jaF9PdXRwdXQiPgotCQkJCTx0aXRsZT5PdXRwdXQgVGFiPC90aXRsZT4KLQkJCQk8cGFyYT4KLQkJCQkJVGhlIE91dHB1dCBUYWIgYWxsb3dzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIHdoZXJlIHRoZSB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgc3RvcmUgdGhlIGluZm9ybWF0aW9uLgotCQkJCQlUaGlzIGNhbiBiZSByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlIG9yIGEgcGh5c2ljYWwgbG9jYXRpb24gb3V0c2lkZSB0aGUgd29ya3NwYWNlLgotCQkJCTwvcGFyYT4KLQkJCTxmaWd1cmUKLQkJCQlpZD0iZmlnX1hTTE91dHB1dFRhYiI+Ci0JCQkJPHRpdGxlPkphdmEgWFNMVCBMYXVuY2ggQ29uZmlndXJhdGlvbjwvdGl0bGU+Ci0JCQkJPG1lZGlhb2JqZWN0PgotCQkJCQk8aW1hZ2VvYmplY3Q+Ci0JCQkJCQk8aW1hZ2VkYXRhCi0JCQkJCQkJYWxpZ249ImNlbnRlciIKLQkJCQkJCQlmb3JtYXQ9IlBORyIKLQkJCQkJCQlmaWxlcmVmPSIuLi9pbWFnZXMvbGF1bmNoaW5nL1hTTE91dHB1dFRhYi5wbmciIC8+Ci0JCQkJCTwvaW1hZ2VvYmplY3Q+Ci0JCQkJPC9tZWRpYW9iamVjdD4KLQkJCTwvZmlndXJlPgotCQkJCQotCQkJPC9zZWN0aW9uPgotCQkJPHNlY3Rpb24gaWQ9IlhTTExhdW5jaF9Qcm9jZXNzb3IiPgotCQkJCTx0aXRsZT5Qcm9jZXNzb3IgVGFiPC90aXRsZT4KLQkJCQk8cGFyYT4KLQkJCQkJVGhlIHBhcnRpY3VsYXIgWFNMVCBwcm9jZXNzb3IgdGhhdCB3aWxsIGJlIHVzZWQgY2FuIGJlIGNob29zZW4gZnJvbSB0aGlzIHRhYi4gVGhlCi0JCQkJCWRlZmF1bHQgaXMgdG8gdXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBwcm9jZXNzb3Igb3Igd2hhdCBldmVyIHByb2Nlc3NvciB5b3UgaGF2ZQotCQkJCQlzZXQgYXMgdGhlIGRlZmF1bHQgcHJvY2Vzc29yIGluIHRoZSBwcmVmZXJlbmNlIHBhZ2VzLgotCQkJCTwvcGFyYT4KLQkJCQk8ZmlndXJlCi0JCQkJCWlkPSJmaWdfWFNMUHJvY2Vzc29yVGFiIj4KLQkJCQkJPHRpdGxlPkphdmEgWFNMVCBMYXVuY2ggQ29uZmlndXJhdGlvbjwvdGl0bGU+Ci0JCQkJCTxtZWRpYW9iamVjdD4KLQkJCQkJCTxpbWFnZW9iamVjdD4KLQkJCQkJCQk8aW1hZ2VkYXRhCi0JCQkJCQkJCWFsaWduPSJjZW50ZXIiCi0JCQkJCQkJCWZvcm1hdD0iUE5HIgotCQkJCQkJCQlmaWxlcmVmPSIuLi9pbWFnZXMvbGF1bmNoaW5nL1hTTFByb2Nlc3NvclRhYi5wbmciIC8+Ci0JCQkJCQk8L2ltYWdlb2JqZWN0PgotCQkJCQk8L21lZGlhb2JqZWN0PgotCQkJCTwvZmlndXJlPgotCQkJCQotCQkJCTxub3RlPgotCQkJCQk8dGl0bGU+WFNMVCBEZWJ1Z2dpbmc8L3RpdGxlPgotCQkJCQk8cGFyYT4KLQkJCQkJCUlmIHlvdSBhcmUgc2V0dGluZyB1cCBhIGxhdW5jaCBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcsIGRvIG5vdCBjaG9vc2UKLQkJCQkJCXRoZSBKUkUgRGVmYXVsdCBwcm9jZXNzb3IsIHlvdSBzaG91bGQgY2hvb3NlIGVpdGhlciBYYWxhbiBvciBhbm90aGVyIGFkb3B0ZXJzCi0JCQkJCQlwcm9jZXNzb3IgdGhhdCBzdXBwb3J0cyBkZWJ1Z2dpbmcuCi0JCQkJCTwvcGFyYT4KLQkJCQk8L25vdGU+Ci0JCQkJPHBhcmE+Ci0JCQkJCUluIGFkZGl0aW9uLCBldmVyeSBwcm9jZXNzb3IgaGFzIHRoZWlyIG93biBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkLgotCQkJCQlUaGlzIGNvbnRyb2xzIHN1Y2ggaXRlbXMgYXMgaW5kZW50YXRpb24sIGhhbmRsaW5nIG9mIHdoaXRlIHNwYWNlLCBldGMuICBSZWZlciB0byB5b3VyCi0JCQkJCXByb2Nlc3NvcnMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHNwZWNpZmljIG9wdGlvbnMgYXZhaWxhYmxlLgotCQkJCTwvcGFyYT4KLQkJCTwvc2VjdGlvbj4KLQkJPC9zZWN0aW9uPgotCTwvc2VjdGlvbj4KLQk8c2VjdGlvbgotCQlpZD0iWFNMRGVidWciPgotCSAgICA8P2RiaHRtbCBmaWxlbmFtZT0ibGF1bmNoaW5nL2RlYnVnZ2luZy5odG1sIiA/PgotCQk8dGl0bGU+WFNMVCBEZWJ1Z2dpbmc8L3RpdGxlPgotCQk8cGFyYT4gWFNMIFRvb2xzIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBYU0xUIHByb2Nlc3NvcnMgdG8gcHJvdmlkZQotCQkJZGVidWdnaW5nIHN1cHBvcnQuIFRoZSBzdXBwb3J0IHByb3ZpZGVkIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhlCi0JCQlwcm9jZXNzb3JzLiBYU0wgVG9vbHMgY29tZXMgd2l0aCBidWlsdCBpbiBzdXBwb3J0IGZvciB0aGUgWGFsYW4gMi43LjEKLQkJCXByb2Nlc3Nvci4gRGVidWdnaW5nIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB0aG9zZSBwcm9jZXNzb3JzIHRoYXQKLQkJCXN1cHBvcnQgdGhlIGZlYXR1cmUgYW5kIHBsdWcgaW50byB0aGUgZXh0ZW5zaW9uIHBvaW50LiBUaGUgWFNMIFRvb2xzCi0JCQlkZWJ1Z2dlciBsZXZlcmFnZXMgdGhlIGV4aXN0aW5nIGVjbGlwc2UgcGxhdGZvcm0gRGVidWcgVmlldzwvcGFyYT4KLQkJPGZpZ3VyZSBpZD0iZmlnX1hTTERlYnVnIj4KLQkJCTx0aXRsZT5YU0xUIERlYnVnZ2luZzwvdGl0bGU+Ci0JCQkJPG1lZGlhb2JqZWN0PgotCQkJCQk8aW1hZ2VvYmplY3Q+Ci0JCQkJCQk8aW1hZ2VkYXRhCi0JCQkJCQkJYWxpZ249ImNlbnRlciIKLQkJCQkJCQlmb3JtYXQ9IlBORyIKLQkJCQkJCQlmaWxlcmVmPSIuLi9pbWFnZXMvbGF1bmNoaW5nL1hTTERlYnVnZ2luZy5wbmciIC8+Ci0JCQkJCTwvaW1hZ2VvYmplY3Q+Ci0JCQkJPC9tZWRpYW9iamVjdD4KLQkJPC9maWd1cmU+Ci0JCTxwYXJhPgotCQkJSG93IHRoZSBkZWJ1Z2dlciBhY3RzIHdpbGwgZGVwZW5kIG9uIHRoZSBwcm9jZXNzb3IgYmVpbmcgdXNlZC4gTm90Ci0JCQlhbGwgWFNMVCBwcm9jZXNzb3JzIHBhc3MgdGhlIHNhbWUgdHlwZSBvZiBpbmZvcm1hdGlvbiB0byB0aGUKLQkJCWRlYnVnZ2VyLiBUaGVzZSBkaWZmZXJlbmNlcyB3aWxsIGJlIG5vdGVkIGluIHRoZQotCQkJPHhyZWYKLQkJCQlsaW5rZW5kPSJYU0xEZWJ1Z1Byb2Nlc3NvclNwZWNpZmljIiAvPgotCQkJc2VjdGlvbi4KLQkJPC9wYXJhPgotCQk8c2VjdGlvbgotCQkJaWQ9IkRlYnVnR2V0dGluZ1N0YXJ0ZWQiPgotCQkJPD9kYmh0bWwgZmlsZW5hbWU9ImxhdW5jaGluZy9kZWJ1Z2dpbmdfZ2V0dGluZ1N0YXJ0ZWQuaHRtbCIgPz4KLQkJCTx0aXRsZT5TdGFydGluZyBhIERlYnVnIFNlc3Npb248L3RpdGxlPgotCQkJPHBhcmE+IERlYnVnZ2luZyBpcyBzdGFydGVkIHRoZSBzYW1lIHdheSBhcyBsYXVuY2hpbmcgYW4gWFNMCi0JCQkJVHJhbmZvcm1hdGlvbiBpcyBkb25lLiBFeGNlcHQgdGhhdCB0aGUgZGVidWcgY29uZmlndXJhdGlvbiBpcyB1c2VkCi0JCQkJaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGxhdW5jaCBjb25maWd1cmF0aW9uLiBJZiBhIGRlYnVnZ2luZyBzZXNzaW9uCi0JCQkJaXMgc3RhcnRlZCBvbiBhIHByb2Nlc3NvciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgZGVidWdnaW5nLCBhIGRpYWxvZwotCQkJCXdpbGwgYXNrIGlmIHlvdSB3YW50IHRvIHN3aXRjaCB0byBvbmUgb2YgdGhlIHN1cHBvcnRlZCBkZWJ1Z2dlcnMuCi0JCQk8L3BhcmE+Ci0JCQk8bm90ZT4KLQkJCQk8dGl0bGU+RGVmYXVsdCBKUkU8L3RpdGxlPgotCQkJCTxwYXJhPiBUaGUgZGVmYXVsdCBKUkUgZG9lcyBub3QgaGF2ZSBidWlsdCBpbiBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcsCi0JCQkJCWV2ZW4gdGhvdWdoIGl0IGlzIGJhc2VkIG9uIEFwYWNoZSBYYWxhbi4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlCi0JCQkJCVhhbGFuIG9yIGFub3RoZXIgcHJvY2Vzc29yIHByb3ZpZGVkIGJ5IGFuIGFkb3B0ZXIgdG8gZG8geW91cgotCQkJCQl0cmFuc2Zvcm1hdGlvbnMuIFRoZSBkZWZhdWx0IHByb2Nlc3NvciBpcyBrbm93biB0byBoYXZlIHNvbWUgaXNzdWVzCi0JCQkJCXRoYXQgWGFsYW4gYW5kIG90aGVyIHByb2Nlc3NvcnMgZG8gbm90IGhhdmUuPC9wYXJhPgotCQkJPC9ub3RlPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uCi0JCQlpZD0iWFNMRGVidWdDb21tb24iPgotCQk8P2RiaHRtbCBmaWxlbmFtZT0ibGF1bmNoaW5nL2RlYnVnZ2luZ19jb21tb24uaHRtbCIgPz4KLQkJCTx0aXRsZT5Db21tb24gRGVidWdnaW5nIE9wZXJhdGlvbnM8L3RpdGxlPgotCQkJPHBhcmE+Ci0JCQkJWFNMVCBkZWJ1Z2dpbmcgaXMgaGFuZGxlZCBieSB0aGUgZWNsaXBzZSBwbGF0Zm9ybXMgZGVidWdnaW5nCi0JCQkJZnJhbWV3b3JrIHN1cHBvcnQgYXMgb3V0bGluZWQgaW4gdGhlCi0JCQkJPHVsaW5rCi0JCQkJCXVybD0iL2hlbHAvdG9waWMvb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLmlzdi9ndWlkZS9kZWJ1Z19kZWJ1Zy5odG0iPiJQcm9ncmFtIERlYnVnIGFuZCBMYXVuY2ggU3VwcG9ydCI8L3VsaW5rPgotCQkJCS4gQ29tbW9uIG9wZXJhdGlvbnMgbGlrZSBzdGVwcGluZyBpbnRvIChGNSksIHN0ZXBwaW5nIG92ZXIgKEY2KSwKLQkJCQlwYXVzaW5nLCBydW5uaW5nIHRvIGEgYnJlYWtwb2ludCwgYW5kIHJlbGF1bmNoaW5nIGFyZSBzdXBwb3J0ZWQuIEluCi0JCQkJYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIFZhcmlhYmxlIGFuZCBCcmVha3BvaW50IHZpZXdzIHByb3ZpZGVkIGJ5Ci0JCQkJdGhlIHBsYXRmb3JtLCB0aGVyZSBhcmUgc29tZSBYU0xUIHNwZWNpZmljIHZpZXdzIGFuZCBmdW5jdGlvbmFsaXR5Ci0JCQkJYXMgd2VsbC4gQWxsIG9mIHRoZXNlIGFyZSBjb21tb24gcmVnYXJkbGVzcyBvZiB0aGUgcGFydGljdWxhciBYU0xUCi0JCQkJZGVidWdnZXIgYmVpbmcgdXNlZC4KLQkJCTwvcGFyYT4KLQkJCTx0aXA+Ci0JCQkJPHRpdGxlPkludHJvZHVjdGlvbiB0byBFY2xpcHNlIERlYnVnZ2luZzwvdGl0bGU+Ci0JCQkJPHBhcmE+Ci0JCQkJCTx1bGluawotCQkJCQkJdXJsPSJodHRwOi8vd3d3Lm1jcy52dXcuYWMubnovY291cnNlcy9DT01QMjA1LzIwMDdUMS90b29scy9lY2xpcHNlL2RlYnVnZ2luZy9iYXNpY3Muc2h0bWwiPkJhc2ljIERlYnVnZ2luZyBpbiBFY2xpcHNlPC91bGluaz4KLQkJCQkJY29udGFpbnMgYSBnb29kIGdlbmVyYWwgaW50cm9kdWN0aW9uIHRvIHRoZSBiYXNpYyBmZWF0dXJlcyBwcm92aWRlZAotCQkJCQlieSB0aGUgRWNsaXBzZSBEZWJ1ZyB2aWV3LiBYU0wgVG9vbHMgbGV2ZXJhZ2VzIG1hbnkgb2YgdGhlc2UKLQkJCQkJZmVhdHVyZXMgYW5kIHRoZSBzYW1lIGNvbmNlcHRzIGFwcGx5IHRvIHRoZSBYU0wgVG9vbHMgZGVidWdnZXIuCi0JCQkJPC9wYXJhPgotCQkJPC90aXA+Ci0JCQk8cGFyYT4gSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIGZlYXR1cmVzIGFuZCBmdW5jdGlvbmFsaXR5LCB0aGUKLQkJCQlYU0wgVG9vbHMgZGVidWdnaW5nIHN1cHBvcnQgYWRkcyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgaXRlbXM6Ci0JCQk8L3BhcmE+Ci0JCQk8aXRlbWl6ZWRsaXN0PgotCQkJCTxsaXN0aXRlbT4KLQkJCQkJPHBhcmE+IFJlc3VsdCBWaWV3PC9wYXJhPgotCQkJCTwvbGlzdGl0ZW0+Ci0JCQkJPGxpc3RpdGVtPgotCQkJCQk8cGFyYT5YU0xUIHNwZWNpZmljIFZhcmlhYmxlczwvcGFyYT4KLQkJCQk8L2xpc3RpdGVtPgotCQkJCTxsaXN0aXRlbT4KLQkJCQkJPHBhcmE+WFNMVCBQcm9jZXNzb3IgU3BlY2lmaWMgRnVuY3Rpb25hbGl0eTwvcGFyYT4KLQkJCQk8L2xpc3RpdGVtPgotCQkJPC9pdGVtaXplZGxpc3Q+Ci0JCQk8c2VjdGlvbgotCQkJCWlkPSJYU0xEZWJ1Z1Jlc3VsdFZpZXciPgotCQkJPD9kYmh0bWwgZmlsZW5hbWU9ImxhdW5jaGluZy9kZWJ1Z2dpbmdfcmVzdWx0dmlldy5odG1sIiA/PgotCQkJCTx0aXRsZT5SZXN1bHQgVmlldzwvdGl0bGU+Ci0JCQkJPHBhcmE+IFRoZSBYU0xUIERlYnVnZ2VyIGhhcyBhIHJlc3VsdCB2aWV3LiBUaGlzIHdpbGwgc2hvdyB0aGUKLQkJCQkJb3V0cHV0IHRoYXQgdGhlIHN0eWxlc2hlZXQgaGFzIGdlbmVyYXRlZCB0byB0aGUgY3VycmVudCBicmVhayBwb2ludAotCQkJCQlvciBzaW5jZSB0aGUgbGFzdCBzdGVwIGNvbW1hbmQgd2FzIGlzc3VlZC48L3BhcmE+Ci0JCQkJPG1lZGlhb2JqZWN0PgotCQkJCQk8aW1hZ2VvYmplY3Q+Ci0JCQkJCQk8aW1hZ2VkYXRhCi0JCQkJCQkJYWxpZ249ImNlbnRlciIKLQkJCQkJCQlmb3JtYXQ9IlBORyIKLQkJCQkJCQlmaWxlcmVmPSIuLi9pbWFnZXMvbGF1bmNoaW5nL3Jlc3VsdFZpZXcucG5nIiAvPgotCQkJCQk8L2ltYWdlb2JqZWN0PgotCQkJCTwvbWVkaWFvYmplY3Q+Ci0JCQkJPHBhcmE+IFRoZSByZXN1bHQgdmlldyBpcyB1cGRhdGVkIHRocm91Z2hvdXQgdGhlIGRlYnVnZ2luZyBwcm9jZXNzLAotCQkJCQlhbmQgaXMgdXNlZnVsIHRvIGhlbHAgc2VlIHdoYXQgb3V0cHV0IGlzIGdlbmVyYXRlZCBhdCBzcGVjaWZpYwotCQkJCQlwb2ludHMgZHVyaW5nIGEgdHJhbnNmb3JtYXRpb24uPC9wYXJhPgotCQkJPC9zZWN0aW9uPgotCQkJPHNlY3Rpb24KLQkJCQlpZD0iWFNMRGVidWdWYXJpYWJsZXMiPgotCQkJPD9kYmh0bWwgZmlsZW5hbWU9ImxhdW5jaGluZy9kZWJ1Z2dpbmdfdmFyaWFibGVzdmlldy5odG1sIiA/PgotCQkJCTx0aXRsZT5WYXJpYWJsZXMgVmlldzwvdGl0bGU+Ci0JCQkJPHBhcmE+IFRoZSB2YXJpYWJsZXMgdmlldyB3aWxsIHNob3cgYWxsIHRoZSBsb2NhbCBhbmQgZ2xvYmFsCi0JCQkJCXZhcmlhYmxlcyBhbmQgcGFyYW1zIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBzY29wZS4gVGhlcmUgYXJlIHR3bwotCQkJCQl0eXBlcyBvZiB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgdmlld3MuPC9wYXJhPgotCQkJCTxtZWRpYW9iamVjdD4KLQkJCQkJPGltYWdlb2JqZWN0PgotCQkJCQkJPGltYWdlZGF0YQotCQkJCQkJCWFsaWduPSJjZW50ZXIiCi0JCQkJCQkJZm9ybWF0PSJQTkciCi0JCQkJCQkJZmlsZXJlZj0iLi4vaW1hZ2VzL2xhdW5jaGluZy9ub2Rlc2V0VmFyaWFibGUucG5nIiAvPgotCQkJCQk8L2ltYWdlb2JqZWN0PgotCQkJCTwvbWVkaWFvYmplY3Q+Ci0JCQkJPGl0ZW1pemVkbGlzdD4KLQkJCQkJPHRpdGxlPlZhcmlhYmxlIFR5cGVzPC90aXRsZT4KLQkJCQkJPGxpc3RpdGVtPgotCQkJCQkJPHBhcmE+Ci0JCQkJCQkJPGVtcGhhc2lzPlN0cmluZzwvZW1waGFzaXM+Ci0JCQkJCQkJLSBUaGVzZSBjb250YWluIHRleHQgdmFsdWVzLiBUaGlzIGNvdWxkIGJlIHN0cmluZ3Mgb2YgdGV4dCwKLQkJCQkJCQludW1iZXJzLCBvciBvdGhlciBjaGFyYWN0ZXJzLgotCQkJCQkJPC9wYXJhPgotCQkJCQk8L2xpc3RpdGVtPgotCQkJCQk8bGlzdGl0ZW0+Ci0JCQkJCQk8cGFyYT4KLQkJCQkJCQk8ZW1waGFzaXM+Tm9kZXNldHM8L2VtcGhhc2lzPgotCQkJCQkJCS0gTm9kZXNldHMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSB2YXJpYWJsZXMgdmlldyBhcyBleHBhbmRhYmxlCi0JCQkJCQkJdmFyaWFibGVzLiBUaGV5IGNvbnRhaW4gc2VxdWVuY2VzIG9mIG5vZGVzLiBUaGUgdHlwZSBvZiBub2RlcyBhcmUKLQkJCQkJCQlyZXByZXNlbnRlZCBieSBpY29ucyBmb3IgZWxlbWVudHMsIGF0dHJpYnV0ZXMsIHRleHQsIGNvbW1lbnRzIG9yCi0JCQkJCQkJcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuCi0JCQkJCQk8L3BhcmE+Ci0JCQkJCTwvbGlzdGl0ZW0+Ci0JCQkJPC9pdGVtaXplZGxpc3Q+Ci0JCQkJPG5vdGU+Ci0JCQkJCTx0aXRsZT5DYW4gSSBjaGFuZ2UgdGhlIHZhbHVlIG9mIHZhcmlhYmxlcz88L3RpdGxlPgotCQkJCQk8cGFyYT4gQ3VycmVudGx5IHRoZSBYU0xUIERlYnVnZ2VyIGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhlCi0JCQkJCQl2YWx1ZXMgb3IgY29udGVudHMgb2YgYSB2YXJpYWJsZS4gQWxsIFhTTFQgdmFyaWFibGVzIGFyZSByZWFkCi0JCQkJCQlvbmx5LjwvcGFyYT4KLQkJCQk8L25vdGU+Ci0JCQk8L3NlY3Rpb24+Ci0JCTwvc2VjdGlvbj4KLQkJPHNlY3Rpb24KLQkJCWlkPSJYU0xEZWJ1Z1Byb2Nlc3NvclNwZWNpZmljIj4KLQkJCTw/ZGJodG1sIGZpbGVuYW1lPSJsYXVuY2hpbmcvZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCIgPz4KLQkJCTx0aXRsZT5YU0xUIFByb2Nlc3NvciBTcGVjaWZpYyBTdXBwb3J0PC90aXRsZT4KLQkJCTxwYXJhPiBWYXJpb3VzIFhTTFQgcHJvY2Vzc29ycyBwcm92aWRlIHZhcmlvdXMgbGV2ZWxzIG9mIGRlYnVnZ2luZwotCQkJCXN1cHBvcnQuIE1hbnkgZG8gbm90IHByb3ZpZGUgc3VwcG9ydCBmb3IgZGVidWdnaW5nIG9mIHN0eWxlc2hlZXRzLAotCQkJCWFuZCB0aHVzIGNhbid0IGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4gWFNMIFRvb2xzIHByb3ZpZGVzIGJhc2ljCi0JCQkJc3VwcG9ydCBmb3IgWGFsYW4sIGFuZCBjYW4gYmUgdXNlZCBhcyBhIGd1aWRlIGZvciBhZG9wdGVycyBvbiBob3cgdG8KLQkJCQlpbXBsZW1lbnQgdGhlaXIgb3duIHNwZWNpZmljIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBvdGhlciBwcm9jZXNzb3JzLgotCQkJPC9wYXJhPgotCQkJPHNlY3Rpb24KLQkJCQlpZD0iWFNMRGVidWdYYWxhbiI+Ci0JCQkJPHRpdGxlPlhTTCBEZWJ1Z2dpbmcgd2l0aCBYYWxhbjwvdGl0bGU+Ci0JCQkJPHBhcmE+IFhhbGFuIHByb3ZpZGVzIGdlbmVyYWwgc3R5bGVzaGVldCBleGVjdXRpb24gYW5kIGV2YWxhdGlvbgotCQkJCQlmdW5jdGlvbmFsaXR5LiBIb3dldmVyIHRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdGhhdCBYYWxhbiBkb2VzIG5vdAotCQkJCQlzdXBwb3IgdGhhdCBvdGhlciBwcm9jZXNzb3JzIGRvLjwvcGFyYT4KLQkJCQk8b3JkZXJlZGxpc3Q+Ci0JCQkJCTx0aXRsZT5YYWxhbiBEZWJ1Z2dpbmcgSXNzdWVzPC90aXRsZT4KLQkJCQkJPGxpc3RpdGVtPgotCQkJCQkJPHBhcmE+Ci0JCQkJCQkJPGVtcGhhc2lzPkJyZWFrcG9pbnRzPC9lbXBoYXNpcz4KLQkJCQkJCQktIFhhbGFuIGRvZXMgbm90IHN1cHBvcnQgc3RvcHBpbmcgYXQgR2xvYmFsIFZhcmlhYmxlcyBvcgotCQkJCQkJCVBhcmFtZXRlcnMgd2hlbiBhIGRlYnVnZ2luZyBzZXNzaW9uIGlzIHN0YXJ0ZWQuIEl0IHdpbGwKLQkJCQkJCQlhdXRvbWF0aWNhbGx5IHN0YXJ0IGF0IHRoZSBmaXJzdCB0ZW1wbGF0ZS4gQnJlYWsgcG9pbnRzIG11c3QgYmUKLQkJCQkJCQlwbGFjZWQgaW4gdGVtcGxhdGVzIHRvIGJlIGhvbm9yZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdAotCQkJCQkJCVhhbGFuIGxhemlseSBpbml0aWFsaXplcyB0aGUgdmFyaWFibGVzIG9ubHkgd2hlbiB0aGV5IGFyZSBmaXJzdAotCQkJCQkJCXVzZWQuCi0JCQkJCQk8L3BhcmE+Ci0JCQkJCTwvbGlzdGl0ZW0+Ci0JCQkJCTxsaXN0aXRlbT4KLQkJCQkJCTxwYXJhPgotCQkJCQkJCTxlbXBoYXNpcz5YU0xUIFRleHQgZWxlbWVudHM8L2VtcGhhc2lzPgotCQkJCQkJCS0gWGFsYW4gZG9lcyBub3Qgc2VuZCBub3RpZmljYXRpb25zIG9mIHhzbDp0ZXh0IGVsZW1lbnRzLiBUaGVzZQotCQkJCQkJCWFyZSBza2lwcGVkIG92ZXIgd2hlbiBkZWJ1Z2dpbmcuCi0JCQkJCQk8L3BhcmE+Ci0JCQkJCTwvbGlzdGl0ZW0+Ci0JCQkJCTxsaXN0aXRlbT4KLQkJCQkJCTxwYXJhPgotCQkJCQkJCTxlbXBoYXNpcz5CdWlsdCBJbiBUZW1wbGF0ZXM8L2VtcGhhc2lzPgotCQkJCQkJCS0gWGFsYW4gZG9lcyBwcm92aWRlIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBidWlsdCBpbiB0ZW1wbGF0ZXMgYXJlCi0JCQkJCQkJY2FsbGVkLCBidXQgY3VycmVudGx5IHRoZSBkZWJ1Z2dlciBkb2VzIG5vdCBzdXBwb3J0IG9yIGRpc3BsYXkKLQkJCQkJCQlzdGVwcGluZyBpbnRvIHRoZXNlIHRlbXBsYXRlcy4KLQkJCQkJCTwvcGFyYT4KLQkJCQkJPC9saXN0aXRlbT4KLQkJCQk8L29yZGVyZWRsaXN0PgotCQkJPC9zZWN0aW9uPgotCQk8L3NlY3Rpb24+Ci0JPC9zZWN0aW9uPgotPC9jaGFwdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9sZWdhbC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svbGVnYWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmU4ODQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9sZWdhbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgotICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiPgotPGNoYXB0ZXI+Ci0JPD9kYmh0bWwgZmlsZW5hbWU9ImxlZ2FsLmh0bWwiID8+Ci0JPHRpdGxlPk5vdGljZXM8L3RpdGxlPgotCTxwYXJhPgotICAgICAgVGhlIG1hdGVyaWFsIGluIHRoaXMgZ3VpZGUgaXMgQ29weXJpZ2h0IChjKSBEb3VnIFNhdGNod2VsbCAoPHVsaW5rIHVybD0iaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsiPkNoYXNlIFRlY2hub2xvZ3kgTHRkPC91bGluaz4pLCAKLSAgICAgIERhdmlkIENhcnZlciAoPHVsaW5rIHVybD0iaHR0cDovL3d3dy5zdGFyc3RhbmRhcmQub3JnIj5TdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWw8L3VsaW5rPikKLSAgICAgIGFuZCBvdGhlcnMgMjAwOC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0JCVRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotCQl0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKLQkJPHVsaW5rIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC91bGluaz4uCi0gICAgPC9wYXJhPgotCTxwYXJhPgotCQk8dWxpbmsgdXJsPSJhYm91dC5odG1sIj5UZXJtcyBhbmQgY29uZGl0aW9ucyByZWdhcmRpbmcgdGhlIHVzZSBvZiB0aGlzIGd1aWRlLjwvdWxpbms+LgotCTwvcGFyYT4KLTwvY2hhcHRlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYwOTQ2Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNS8vRU4iCi0gICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L2RvY2Jvb2t4LmR0ZCI+Ci08Y2hhcHRlciBpZD0iWFNMUHJlZmVyZW5jZXMiPgotCTw/ZGJodG1sIGZpbGVuYW1lPSJwcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5odG1sIiA/PgotICAgIDx0aXRsZT5YU0wgVG9vbHMgUHJlZmVyZW5jZXM8L3RpdGxlPgotICAgIDxwYXJhPiBUaGUgWFNMIFByZWZlcmVuY2UgcGFnZXMgaGFzIHNldmVyYWwgc3ViIHNlY3Rpb25zLiBFYWNoIG9mIHRoZXNlIGFsbG93IGZvcgotICAgICAgICBjb25maWd1cmF0aW9uIG9mIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcHJlZmVyZW5jZXMuIEZyb20gdGhlIGNvbnRyb2xsaW5nIG9mIHRoZQotICAgICAgICBkZWZhdWx0IFhTTCBwcm9jZXNzb3IgdG8gYmUgdXNlZCBkdXJpbmcgdHJhbnNmb3JtYXRpb25zLiBUbyBleHRlbmRpbmcgdGhlIGNvbnRlbnQKLSAgICAgICAgYXNzaXN0IHN1cHBvcnQgb2YgdGhlIFhQYXRoIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gdGhlIFhNTCBlZGl0b3IuPC9wYXJhPgotICAgIDxmaWd1cmUgaWQ9ImZpZ19YU0xQcmVmZXJlbmNlcyI+Ci0gICAgICAgIDx0aXRsZT5YU0wgVG9vbHMgUHJlZmVyZW5jZXM8L3RpdGxlPgotICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIiBmaWxlcmVmPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMucG5nIgotICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9IlBORyIvPgotICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgPC9tZWRpYW9iamVjdD4KLSAgICA8L2ZpZ3VyZT4KLSAgICA8c2VjdGlvbiBpZD0iWFNMRmVhdHVyZXMiPgotCQk8P2RiaHRtbCBmaWxlbmFtZT0icHJlZmVyZW5jZXMveHNsZmVhdHVyZXMuaHRtbCIgPz4KLSAgICAgICAgPHRpdGxlPkZlYXR1cmVzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+IFRoZSBYU0wgRmVhdHVyZXMgcHJlZmVyZW5jZSBwYWdlIGFsbG93cyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgZmVhdHVyZXMKLSAgICAgICAgICAgIGZvciBhIHBhcnRpY3VsYXIgcHJvY2Vzc29yLiBYU0wgVG9vbHMgY29tZXMgd2l0aCBYYWxhbiAyLjcuMCBieSBkZWZhdWx0LgotICAgICAgICAgICAgQWRvcHRlcnMgY2FuIGV4dGVuZCBhbmQgaW5jbHVkZSB0aGVpciBvd24gc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHRoZWlyIG93bgotICAgICAgICAgICAgcHJvY2Vzb29ycy4gQW4gYWRvcHRlciBjb3VsZCBleHRlbmQgdGhlIHRvb2xpbmcgdG8gc3VwcG9ydCBYU0xUIDIuMAotICAgICAgICAgICAgdHJhbnNmb3JtYXRpb25zLCBhbmQgZmVhdHVyZXMgcGFydGljdWxhciB0byB0aGF0IHBhcnNlci48L3BhcmE+Ci0gICAgICAgIDxtZWRpYW9iamVjdD4KLSAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZvcm1hdD0iUE5HIgotICAgICAgICAgICAgICAgICAgICBmaWxlcmVmPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nIi8+Ci0gICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPlByb2Nlc3NvciBUeXBlPC9lbXBoYXNpcz4KLSAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gc2V0IGZlYXR1cmVzIGZvciBhIHNwZWNpZmljIHByb2Nlc3Nvci4gSW4gdGhpcyBjYXNlIHRoaXMgaXMgZm9yCi0gICAgICAgICAgICB0aGUgcHJvY2Vzc29yIHRoYXQgaXMgYmVpbmcgaW5zdGFsbGVkLiBYU0wgVG9vbHMgY29tZXMgd2l0aCBYYWxhbiAyLjcuMCwgYW5kCi0gICAgICAgICAgICBpdCBpcyB0aGUgb25seSBhdmFpbGFibGUgcHJvY2Vzc29yIHR5cGUgYnkgZGVmYXVsdC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8cGFyYT4gVGhlIGZlYXR1cmUgdGFibGUgbGlzdHMgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBwcm9jZXNzb3IKLSAgICAgICAgICAgIHRoYXQgd2FzIHNlbGVjdGVkLiBBcyB5b3Ugc2VsZWN0IGVhY2ggb2YgdGhlIGZlYXR1cmVzLCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKLSAgICAgICAgICAgIHRoYXQgZmVhdHVyZSBhbmQgaXQncyBhYmlsaXRpZXMgaXMgZGlzcGxheWVkIGluIHRoZSBkZXNjcmlwdGlvbiBib3guIEJ5Ci0gICAgICAgICAgICBjbGlja2luZyBpbiB0aGUgdmFsdWUgY29sdW1uLCBuZXh0IHRvIHRoZSBmZWF0dXJlIHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUKLSAgICAgICAgICAgIGZvciwgdGhlIHVzZXIgY2FuIHNldCB0aGUgZmVhdHVyZS48L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJYU0xQcm9jZXNzb3JzIj4KLQkJPD9kYmh0bWwgZmlsZW5hbWU9InByZWZlcmVuY2VzL3hzbHByb2Nlc3NvcnMuaHRtbCIgPz4KLSAgICAgICAgPHRpdGxlPkluc3RhbGxlZCBQcm9jZXNzb3JzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+IFRoZSBpbnN0YWxsZWQgcHJvY2Vzc29ycyBwYWdlIGxldHMgeW91IHBpY2sgd2hpY2ggb2YgdGhlIGluc3RhbGxlZCBYU0xUCi0gICAgICAgICAgICBwcm9jZXNzb3JzIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0LiBUaGUgZGVmYXVsdCBpcyB0aGUgU3lzdGVtIERlZmF1bHQKLSAgICAgICAgICAgIFByb2Nlc29vciwgYnV0IHlvdSBjYW4gc2VsZWN0IGFueSBvZiB0aGUgYXZhaWxhYmxlIHByb2Nlc3NvcnMgdG8gYmUgdXNlZCBhcwotICAgICAgICAgICAgdGhlIGRlZmF1bHQgcHJvY2Vzc29yLjwvcGFyYT4KLSAgICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgYWxpZ249ImNlbnRlciIKLSAgICAgICAgICAgICAgICAgICAgZmlsZXJlZj0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9JbnN0YWxsZWRQcm9jZXNzb3JzLnBuZyIgZm9ybWF0PSJQTkciLz4KLSAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJYU0xPdXRwdXRQcm9wZXJ0aWVzIj4KLQkJPD9kYmh0bWwgZmlsZW5hbWU9InByZWZlcmVuY2VzL3hzbG91dHB1dHByb3BlcnRpZXMuaHRtbCIgPz4KLSAgICAgICAgPHRpdGxlPk91dHB1dCBQcm9wZXJ0aWVzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+IFRoZSB2YXJpb3VzIHhzbCBwcm9jZXNzb3JzIHN1cHBvcnQgYSB3aWRlIHZhcmlldHkgb2YgcHJvY2Vzc29yIHNwZWNpZmljCi0gICAgICAgICAgICB0d2Vha3MuIEhvd2V2ZXIgdGhlcmUgYXJlIHNldmVyYWwgU3RhbmRhcmQgcHJvY2Vzc29yIGZlYXR1cmVzIHRoYXQgYWxsIFhTTFQKLSAgICAgICAgICAgIHByb2Nlc3NvcnMgc3VwcG9ydC4gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc2V0IGFuZCB3aWxsIGFjdCBhcyB0aGUgZGVmYXVsdHMgZm9yCi0gICAgICAgICAgICBhbGwgdHJhbnNmb3JtYXRpb25zIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgb3ZlcnJpZGVuIGJ5IHRoZSBzdHlsZXNoZWV0Ci0gICAgICAgICAgICBvciB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24uPC9wYXJhPgotICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgICAgICAgICBmaWxlcmVmPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nIiBmb3JtYXQ9IlBORyIvPgotICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgPC9tZWRpYW9iamVjdD4KLSAgICAgICAgPHBhcmE+IEluIGFkZGl0aW9uIHRvIHRoZSBTdGFuZGFyZCBPdXRwdXQgUHJvcGVydGllcywgZWFjaCBYU0xUIHByb2Nlc3NvciBjYW4gaGF2ZQotICAgICAgICAgICAgcHJvY2Vzc29ycyBzcGVjaWZpYyBmZWF0dXJlcy48L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJYUGF0aFRlbXBsYXRlcyI+Ci0JCTw/ZGJodG1sIGZpbGVuYW1lPSJwcmVmZXJlbmNlcy94cGF0aHRlbXBsYXRlcy5odG1sIiA/PgotICAgICAgICA8dGl0bGU+WFBhdGggVGVtcGxhdGVzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+IFhQYXRoIHRlbXBsYXRlIHByb3Bvc2FsIGlzIHN1cHBvcnRlZCBieSB0aGUgWFNMIFRvb2xpbmcgcHJvamVjdCB0aHJvdWdoIHRoZQotICAgICAgICAgICAgYnVpbHQgaW4gdGVtcGxhdGUgZnVuY3Rpb25hbGl0eSBvZiBlY2xpcHNlLiBVc2VycyBhbmQgQWRvcHRlcnMgY2FuIGFkZCB0aGVpcgotICAgICAgICAgICAgb3duIHNwZWNpZmljIHhwYXRoIGV4dGVuc2lvbnMgZm9yIHByb2Nlc3NvciBzcGVjaWZpYyBleHRlbnNpb25zLiBBbiBleGFtcGxlCi0gICAgICAgICAgICB3b3VsZCBiZSB0byBhZGQgdGhlIEVYU0xUIGV4dGVuc2lvbnMgZm9yIHByb3Bvc2FsIHN1cHBvcnQuPC9wYXJhPgotICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICA8aW1hZ2VvYmplY3Q+Ci0gICAgICAgICAgICAgICAgPG9iamVjdGluZm8+Ci0gICAgICAgICAgICAgICAgICAgIDx0aXRsZT5YUGF0aCBUZW1wbGF0ZXM8L3RpdGxlPgotICAgICAgICAgICAgICAgIDwvb2JqZWN0aW5mbz4KLSAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZpbGVyZWY9Ii4uL2ltYWdlcy9wcmVmZXJlbmNlcy9YUGF0aFRlbXBsYXRlcy5wbmciCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iUE5HIi8+Ci0gICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICA8L21lZGlhb2JqZWN0PgotICAgICAgICA8cGFyYT4gVGhlIGZvbGxvd2luZyBjb250ZW50IHR5cGVzIGFyZSBhdmFpbGFibGU6PC9wYXJhPgotICAgICAgICA8aXRlbWl6ZWRsaXN0PgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+YXhpczwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgICAgIC0gYW4gWFBhdGggbmF2aWdhdGlvbiBheGlzIHN0YXRlbWVudC4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+ZXhzbHQ8L2VtcGhhc2lzPgotICAgICAgICAgICAgICAgICAgICAtIEFuIFhQYXRoIHN0YXRlbWVudCB0aGF0IGlzIGRlZmluZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cuZXhzbHQub3JnLyI+RVhTTFQ8L3VsaW5rPgotICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LiBYYWxhbiBhbmQgbW9zdCBvdGhlciBwcm9jZXNzb3JzIGhhdmUgYnVpbHQgaW4gc3VwcG9ydCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIEVYU0xUIGxpYnJhcnkuCi0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnhwYXRoPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIGFuIFhQQVRIIDEuMCBmdW5jdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9ucyBhcyBkZWZpbmVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBYUGF0aCAxLjAgc3BlY2lmaWNhdGlvbi4KLSAgICAgICAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICAgICA8L2xpc3RpdGVtPgotICAgICAgICAgICAgPGxpc3RpdGVtPgotICAgICAgICAgICAgICAgIDxwYXJhPgotICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXMgcm9sZT0iYm9sZCI+eHBhdGggMi4wPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIGFuIFhQYXRoIDIuMCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk5vdGU6IFRoYXQgY3VycmVudGx5IFhTTCBUb29scyBvbmx5IHNoaXBzIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlcyBkZWZpbmVkIGZvciBYUGF0aCAxLjAgLjwvZW1waGFzaXM+Ci0gICAgICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgICAgICAgIDxsaXN0aXRlbT4KLSAgICAgICAgICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPm9wZXJhdG9yPC9lbXBoYXNpcz4KLSAgICAgICAgICAgICAgICAgICAgLSBBbiB4cGF0aCBsb2dpY2FsIG9wZXJhdG9yIGxpa2UgQU5ELCBPUiwgZXRjLgotICAgICAgICAgICAgICAgIDwvcGFyYT4KLSAgICAgICAgICAgIDwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgICA8c2VjdGlvbiBpZD0iWFBhdGhUZW1wbGF0ZU5ldyI+Ci0JCSAgIDw/ZGJodG1sIGZpbGVuYW1lPSJwcmVmZXJlbmNlcy94cGF0aHRlbXBsYXRlbmV3Lmh0bWwiID8+Ci0gICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgTmV3IFRlbXBsYXRlczwvdGl0bGU+Ci0gICAgICAgICAgICA8IS0tIFRPRE86IENyZWF0ZSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIG5ldyB0ZW1wbGF0ZXMtLT4KLSAgICAgICAgICAgIDxwYXJhPiBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBjcmVhdGluZyBuZXcgdGVtcGxhdGVzLjwvcGFyYT4KLSAgICAgICAgPC9zZWN0aW9uPgotICAgICAgICA8c2VjdGlvbiBpZD0iWFBhdGhJbXBvcnQiPgotCQkgICA8P2RiaHRtbCBmaWxlbmFtZT0icHJlZmVyZW5jZXMveHBhdGhpbXBvcnQuaHRtbCIgPz4KLSAgICAgICAgICAgIDx0aXRsZT5JbXBvcnQgWFBhdGggVGVtcGxhdGVzPC90aXRsZT4KLSAgICAgICAgICAgIDxwYXJhPiBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBpbXBvcnRpbmcgbmV3IHRlbXBsYXRlcy48L3BhcmE+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPHNlY3Rpb24gaWQ9IlhQYXRoRXhwb3J0Ij4KLQkJICAgPD9kYmh0bWwgZmlsZW5hbWU9InByZWZlcmVuY2VzL3hwYXRoZXhwb3J0Lmh0bWwiID8+Ci0gICAgICAgICAgICA8dGl0bGU+SW1wb3J0IFhQYXRoIFRlbXBsYXRlczwvdGl0bGU+Ci0gICAgICAgICAgICA8cGFyYT4gQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgaW1wb3J0aW5nIG5ldyB0ZW1wbGF0ZXMuPC9wYXJhPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJwcmVmX1Byb2plY3RWYWxpZGF0aW9uUHJlZmVyZW5jZXMiPgotICAgICAgICA8P2RiaHRtbCBmaWxlbmFtZT0icHJlZmVyZW5jZXMvdmFsaWRhdGlvbi5odG1sIiA/PgotICAgICAgICA8dGl0bGU+UHJvamVjdCBWYWxpZGF0aW9uIFByZWZlcmVuY2VzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICBYU0wgVG9vbHMgaGFzIHRoZSBhYmlsaXR5IHRvIHNldCBib3RoIHdvcmtzcGFjZSB3aWRlIHByZWZlcmVuY2VzIGZvcgotICAgICAgICAgICAgdmFsaWRhdGlvbiBhcyB3ZWxsIGFzIHByb2plY3QgbGV2ZWwgcHJlZmVyZW5jZXMuIFRoZXNlIHByZWZlcmVuY2VzLCBhcyBzaG93bgotICAgICAgICAgICAgaW4KLSAgICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImZpZ19Qcm9qZWN0TGV2ZWxQcmVmZXJlbmNlcyIvPgotICAgICAgICAgICAgYWxsb3cgZm9yIHRoZSBmaW5lIGdyYWluIGNvbnRyb2wgb2Ygd2hhdCB0aGUgdmFsaWRhdG9yIHdpbGwgY29uc2lkZXIgdG8gYmUgYW4KLSAgICAgICAgICAgIHN5bnRheCBlcnJvci4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8ZmlndXJlIGlkPSJmaWdfUHJvamVjdExldmVsUHJlZmVyZW5jZXMiPgotICAgICAgICAgICAgPHRpdGxlPlByb2plY3QgTGV2ZWwgVmFsaWRhdGlvbiBQcmVmZXJlbmNlczwvdGl0bGU+Ci0gICAgICAgICAgICA8bWVkaWFvYmplY3Q+Ci0gICAgICAgICAgICAgICAgPGltYWdlb2JqZWN0PgotICAgICAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmVmPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMvcHJvamVjdExldmVsVmFsaWRhdGlvbi5wbmciIGZvcm1hdD0iUE5HIi8+Ci0gICAgICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KLSAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+Ci0gICAgICAgIDwvZmlndXJlPgotICAgICAgICA8cGFyYT4gVGhlc2UgcHJlZmVyZW5jZXMgYXJlIGFjY2Vzc2VkIHZpYSB0aGUgUHJvamVjdHMgcHJvcGVydGllcyBkaWFsb2cuPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLSAgICA8c2VjdGlvbiBpZD0icHJlZl9TeW50YXhDb2xvcmluZyI+Ci0gICAgICAgIDw/ZGJodG1sIGZpbGVuYW1lPSJwcmVmZXJlbmNlcy9zeW50YXhDb2xvcmluZy5odG1sIiA/PgotICAgICAgICA8dGl0bGU+WFNMVCBTeW50YXggQ29sb3Jpbmc8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAgIFhTTCBUb29scyBhbHNvIGhhcyB0aGUgYWJpbGl0eSB0byBzeW50YXggY29sb3IgdGhlIFhTTFQgbmFtZXNwYWNlIGl0ZW1zIGEgZGlmZmVyZW50Ci0gICAgICAgICAgICBjb2xvciB0aGFuIHRoZSByZXN0IG9mIHRoZSBYTUwgc3ludGF4IGluY2x1ZGVkLiAgIFRoZSBkZWZhdWx0IGlzIGZvciBhbGwgWFNMIHN5bnRheCB0byBiZQotICAgICAgICAgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPmJvbGQ8L2VtcGhhc2lzPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgICA8ZmlndXJlIGlkPSJmaWdfWFNMU3ludGF4Q29sb3JpbmdQcmVmZXJlbmNlIj4KLSAgICAgICAgICAgIDx0aXRsZT5YU0wgVG9vbHMgU3ludGF4IENvbG9yaW5nIFByZWZlcmVuY2U8L3RpdGxlPgotICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgotICAgICAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KLSAgICAgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJlZj0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbFN5bnRheENvbG9yaW5nLnBuZyIgZm9ybWF0PSJQTkciLz4KLSAgICAgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgotICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KLSAgICAgICAgPC9maWd1cmU+Ci0gICAgICAgIDxub3RlPgotICAgICAgICAgICAgPHRpdGxlPlhNTCBDb2xvcnM8L3RpdGxlPgotICAgICAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgICAgICAgVGhlIGNvbG9yIGZvciBzdGFuZGFyZCBYTUwgaXMgc3RpbGwgaGFuZGxlZCBieSB0aGUgWE1MIEZpbGVzIHN5bnRheCBjb2xvcmluZwotICAgICAgICAgICAgICAgIHByZWZlcmVuY2UgcGFnZS4gICBDaGFuZ2VzIG1hZGUgdGhlcmUgYXJlIHJlZmxlY3RlZCBpbiB0aGUgWFNMIGVkaXRvciBhcyB3ZWxsLgotICAgICAgICAgICAgPC9wYXJhPgotICAgICAgICA8L25vdGU+Ci0gICAgPC9zZWN0aW9uPgotPC9jaGFwdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9zYW1wbGVzL3NhbXBsZXMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL3NhbXBsZXMvc2FtcGxlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMGNmMWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL3NhbXBsZXMvc2FtcGxlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgotICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiPgotPGNoYXB0ZXI+Ci0JPD9kYmh0bWwgZmlsZW5hbWU9InNhbXBsZXMvc2FtcGxlcy5odG1sIiA/PgotCTx0aXRsZT5YU0wgVG9vbGluZyBTYW1wbGVzPC90aXRsZT4KLQk8cGFyYT5UaGlzIHNlY3Rpb24gY29udGFpbnMgc2V2ZXJhbCBzYW1wbGVzIGFuZCByZWZlcmVuY2VzIHRvIHNhbXBsZSBwcm9qZWN0cy48L3BhcmE+Ci0JPHNlY3Rpb24gaWQ9IkVjbGlwc2VIZWxwIj4KLQkJPD9kYmh0bWwgZmlsZW5hbWU9InNhbXBsZXMvZWNsaXBzZWhlbHAuaHRtbCIgPz4KLQkJPHRpdGxlPkVjbGlwc2UgSGVscDwvdGl0bGU+Ci0JCTxwYXJhPjwvcGFyYT4KLQkJPHNlY3Rpb24gaWQ9IkRvY2Jvb2tFY2xpcHNlSGVscCI+Ci0JCQk8P2RiaHRtbCBmaWxlbmFtZT0ic2FtcGxlcy9kb2Nib29raGVscC5odG1sIiA/PgotCQkJPHRpdGxlPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERvY2Jvb2sgYW5kIFhTTCBUb29sczwvdGl0bGU+Ci0JCQk8cGFyYT4KLQkJCQlUaGlzIHR1dG9yaWFsIGFzc3VtZXMgdGhhdCB5b3UgaGF2ZSBrbm93bGVkZ2Ugb2YgRG9jYm9vaywgQU5ULCBhbmQgdGhlCi0JCQkJYWJpbGl0eSB0byBzZXR1cCBBTlQgYnVpbGQgc2NyaXB0cy4KLQkJCTwvcGFyYT4KLQkJCTxwYXJhPgotCQkJCVRvIERvIHdyaXRlIHVwIHRoZSByZXN0IG9mIHRoZSB0dXRvcmlhbC4KLQkJCTwvcGFyYT4KLQkJPC9zZWN0aW9uPgotCQk8c2VjdGlvbiBpZD0iRElUQUVjbGlwc2VIZWxwIj4KLQkJCTw/ZGJodG1sIGZpbGVuYW1lPSJzYW1wbGVzL2RpdGFoZWxwLmh0bWwiID8+Ci0JCQk8dGl0bGU+Q3JlYXRpbmcgRWNsaXBzZSBIZWxwIHdpdGggRElUQSBhbmQgWFNMIFRvb2xzPC90aXRsZT4KLQkJCTxwYXJhPgotCQkJCVRoaXMgdHV0b3JpYWwgYXNzdW1lcyB0aGF0IHlvdSBoYXZlIGtub3dsZWRnZSBvZiBESVRBLCBBTlQsIGFuZCB0aGUKLQkJCQlhYmlsaXR5IHRvIHNldHVwIEFOVCBidWlsZCBzY3JpcHRzLgotCQkJPC9wYXJhPgotCQkJPHBhcmE+Ci0JCQkJVG8gRG8gd3JpdGUgdXAgdGhlIHJlc3Qgb2YgdGhlIHR1dG9yaWFsLgotCQkJPC9wYXJhPgotCQk8L3NlY3Rpb24+Ci0JPC9zZWN0aW9uPgotPC9jaGFwdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay94c2xoZWxwLmRiayBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay94c2xoZWxwLmRiawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA2NmNlOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2sveHNsaGVscC5kYmsKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIgotICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiPgotPGJvb2sgaWQ9IlhTTFVzZXIiIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KLSAgPGJvb2tpbmZvPgotICAgICAgPHRpdGxlPlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb248L3RpdGxlPgotICAgICAgPGF1dGhvcj4KLSAgICAgICAgIDxmaXJzdG5hbWU+RGF2aWQ8L2ZpcnN0bmFtZT4KLSAgICAgICAgIDxzdXJuYW1lPkNhcnZlcjwvc3VybmFtZT4KLSAgICAgIDwvYXV0aG9yPgotICAgICAgPGNvcHlyaWdodD4KLSAgICAgICAgIDx5ZWFyPjIwMDg8L3llYXI+Ci0gICAgICAgICA8aG9sZGVyPkVjbGlwc2UgRm91bmRhdGlvbiBhbmQgb3RoZXJzPC9ob2xkZXI+Ci0gICAgICA8L2NvcHlyaWdodD4KLSAgIDwvYm9va2luZm8+Ci0gICA8eGk6aW5jbHVkZSBocmVmPSJjb25jZXB0cy9nZXR0aW5nc3RhcnRlZC54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9ImNvbmNlcHRzL2NvbmNlcHRzLnhtbCIvPgotICAgPHhpOmluY2x1ZGUgaHJlZj0iZWRpdG9yL2VkaXRvci54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9ImxhdW5jaGluZy9sYXVuY2hpbmcueG1sIi8+Ci0gICA8eGk6aW5jbHVkZSBocmVmPSJwcmVmZXJlbmNlcy9wcmVmZXJlbmNlcy54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9ImdlbmVyYWwvZ2VuZXJhbC54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9InNhbXBsZXMvc2FtcGxlcy54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9ImxlZ2FsLnhtbCIvPgotPC9ib29rPgotCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvYWJvdXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvYm9vay5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvYm9vay5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMGY1YWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2Jvb2suY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLXAuQ29kZSB7Ci0JZGlzcGxheTogYmxvY2s7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLQl0ZXh0LWluZGVudDogMC4wMHB0OwotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDE1cHQ7Ci0JZm9udC13ZWlnaHQ6IG5vcm1hbDsKLQlmb250LXN0eWxlOiBub3JtYWw7Ci0JY29sb3I6ICM0NDQ0Q0M7Ci0JdGV4dC1kZWNvcmF0aW9uOiBub25lOwotCXZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLQl0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLQlmb250LWZhbWlseTogIkNvdXJpZXIgTmV3IiwgQ291cmllciwgbW9ub3NwYWNlOwotfQotCi1INi5DYXB0aW9uRmlnQ29sdW1uIHsKLQlkaXNwbGF5OiBibG9jazsKLQl0ZXh0LWFsaWduOiBsZWZ0OwotCXRleHQtaW5kZW50OiAwLjAwMDAwMHB0OwotCW1hcmdpbi10b3A6IDMuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMTEuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAwLjAwMDAwMHB0OwotCWZvbnQtc2l6ZTogNzUlOwotCWZvbnQtd2VpZ2h0OiBib2xkOwotCWZvbnQtc3R5bGU6IEl0YWxpYzsKLQljb2xvcjogIzAwMDAwMDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotCXRleHQtdHJhbnNmb3JtOiBub25lOwotfQotCi1wLk5vdGUgewotCWRpc3BsYXk6IGJsb2NrOwotCXRleHQtYWxpZ246IGxlZnQ7Ci0JdGV4dC1pbmRlbnQ6IDBwdDsKLQltYXJnaW4tdG9wOiAxOS41MDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAxOS41MDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDMwcHQ7Ci0JZm9udC1zaXplOiAxMTAlOwotCWZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0JZm9udC1zdHlsZTogSXRhbGljOwotCWNvbG9yOiAjMDAwMDAwOwotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQl2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Ci0JdGV4dC10cmFuc2Zvcm06IG5vbmU7Ci19Ci0KLUVNLlVJTGFiZWwgewotCWZvbnQtd2VpZ2h0OiBCb2xkOwotCWZvbnQtc3R5bGU6IG5vcm1hbDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0JdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotCXRleHQtdHJhbnNmb3JtOiBub25lOwotfQotCi1FTS5Db2RlTmFtZSB7Ci0JZm9udC13ZWlnaHQ6IEJvbGQ7Ci0JZm9udC1zdHlsZTogbm9ybWFsOwotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQl2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Ci0JdGV4dC10cmFuc2Zvcm06IG5vbmU7Ci0JZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIENvdXJpZXIsIG1vbm9zcGFjZTsKLX0KLQotVUwuTmF2TGlzdCB7Ci0JbWFyZ2luLWxlZnQ6IDEuNWVtOwotCXBhZGRpbmctbGVmdDogMHB4OwotCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKLX0KLQotYm9keSxodG1sIHsKLQlib3JkZXI6IDBweAotfQotCi0vKiBmb2xsb3dpbmcgZm9udCBmYWNlIGRlY2xhcmF0aW9ucyBuZWVkIHRvIGJlIHJlbW92ZWQgZm9yIERCQ1MgKi8KLWJvZHksaDEsaDIsaDMsaDQsaDUsaDYscCx0YWJsZSx0ZCxjYXB0aW9uLHRoLHVsLG9sLGRsLGxpLGRkLGR0IHsKLQlmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLQljb2xvcjogIzAwMDAwMAotfQotCi1wcmUsY29kZSB7Ci0JZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIENvdXJpZXIsIG1vbm9zcGFjZTsKLX0KLQotLyogZW5kIGZvbnQgZmFjZSBkZWNsYXJhdGlvbnMgKi8KLUBtZWRpYSBwcmludCB7Ci0JaHRtbCB7Ci0JCWZvbnQtc2l6ZTogMTJwdAotCX0KLX0KLQotYm9keSB7Ci0JZm9udC1zaXplOiA4MyU7Ci0JYmFja2dyb3VuZDogI0ZGRkZGRjsKLQltYXJnaW4tYm90dG9tOiAxZW0KLX0KLQotaDEgewotCWZvbnQtc2l6ZTogMTgwJTsKLQltYXJnaW4tdG9wOiA1cHg7Ci0JbWFyZ2luLWJvdHRvbTogMXB4Ci19Ci0KLWgyIHsKLQlmb250LXNpemU6IDE0MCU7Ci0JbWFyZ2luLXRvcDogMjVweDsKLQltYXJnaW4tYm90dG9tOiAzcHgKLX0KLQotaDMgewotCWZvbnQtc2l6ZTogMTEwJTsKLQltYXJnaW4tdG9wOiAyMHB4OwotCW1hcmdpbi1ib3R0b206IDNweAotfQotCi1oNCB7Ci0JZm9udC1zaXplOiAxMDAlOwotCW1hcmdpbi10b3A6IDIwcHg7Ci0JbWFyZ2luLWJvdHRvbTogM3B4OwotCWZvbnQtc3R5bGU6IGl0YWxpYwotfQotCi1wIHsKLQltYXJnaW4tdG9wOiAxMHB4OwotCW1hcmdpbi1ib3R0b206IDEwcHgKLX0KLQotcHJlIHsKLQlmb250LXNpemU6IDkzJTsKLQltYXJnaW4tbGVmdDogNjsKLQljb2xvcjogIzQ0NDRDQwotfQotCi1jb2RlIHsKLQlmb250LXNpemU6IDkzJTsKLX0KLQotdGFibGUgewotCWZvbnQtc2l6ZTogMTAwJQotfSAgLyogbmVlZGVkIGZvciBxdWlya3MgbW9kZSAqLwotYTpsaW5rIHsKLQljb2xvcjogIzAwMDBGRgotfQotCi1hOmhvdmVyIHsKLQljb2xvcjogIzAwMDA4MAotfQotCi1hOnZpc2l0ZWQgewotCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lCi19Ci0KLXVsIHsKLQltYXJnaW4tdG9wOiAxMHB4OwotCW1hcmdpbi1ib3R0b206IDEwcHg7Ci19Ci0KLWxpIHsKLQltYXJnaW4tdG9wOiA1cHg7Ci0JbWFyZ2luLWJvdHRvbTogNXB4OwotfQotCi1saSBwIHsKLQltYXJnaW4tdG9wOiA1cHg7Ci0JbWFyZ2luLWJvdHRvbTogNXB4OwotfQotCi1vbCB7Ci0JbWFyZ2luLXRvcDogMTBweDsKLQltYXJnaW4tYm90dG9tOiAxMHB4OwotfQotCi1kbCB7Ci0JbWFyZ2luLXRvcDogMTBweDsKLQltYXJnaW4tYm90dG9tOiAxMHB4OwotfQotCi1kdCB7Ci0JbWFyZ2luLXRvcDogNXB4OwotCW1hcmdpbi1ib3R0b206IDVweDsKLQlmb250LXdlaWdodDogYm9sZDsKLX0KLQotZGQgewotCW1hcmdpbi10b3A6IDVweDsKLQltYXJnaW4tYm90dG9tOiA1cHg7Ci19Ci0KLXN0cm9uZyB7Ci0JZm9udC13ZWlnaHQ6IGJvbGQKLX0KLQotZW0gewotCWZvbnQtc3R5bGU6IGl0YWxpYwotfQotCi12YXIgewotCWZvbnQtc3R5bGU6IGl0YWxpYwotfQotCi1kaXYucmV2aXNpb24gewotCWJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDsKLQlib3JkZXItbGVmdC13aWR0aDogdGhpbjsKLQlib3JkZXItbGVmdC1jb2xvcjogIzdCNjhFRTsKLQlwYWRkaW5nLWxlZnQ6IDUKLX0KLQotdGggewotCWZvbnQtd2VpZ2h0OiBib2xkCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2NvbmNlcHRzL2NvbmNlcHRzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvY29uY2VwdHMvY29uY2VwdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3MDc5OC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvY29uY2VwdHMvY29uY2VwdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxMSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlhTTFQgQ29uY2VwdHM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9pbnRyb2R1Y3Rpb24vZ2V0dGluZ3N0YXJ0ZWQuaHRtbCIgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJyZXNvdXJjZXMuaHRtbCIgdGl0bGU9IlJlc291cmNlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTjEwMDI4Ij48L2E+WFNMVCBDb25jZXB0czwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0idG9jIj48cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY29uY2VwdHMuaHRtbCNSZXN1Y2luZ1hTTFQiPlJlc2N1aW5nIFhTTFQgRnJvbSBOaWNoZSBTdGF0dXM8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNvbmNlcHRzLmh0bWwjTjEwMDQzIj5UaGUgUHJvYmxlbTwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNvbmNlcHRzLmh0bWwjTjEwMDY5Ij5UaGUgU29sdXRpb248L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjb25jZXB0cy5odG1sI04xMDA5MCI+UXVlcmllczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY29uY2VwdHMuaHRtbCNOMTAwOUUiPnhzbDpmb3ItZWFjaDwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNvbmNlcHRzLmh0bWwjTjEwMEFBIj54c2w6aWY8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjb25jZXB0cy5odG1sI04xMDBCNCI+eHNsOmNob29zZTwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjb25jZXB0cy5odG1sI04xMDBCRSI+Q29uY2x1c2lvbjwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJyZXNvdXJjZXMuaHRtbCI+UmVzb3VyY2VzPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9kaXY+PHA+Ci0gICAgICAgICBJZiB5b3UgYXJlIG5ldyB0byBYU0xUIG9yIGp1c3QgbmVlZCBhIHJlZnJlc2hlciB0aGVuIHRoaXMgc2VjdGlvbiBtYXkKLSAgICAgICAgIGhlbHAgZ2V0IHlvdSBnb2luZy4KLSAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJSZXN1Y2luZ1hTTFQiPjwvYT5SZXNjdWluZyBYU0xUIEZyb20gTmljaGUgU3RhdHVzPC9oMj48L2Rpdj48ZGl2PjxoMyBjbGFzcz0ic3VidGl0bGUiPkEgR2VudGxlIEludHJvZHVjdGlvbiB0byBYU0xUIHRocm91Z2ggSFRNTCBUZW1wbGF0ZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz48cD4KLSAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPgotICAgICAgICAgICAgRWRpdG9ycyBOb3RlOiBUaGlzIG9yaWdpbmFsbHkgYXBwZWFyZWQgYXQKLSAgICAgICAgICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy54ZnJvbnQuY29tL3Jlc2N1aW5nLXhzbHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj5YRnJvbnQuY29tPC9hPgotICAgICAgICAgICAgLCBhbmQgaXMgcmVwdWJsaXNoZWQgaGVyZSB3aXRoIHBlcm1pc3Npb24uIFRoZSBhcnRpY2xlIGlzIHdyaXR0ZW4gYnkgRGF2aWQgSmFjb2JzLgotICAgICAgICAgPC9lbT48L3NwYW4+Ci0gICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0iYWJzdHJhY3QiPjxwIGNsYXNzPSJ0aXRsZSI+PGI+QWJzdHJhY3Q8L2I+PC9wPjxwPgotICAgICAgICAgWFNMVCBpcyBvbmUgb2YgdGhlIG1vc3QgZXhjaXRpbmcgdGVjaG5vbG9naWVzIHRvIGNvbWUgb3V0IG9mIHRoZSBYTUwgZmFtaWx5LiBVbmZvcnR1bmF0ZWx5LCBpdHMgaW5jcmVkaWJsZQotICAgICAgICAgcG93ZXIgYW5kIGFzc29jaWF0ZWQgY29tcGxleGl0eSBjYW4gYmUgb3ZlcndoZWxtaW5nIHRvIG5ldyB1c2VycyBwcmV2ZW50aW5nIG1hbnkgZnJvbSBleHBlcmltZW50aW5nIHdpdGggaXQgb3IKLSAgICAgICAgIGNhdXNpbmcgdGhlbSB0byBxdWlja2x5IGdpdmUgdXAgaW4gZGlzZ3VzdC4gSW4gZmFjdCwgdW5sZXNzIHRoZSBtZXRob2Qgb2YgdGVhY2hpbmcgYW5kIHRoZSBjb21tb24gc3R5bGUgb2YgdXNlCi0gICAgICAgICBmb3IgWFNMVCBpcyByYWRpY2FsbHkgY2hhbmdlZCB0byBtYWtlIGl0IG1vcmUgYWNjZXNzaWJsZSwgWFNMVCB3aWxsIGJlIHJlbGVnYXRlZCB0byBuaWNoZSBzdGF0dXMgbGlrZSBTR01MIGFuZAotICAgICAgICAgb3RoZXIgcG93ZXJmdWwgdGVjaG5vbG9naWVzLgotICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJOMTAwNDMiPjwvYT5UaGUgUHJvYmxlbTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAgICAgICBUaGUgMTk5MCZyc3F1bztzIHNhdyBhbiBpbmNyZWRpYmxlIHByb2xpZmVyYXRpb24gb2YgbmV3IHdlYiByZWxhdGVkIGxhbmd1YWdlcy4gTG9va2luZyBiYWNrIHdlIGNhbiBzZWUgd2hhdAotICAgICAgICAgZmVhdHVyZXMgc2VwYXJhdGVkIHRoZSB3aW5uZXJzIGFuZCBsb3NlcnMuIFRoZSBiaWdnZXN0IGtleSBoYXMgYmVlbiBoYXZpbmcgYSB2ZXJ5IGxvdyBiYXJyaWVyIHRvIGVudHJ5LiBNYW55Ci0gICAgICAgICBsYW5ndWFnZXMgYWNjb21wbGlzaGVkIHRoaXMgYnkgZm9sbG93aW5nIHRoZSBmb2xsb3dpbmcgcnVsZXMuCi0gICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iZGlzYyI+PGxpPjxwPgotICAgICAgICAgICAgICAgTGV2ZXJhZ2UgYXMgbXVjaCBleGlzdGluZyBrbm93bGVkZ2UgYXMgcG9zc2libGUuCi0gICAgICAgICAgICA8L3A+PC9saT48bGk+PHA+Ci0gICAgICAgICAgICAgICBNYWtlIGl0IGVhc3kgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCAiaGVsbG8gd29ybGQiIHN0eWxlIGV4YW1wbGUuCi0gICAgICAgICAgICA8L3A+PC9saT48bGk+PHA+Ci0gICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gYW5kIHVzZWZ1bCBsYW5ndWFnZSBjb25zdHJ1Y3RzIHNob3VsZCBiZSBlYXNpbHkgY29udmV5ZWQgd2l0aCBhIGZldyBzbWFsbCBleGFtcGxlcy4KLSAgICAgICAgICAgIDwvcD48L2xpPjxsaT48cD4KLSAgICAgICAgICAgICAgIENvbXBsZXggcHJvZ3JhbW1pbmcgY29uc3RydWN0cyBzaG91bGQgb25seSBiZSByZXF1aXJlZCB3aGVuIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGFjY29tcGxpc2hlZCBpcwotICAgICAgICAgICAgICAgY29tcGxleC4gICAgICAgICAgICAKLSAgICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHA+Ci0gICAgICAgICBGcm9tIHRoZXNlIHJ1bGVzIHdlIGNhbiBzZWUgd2h5IGVtYmVkZGVkIHdlYiBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGxpa2UgQWN0aXZlIFNlcnZlciBQYWdlcyAoQVNQcyksIENvbGQKLSAgICAgICAgIEZ1c2lvbiwgUEhQIGFuZAotICAgICAgICAgSmF2YSBTZXJ2ZXIgUGFnZXMgKEpTUHMpIGFyZSBzbyBwb3B1bGFyLiBUaGV5IGFsbCBsZXZlcmFnZSBhIHVzZXImcnNxdW87cyBrbm93bGVkZ2Ugb2YgSFRNTC4gVGhleSBhbHNvCi0gICAgICAgICBhbGxvdyB0aGUKLSAgICAgICAgIG1pbmltdW0gYW1vdW50IG9mIHNjcmlwdGluZyB0byBiZSBhZGRlZCB0byBhY2NvbXBsaXNoIHRoZSBkeW5hbWljIGZlYXR1cmUgYSBkZXZlbG9wZXIgaXMgbG9va2luZyBmb3IuCi0gICAgICAgICBUaGlzIGhhcwotICAgICAgICAgYWxsb3dlZCBudW1lcm91cyB3ZWIgZGV2ZWxvcGVycyB0byBzdGFydCBvZmYgd2l0aCB2ZXJ5IHNtYWxsIHByb2plY3RzIGFuZCB0aGVuIHRocm91Z2ggY29udGludW9zCi0gICAgICAgICBlbmhhbmNlbWVudAotICAgICAgICAgYW5kIGxlYXJuaW5nLCBmaW5kIHRoZW1zZWx2ZXMgdXNpbmcgdGhlIGZ1bGwgcG93ZXIgb2YgYSBjb21wbGV4IHByb2dyYW1taW5nIGxhbmd1YWdlLiBGdXJ0aGVybW9yZSwKLSAgICAgICAgIGJlY2F1c2Ugb2YKLSAgICAgICAgIHRoZSB2ZXJ5IGluY3JlbWVudGFsIG5hdHVyZSBvZiB0aGF0IGxlYXJuaW5nIHRoZSBkZXZlbG9wZXIgd2FzIG5ldmVyIHNjYXJlZCBvZmYuICAgICAgICAgCi0gICAgICA8L3A+PHA+Ci0gICAgICAgICBIVE1MIGhhcyBhbHNvIGZvc3RlcmVkIHRoZSB0ZWNobmlxdWUgb2YgbGVhcm5pbmcgYnkgZXhhbXBsZS4gV2hlbiBhIHdlYiBhdXRob3Igc2VlcyBhbm90aGVyIHNpdGUgd2l0aCBhCi0gICAgICAgICBmZWF0dXJlIHRoZXkKLSAgICAgICAgIGxpa2UsIHRoZXkgaW1tZWRpYXRlbHkgYnJpbmcgdXAgdGhlIHNvdXJjZSB0byBzZWUgaG93IGl0IHdhcyBpbXBsZW1lbnRlZC4gSW4gdGhpcyB3YXkgbWFueSB3ZWIKLSAgICAgICAgIGF1dGhvcnMgd2VyZQotICAgICAgICAgYWJsZSB0byBsZWFybiBjb21wbGV4IEhUTUwgdHJpY2tzIHdpdGggbm8gZm9ybWFsIHRyYWluaW5nLiBXaGlsZSBzZXJ2ZXItc2lkZSBzY3JpcHRzIGFyZSBub3QgYXMKLSAgICAgICAgIGVhc3kgdG8gY29tZQotICAgICAgICAgYnksIHRoZXJlIGFyZSBzdGlsbCBudW1lcm91cyBzaXRlcyB0aGF0IGhvdXNlIHRob3VzYW5kcyBvZiBleGFtcGxlIHNjcmlwdHMgZm9yIGEgYmxvc3NvbWluZwotICAgICAgICAgZGV2ZWxvcGVyIHRvCi0gICAgICAgICBleGFtaW5lLiAgICAgICAgIAotICAgICAgPC9wPjxwPgotICAgICAgICAgVHJhZGl0aW9uYWxseSBYU0xUIGhhcyBiZWVuIHByZXNlbnRlZCBhcyBhIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciB0cmFuc2xhdGluZyBYTUwgZG9jdW1lbnRzIGludG8gYW5vdGhlcgotICAgICAgICAgZm9ybWF0LCBvZnRlbiBmb3IgcHJlc2VudGF0aW9uLiBUaGlzIGZyYW1lcyB0aGUgcHJvYmxlbSwgc3VjaCB0aGF0IGZvciBlYWNoIGVsZW1lbnQsIHRoZSBwcm9ncmFtbWVyIGhhcyB0aGUKLSAgICAgICAgIHRhc2sgb2YgZmlndXJpbmcgb3V0IGhvdyB0aGF0IGVsZW1lbnQgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZC4gQXMgbG9uZyBhcyB0aGVyZSBhcmUgb25lIHRvIG9uZSBtYXBwaW5ncyBvciBvbmUKLSAgICAgICAgIHRvIHplcm8gbWFwcGluZ3MgdGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIEZvciBleGFtcGxlLCBpZiBldmVyeSBvY2N1cnJlbmNlIG9mIGEgCi0gICAgICAgICAmbHQ7bmFtZSZndDsKLSAgICAgICAgIGVsZW1lbnQgaXMgZ29pbmcgdG8KLSAgICAgICAgIGJlY29tZSBhbiBIVE1MIGhlYWRlci4gSXQgaXMgYSBzaW1wbGUgbWF0dGVyIHRvIHdyaXRlIGEgbWF0Y2hpbmcgdGVtcGxhdGUgdG8gYWNjb21wbGlzaAotICAgICAgICAgdGhpcy4KLSAgICAgIDwvcD48YSBuYW1lPSJwbF9OYW1lVGVtcGxhdGUiPjwvYT48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0KLSZsdDt4c2w6dGVtcGxhdGUgbWF0Y2g9Im5hbWUiJmd0OwotICAmbHQ7aDEmZ3Q7Jmx0O3hzbDphcHBseS10ZW1wbGF0ZXMvJmd0OyZsdDsvaDEmZ3Q7Ci0mbHQ7L3hzbDp0ZW1wbGF0ZSZndDsKLSAgICAgIAotICAgICAgPC9wcmU+PHA+Ci0gICAgICAgICBIb3dldmVyIHdoZW4gYWRkaW5nIG9uZSB0byBtYW55IG1hcHBpbmdzIChpLmUuIHdoZW4gYW4gZWxlbWVudCZyc3F1bztzIGNvbnRlbnRzIHdpbGwgYXBwZWFyIG11bHRpcGxlIHRpbWVzIGluIHRoZQotICAgICAgICAgdGFyZ2V0IGRvY3VtZW50IHdpdGggZGlmZmVyZW50IGZvcm1hdHRpbmcpLCBrZWVwaW5nIHRyYWNrIG9mIGFsbCB0aGUgcmVsYXRpb25zaGlwcyBxdWlja2x5IGdyb3dzIGluIGNvbXBsZXhpdHkKLSAgICAgICAgIGFuZCBiZWNvbWVzIGNvbmZ1c2luZy4gRm9yIGV4YW1wbGUsIGlmLCBhZnRlciB3cml0aW5nIHRoZSBwcmV2aW91cyB0ZW1wbGF0ZSwgdGhlIHByb2dyYW1tZXIgZGlzY292ZXJzIHRoYXQgdGhlCi0gICAgICAgICBuYW1lIGFsc28gbmVlZHMgdG8gYmUgcGxhY2VkIGluIHRoZSB0aXRsZSB0aGUgcHJvZ3JhbW1lciBtaWdodCBhZGQgdGhlIHRlbXBsYXRlCi0gICAgICA8L3A+PGEgbmFtZT0icGxfdmFsdWVPZiI+PC9hPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KLQotJmx0O3hzbDp0ZW1wbGF0ZSBtYXRjaD0iLyImZ3Q7Ci0gICZsdDt0aXRsZSZndDsmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvJmd0OyZsdDsvdGl0bGUmZ3Q7Ci0mbHQ7L3hzbDp0ZW1wbGF0ZSZndDsKLSAgICAgIAotICAgICAgPC9wcmU+PHA+Ci0gICAgICAgICBOb3RpY2UgdGhlIHVzZSBvZiB0aGUgJmx0O3hzbDp2YWx1ZS1vZiZndDsKLSAgICAgICAgIGZ1bmN0aW9uIGluIHRoaXMgdGVtcGxhdGUgYmVjYXVzZSB1c2luZyAmbHQ7YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibmFtZSImZ3Q7Ci0gICAgICAgICB3b3VsZCBoYXZlIGNhdXNlZCBhIHRyaWdnZXJpbmcgb2YgdGhlIHByZXZpb3VzIHRlbXBsYXRlIGFkZGluZyB1bmRlc2lyZWQgaGVhZGVyIHRhZ3MgdG8gbXkgY29udGVudC4gVGhpcyBtZWFucwotICAgICAgICAgYmVmb3JlIGFkZGluZyBhIHRyYW5zbGF0aW9uIHRvIGFuIGVsZW1lbnQgdGhlIHByb2dyYW1tZXIgbXVzdCBmaXJzdCBiZSBhd2FyZSBvZiBhbGwgdGhlIGV4aXN0aW5nIHRyYW5zbGF0aW9ucwotICAgICAgICAgKHVnaCEpLiBPZiBjb3Vyc2UgaWYgdGhlIHByb2dyYW1tZXIgYmVjYW1lIGF3YXJlIG9mIHRoZQotICAgICAgICAgJmx0O3RpdGxlJmd0OwotICAgICAgICAgcmVxdWlyZW1lbnQgZmlyc3QsIHRoZSBjb250ZW50cyBvZiB0aGVzZSB0ZW1wbGF0ZXMgY291bGQgaGF2ZSBiZWVuIHJldmVyc2VkLiBPbmUgY2FuIHF1aWNrbHkgc2VlIGhvdwotICAgICAgICAgdGhlCi0gICAgICAgICBhcmJpdHJhcnkgZGVjaXNpb25zIG9mIGRldmVsb3BtZW50IGFuZCBkaXNjb3Zlcnkgb2YgcmVxdWlyZW1lbnRzIGNhbiBsZWFkIHRvIGEgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IGFyZQotICAgICAgICAgbm8KLSAgICAgICAgIGxvbmdlciBpbnR1aXRpdmUuCi0gICAgICA8L3A+PHA+Ci0gICAgICAgICBBcyBhIHByb2dyYW1tZXIgd2l0aCBtb3JlIHRoYW4gMjAgeWVhcnMgZXhwZXJpZW5jZSB3aXRoIG92ZXIgYSBkb3plbiBsYW5ndWFnZXMsIFhTTFQgdGVtcGxhdGVzIGFuZCBkZWZhdWx0Ci0gICAgICAgICBydWxlcyB3ZXJlCi0gICAgICAgICBub3Qgb2J2aW91cyB0byBtZS4gT3ZlciB0aGUgcGFzdCB5ZWFyIG9yIHR3byBJIGhhZCBsb29rZWQgYXQgbnVtZXJvdXMgZXhhbXBsZXMgdHJ5aW5nIHRvIGRpc2Nlcm4gaG93Ci0gICAgICAgICB0aGV5Ci0gICAgICAgICB3b3JrZWQuIFdoaWxlIEkgY291bGQgdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBnaXN0IG9mIHdoYXQgd2FzIG9jY3VycmluZywgdGhlcmUgd2FzIHRvbyBtdWNoIGltcGxpZWQKLSAgICAgICAgIGJlaGF2aW9yCi0gICAgICAgICB0aGF0IEkgZGlkIG5vdCBwaWNrIHVwLiBJdCB3YXMgbm90IHVudGlsIGdvaW5nIHRocm91Z2ggZm9ybWFsIFhTTFQgdHJhaW5pbmcgdGhhdCBJIGZ1bGx5IHVuZGVyc3Rvb2QgaG93Ci0gICAgICAgICBYU0xUCi0gICAgICAgICB3b3JrZWQuIENsZWFybHksIGlmIHRoZSBiYXJyaWVyIHRvIGVudHJ5IGlzIHRoYXQgaGlnaCBmb3IgYW4gZXhwZXJpZW5jZWQgcHJvZ3JhbW1lciwgdGhlIGF2ZXJhZ2Ugd2ViCi0gICAgICAgICBkZXZlbG9wZXIKLSAgICAgICAgIHdhcyBub3QgZ29pbmcgdG8gZmluZCB0aGlzIHRlY2hub2xvZ3kgdmVyeSB1c2VmdWwuICAgICAgICAgIAotICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJOMTAwNjkiPjwvYT5UaGUgU29sdXRpb248L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgU28gaG93IGRvIHdlIHNvbHZlIHRoaXMgcHJvYmxlbSBhbmQgaGVscCBkZWxpdmVyIFhTTFQmcnNxdW87cyBwcm9taXNlIHRvIHRoZSBtYXNzZXM/IEZvciBYU0xUIHRvIGJlIHN1Y2Nlc3NmdWwgaXQKLSAgICAgICAgIG11c3QgYmUKLSAgICAgICAgIHByZXNlbnRlZCBhbmQgdXNlZCBpbiBhIHdheSB0aGF0IGFkb3B0cyB0aG9zZSBhdHRyaWJ1dGVzIGRpc2N1c3NlZCBlYXJsaWVyIChyZXVzZSBvZiBrbm93bGVkZ2UsIGZhc3QKLSAgICAgICAgIHN0YXJ0LCBhbmQKLSAgICAgICAgIGdyYWR1YWxpc20pLiBUaGlzIHR1dG9yaWFsIHdpbGwgYXR0ZW1wdCB0byBlYXNlIFhTTFQmcnNxdW87cyBpbnRyb2R1Y3Rpb24gYnkgZm9jdXNpbmcgb24gdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgICAgIEZpcnN0LCBpdAotICAgICAgICAgaXMgb25seSBnb2luZyB0byBmb2N1cyBvbiB0aGUgZ2VuZXJhdGlvbiBvZiBIVE1MIGRvY3VtZW50cyBhbmQgdXNlcnMgd2hvIGFyZSBmYW1pbGlhciB3aXRoIEhUTUwuIElmCi0gICAgICAgICB5b3VyIGdvYWwKLSAgICAgICAgIGlzIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IHRyYW5zZm9ybWluZyBvbmUgWE1MIGRvY3VtZW50IGludG8gYW5vdGhlciBYTUwgZG9jdW1lbnQgdGhpcyB0dXRvcmlhbCBpcyBub3QKLSAgICAgICAgIGZvciB5b3UuCi0gICAgICA8L3A+PHA+Ci0gICAgICAgICBUaGUgc2Vjb25kIGlzIHRvIHJlZnJhbWUgdGhlIHByb2JsZW0gc28gdGhlIFhTTFQgc29sdXRpb25zIHByb2dyYW1tZXJzIHdyaXRlIGFyZSBtb3JlIG5hdHVyYWxseSBleHRlbnNpYmxlCi0gICAgICAgICBhbmQKLSAgICAgICAgIGludHVpdGl2ZS4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gdHJhbnNsYXRlIGFuIFhNTCBzb3VyY2UgZG9jdW1lbnQgaW50byBhbiBIVE1MIHByZXNlbnRhdGlvbiBkb2N1bWVudCwgdGhlCi0gICAgICAgICBwcm9ncmFtbWVyIHNob3VsZCBzZWUgdGhlIFhNTCBkb2N1bWVudCBhcyBhIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgd2l0aCBYU0xUIHByb3ZpZGluZyBwb3dlcmZ1bCB0b29scyBmb3IKLSAgICAgICAgIGV4dHJhY3RpbmcgdGhhdCBpbmZvcm1hdGlvbiBpbnRvIHRoZWlyIEhUTUwgZG9jdW1lbnRzLiBUaGlzIGFsbG93cyB1cyB0byBsZXZlcmFnZSB0aGUgZXhwZXJpZW5jZSBtb3N0IHBlb3BsZQotICAgICAgICAgaGF2ZSB3aXRoIHVzaW5nIGFuIEhUTUwgdGVtcGxhdGluZyBsYW5ndWFnZSAoZS5nLiBBU1AsIFBIUCwgSlNQLCBDb2xkIEZ1c2lvbiwgV2ViIE1hY3JvLCBldGMpLiBUaGVzZSB0ZW1wbGF0aW5nCi0gICAgICAgICBsYW5ndWFnZXMgYXJlIGFsbCBiYXNlZCBvbiB0aGUgYmFzaWMgcHJlbWlzZSB0aGF0IEhUTUwgY29tZXMgZmlyc3QgYW5kIGFsbCBlbmhhbmNlbWVudHMgYXJlIHRoZW4gZW1iZWRkZWQgaW4KLSAgICAgICAgIHNwZWNpYWwgdGFncy4gICAgICAgICAKLSAgICAgIDwvcD48cD4KLSAgICAgICAgIFdpdGggc29tZSBjYXZlYXRzLCB0aGlzIHR1dG9yaWFsIHdpbGwgc2hvdyBob3cgWFNMVCBjYW4gYmUgdXNlZCBpbiB0aGlzIHNhbWUgd2F5LiBUaGUgYmVuZWZpdCBvZiB0aGlzCi0gICAgICAgICBhcHByb2FjaCBpcyBpdAotICAgICAgICAgYWxsb3dzIHRoZSBxdWljayB1c2Ugb2YgbWFueSBvZiBYU0xUJnJzcXVvO3MgcG93ZXJmdWwgZnVuY3Rpb25zIHdoaWxlIGxldHRpbmcgeW91IGxlYXJuIGl0cyBtb3JlCi0gICAgICAgICBlc290ZXJpYwotICAgICAgICAgY2FwYWJpbGl0aWVzIGFzIHRoZSBuZWVkIGFyaXNlcy4gSW4gYWRkaXRpb24gdGhlIHJlc3VsdGluZyBYU0xUIGZpbGVzIGFyZSBtb3JlIGludHVpdGl2ZSBhbmQKLSAgICAgICAgIG1haW50YWluYWJsZS4KLSAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci08c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz4mbHQ7eHNsOnZhbHVlLW9mJmd0OyBhbmQge308L3N0cm9uZz48L3NwYW4+ICAgICAgICAgCi0gICAgICA8L3ByZT48cD4KLSAgICAgICAgIE9uIHRvIGFuIGV4YW1wbGUuIEhlcmUgaXMgYSB2ZXJ5IHNpbXBsZSB3ZWxjb21lIHBhZ2UuICAgICAgICAgCi0gICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotCi0mbHQ7aHRtbCZndDsKLSAgJmx0O2hlYWQmZ3Q7Ci0gICAgJmx0O3RpdGxlJmd0O1dlbGNvbWUmbHQ7L3RpdGxlJmd0OwotICAmbHQ7L2hlYWQmZ3Q7Ci0gICZsdDtib2R5Jmd0OwotICAgIFdlbGNvbWUhCi0gICZsdDsvYm9keSZndDsKLSZsdDsvaHRtbCZndDsKLSAgICAgICAgIAotICAgICAgPC9wcmU+PHA+Ci0gICAgICAgICBBbmQgaGVyZSBpcyBhbiBYTUwgZG9jdW1lbnQgd2l0aCBpbmZvcm1hdGlvbiBvbiBtZW1iZXIuICAgICAgCi0gICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotCi0mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsKLSZsdDttZW1iZXIgbGV2ZWw9InBsYXRpbnVtIiZndDsKLSAgJmx0O25hbWUmZ3Q7SmVmZiZsdDsvbmFtZSZndDsKLSAgJmx0O3Bob25lIHR5cGU9ImhvbWUiJmd0OzU1NS0xMjM0Jmx0Oy9waG9uZSZndDsKLSAgJmx0O3Bob25lIHR5cGU9IndvcmsiJmd0OzU1NS00MzIxJmx0Oy9waG9uZSZndDsKLSAgJmx0O2Zhdm9yaXRlQ29sb3ImZ3Q7Ymx1ZSZsdDsvZmF2b3JpdGVDb2xvciZndDsKLSZsdDsvbWVtYmVyJmd0OyAgICAgIAotICAgICAgPC9wcmU+PHA+Ci0gICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBwb2ludGVkIG91dCByaWdodCBhd2F5LiBGaXJzdCB0aGlzIGlzIGEgd2VsbC1mb3JtZWQgWE1MCi0gICAgICAgICBkb2N1bWVudC4gVGhpcyBtZWFuIGFsbCBIVE1MIHVzZWQgbXVzdCBjb25mb3JtIHRvIHRoZSBYSFRNTCBzcGVjaWZpY2F0aW9uIChpLmUuIGFsbCB0YWdzIG11c3QgYmUgY2xvc2VkIGFuZAotICAgICAgICAgbG93ZXJjYXNlKS4KLSAgICAgIDwvcD48cD4KLSAgICAgICAgIFRoZSBsaW5lcyBiZWZvcmUgdGhlICZsdDtodG1sJmd0OwotICAgICAgICAgdGFnIGFuZCBhZnRlciB0aGUgJmx0Oy9odG1sJmd0OwotICAgICAgICAgdGFnIHdpbGwgYmUgc2VlbiBpbiBhbGwgdGhlIGV4YW1wbGVzLiBGb3Igbm93LCBvdGhlciB0aGFuIHJlYWxpemluZyB0aGF0IHRoZXkgYXJlIHJlcXVpcmVkIGluIGFueSBzdHlsZSBzaGVldAotICAgICAgICAgY3JlYXRlZCwganVzdCBnbyBhaGVhZCBhbmQgZm9yZ2V0IHRoZXkgYXJlIHRoZXJlLiBZb3UgZG9uJnJzcXVvO3QgTkVFRCB0byB1bmRlcnN0YW5kIHRoZW0gcmlnaHQgbm93IHRvIGdldCB1c2VmdWwKLSAgICAgICAgIHdvcmsgb3V0IG9mIFhTTFQuCi0gICAgICA8L3A+PHA+Ci0gICAgICAgICBOb3RpY2UgdGhlIEhUTUwgaXMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbCBleGNlcHQgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdGFnCi0gICAgICAgICAmbHQ7eHNsOnZhbHVlLW9mJmd0Oy4KLSAgICAgICAgIFRoaXMgdGFnIGlzIHRoZSBrZXkgdG8gZXh0cmFjdGluZyBhbnkgcGllY2Ugb2YgaW5mb3JtYXRpb24gb3V0IGFuIFhNTCBkb2N1bWVudC4gSXQgaGFzIGEgInNlbGVjdCIKLSAgICAgICAgIGF0dHJpYnV0ZSB0aGF0Ci0gICAgICAgICBwcm92aWRlcyB0aGUgcGF0aCB0aHJvdWdoIHRoZSBYTUwgZG9jdW1lbnQgdG8gdGhlIGluZm9ybWF0aW9uIHdlIHNlZWsuIEluIHRoaXMgY2FzZQotICAgICAgICAgICAgJmx0O21lbWJlciZndDsKLSAgICAgICAgIGlzIHRoZSBvdXRlciBtb3N0IHRhZyBhbmQKLSAgICAgICAgICZsdDtuYW1lJmd0OwotICAgICAgICAgaXMgdGhlIHRhZyB1bmRlcm5lYXRoIGl0LiBTbGFzaCBjaGFyYWN0ZXJzICgiLyIpIGFyZSB1c2VkIHRvIGRlc2lnbmF0ZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcwotICAgICAgICAgYmV0d2VlbiB0YWdzLgotICAgICAgICAgSWYgeW91IGFyZSB1c2VkIHRvIG5hdmlnYXRpbmcgYXJvdW5kIGEgVW5peCBmaWxlIHN5c3RlbSB0aGlzIHNob3VsZCBmZWVsIGZhbWlsaWFyLgotICAgICAgPC9wPjxwPgotICAgICAgICAgTm93IGxldCZyc3F1bztzIGNvbnNpZGVyIGZ1cnRoZXIgY3VzdG9taXppbmcgdGhpcyBwYWdlIGJ5IG1ha2luZyB0aGUgd2VsY29tZSBpbiB0aGUgcGVyc29uJnJzcXVvO3MgZmF2b3JpdGUgY29sb3IgdXNpbmcgdGhlCi0gICAgICAgICAmbHQ7Zm9udCZndDsKLSAgICAgICAgIHRhZyB3aXRoIHRoZSAiYmdjb2xvciIgYXR0cmlidXRlLiBCZWNhdXNlCi0gICAgICAgICAgICAmbHQ7eHNsOnZhbHVlLW9mJmd0OwotICAgICAgICAgaXMgYW4gWE1MIHRhZyBpdCBpcyBub3QgdmFsaWQgdG8gaW5zZXJ0IGl0IGluIGFuIEhUTUwgYXR0cmlidXRlIHZhbHVlLiBTbyBhbm90aGVyIG1lY2hhbmlzbQotICAgICAgICAgaXMgbmVlZGVkIHRvIGluc2VydAotICAgICAgICAgaW5mb3JtYXRpb24gZnJvbSBvdXIgWE1MIGZpbGUgdGhlcmUuCi0gICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotCi0mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsKLSZsdDt4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiJmd0OwotICAmbHQ7eHNsOnRlbXBsYXRlIG1hdGNoPSIvIiZndDsKLSAgICAmbHQ7aHRtbCZndDsKLSAgICAgICZsdDtoZWFkJmd0OwotICAgICAgICAmbHQ7dGl0bGUmZ3Q7V2VsY29tZSZsdDsvdGl0bGUmZ3Q7Ci0gICAgICAmbHQ7L2hlYWQmZ3Q7Ci0gICAgICAmbHQ7Ym9keSZndDsKLSAgICAgICAgJmx0O2ZvbnQgYmdjb2xvcj0ie21lbWJlci9mYXZvcml0ZUNvbG9yfSImZ3Q7Ci0gICAgICAgICAgV2VsY29tZSAmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0ibWVtYmVyL25hbWUiLyZndDshCi0gICAgICAgICZsdDsvZm9udCZndDsKLSAgICAgICZsdDsvYm9keSZndDsKLSAgICAmbHQ7L2h0bWwmZ3Q7Ci0gICZsdDsveHNsOnRlbXBsYXRlJmd0OwotJmx0Oy94c2w6c3R5bGVzaGVldCZndDsKLQotICAgICAgPC9wcmU+PHA+Ci0gICAgICAgICBOb3RpY2UgdGhlIHVzZSBvZiB0aGUgY3VybHkgYnJhY2tldHMgKCJ7fSIpLiBXaGVuIHVzZWQgd2l0aGluIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50ICJ7cGF0aH0iIGhhcyB0aGUgZXhhY3QKLSAgICAgICAgIHNhbWUgZWZmZWN0IGFzCi0gICAgICAgICAmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0icGF0aCIgLyZndDsKLSAgICAgICAgIHVzZWQgb3V0c2lkZSBvZiBhdHRyaWJ1dGUgYXNzaWdubWVudHMuCi0gICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Ik4xMDA5MCI+PC9hPlF1ZXJpZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgTm90IGFsbCBwYXRocyBsZWFkIHRvIGEgc2luZ2xlIG5vZGUuIEZvciBleGFtcGxlLCB3aGF0IGlmIHdlIHdhbnRlZCB0byBwdXQgYSBwZXJzb24mcnNxdW87cyBob21lIHBob25lIG51bWJlciBvbiB0aGUKLSAgICAgICAgIHBhZ2U/IE5vdGljZSB0aGF0IHRoZSBYTUwgZG9jdW1lbnQgY29udGFpbnMgdHdvIHBob25lIGVudHJpZXMuIElmIHdlIHNpbXBseSB1c2VkCi0gICAgICAgICAmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0ibWVtYmVyL3Bob25lIiAvJmd0OwotICAgICAgICAgYm90aCBlbnRyaWVzIHdvdWxkIGJlIHJldHVybmVkLiBXZSBvYnZpb3VzbHkgbmVlZCBhIHdheSB0byBiZSBtb3JlIHNwZWNpZmljLiBMdWNraWx5LCBYU0xUIGFsbG93cyB0aGUgZnVsbAotICAgICAgICAgcG93ZXIgb2YgWFBhdGggdG8gZGVzY3JpYmUgdGhlIHZhbHVlKHMpIG9mIGludGVyZXN0LiBYUGF0aCBhbGxvd3MgY29uZGl0aW9ucyBvbiBhbnkgYXR0cmlidXRlIG9yIHRhZyB0byBiZQotICAgICAgICAgcGxhY2VkIGluIHNxdWFyZSBicmFja2V0cyAoIltdIikgd2hpY2ggYXJlIHRoZW4gdXNlZCB0byByZXN0cmljdCB0aGUgdmFsdWVzIHJldHVybmVkLgotICAgICAgPC9wPjxwPgotICAgICAgICAgU28gdG8gcmV0cmlldmUgdGhlIGhvbWUgcGhvbmUgbnVtYmVyIHdlIHdvdWxkIHVzZSB0aGUgcGF0aCAibWVtYmVyL3Bob25lW0B0eXBlPSZyc3F1bztob21lJnJzcXVvO10iLiBOb3RpY2UgdGhlICJAIgotICAgICAgICAgc3ltYm9sIGluIGZyb250Ci0gICAgICAgICBvZiAidHlwZSIuIFRoZSAiQCIgc3ltYm9sIHNpZ25pZmllcyB0aGF0IHdlIGFyZSByZWZlcnJpbmcgdG8gYW4gYXR0cmlidXRlLiBTbyBvdXIgbmV3IEhUTUwKLSAgICAgICAgIHRlbXBsYXRlIGxvb2tzIGxpa2U6Ci0gICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotICAgICAgCi0mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsKLSZsdDt4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiJmd0OwotICAmbHQ7eHNsOnRlbXBsYXRlIG1hdGNoPSIvIiZndDsKLSAgICAmbHQ7aHRtbCZndDsKLSAgICAgICZsdDtoZWFkJmd0OwotICAgICAgICAmbHQ7dGl0bGUmZ3Q7V2VsY29tZSZsdDsvdGl0bGUmZ3Q7Ci0gICAgICAmbHQ7L2hlYWQmZ3Q7Ci0gICAgICAmbHQ7Ym9keSZndDsKLSAgICAgICAgJmx0O2ZvbnQgYmdjb2xvcj0ie21lbWJlci9mYXZvcml0ZUNvbG9yfSImZ3Q7Ci0gICAgICAgICAgV2VsY29tZSAmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0ibWVtYmVyL25hbWUiLyZndDshCi0gICAgICAgICAgJmx0O2JyLyZndDsKLSAgICAgICAgICBZb3VyIGhvbWUgcGhvbmUgbnVtYmVyIGlzOgotICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPiZsdDt4c2w6dmFsdWUtb2Ygc2VsZWN0PSJtZW1iZXIvcGhvbmVbQHR5cGU9JnJzcXVvO2hvbWUmcnNxdW87XSIvJmd0Ozwvc3Ryb25nPjwvc3Bhbj4KLSAgICAgICAgJmx0Oy9mb250Jmd0OwotICAgICAgJmx0Oy9ib2R5Ci0gICAgJmx0Oy9odG1sCi0gICZsdDsveHNsOnRlbXBsYXRlJmd0OwotJmx0Oy94c2w6c3R5bGVzaGVldCZndDsKLQotICAgICAgPC9wcmU+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Ik4xMDA5RSI+PC9hPnhzbDpmb3ItZWFjaDwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBicmluZ3MgdXAgYW5vdGhlciBpc3N1ZS4gV2hhdCBpZiB0aGlzCi0gICAgICAgICAgICAmbHQ7bWVtYmVyJmd0OwotICAgICAgICAgICAgZW50cnkgaGFkIG51bWVyb3VzIHBob25lIG51bWJlcnMgYW5kIHdlIHdhbnRlZCB0byBwcmludCB0aGVtIGFsbCBvbiB0aGUgd2ViIHBhZ2UuIFdlIGNvdWxkIHNpbXBseSB1c2UKLSAgICAgICAgICAgICAgICZsdDt4c2w6dmFsdWUtb2Ygc2VsZWN0PSJtZW1iZXIvcGhvbmUiIC8mZ3Q7Ci0gICAgICAgICAgICBidXQgdGhpcyB3b3VsZCBub3QgZW5hYmxlIHVzIHRvIGZvcm1hdCB0aGUgcGhvbmUgbnVtYmVyIGludG8gYSBuaWNlIGxpc3QgdGhhdCBkZXNjcmliZXMgdGhlIHR5cGUgb2YgZWFjaAotICAgICAgICAgICAgbnVtYmVyLgotICAgICAgICAgPC9wPjxwPgotICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzIHJlcXVpcmVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlCi0gICAgICAgICAgICAmbHQ7eHNsOmZvci1lYWNoJmd0OwotICAgICAgICAgICAgdGFnIHdoaWNoIGFsbG93cyB1cyB0byBsb29wIHRocm91Z2ggZWFjaCBvZiB0aGUgZWxlbWVudHMgdGhhdCBtYXRjaCBhIGdpdmVuIHBhdGguIFNvIHRvCi0gICAgICAgICAgICBjcmVhdGUgYSB0YWJsZSB0aGF0Ci0gICAgICAgICAgICBjb250YWlucyB0aGUgcGhvbmUgbnVtYmVyIHR5cGUgaW4gdGhlIGZpcnN0IGNvbHVtbiBhbmQgdGhlIHBob25lIG51bWJlciBpbiB0aGUgc2Vjb25kCi0gICAgICAgICAgICBjb2x1bW4sIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgIHN0eWxlc2hlZXQgY291bGQgYmUgdXNlZC4KLSAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0KLSZsdDs/eG1sIHZlcnNpb249IjEuMCI/Jmd0OwotJmx0O3hzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHZlcnNpb249IjEuMCImZ3Q7Ci0gICZsdDt4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iJmd0OwotICAgICZsdDtodG1sJmd0OwotICAgICAgJmx0O2hlYWQmZ3Q7Ci0gICAgICAgICZsdDt0aXRsZSZndDtXZWxjb21lJmx0Oy90aXRsZSZndDsKLSAgICAgICZsdDsvaGVhZCZndDsKLSAgICAgICZsdDtib2R5Jmd0OwotICAgICAgICAmbHQ7Zm9udCBiZ2NvbG9yPSJ7bWVtYmVyL2Zhdm9yaXRlQ29sb3J9IiZndDsKLSAgICAgICAgICBXZWxjb21lICZsdDt4c2w6dmFsdWUtb2Ygc2VsZWN0PSJtZW1iZXIvbmFtZSIvJmd0OyEKLSAgICAgICAgJmx0Oy9mb250Jmd0OwotICAgICAgICAmbHQ7dGFibGUmZ3Q7Ci0gICAgICAgICAgJmx0O3RyJmd0OyZsdDt0aCZndDtUeXBlJmx0Oy90aCZndDsmbHQ7dGgmZ3Q7TnVtYmVyJmx0Oy90aCZndDsmbHQ7L3RyJmd0OwotICAgICAgICAgICZsdDt4c2w6Zm9yLWVhY2ggc2VsZWN0PSJtZW1iZXIvcGhvbmUiJmd0OwotICAgICAgICAgICAgJmx0O3RyJmd0OwotICAgICAgICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O3hzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8mZ3Q7Jmx0Oy90ZCZndDsKLSAgICAgICAgICAgICAgJmx0O3RkJmd0OyZsdDt4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8mZ3Q7Jmx0Oy90ZCZndDsKLSAgICAgICAgICAgICZsdDsvdHImZ3Q7Ci0gICAgICAgICAgJmx0Oy94c2w6Zm9yLWVhY2gmZ3Q7Ci0gICAgICAgICZsdDsvdGFibGUmZ3Q7Ci0gICAgICAmbHQ7L2JvZHkmZ3Q7Ci0gICAgJmx0Oy9odG1sJmd0OwotICAmbHQ7L3hzbDp0ZW1wbGF0ZSZndDsKLSZsdDsveHNsOnN0eWxlc2hlZXQmZ3Q7Ci0gICAgICAgICAKLSAgICAgICAgIDwvcHJlPjxwPgotICAgICAgICAgICAgVGhpcyBleGFtcGxlIGJyaW5ncyB1cCBhIG51bWJlciBvZiBpc3N1ZXMuIEZpcnN0LCB3aGlsZSBpbiB0aGUgbG9vcCwgYWxsCi0gICAgICAgICAgICAmbHQ7eHNsOnZhbHVlLW9mIC8mZ3Q7Ci0gICAgICAgICAgICBhY2Nlc3NlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZWxlbWVudCBiZWluZyBpdGVyYXRlZCBvdmVyIChpbiB0aGlzIGNhc2UKLSAgICAgICAgICAgICZsdDtwaG9uZSZndDspLgotICAgICAgICAgICAgTm90aWNlIHRoZSB1c2Ugb2YgdGhlIHBlcmlvZCAoIi4iKSwgd2hpY2ggbGlrZSBpbiBhIFVuaXggZmlsZSBzeXN0ZW0gbWVhbnMgdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAgICAgICAgIFNvIGluIHRoaXMKLSAgICAgICAgICAgIGNhc2UgdGhlIHBlcmlvZCAoIi4iKSByZWZlcnMgdG8gZWFjaCBwaG9uZSBlbGVtZW50IGFzIHRoZSBsb29wIGl0ZXJhdGVzLiBBbHNvIGxpa2UgaW4gYSBmaWxlCi0gICAgICAgICAgICBzeXN0ZW0geW91IGNhbgotICAgICAgICAgICAgYWRkcmVzcyBhIHBhcmVudCBlbGVtZW50IHVzaW5nIGEgZG91YmxlIHBlcmlvZCAoIi4uIikgYW5kIGNhbiBhY2Nlc3MgYW55IGVsZW1lbnQgaW4gdGhlCi0gICAgICAgICAgICBkb2N1bWVudCBieSBzdGFydGluZwotICAgICAgICAgICAgb3ZlciBhdCB0aGUgcm9vdCBlbGVtZW50IHVzaW5nIGEgc2xhc2ggKCIvIikuCi0gICAgICAgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Ik4xMDBBQSI+PC9hPnhzbDppZjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAgICAgICAgICBBcyBhIGxhc3QgZW5oYW5jZW1lbnQgdG8gb3VyIHBhZ2UgbGV0JnJzcXVvO3MgYWRkIGEgc3BlY2lhbCBvZmZlciB0byAicGxhdGludW0iIGxldmVsIG1lbWJlcnMuIFRvIGRvIHRoaXMgcmVxdWlyZXMKLSAgICAgICAgICAgIHRoZSB1c2Ugb2YgYSBuZXcgdGFnCi0gICAgICAgICAgICAmbHQ7eHNsOmlmJmd0OwotICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHVzIHRvIGluc2VydCBjb250ZW50IGJhc2VkIG9uIGEgY29uZGl0aW9uIG9mIHRoZSBkYXRhIGluIHRoZSBYTUwgZG9jdW1lbnQuCi0gICAgICAgICA8L3A+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotCi0mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsKLSZsdDt4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiJmd0OwotICAmbHQ7eHNsOnRlbXBsYXRlIG1hdGNoPSIvIiZndDsKLSAgICAmbHQ7aHRtbCZndDsKLSAgICAgICZsdDtoZWFkJmd0OwotICAgICAgICAmbHQ7dGl0bGUmZ3Q7V2VsY29tZSZsdDsvdGl0bGUmZ3Q7Ci0gICAgICAmbHQ7L2hlYWQmZ3Q7Ci0gICAgICAmbHQ7Ym9keSZndDsKLSAgICAgICAgJmx0O2ZvbnQgYmdjb2xvcj0ie21lbWJlci9mYXZvcml0ZUNvbG9yfSImZ3Q7Ci0gICAgICAgICAgV2VsY29tZSAmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0ibWVtYmVyL25hbWUiLyZndDshCi0gICAgICAgICZsdDsvZm9udCZndDsKLSAgICAgICAgJmx0O3hzbDppZiB0ZXN0PSJtZW1iZXJbQGxldmVsPSdwbGF0aW51bSddIiZndDsKLSAgICAgICAgICBPdXIgc3BlY2lhbCBvZmZlciB0byBwbGF0aW51bSBtZW1iZXJzIHRvZGF5IGlzIHNvbWV0aGluZyBncmVhdAotICAgICAgICAmbHQ7L3hzbDppZiZndDsKLSAgICAgICAgJmx0O3RhYmxlJmd0OwotICAgICAgICAgICZsdDt0ciZndDsmbHQ7dGgmZ3Q7VHlwZSZsdDsvdGgmZ3Q7Jmx0O3RoJmd0O051bWJlciZsdDsvdGgmZ3Q7Jmx0Oy90ciZndDsKLSAgICAgICAgICAmbHQ7eHNsOmZvci1lYWNoIHNlbGVjdD0ibWVtYmVyL3Bob25lIiZndDsKLSAgICAgICAgICAgICZsdDt0ciZndDsKLSAgICAgICAgICAgICAgJmx0O3RkJmd0OyZsdDt4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdHlwZSIvJmd0OyZsdDsvdGQmZ3Q7Ci0gICAgICAgICAgICAgICZsdDt0ZCZndDsmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvJmd0OyZsdDsvdGQmZ3Q7Ci0gICAgICAgICAgICAmbHQ7L3RyJmd0OwotICAgICAgICAgICZsdDsveHNsOmZvci1lYWNoJmd0OwotICAgICAgICAmbHQ7L3RhYmxlJmd0OwotICAgICAgJmx0Oy9ib2R5Jmd0OwotICAgICZsdDsvaHRtbCZndDsKLSAgJmx0Oy94c2w6dGVtcGxhdGUmZ3Q7Ci0mbHQ7L3hzbDpzdHlsZXNoZWV0Jmd0OwotICAgICAgICAgCi0gICAgICAgICA8L3ByZT48cD4KLSAgICAgICAgICAgIFdpdGhpbiB0aGUgInRlc3QiIGF0dHJpYnV0ZSB0aGUgZnVsbCBhcnJheSBvZiBCb29sZWFuIGFuZCByZWxhdGl2ZSBvcGVyYXRvcnMgYXJlIGF2YWlsYWJsZS4gVGhlIG9ubHkgY2F2ZWF0Ci0gICAgICAgICAgICBpcyB0aGF0IHNpbmNlIHRoaXMgaXMgYW4gWE1MIGRvY3VtZW50IGxlc3MgdGhhbiBhbmQgZ3JlYXRlciB0aGFuICgiJmx0OyIsCi0gICAgICAgICAgICAiJmd0OyIpIHNpZ25zIG11c3QgYmUgZXNjYXBlZCBhcyAiJmFtcDtsdDsiIGFuZCAiJmFtcDtndDsiLgotICAgICAgICAgPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJOMTAwQjQiPjwvYT54c2w6Y2hvb3NlPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLSAgICAgICAgICAgIE9uZSBudWFuY2Ugb2YgdGhlCi0gICAgICAgICAgICAmbHQ7eHNsOmlmJmd0OwotICAgICAgICAgICAgdGFnIHRoYXQgaXMgbm90IGFsd2F5cyBvYnZpb3VzIGF0IGZpcnN0IGdsYW5jZSBpcyB0aGUgbGFjayBvZiBhbiAiZWxzZSIgc3RhdGVtZW50LiBUaGlzIG1lYW5zIHRvIGhhdmUgYW4KLSAgICAgICAgICAgIGVsc2Ugc3RhdGVtZW50IHJlcXVpcmVzIHR3byBpZnMuIFRoZSBmaXJzdCBvbmUgc2F5aW5nICJpZiBjb25kaXRpb24iIGFuZCB0aGUgc2Vjb25kIG9uZSBzYXlpbmcgJmxkcXVvO2lmIG5vdAotICAgICAgICAgICAgY29uZGl0aW9uJnJkcXVvOy4gVGhpcyBzY2hlbWUgcXVpY2tseSBiZWNvbWVzIHVud29ya2FibGUgd2l0aCBlbWJlZGRlZCBpZiB0aGVuIGVsc2UgbG9naWMuIEx1Y2tpbHkgWFNMVAotICAgICAgICAgICAgc3VwcG9ydHMgYW4KLSAgICAgICAgICAgIGFkZGl0aW9uYWwgdGVzdCBvcGVyYXRvciBjYWxsZWQKLSAgICAgICAgICAgICZsdDt4c2w6Y2hvb3NlJmd0OwotICAgICAgICAgICAgd2hpY2ggd29ya3MgbGlrZSBhIHN3aXRjaC9jYXNlIHN0YXRlbWVudC4KLSAgICAgICAgIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0KLSZsdDs/eG1sIHZlcnNpb249IjEuMCI/Jmd0OwotJmx0O3hzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHZlcnNpb249IjEuMCImZ3Q7Ci0gICZsdDt4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iJmd0OwotICAgICZsdDtodG1sJmd0OwotICAgICAgJmx0O2hlYWQmZ3Q7Ci0gICAgICAgICZsdDt0aXRsZSZndDtXZWxjb21lJmx0Oy90aXRsZSZndDsKLSAgICAgICZsdDsvaGVhZCZndDsKLSAgICAgICZsdDtib2R5Jmd0OwotICAgICAgICAmbHQ7Zm9udCBiZ2NvbG9yPSJ7bWVtYmVyL2Zhdm9yaXRlQ29sb3J9IiZndDsKLSAgICAgICAgICBXZWxjb21lICZsdDt4c2w6dmFsdWUtb2Ygc2VsZWN0PSJtZW1iZXIvbmFtZSIvJmd0OyEKLSAgICAgICAgJmx0Oy9mb250Jmd0OwotICAgICAgICAmbHQ7eHNsOmNob29zZSZndDsKLSAgICAgICAgICAmbHQ7eHNsOndoZW4gdGVzdD0ibWVtYmVyW0BsZXZlbD0ncGxhdGludW0nXSImZ3Q7Ci0gICAgICAgICAgICBPdXIgc3BlY2lhbCBvZmZlciB0byBwbGF0aW51bSBtZW1iZXJzIHRvZGF5IGlzIHNvbWV0aGluZyBncmVhdAotICAgICAgICAgICZsdDsveHNsOndoZW4mZ3Q7Ci0gICAgICAgICAgJmx0O3hzbDpvdGhlcndpc2UmZ3Q7Ci0gICAgICAgICAgICBCZWNvbWUgYSBwbGF0aW51bSBtZW1iZXIgdG9kYXkhCi0gICAgICAgICAgJmx0Oy94c2w6b3RoZXJ3aXNlJmd0OwotICAgICAgICAmbHQ7L3hzbDpjaG9vc2UmZ3Q7Ci0gICAgICAgICZsdDt0YWJsZSZndDsKLSAgICAgICAgICAmbHQ7dHImZ3Q7Jmx0O3RoJmd0O1R5cGUmbHQ7L3RoJmd0OyZsdDt0aCZndDtOdW1iZXImbHQ7L3RoJmd0OyZsdDsvdHImZ3Q7Ci0gICAgICAgICAgJmx0O3hzbDpmb3ItZWFjaCBzZWxlY3Q9Im1lbWJlci9waG9uZSImZ3Q7Ci0gICAgICAgICAgICAmbHQ7dHImZ3Q7Ci0gICAgICAgICAgICAgICZsdDt0ZCZndDsmbHQ7eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHR5cGUiLyZndDsmbHQ7L3RkJmd0OwotICAgICAgICAgICAgICAmbHQ7dGQmZ3Q7Jmx0O3hzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLyZndDsmbHQ7L3RkJmd0OwotICAgICAgICAgICAgJmx0Oy90ciZndDsKLSAgICAgICAgICAmbHQ7L3hzbDpmb3ItZWFjaCZndDsKLSAgICAgICAgJmx0Oy90YWJsZSZndDsKLSAgICAgICZsdDsvYm9keSZndDsKLSAgICAmbHQ7L2h0bWwmZ3Q7Ci0gICZsdDsveHNsOnRlbXBsYXRlJmd0OwotJmx0Oy94c2w6c3R5bGVzaGVldCZndDsKLSAgICAgICAgIAotICAgICAgICAgPC9wcmU+PHA+Ci0gICAgICAgICAgICBUaGUgJmxkcXVvO3Rlc3QmcmRxdW87IGF0dHJpYnV0ZSBoYXMgdGhlIHNhbWUgY2FwYWJpbGl0aWVzLyBjb25zdHJhaW50cyBhcyB0aGUgJmxkcXVvO3Rlc3QmcmRxdW87IGF0dHJpYnV0ZSBpbiB0aGUKLSAgICAgICAgICAgICZsdDt4c2w6aWYmZ3Q7Ci0gICAgICAgICAgICB0YWcuIE11bHRpcGxlCi0gICAgICAgICAgICAmbHQ7eHNsOndoZW4mZ3Q7Ci0gICAgICAgICAgICBibG9ja3MgYXJlIGFsbG93ZWQuIEFzIHNvb24gYXMgb25lICZsZHF1bzt3aGVuIHRlc3QmcmRxdW87IGlzIG1hY2hlZCwgaXQgd2lsbCBub3QgZXZhbHVhdGUgYW55IGZ1cnRoZXIgJmxkcXVvO3hzbDp3aGVuCi0gICAgICAgICAgICB0ZXN0cyZyZHF1bzsKLSAgICAgICAgICAgIGluIHRoZQotICAgICAgICAgICAgJmx0O3hzbDpjaG9vc2UmZ3Q7Ci0gICAgICAgICAgICBibG9jay4KLSAgICAgICAgIDwvcD48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTjEwMEJFIj48L2E+Q29uY2x1c2lvbjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAgICAgICBXaXRoIGp1c3QgdGhlc2UgZmV3IGNvbW1hbmRzIChhbiBhZG1pdHRlZGx5IHNtYWxsIHN1YnNldCBvZiBYU0xUKSBhbmQgYSBzdHJvbmcgYmFja2dyb3VuZCBpbiBIVE1MIChESFRNTCBhbmQKLSAgICAgICAgIEphdmFTY3JpcHQKLSAgICAgICAgIGluY2x1ZGVkKSwgSSBiZWxpZXZlIHdlYiBkZXZlbG9wZXJzIGNvdWxkIG1lZXQgdGhlIG1ham9yaXR5IG9mIHRoZWlyIHByZXNlbnRhdGlvbiBuZWVkcy4gT2J2aW91c2x5Ci0gICAgICAgICB0aGVyZSB3aWxsCi0gICAgICAgICBiZSBjYXNlcyB3aGVyZSBncmVhdGVyIGZsZXhpYmlsaXR5IGlzIHJlcXVpcmVkLCBidXQgdGhlIGFkdmFudGFnZSBvZiB0aGlzIHRlY2huaXF1ZSBpcyB0aGF0IG9ubHkKLSAgICAgICAgIHRoZW4sIGRvZXMgdGhlCi0gICAgICAgICBkZXZlbG9wZXIgbmVlZCB0byBsZWFybiB0aG9zZSBjb25zdHJ1Y3RzLiAgICAgICAgIAotICAgICAgPC9wPjxwPgotICAgICAgICAgQXMgYSBmdXJ0aGVyIGJlbmVmaXQsIHRoaXMgdGVjaG5pcXVlIG1pbmltaXplZCB0aGUgaW50ZXJkZXBlbmRlbmNlIG9mIG9uZSBYTFNUIGNvbnN0cnVjdCBvbiBhbm90aGVyLiBMb2NhbAotICAgICAgICAgY2hhbmdlcyBzdGF5Ci0gICAgICAgICBsb2NhbCB0aGVyZWJ5IHJlZHVjaW5nIHRoZSBicml0dGxlbmVzcyBvZiBzb2x1dGlvbnMuIFRoZSBkZXZlbG9wZXIgYWxzbyBubyBsb25nZXIgaGFzIHRvIHJlbWVtYmVyCi0gICAgICAgICBhbmQgYWNjb3VudAotICAgICAgICAgZm9yIFhTTFQmcnNxdW87cyBkZWZhdWx0IGJlaGF2aW9ycy4gICAgICAgICAKLSAgICAgIDwvcD48cD4KLSAgICAgICAgIEkgaG9wZSBmcm9tIHRoZXNlIGZldyBleGFtcGxlcywgSSBoYXZlIG9wZW5lZCBhIGZldyBleWVzIHRvIHRoZSBwb3dlciBvZiBYU0xUIGFuZCBob3cgYSBzbWFsbCBjaGFuZ2UgaW4gaG93Ci0gICAgICAgICBYU0xUIGlzIGZyYW1lZCBjYW4gbWFrZSBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBpdHMgdW5kZXJzdGFuZGFiaWxpdHkgYW5kIGFjY2Vzc2liaWxpdHkgdG8gd2ViIGRldmVsb3BlcnMuIElmCi0gICAgICAgICBub3RoaW5nIGVsc2UsIEkgaG9wZSB0byBlbmNvdXJhZ2Ugc29tZSBnb29kIGRpc2N1c3Npb25zLiAKLSAgICAgIDwvcD48L2Rpdj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9jb25jZXB0cy9yZXNvdXJjZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9jb25jZXB0cy9yZXNvdXJjZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU4M2YwNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvY29uY2VwdHMvcmVzb3VyY2VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+UmVzb3VyY2VzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iY29uY2VwdHMuaHRtbCIgdGl0bGU9IlhTTFQgQ29uY2VwdHMiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iY29uY2VwdHMuaHRtbCIgdGl0bGU9IlhTTFQgQ29uY2VwdHMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iLi4vZWRpdG9yL3hzbGVkaXRvci5odG1sIiB0aXRsZT0iWFNMIEVkaXRpbmciPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iY29uY2VwdHNfUmVzb3VyY2VzIj48L2E+UmVzb3VyY2VzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJkaXNjIj48bGk+PHA+Ci0gICAgICAgICAgICAgICA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiIHRhcmdldD0iX3RvcCI+WFNMVCAxLjAgU3BlY2lmaWNhdGlvbjwvYT4gLSBUaGUgb2ZmaWNpYWwgVzNDIFhTTFQgMS4wIFNwZWNpZmljYXRpb24uCi0gICAgICAgICAgICA8L3A+PC9saT48bGk+PHA+Ci0gICAgICAgICAgICAgICA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuZHBhd3Nvbi5jby51ay94c2wvaW5kZXguaHRtbCIgdGFyZ2V0PSJfdG9wIj5YU0xUIEZBUTwvYT4gLSBtYWludGFpbmVkIGJ5IERhdmUgUGF3c29uLgotICAgICAgICAgICAgPC9wPjwvbGk+PGxpPjxwPjxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy54ZnJvbnQuY29tL3Jlc2N1aW5nLXhzbHQuaHRtbCIgdGFyZ2V0PSJfdG9wIj5SZXNjdWluZyBYU0xUIGZyb20gTmljaGUgU3RhdHVzPC9hPiAtIGJ5IERhdmlkIEphY29icy48L3A+PC9saT48bGk+PHA+PGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnhtbC5jb20vcHViL2EvMjAwMy8xMS8yNi9sZWFyblhTTFQuaHRtbCIgdGFyZ2V0PSJfdG9wIj5GaXZlIFhTTFQgQmFzaWNzPC9hPiAtIGJ5IE1pY2hhZWwgRml0emdlcmFsZCBhdXRob3Igb2YgTGVhcm5pbmcgWFNMVC48L3A+PC9saT48bGk+PHA+PGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lnhmcm9udC5jb20vZmlsZXMvdHV0b3JpYWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+WEZyb250IFR1dG9yaWFsczwvYT4gLSBwcm92aWRlcyBzZXZlcmFsIHR1dG9yaWFscyBpbmNsdWRlIFhTTFQgMS4wLjwvcD48L2xpPjxsaT48cD48YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuY2FmZWNvbmxlY2hlLm9yZy9ib29rcy9iaWJsZTIvY2hhcHRlcnMvY2gxNy5odG1sIiB0YXJnZXQ9Il90b3AiPlhTTCBUcmFuc2Zvcm1hdGlvbnM8L2E+IC0gQ2hhcHRlciAxNyBvZiB0aGUgWE1MIEJpYmxlIDJuZCBFZGl0aW9uLjwvcD48L2xpPjwvdWw+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4YmJhYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YU0wgRWRpdGluZzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InByZXYiIGhyZWY9Ii4uL2NvbmNlcHRzL3Jlc291cmNlcy5odG1sIiB0aXRsZT0iUmVzb3VyY2VzIj48bGluayByZWw9Im5leHQiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0Lmh0bWwiIHRpdGxlPSJDb250ZW50IEFzc2lzdCI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTjEwMEYzIj48L2E+WFNMIEVkaXRpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InhzbGVkaXRvci5odG1sI1ZhbGlkYXRpb24iPlZhbGlkYXRpb248L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdC5odG1sIj5Db250ZW50IEFzc2lzdDwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCNlZF9YU0xQcm9wb3NhbHMiPlhTTFQgRWxlbWVudCBQcm9wb3NhbHM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9zZWxlY3R0ZXN0Lmh0bWwiPlNlbGVjdCwgVGVzdCwgYW5kIE1hdGNoIEF0dHJpYnV0ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9leGNsdWRlLmh0bWwiPkV4Y2x1ZGUtUmVzdWx0LVByZWZpeGVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfbW9kZWFzc2lzdC5odG1sIj5Nb2RlIGF0dHJpYnV0ZSBhc3Npc3RhbmNlPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfbmFtZWR0ZW1wbGF0ZS5odG1sIj5OYW1lZCBUZW1wbGF0ZSBBc3Npc3RhbmNlPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfY2FsbHRlbXBsYXRlLmh0bWwiPkNhbGwtVGVtcGxhdGUgQXNzaXN0YW5jZTwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0X2luY2x1ZGUuaHRtbCI+Ci0gICAgICAgICAgICAgICAgSW5jbHVkZSBhbmQgSW1wb3J0Ci0gICAgICAgICAgICAgICAgaHJlZgotICAgICAgICAgICAgICAgIEFzc2lzdGFuY2UKLSAgICAgICAgICAgIDwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwiPlRlbXBsYXRlczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ieHNsZWRpdG9yX3RlbXBsYXRlcy5odG1sI04xMDFFMiI+WFBhdGggVGVtcGxhdGVzPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InhzbGVkaXRvcl9jb2xvcmluZy5odG1sIj5YU0xUIFN5bnRheCBDb2xvcmluZzwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InhzbGVkaXRvcl9tYXJrZXJzLmh0bWwiPlhTTFQgTWFya2VycyBhbmQgQW5ub3RhdGlvbnM8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InhzbGVkaXRvcl9tYXJrZXJzLmh0bWwjeHNsdE92ZXJSaWRlIj5UZW1wbGF0ZSBPdmVycmlkZTwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiPlhTTCBEZWJ1Z2dpbmc8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiPk5hdmlnYXRpb248L2E+PC9zcGFuPjwvbGk+PC91bD48L2Rpdj48cD5UaGUgWFNMIFRvb2xzIHBsdWdpbnMgZXh0ZW5kIHRoZSBhYmlsaXR5IG9mIHRoZSBXZWIgU3RhbmRhcmQgVG9vbHMgWE1MCi0gICAgICAgIGVkaXRvci4gVGhpcyBleHRlbnNpb24gYWRkcyBzcGVjaWZpYyBzdXBwb3J0IGFuZCBmdW5jdGlvbmFsaXR5IGZvciB3b3JraW5nIHdpdGgKLSAgICAgICAgYW5kIGRlYnVnZ2luZyBYU0wgZmlsZXMuPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlZhbGlkYXRpb24iPjwvYT5WYWxpZGF0aW9uPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD5UaGUgWFNMIGV4dGVuc2lvbnMgZm9yIHRoZSBlY2xpcHNlIFhNTCBlZGl0b3IgaW5jbHVkZSBhcyB5b3UgdHlwZQotICAgICAgICAgICAgdmFsaWRhdGlvbiBmb3IgWFNMIHNwZWNpZmljIGZlYXR1cmVzLiBUaGlzIGluY2x1ZGVzIG5vdCBvbmx5IHRoZSBhYmlsaXR5IHRvCi0gICAgICAgICAgICBzeW50YXggY2hlY2sgdGhlIGdyYW1tYXIsIGJ1dCB0byBhbHNvIHRvIHZhbGlkYXRlIHNwZWNpZmljIFhTTCBzcGVjaWZpY2F0aW9uCi0gICAgICAgICAgICBydWxlcy4gR3JhbW1hciB2YWxpZGF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIGF0dHJpYnV0ZSBmb3IKLSAgICAgICAgICAgIHRoZSBzdHlsZSBzaGVldCB0aGF0IGlzIGJlaW5nIGVkaXRlZC4gVmFsaWQgdmVyc2lvbiBudW1iZXJzIGFyZSAxLjAsIGFuZCAyLjAuCi0gICAgICAgIDwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbG9yaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb2xvcmluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWNmMjE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbG9yaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlhTTFQgU3ludGF4IENvbG9yaW5nPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNsZWRpdG9yLmh0bWwiIHRpdGxlPSJYU0wgRWRpdGluZyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwiIHRpdGxlPSJUZW1wbGF0ZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieHNsZWRpdG9yX21hcmtlcnMuaHRtbCIgdGl0bGU9IlhTTFQgTWFya2VycyBhbmQgQW5ub3RhdGlvbnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0ieHNsdFN5bnRheENvbG9yaW5nIj48L2E+WFNMVCBTeW50YXggQ29sb3Jpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgICAgWFNMIFRvb2xzIEVkaXRvciBjYW4gaGF2ZSBzeW50YXggY29sb3JpbmcgdGhhdCBpcyBzcGVjaWZpYyBqdXN0IGZvciB0aGUgdGhlCi0gICAgICAgICAgICBYU0xUIE5hbWVzcGFjZSBhcyBzaG93aW5nIGluCi0gICAgICAgICAgICA8YSBjbGFzcz0ieHJlZiIgaHJlZj0ieHNsZWRpdG9yX2NvbG9yaW5nLmh0bWwjZmlnX2VkaXRvclN5bnRheENvbG9yaW5nIiB0aXRsZT0iRmlndXJlJm5ic3A7OC4mbmJzcDtYU0xUIFNwZWNpZmljIFN5bnRheCBDb2xvcmluZyI+RmlndXJlJm5ic3A7OCwgJmxkcXVvO1hTTFQgU3BlY2lmaWMgU3ludGF4IENvbG9yaW5nJnJkcXVvOzwvYT4KLSAgICAgICAgICAgIC4KLSAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iZmlnX2VkaXRvclN5bnRheENvbG9yaW5nIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5GaWd1cmUmbmJzcDs4LiZuYnNwO1hTTFQgU3BlY2lmaWMgU3ludGF4IENvbG9yaW5nPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2VkaXRvci9zeW50YXhDb2xvcmluZy5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iWFNMVCBTcGVjaWZpYyBTeW50YXggQ29sb3JpbmciPjwvZGl2PjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZmlndXJlLWJyZWFrIj48cD4KLSAgICAgICAgICAgIFRoZSBkZWZhdWx0IGNvbG9yaW5nIHNob3duIGlzIHRvIG1ha2UgYWxsIFhTTFQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgYm9sZC4KLSAgICAgICAgICAgIFRoZSBzZXR0aW5ncyBhcmUgY29udHJvbGVkIGluCi0gICAgICAgICAgICA8YSBjbGFzcz0ieHJlZiIgaHJlZj0iLi4vcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMuaHRtbCIgdGl0bGU9IlhTTCBUb29scyBQcmVmZXJlbmNlcyI+PGk+WFNMIFRvb2xzIFByZWZlcmVuY2VzPC9pPjwvYT4KLSAgICAgICAgICAgIC4KLSAgICAgICAgPC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjVjM2RjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q29udGVudCBBc3Npc3Q8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSJ4c2xlZGl0b3IuaHRtbCIgdGl0bGU9IlhTTCBFZGl0aW5nIj48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvci5odG1sIiB0aXRsZT0iWFNMIEVkaXRpbmciPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3Rfc2VsZWN0dGVzdC5odG1sIiB0aXRsZT0iU2VsZWN0LCBUZXN0LCBhbmQgTWF0Y2ggQXR0cmlidXRlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJDb250ZW50QXNzaXN0Ij48L2E+Q29udGVudCBBc3Npc3Q8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgICAgWFNMIFRvb2xzIGV4dGVuZHMgdGhlIGV4aXN0aW5nIGNvbnRlbnQgYXNzaXN0YW5jZSBzdXBwb3J0IG9mIHRoZSBYTUwgRWRpdG9yIHRvCi0gICAgICAgICAgICBwcm92aWRlIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3Igc2V2ZXJhbCBYU0wgbmFtZXNwYWNlIGF0dHJpYnV0ZXMuIFRoZSBjb250ZW50Ci0gICAgICAgICAgICBhc3Npc3RhbmNlIHByb3ZpZGVkIGNvdmVycyB0aGUgYXZhaWxhYmxlIFhQYXRoIHN0YXRlbWVudHMgYXMgZGVmaW5lZCBpbiB0aGUKLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlhQYXRoIFRlbXBsYXRlczwvZW0+PC9zcGFuPgotICAgICAgICAgICAgcHJlZmVyZW5jZSBwYWdlLgotICAgICAgICA8L3A+PGRpdiBjbGFzcz0iaW1wb3J0YW50IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+WFBhdGggMi4wIFN1cHBvcnQ8L2gzPjxwPkN1cnJlbnRseSBYUGF0aCAyLjAgaXMgbm90IHN1cHBvcnRlZCBkaXJlY3RseS4gSG93ZXZlciwgYSB1c2VyCi0gICAgICAgICAgICAgICAgY2FuIGFkZCB0aGlzIHN1cHBvcnQgaWYgdGhleSBuZWVkIGl0IGJ5IGFkZGluZyB0aGUgbWlzc2luZyBYUGF0aCBmdW5jdGlvbnMKLSAgICAgICAgICAgICAgICB0byB0aGUgWFBhdGggVGVtcGxhdGVzLjwvcD48L2Rpdj48cD5UbyBpbml0aWF0ZSBjb250ZW50IGFzc2lzdGFuY2UgcHJlc3MgQ1RSTCArIFNQQUNFIG9yIENNRCArIFNQQUNFLiBUaGlzCi0gICAgICAgICAgICB3aWxsIGJyaW5nIHVwIGEgZGlhbG9nIHRoYXQgd2lsbCBjb250YWluIGFueSBwcm9wb3NhbHMgdGhhdCBhcmUgYXZhaWxhYmxlLiBJZgotICAgICAgICAgICAgbm8gcHJvcG9zYWxzIGFyZSBhdmFpbGFibGUgYW4gbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgc3RhdHVzIGJhci4KLSAgICAgICAgPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJlZF9YU0xQcm9wb3NhbHMiPjwvYT5YU0xUIEVsZW1lbnQgUHJvcG9zYWxzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLSAgICAgICAgICAgICAgICBTaW5jZSBYU0xUIGlzIGEgdGVtcGxhdGluZyBsYW5ndWFnZSwgaXQncyBlbGVtZW50cyBtdXN0IGJlIGFibGUgdG8gYmUKLSAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgdmFyaW91cyBtYXJrdXAgaXQgaW5jbHVkZXMuIFRoZSBYU0xUIEVkaXRvciB3aWxsIHByb3ZpZGUKLSAgICAgICAgICAgICAgICBjb250ZW50IGFzc2lzdGFuY2UgYW5kIHByb3Bvc2FscyBmb3IgWFNMVCBlbGVtZW50cyB0aGF0IGFyZSBhdmFpbGFibGUgdG8KLSAgICAgICAgICAgICAgICBiZSB1c2VkIHdpdGhpbiBub24tWFNMVCBuYW1lc3BhY2VkIGVsZW1lbnRzLiBUaGlzIGlzIGRlcGljdGVkIGluCi0gICAgICAgICAgICAgICAgPGEgY2xhc3M9InhyZWYiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0Lmh0bWwjZmlnX1hTTFByb3Bvc2FscyIgdGl0bGU9IkZpZ3VyZSZuYnNwOzEuJm5ic3A7WFNMVCBQcm9wb3NhbHMgd2l0aGluIE5vbi1YU0xUIGVsZW1lbnRzIj5GaWd1cmUmbmJzcDsxLCAmbGRxdW87WFNMVCBQcm9wb3NhbHMgd2l0aGluIE5vbi1YU0xUIGVsZW1lbnRzJnJkcXVvOzwvYT4KLSAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iZmlndXJlIj48YSBuYW1lPSJmaWdfWFNMUHJvcG9zYWxzIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5GaWd1cmUmbmJzcDsxLiZuYnNwO1hTTFQgUHJvcG9zYWxzIHdpdGhpbiBOb24tWFNMVCBlbGVtZW50czwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9lZGl0b3IveHNscHJvcG9zYWxzLnBuZyIgYWxpZ249Im1pZGRsZSIgYWx0PSJYU0xUIFByb3Bvc2FscyB3aXRoaW4gTm9uLVhTTFQgZWxlbWVudHMiPjwvZGl2PjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZmlndXJlLWJyZWFrIj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfY2FsbHRlbXBsYXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X2NhbGx0ZW1wbGF0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzRmZjMzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfY2FsbHRlbXBsYXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q2FsbC1UZW1wbGF0ZSBBc3Npc3RhbmNlPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCIgdGl0bGU9IkNvbnRlbnQgQXNzaXN0Ij48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0X25hbWVkdGVtcGxhdGUuaHRtbCIgdGl0bGU9Ik5hbWVkIFRlbXBsYXRlIEFzc2lzdGFuY2UiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfaW5jbHVkZS5odG1sIiB0aXRsZT0iSW5jbHVkZSBhbmQgSW1wb3J0IGhyZWYgQXNzaXN0YW5jZSI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iZWRfQ2FsbFRlbXBsYXRlQXNzaXN0Ij48L2E+Q2FsbC1UZW1wbGF0ZSBBc3Npc3RhbmNlPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLSAgICAgICAgICAgICAgICBBbnkKLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5jYWxsLXRlbXBsYXRlPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgeHNsdCBlbGVtZW50IGhhcyBjb250ZW50IGFzc2lzdGFuY2UgYXZhaWxhYmxlIGZvciBpdCdzIG5hbWUgYXR0cmlidXRlLgotICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBwcm92aWRlIGEgbGlzdCBvZiBwb3NzaWJsZSBYU0xUIG5hbWVkIHRlbXBsYXRlcyB0aGF0IGNhbiBiZQotICAgICAgICAgICAgICAgIGNhbGxlZCBmcm9tIHRoZSBjdXJyZW50IHN0eWxlc2hlZXQuIFRoaXMgdGFrZXMgaW50byBlZmZlY3QgYWxsIGluY2x1ZGVkCi0gICAgICAgICAgICAgICAgYW5kIGltcG9ydGVkIHN0eWxlc2hlZXRzIGFzIHdlbGwgYXMgdGhvc2UgZGVmaW5lZCBpbiB0aGUgY3VycmVudAotICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuCi0gICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iZmlndXJlIj48YSBuYW1lPSJmaWdfQ2FsbFRlbXBsYXRlQXNzaXN0Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5GaWd1cmUmbmJzcDs2LiZuYnNwO0NhbGwtVGVtcGxhdGUgQXNzaXN0YW5jZTwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9lZGl0b3IvY2FsbHRlbXBsYXRlLnBuZyIgYWxpZ249Im1pZGRsZSIgYWx0PSJDYWxsLVRlbXBsYXRlIEFzc2lzdGFuY2UiPjwvZGl2PjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZmlndXJlLWJyZWFrIj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfZXhjbHVkZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9leGNsdWRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNmNkYWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9leGNsdWRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkV4Y2x1ZGUtUmVzdWx0LVByZWZpeGVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCIgdGl0bGU9IkNvbnRlbnQgQXNzaXN0Ij48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0X3NlbGVjdHRlc3QuaHRtbCIgdGl0bGU9IlNlbGVjdCwgVGVzdCwgYW5kIE1hdGNoIEF0dHJpYnV0ZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfbW9kZWFzc2lzdC5odG1sIiB0aXRsZT0iTW9kZSBhdHRyaWJ1dGUgYXNzaXN0YW5jZSI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdCI+PC9hPkV4Y2x1ZGUtUmVzdWx0LVByZWZpeGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLSAgICAgICAgICAgICAgICBUaGUKLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5leGNsdWRlLXJlc3VsdC1wcmVmaXhlczwvZW0+PC9zcGFuPgotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBpbiBib3RoIFhTTFQgMS4wIGFuZCBYU0xUIDIuMCBhbGxvd3MgZm9yIHRoZSBleGNsdXNpb24gb2YKLSAgICAgICAgICAgICAgICBjZXJ0YWluIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgaW4gdGhlIG91dHB1dCBkb2N1bWVudC4gVGhlIGNvbnRlbnQKLSAgICAgICAgICAgICAgICBhc3Npc3RhbmNlIHBvcHVsYXRlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIG5hbWVzcGFjZXMgdGhhdCBoYXZlIGJlZW4gZGVmaW5lZAotICAgICAgICAgICAgICAgIGluIHRoZSBzdHlsc2VoZWV0IGFuZCBwcm92aWRlcyB0aGVtIGFzIHByb3Bvc2FscyBhcyBzaG93biBpbgotICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ4cmVmIiBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9leGNsdWRlLmh0bWwjZmlnX0V4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QxIiB0aXRsZT0iRmlndXJlJm5ic3A7Mi4mbmJzcDtFeGNsdWRlLXJlc3VsdC1wcmVmaXhlcyBDb250ZW50IEFzc2lzdGFuY2UiPkZpZ3VyZSZuYnNwOzIsICZsZHF1bztFeGNsdWRlLXJlc3VsdC1wcmVmaXhlcyBDb250ZW50IEFzc2lzdGFuY2UKLSAgICAgICAgICAgICAgICAmcmRxdW87PC9hPgotICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImZpZ19FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0MSI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7Mi4mbmJzcDtFeGNsdWRlLXJlc3VsdC1wcmVmaXhlcyBDb250ZW50IEFzc2lzdGFuY2UKLSAgICAgICAgICAgICAgICA8L2I+PC9wPjxkaXYgY2xhc3M9ImZpZ3VyZS1jb250ZW50cyI+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvZWRpdG9yL0V4Y2x1ZGVDb250ZW50QXNzaXN0MS5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iRXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMgQ29udGVudCBBc3Npc3RhbmNlIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+PHA+Ci0gICAgICAgICAgICAgICAgSWYgdGhlIGF0dHJpYnV0ZSBoYXMgbm8gdmFsdWVzIGRlZmluZWQsIHRoZW4gdGhlCi0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+I2FsbDwvZW0+PC9zcGFuPgotICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoZSBsaXN0LiBJZiAjYWxsIGlzIGFscmVhZHkgaW4gdGhlIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgICAgICB2YWx1ZSwgdGhlbiBubyBjb250ZW50IGFzc2lzdGFuY2Ugd2lsbCBiZSBhdmFpbGFibGUuCi0gICAgICAgICAgICA8L3A+PGRpdiBjbGFzcz0iZmlndXJlIj48YSBuYW1lPSJmaWdfRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDIiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkZpZ3VyZSZuYnNwOzMuJm5ic3A7RmlsdGVyZWQgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMgcHJvcG9zYWxzPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2VkaXRvci9FeGNsdWRlQ29udGVudEFzc2lzdDIucG5nIiBhbGlnbj0ibWlkZGxlIiBhbHQ9IkZpbHRlcmVkIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIHByb3Bvc2FscyI+PC9kaXY+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJmaWd1cmUtYnJlYWsiPjxwPkNvbnRlbnQgYXNzaXN0YW5jZSBpcyBpbnRlbGxpZ2VudCBlbm91Z2ggdG8ga25vdyB3aGVuIGEgbmFtZXNwYWNlCi0gICAgICAgICAgICAgICAgcHJlZml4IGlzIGFscmVhZHkgaW4gdGhlIGxpc3Qgb2YgZXhjbHVkZWQgbmFtZXNwYWNlcy4gSW4gdGhpcyBjYXNlIGl0IHdpbGwKLSAgICAgICAgICAgICAgICBub3Qgc2hvdyB0aGUgbmFtZXNwYWNlIGluIHRoZSBwcm9wb3NhbCBsaXN0LjwvcD48ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+IFdoeSBpc24ndCB0aGUgWFNMIE5hbWVzcGFjZSBwcmVmaXggaW4gdGhlIHByb3Bvc2Fscz88L2gzPjxwPkN1cnJlbnRseSB0aGUgeHNsIHByZWZpeCBvciBhbnkgcHJlZml4IHRoYXQgdXNlcyB0aGUgWFNMCi0gICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBsaXN0LiBUaGlzIG1heSBiZSBjaGFuZ2VkIGF0IGEgZnV0dXJlCi0gICAgICAgICAgICAgICAgICAgIGRhdGUuIFRoaXMgd2lsbCBkZXBlbmQgb24gdXNlciBmZWVkYmFjay48L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X2luY2x1ZGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfaW5jbHVkZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTE1Yjc3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfaW5jbHVkZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5JbmNsdWRlIGFuZCBJbXBvcnQgaHJlZiBBc3Npc3RhbmNlPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCIgdGl0bGU9IkNvbnRlbnQgQXNzaXN0Ij48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0X2NhbGx0ZW1wbGF0ZS5odG1sIiB0aXRsZT0iQ2FsbC1UZW1wbGF0ZSBBc3Npc3RhbmNlIj48bGluayByZWw9Im5leHQiIGhyZWY9InhzbGVkaXRvcl90ZW1wbGF0ZXMuaHRtbCIgdGl0bGU9IlRlbXBsYXRlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iZWRfaHJlZiI+PC9hPgotICAgICAgICAgICAgICAgIEluY2x1ZGUgYW5kIEltcG9ydAotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmhyZWY8L2VtPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICBBc3Npc3RhbmNlCi0gICAgICAgICAgICA8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlhTTFQgc3R5bGVzaGVldHMgaGF2ZSB0aGUgYWJpbGl0eSB0byBpbXBvcnQgYW5kIGluY2x1ZGUgb3RoZXIKLSAgICAgICAgICAgICAgICBzdHlsZXNoZWV0cy4gVGhpcyBhbGxvd3MgZm9yIGEgbW9kdWxhciBzdHJ1Y3R1cmUgZm9yIHRoZSB0ZW1wbGF0ZXMgdG8gYmUKLSAgICAgICAgICAgICAgICBjcmVhdGVkLiBJdCBhbHNvIGFsbG93cyBmb3IgZWFzaWVyIG1haW50ZW5hbmNlLiBIb3dldmVyLCBpZiBvbmUgaXMgd29ya2luZwotICAgICAgICAgICAgICAgIHdpdGggYSBsYXJnZSBwcm9qZWN0IGxpa2UgdGhlIERvY0Jvb2sgUHJvamVjdHMgc3R5bGVzaGVldHMgaXQgY2FuIGJlCi0gICAgICAgICAgICAgICAgZGlmZmljdWx0IHRvIHJlbWVtYmVyIHRoZSBuYW1lcyBhbmQgbG9jYXRpb25zIG9mIGFsbCB0aGUgc3R5bGVzaGVldHMuCi0gICAgICAgICAgICA8L3A+PHA+Ci0gICAgICAgICAgICAgICAgVG8gdGhpcyBlbmQsIHRoZSBYU0xUIGVkaXRvciBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHRoZQotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmhyZWY8L2VtPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuIFRoZSBzY29wZSBvZiB0aGUgYXNzaXN0YW5jZSBpcyByZXN0cmljdGVkIHRvIHRoZSBwcm9qZWN0IHRoYXQKLSAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBzdHlsZXNoZWV0IHRoYXQgaXMgYmVpbmcgZWRpdHRlZCByZXNpZGVzLgotICAgICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iZmlnX0hSRUZBc3Npc3RhbmNlIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5GaWd1cmUmbmJzcDs3LiZuYnNwO0luY2x1ZGUvSW1wb3J0IGhyZWYgQXNzaXN0YW5jZTwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9lZGl0b3IvaHJlZkFzc2lzdGFuY2UucG5nIiBhbGlnbj0ibWlkZGxlIiBhbHQ9IkluY2x1ZGUvSW1wb3J0IGhyZWYgQXNzaXN0YW5jZSI+PC9kaXY+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJmaWd1cmUtYnJlYWsiPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9tb2RlYXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X21vZGVhc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjNjViMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X21vZGVhc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+TW9kZSBhdHRyaWJ1dGUgYXNzaXN0YW5jZTwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0Lmh0bWwiIHRpdGxlPSJDb250ZW50IEFzc2lzdCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9leGNsdWRlLmh0bWwiIHRpdGxlPSJFeGNsdWRlLVJlc3VsdC1QcmVmaXhlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9uYW1lZHRlbXBsYXRlLmh0bWwiIHRpdGxlPSJOYW1lZCBUZW1wbGF0ZSBBc3Npc3RhbmNlIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJlZF9Nb2RlQXNzaXN0Ij48L2E+TW9kZSBhdHRyaWJ1dGUgYXNzaXN0YW5jZTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAgICAgICAgICAgICAgQ29udGVudCBhc3Npc3RhbmNlIGlzIGF2YWlsYWJsZSBmb3IgdGhvc2UgeHNsIGVsZW1lbnRzIHRoYXQgc3VwcG9ydCB0aGUKLSAgICAgICAgICAgICAgICBtb2RlIGF0dHJpYnV0ZS4gRm9yIFhTTFQgMS4wIHRoZXNlIGVsZW1lbnRzIGFyZQotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnRlbXBsYXRlPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgLAotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFwcGx5LXRlbXBsYXRlczwvZW0+PC9zcGFuPgotICAgICAgICAgICAgICAgICwgYW5kCi0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXBwbHktaW1wb3J0czwvZW0+PC9zcGFuPgotICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImZpZ19Nb2RlQXNzaXN0YW5jZSI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7NC4mbmJzcDtNb2RlIGF0dHJpYnV0ZSBhc3Npc3RhbmNlPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2VkaXRvci9tb2RlQXNzaXN0YW5jZS5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iTW9kZSBhdHRyaWJ1dGUgYXNzaXN0YW5jZSI+PC9kaXY+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJmaWd1cmUtYnJlYWsiPjxwPgotICAgICAgICAgICAgICAgIFRoZSBwcm9wb3NhbCBsaXN0IGlzIHBvcHVsYXRlZCBieSB0aG9zZSBtb2RlcyBkZWZpbmVkIG9uIHRlbXBsYXRlcyBpbiB0aGUKLSAgICAgICAgICAgICAgICBjdXJyZW50IHN0eWxlc2hlZXQsIGFuZCBhbnkgb2YgdGhlIHRlbXBsYXRlcyB0aGF0IGFyZQotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmluY2x1ZGVkPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgb3IKLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5pbXBvcnRlZDwvZW0+PC9zcGFuPgotICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIDwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfbmFtZWR0ZW1wbGF0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9uYW1lZHRlbXBsYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiODc1MDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9uYW1lZHRlbXBsYXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+TmFtZWQgVGVtcGxhdGUgQXNzaXN0YW5jZTwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0Lmh0bWwiIHRpdGxlPSJDb250ZW50IEFzc2lzdCI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9tb2RlYXNzaXN0Lmh0bWwiIHRpdGxlPSJNb2RlIGF0dHJpYnV0ZSBhc3Npc3RhbmNlIj48bGluayByZWw9Im5leHQiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0X2NhbGx0ZW1wbGF0ZS5odG1sIiB0aXRsZT0iQ2FsbC1UZW1wbGF0ZSBBc3Npc3RhbmNlIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJlZF9OYW1lZFRlbXBsYXRlQXNzaXN0Ij48L2E+TmFtZWQgVGVtcGxhdGUgQXNzaXN0YW5jZTwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAgICAgICAgICAgICAgQ2FsbCBOYW1lZCB0ZW1wbGF0ZXMgaGF2ZSBjb250ZW50IGFzc2lzdGFuY2UgYXZhaWxhYmxlIGZvciB0aGVpcgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm5hbWU8L2VtPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGxpc3Qgb2YgY2FsbGVkLXRlbXBsYXRlcyB0aGF0IGhhdmUgYmVlbgotICAgICAgICAgICAgICAgIHVzZWQsIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiBkZWZpbmVkIG9yIG92ZXJyaWRkZW4gd2l0aGluIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgc3R5bGVzaGVldC4KLSAgICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImZpZ19OYW1lZFRlbXBsYXRlcyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7NS4mbmJzcDtOYW1lZCBUZW1wbGF0ZSBBc3Npc3RhbmNlPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2VkaXRvci9uYW1lZFRlbXBsYXRlLnBuZyIgYWxpZ249Im1pZGRsZSIgYWx0PSJOYW1lZCBUZW1wbGF0ZSBBc3Npc3RhbmNlIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X3NlbGVjdHRlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3Rfc2VsZWN0dGVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTQxODA3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3Rfc2VsZWN0dGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5TZWxlY3QsIFRlc3QsIGFuZCBNYXRjaCBBdHRyaWJ1dGVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCIgdGl0bGU9IkNvbnRlbnQgQXNzaXN0Ij48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0Lmh0bWwiIHRpdGxlPSJDb250ZW50IEFzc2lzdCI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9leGNsdWRlLmh0bWwiIHRpdGxlPSJFeGNsdWRlLVJlc3VsdC1QcmVmaXhlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iU2VsZWN0VGVzdCI+PC9hPlNlbGVjdCwgVGVzdCwgYW5kIE1hdGNoIEF0dHJpYnV0ZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgICAgICAgIFdoZXJlIGV2ZXIgYW4geHNsIGVsZW1lbnQgc3VwcG9ydHMgYQotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnNlbGVjdDwvZW0+PC9zcGFuPgotICAgICAgICAgICAgICAgICwKLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50ZXN0PC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgLCBvcgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm1hdGNoPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlLCBjb250ZW50IGFzc2lzdGFuY2UgaXMgYXZhaWxhYmxlLiBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZQotICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKLSAgICAgICAgICAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjxwIGNsYXNzPSJ0aXRsZSI+PGI+U2VsZWN0LCBNYXRjaCBhbmQgVGVzdCBBc3Npc3RhbmNlPC9iPjwvcD48dWwgdHlwZT0iZGlzYyI+PGxpPjxwPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+VmFyaWFibGVzPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAtIGJvdGggbG9jYWwgYW5kIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZCB3aXRoaW4gdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuIEFueSBsb2NhbCBvciBnbG9iYWwgdmFyaWFibGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBuYW1lIGlzIHByZWZpeGVkIHdpdGggYSBkb2xsYXIgc2lnbiAkIHN5bWJvbC4KLSAgICAgICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpPjxwPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+WFBhdGggMS4wPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAtIFhQYXRoIDEuMCBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgdXNlIG9mIHRlbXBsYXRlcy4gQWxsIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgWFBhdGggMS4wIGFuZCBYU0xUIHhwYXRoIGV4dGVuc2lvbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSwgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHdlbGwgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmF4aXM8L2VtPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuIEN1cnJlbnRseSBYUGF0aCAyLjAgaXMgbm90IHN1cHBvcnRlZCBkaXJlY3RseSwgYnV0Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PHA+Q29udGVudCBhc3Npc3RhbmNlIGZvciB0aGUgc2VsZWN0IGFuZCB0ZXN0IGF0dHJpYnV0ZXMgaXMKLSAgICAgICAgICAgICAgICBpbnRlbGxpZ2VudCBlbm91Z2ggdG8ga25vdyB0aGF0IGl0IGlzIHdpdGhpbiBhbiBYUGF0aCBleHByZXNzaW9uLCBhbmQgd2lsbAotICAgICAgICAgICAgICAgIHRyeSB0byBkZXRlcm1pbmUgYW5kIHByb3ZpZGUgY29udGVudCBhc3Npc3RhbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgY3Vyc29yIHBvc2l0aW9uLiBJZiBhIHdvcmQgaGFzIGJlZW4gcGFydGlhbGx5IHR5cGVkIGl0IHdpbGwgZmlsdGVyIHRoZQotICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBhc3Npc3RhbmNlLjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2RlYnVnZ2luZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MDMzODguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPk5hdmlnYXRpb248L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSJ4c2xlZGl0b3IuaHRtbCIgdGl0bGU9IlhTTCBFZGl0aW5nIj48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvcl9kZWJ1Z2dpbmcuaHRtbCIgdGl0bGU9IlhTTCBEZWJ1Z2dpbmciPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iLi4vbGF1bmNoaW5nL2xhdW5jaGluZy5odG1sIiB0aXRsZT0iWFNMIExhdW5jaGluZyBhbmQgRGVidWdnaW5nIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ik4xMDIzMiI+PC9hPk5hdmlnYXRpb248L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgICAgTWFueSBvZiB0aGUgdmFyaWFibGVzLCBpbXBvcnRzL2luY2x1ZGVzLCBhbmQgdGVtcGxhdGVzIGNhbiBiZSBuYXZpZ2F0ZWQgdG8KLSAgICAgICAgICAgIHVzaW5nIHRoZQotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+T3BlbiBEZWNsYXJhdGlvbiAoRjMpPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICBwb3B1cCBtZW51IG9wdGlvbi4gVGhleSBjYW4gYWxzbyBiZSBuYXZpZ2F0ZWQgdG8gZGlyZWN0bHkgYnkgQ1RSTC1DbGlja2luZyBvbgotICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLCBpbXBvcnQvaW5jbHVkZSwgb3IgdGVtcGxhdGUuIEl0ZW1zIHRoYXQgY3VycmVudGx5Ci0gICAgICAgICAgICBoYXZlIGh5cGVybGlua2luZyBuYXZpZ2F0aW9uIGFyZToKLSAgICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD5DYWxsZWQtVGVtcGxhdGVzPC9wPjwvbGk+PGxpPjxwPmhyZWZzIGZvciBJbXBvcnQgYW5kIEluY2x1ZGVzPC9wPjwvbGk+PGxpPjxwPldpdGgtUGFyYW0gdmFyaWFibGVzPC9wPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJ0aXAiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5OYXZpZ2F0aW9uIHRvIGEgTmFtZWQgVGVtcGxhdGUgaW4gYW4gaW5jbHVkZWQvaW1wb3J0ZWQKLSAgICAgICAgICAgICAgICBzdHlsc2hlZXQ8L2gzPjxwPiBUaGUgaHlwZXJsaW5raW5nIGFiaWxpdHkgd2lsbCBuYXZpZ2F0ZSB5b3UgdG8gd2hlcmUgZXZlciB0aGUgZmlyc3QKLSAgICAgICAgICAgICAgICBkZWZpbml0aW9uIG9mIHRoZSB0ZW1wbGF0ZSBpcyBkZWZpbmVkLiBTbyBpZiB0aGUgdGVtcGxhdGUgaXMgZGVmaW5lZAotICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgY3VycmVudCBzdHlsZXNoZWV0IGl0IHdpbGwgbmF2aWdhdGUgdG8gdGhhdCBkZWZpbml0aW9uLiBIb3dldmVyCi0gICAgICAgICAgICAgICAgaWYgaXQgaXMgZGVmaW5lZCBpbiBhbiBpbXBvcnRlZCBvciBpbmNsdWRlZCBzdHlsZXNoZWV0LCBvciBhbnkgb2YgdGhvc2UKLSAgICAgICAgICAgICAgICBpbXBvcnRlZCBvciBpbmNsdWRlZCBzdHlsZXNoZWV0cyBpdCB3aWxsIHRha2UgeW91IHRvIHRoYXQgZGVmaW5pdGlvbi4gVXNlCi0gICAgICAgICAgICAgICAgdGhlIHN0YW5kYXJkIG5hdmlnYXRpb24gZXJyb3JzIHRvIG1vdmUgYmFjayBhbmQgZm9ydGggZHVyaW5nIHRoaXMKLSAgICAgICAgICAgICAgICBoeXBlcmxpbmtpbmcuPC9wPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfbWFya2Vycy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfbWFya2Vycy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTM3MTYwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX21hcmtlcnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+WFNMVCBNYXJrZXJzIGFuZCBBbm5vdGF0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbGVkaXRvci5odG1sIiB0aXRsZT0iWFNMIEVkaXRpbmciPjxsaW5rIHJlbD0icHJldiIgaHJlZj0ieHNsZWRpdG9yX2NvbG9yaW5nLmh0bWwiIHRpdGxlPSJYU0xUIFN5bnRheCBDb2xvcmluZyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiIHRpdGxlPSJYU0wgRGVidWdnaW5nIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9InhzbHRNYXJrZXJzIj48L2E+WFNMVCBNYXJrZXJzIGFuZCBBbm5vdGF0aW9uczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhlIFhTTCBlZGl0b3Igc3VwcG9ydHMgdGhlIGFiaWxpdHkgdG8gYW5ub3RhdGUgb3IgcHJvdmlkZSBtYXJrZXJzLiBUaGVzZQotICAgICAgICAgICAgYW5ub3RhdGlvbnMgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW1wbGF0ZXMgYW5kIFhTTFQKLSAgICAgICAgICAgIGVsZW1lbnRzIGluIHRoZSBzdHlsZXNoZWV0LjwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0ieHNsdE92ZXJSaWRlIj48L2E+VGVtcGxhdGUgT3ZlcnJpZGU8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPlRoZSBYU0xUIGVkaXRvciB3aWxsIG1hcmsgdGVtcGxhdGVzIHRoYXQgaGF2ZSBvdmVycmlkZW4gYW4gaW1wb3J0ZWQKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBvZiB0aGUgc2FtZSBuYW1lLjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImZpZ19PdmVyUmlkZTEiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkZpZ3VyZSZuYnNwOzkuJm5ic3A7T3ZlcnJpZGVuIFRlbXBsYXRlPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2VkaXRvci9vdmVycmlkZTEucG5nIiBhbGlnbj0ibWlkZGxlIiBhbHQ9Ik92ZXJyaWRlbiBUZW1wbGF0ZSI+PC9kaXY+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJmaWd1cmUtYnJlYWsiPjxwPgotICAgICAgICAgICAgICAgIEluCi0gICAgICAgICAgICAgICAgPGEgY2xhc3M9InhyZWYiIGhyZWY9InhzbGVkaXRvcl9tYXJrZXJzLmh0bWwjZmlnX092ZXJSaWRlMSIgdGl0bGU9IkZpZ3VyZSZuYnNwOzkuJm5ic3A7T3ZlcnJpZGVuIFRlbXBsYXRlIj5GaWd1cmUmbmJzcDs5LCAmbGRxdW87T3ZlcnJpZGVuIFRlbXBsYXRlJnJkcXVvOzwvYT4KLSAgICAgICAgICAgICAgICAsIHRoZSB0ZW1wbGF0ZQotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlRlbXBCPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgb3ZlcnJpZGVzIGFuIGltcG9ydGVkIHRlbXBsYXRlLiBCeSBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIgb3ZlciB0aGUKLSAgICAgICAgICAgICAgICB0cmlhbmdsZSBpY29uIGluIHRoZSBydWxlIGJhciwgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggZmlsZSB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSByZXNpZGVzLgotICAgICAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iZmlnX092ZXJSaWRlMiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7MTAuJm5ic3A7T3ZlcnJpZGVuIFRlbXBsYXRlIEluZm9ybWF0aW9uPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2VkaXRvci9vdmVycmlkZTIucG5nIiBhbGlnbj0ibWlkZGxlIiBhbHQ9Ik92ZXJyaWRlbiBUZW1wbGF0ZSBJbmZvcm1hdGlvbiI+PC9kaXY+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJmaWd1cmUtYnJlYWsiPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl90ZW1wbGF0ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNmNjk4Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl90ZW1wbGF0ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+VGVtcGxhdGVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNsZWRpdG9yLmh0bWwiIHRpdGxlPSJYU0wgRWRpdGluZyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdF9pbmNsdWRlLmh0bWwiIHRpdGxlPSJJbmNsdWRlIGFuZCBJbXBvcnQgaHJlZiBBc3Npc3RhbmNlIj48bGluayByZWw9Im5leHQiIGhyZWY9InhzbGVkaXRvcl9jb2xvcmluZy5odG1sIiB0aXRsZT0iWFNMVCBTeW50YXggQ29sb3JpbmciPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iWFNMRWRpdG9yVGVtcGxhdGVzIj48L2E+VGVtcGxhdGVzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD5TcGVjaWZpYyBYU0wgY29kZSBjb21wbGV0aW9uIHRlbXBsYXRlcyBjYW4gYmUgYWRkZWQgdG8gdGhlIFhNTAotICAgICAgICAgICAgZWRpdG9yJ3MgVGVtcGxhdGVzLiBUaGlzIGFsbG93cyBhIHVzZXIgdG8gZGVmaW5lIHNwZWNpZmljIG1hcmt1cCBjb21wbGV0aW9uCi0gICAgICAgICAgICB0ZW1wbGF0ZXMgdGhhdCBhcmUgY29tbW9ubHkgdXNlZC4gSW4gYWRkaXRpb24sIHRoZSBYUGF0aCBUZW1wbGF0ZXMgcGFnZSBjYW4gYmUKLSAgICAgICAgICAgIGVuaGFuY2VkIHRvIGFsbG93IGNvbW1vbmx5IHVzZWQgWFBhdGggdGVtcGxhdGVzIHRvIGJlIGluY2x1ZGVkLCBpbiBhZGRpdGlvbiB0bwotICAgICAgICAgICAgdGhvc2UgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuIFRoaXMgYWxsb3dzIGEgdXNlciB0aGUgYWJpbGl0eSB0byBhZGQgY3VzdG9tCi0gICAgICAgICAgICBleHRlbnNpb24gZnVuY3Rpb25zIGZvciBYU0xUIHRoYXQgbWF5IGJlIHByb2Nlc3NvciBzcGVjaWZpYy4gQWRvcHRlcnMgbWF5IGFsc28KLSAgICAgICAgICAgIHVzZSB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZXh0ZW5zaW9uIHBvaW50IHRvIGFkZCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuCi0gICAgICAgIDwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTjEwMUUyIj48L2E+WFBhdGggVGVtcGxhdGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD5UaGUgWFNMIFhQYXRoIFRlbXBsYXRlcyBwcmVmZXJlbmNlIHBhZ2UgYWxsb3dzIGZvciBhIHVzZXIgb3IgYWRvcHRlcgotICAgICAgICAgICAgICAgIHRvIGFkZCBzcGVjaWZpYyB4cGF0aCBleHRlbnNpb25zIHNvIHRoYXQgdGhleSBzaG93IHVwIGluIHRoZSBjb250ZW50Ci0gICAgICAgICAgICAgICAgYXNzaXN0YW5jZS4gU2VlIHRoZSBYUGF0aCBUZW1wbGF0ZXMgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIDwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX3ZhbGlkYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX3ZhbGlkYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkZjhlMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl92YWxpZGF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbnRlbnQgQXNzaXN0PC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43My4yIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbGVkaXRvci5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzIuJm5ic3A7WFNMIEVkaXRpbmciPjxsaW5rIHJlbD0icHJldiIgaHJlZj0ieHNsZWRpdG9yLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7Mi4mbmJzcDtYU0wgRWRpdGluZyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwiIHRpdGxlPSJUZW1wbGF0ZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iTjEwMDU2Ij48L2E+Q29udGVudCBBc3Npc3Q8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotCQkgICAgWFNMIFRvb2xpbmcgZXh0ZW5kcyB0aGUgZXhpc3RpbmcgY29udGVudCBhc3Npc3RhbmNlIHN1cHBvcnQgb2YgdGhlIFhNTAotCQkgICAgRWRpdG9yIHRvIHByb3ZpZGUgY29udGVudCBhc3Npc3RhbmNlIGZvciBzZXZlcmFsIFhTTCBuYW1lc3BhY2UgYXR0cmlidXRlcy4KLQkJICAgIFRoZSBjb250ZW50IGFzc2lzdGFuY2UgcHJvdmlkZWQgY292ZXJzIHRoZSBhdmFpbGFibGUgWFBhdGggc3RhdGVtZW50cyBhcwotCQkgICAgZGVmaW5lZCBpbiB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+WFBhdGggVGVtcGxhdGVzPC9lbT48L3NwYW4+IHByZWZlcmVuY2UgcGFnZS4KLQkJPC9wPjxwPgotCQkJVGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBjb250ZW50IGFzc2lzdCBhdmFpbGFibGUgYXJlIGFzIGZvbGxvd3M6Ci0JCTwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJkaXNjIj48bGk+PHA+Ci0JCQkJICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnRlbXBsYXRlPC9zdHJvbmc+PC9zcGFuPiAtIFRoZSB0ZW1wbGF0ZSBlbGVtZW50IGhhcyBzZXZlcmFsIGNvbnRlbnQgYXNzaXN0Ci0JCQkJICAgIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bWF0Y2g8L2VtPjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm5hbWU8L2VtPjwvc3Bhbj4sIGFuZCAKLQkJCQkgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bW9kZTwvZW0+PC9zcGFuPiBhdHRyaWJ1dGVzLgotCQkJCTwvcD48cD4KLQkJCQkJQWRkIGltYWdlIHNob3dpbmcgdGVtcGxhdGUgY29tcGxldGlvbi4KLQkJCQk8L3A+PC9saT48bGk+PHA+Ci0JCQkJCTxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnZhcmlhYmxlPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+cGFyYW08L3N0cm9uZz48L3NwYW4+IC0gVGhlIHZhcmlhYmxlIGFuZCBwYXJhbSBlbGVtZW50cyBoYXZlIGNvbnRlbnQgYXNzaXN0Ci0JCQkJCWZvciB4cGF0aCwgYXhpcywgcGFybWF0ZXJzIGFuZCB2YXJpYWJsZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwcmVkZWZpbmVkIHdoZW4gdXNpbmcgdGhlIG9wdGlvbmFsCi0JCQkJCTxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnNlbGVjdDwvZW0+PC9zcGFuPiBhdHRyaWJ1dGUuCi0JCQkJPC9wPjxwPgotCQkJCQlBZGQgaW1hZ2Ugc2hvd2luZyB2YXJpYWJsZSBjb21wbGV0aW9uLgotCQkJCTwvcD48L2xpPjxsaT48cD4KLQkJCQkJPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+aWY8L3N0cm9uZz48L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz53aGVuPC9zdHJvbmc+PC9zcGFuPiAtIFRoZQotCQkJCQlpZiBhbmQgd2hlbiBlbGVtZW50cyBoYXZlIGNvbnRlbnQgYXNzaXN0IGZvciB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dGVzdDwvZW0+PC9zcGFuPiBhdHRyaWJ1dGUuCi0JCQkJCVRoaXMgY29udGVudCBhc3Npc3RhbmNlIGlzIGF2YWlsYWJsZSBmb3IgYWxsIHBhcmFtYXRlcnMgYW5kIHZhcmlhYmxlcyB0aGF0IGFyZSBpbgotCQkJCQlzY29wZSwgYXMgd2VsbCBhcyBhbnkgYXZhaWxhYmxlIHhwYXRoIG9yIGF4aXMgc3RhdGVtZW50LgotCQkJCTwvcD48cD4KLQkJCQkJQWRkIGltYWdlIHNob3dpbmcgdGVzdCBjb21wbGV0aW9uLgotCQkJCTwvcD48L2xpPjxsaT48cD4KLQkJCSAgICAJPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+YXBwbHktdGVtcGxhdGU8L3N0cm9uZz48L3NwYW4+IC0gVGhlIGFwcGx5IHRlbXBsYXRlIGhhcyBjb250ZW50Ci0JCQkgICAgCWFzc2lzdGFuY2UgZm9yIGJvdGggdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm1vZGU8L2VtPjwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnNlbGVjdDwvZW0+PC9zcGFuPgotCQkJICAgIAlhdHRyaWJ1dGVzLiAKLQkJCSAgICA8L3A+PHA+Ci0JCQkJCUFkZCBpbWFnZSBzaG93aW5nIGFwcGx5LXRlbXBsYXRlIGNvbXBsZXRpb24uCi0JCQkJPC9wPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJpbXBvcnRhbnQiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5YUGF0aCAyLjAgU3VwcG9ydDwvaDM+PHA+Ci0JCQkJQ3VycmVudGx5IFhQYXRoIDIuMCBpcyBub3Qgc3VwcG9ydGVkIGRpcmVjdGx5LiAgSG93ZXZlciwgYSB1c2VyIGNhbiBhZGQgdGhpcyBzdXBwb3J0IGlmIHRoZXkgbmVlZCBpdCBieQotCQkJCWFkZGluZyB0aGUgbWlzc2luZyBYUGF0aCBmdW5jdGlvbnMgdG8gdGhlIFhQYXRoIFRlbXBsYXRlcy4KLQkJCTwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9nZW5lcmFsL2dlbmVyYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9nZW5lcmFsL2dlbmVyYWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA1MTg0ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZ2VuZXJhbC9nZW5lcmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkdlbmVyYWw8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9wcmVmZXJlbmNlcy9zeW50YXhDb2xvcmluZy5odG1sIiB0aXRsZT0iWFNMVCBTeW50YXggQ29sb3JpbmciPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iLi4vc2FtcGxlcy9zYW1wbGVzLmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBTYW1wbGVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9ImNoYXB0ZXIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJOMTA0MUUiPjwvYT5HZW5lcmFsPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0b2MiPjxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJnZW5lcmFsLmh0bWwjWEluY2x1ZGUiPlhJbmNsdWRlPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9kaXY+PHA+VGhpcyBzZWN0aW9uIGNvdmVycyB0b3BpY3MgdGhhdCBkb24ndCBoYXZlIGFueSBvdGhlciBwYXJ0aWN1bGFyIHBsYWNlIHRvIGdvLjwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJYSW5jbHVkZSI+PC9hPlhJbmNsdWRlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLSAgICAgIAlYSW5jbHVkZSBhbGxvd3MgYSB1c2VyIHRvIGltcG9ydCBvciBpbmNsdWRlIG90aGVyIFhNTCBmaWxlcyBpbnRvIG9uZSB4bWwgZmlsZS4KLSAgICAgICAgSXQgaXMgdXNlZCBwcmltYXJpbHkgd2l0aCBkb2N1bWVudGF0aW9uIGZpbGUgZm9ybWF0cyBsaWtlIERvY2Jvb2sgYW5kIERJVEEuICBJdAotICAgICAgICBhbGxvd3MgZm9yIHNlcGFyYXRpbmcgb3V0IGxhcmdlIHhtbCBkb2N1bWVudHMgaW50byBtb3JlIG1hbmFnZWFibGUgY2h1bmtzIG9mIGluZm9ybWF0aW9uLgotICAgICAgPC9wPjxwPgotICAgICAgCVRoZSBYU0wgVG9vbHMgcHJvamVjdCBpbmNsdWRlcyBhbiBBTlQgdGFzayB0aGF0IGNhbiBiZSBydW4gd2l0aCBpbiBlY2xpcHNlLCBlY2xpcHNlCi0gICAgICAJaGVhZGxlc3MsIGFuZCB3aXRob3V0IGVjbGlwc2UgYXQgYWxsLiAgIElmIHJ1bm5pbmcgb3V0c2lkZSBvZiBlY2xpcHNlLCB5b3Ugd2lsbCBuZWVkCi0gICAgICAJdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGphciBmaWxlIHhpbmNsdWRlLmphciBpbiB0aGUgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmphciBmaWxlCi0gICAgICAJaXMgbWFkZSBhdmFpYWJsZSBvbiB5b3VyIGNsYXNzIHBhdGguCi0gICAgICA8L3A+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvZ2VuZXJhbC94aW5jbHVkZS5wbmciIGFsaWduPSJtaWRkbGUiPjwvZGl2PjxwPgotICAgICAgCVRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlIG9uIHRoZSB4c2wueGluY2x1ZGUgQU5UIHRhc2s6Ci0gICAgICA8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iZGlzYyI+PGxpPjxwPgotICAgICAgCQkJPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+Ci0JCQkJCWluCi0JCQkJPC9zdHJvbmc+PC9zcGFuPiAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGlucHV0IGZpbGUgdGhhdCBjb250YWlucwotICAgICAgCQkJdGhlIGZpbGUgd2l0aCB0aGUgWEluY2x1ZGVzLiAgIElmIHRoZSBmaWxlcyB0aGF0IGl0IGluY2x1ZGVzIGhhdmUgaW5jbHVkZXMsIHRoZW4KLSAgICAgIAkJCXRob3NlIHdpbGwgYmUgYnJvdWdodCBpbiBhbiBleHBhbmRlZCBhcyB3ZWxsLgotICAgICAgCQk8L3A+PC9saT48bGk+PHA+Ci0JCQkJCTxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPm91dDwvc3Ryb25nPjwvc3Bhbj4gLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZSAKLQkJCQkJdG8gYmUgd3JpdHRlbiB3aXRoIGFsbCBpbmNsdWRlcyBleHBhbmRlZC4gIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgYXMgdGhlCi0JCQkJCWlucHV0IHRvIGEgc3R5bGVzaGVldCB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzLgotCQkJCTwvcD48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0iZXhhbXBsZSI+PGEgbmFtZT0iTjEwNDQ5Ij48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5FeGFtcGxlJm5ic3A7MS4mbmJzcDtYSW5jbHVkZSBFeGFtcGxlPC9iPjwvcD48ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0mbHQ7dGFyZ2V0IG5hbWU9Im1lcmdlIiZndDsKLSAgICAmbHQ7eHNsLnhpbmNsdWRlIGluPSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHAuZGJrIgotICAgICAgICAgICAgICAgICAgb3V0PSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHBjb21iaW5lZC5kYmsiLyZndDsKLSZsdDsvdGFyZ2V0Jmd0OwkgICAgCQkgICAgCQotCSAgICAJPC9wcmU+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL0V4Y2x1ZGVDb250ZW50QXNzaXN0MS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9FeGNsdWRlQ29udGVudEFzc2lzdDEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjBmMmNiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL0V4Y2x1ZGVDb250ZW50QXNzaXN0MS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9FeGNsdWRlQ29udGVudEFzc2lzdDIucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IvRXhjbHVkZUNvbnRlbnRBc3Npc3QyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU1MzY3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9FeGNsdWRlQ29udGVudEFzc2lzdDIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IvY2FsbHRlbXBsYXRlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL2NhbGx0ZW1wbGF0ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMTNmMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IvY2FsbHRlbXBsYXRlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL2hyZWZBc3Npc3RhbmNlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL2hyZWZBc3Npc3RhbmNlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY0NDk4Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9ocmVmQXNzaXN0YW5jZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9tb2RlQXNzaXN0YW5jZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9tb2RlQXNzaXN0YW5jZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YTk4NzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IvbW9kZUFzc2lzdGFuY2UucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IvbmFtZWRUZW1wbGF0ZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9uYW1lZFRlbXBsYXRlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhiZDkyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9uYW1lZFRlbXBsYXRlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL292ZXJyaWRlMS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9vdmVycmlkZTEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGI4NzhiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL292ZXJyaWRlMS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9vdmVycmlkZTIucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3Ivb3ZlcnJpZGUyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjNDE1Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci9vdmVycmlkZTIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3Ivc3ludGF4Q29sb3JpbmcucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3Ivc3ludGF4Q29sb3JpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWUwZWJkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL3N5bnRheENvbG9yaW5nLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZWRpdG9yL3RlbXBsYXRlc1ZpZXcucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IvdGVtcGxhdGVzVmlldy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZTIwZDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IvdGVtcGxhdGVzVmlldy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci94c2xwcm9wb3NhbHMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9lZGl0b3IveHNscHJvcG9zYWxzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjMTI3YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2VkaXRvci94c2xwcm9wb3NhbHMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9nZW5lcmFsL3hpbmNsdWRlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZ2VuZXJhbC94aW5jbHVkZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjlmNzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9nZW5lcmFsL3hpbmNsdWRlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL1hTTERlYnVnZ2luZy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2xhdW5jaGluZy9YU0xEZWJ1Z2dpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2I0NTZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL1hTTERlYnVnZ2luZy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2xhdW5jaGluZy9YU0xPdXRwdXRUYWIucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvWFNMT3V0cHV0VGFiLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwZTU1ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2xhdW5jaGluZy9YU0xPdXRwdXRUYWIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvWFNMUHJvY2Vzc29yVGFiLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL1hTTFByb2Nlc3NvclRhYi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NmY5NzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvWFNMUHJvY2Vzc29yVGFiLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL1hTTFJ1bkRlYnVnQ29uZmlndXJhdGlvbnMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvWFNMUnVuRGVidWdDb25maWd1cmF0aW9ucy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NWE2NGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvWFNMUnVuRGVidWdDb25maWd1cmF0aW9ucy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2xhdW5jaGluZy9sYXVuY2hTaG9ydGN0LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3QucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODE4MTNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvbm9kZXNldFZhcmlhYmxlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL25vZGVzZXRWYXJpYWJsZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzY2E3ZmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvbm9kZXNldFZhcmlhYmxlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvbGF1bmNoaW5nL3Jlc3VsdFZpZXcucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvcmVzdWx0Vmlldy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZDFiOTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9sYXVuY2hpbmcvcmVzdWx0Vmlldy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL1hQYXRoVGVtcGxhdGVzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjg5MzA0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy9wcm9qZWN0TGV2ZWxWYWxpZGF0aW9uLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMvcHJvamVjdExldmVsVmFsaWRhdGlvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZmU4NjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy9wcm9qZWN0TGV2ZWxWYWxpZGF0aW9uLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveG1fdGVtcGxhdGVfeHNsbmV3ZmlsZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3htX3RlbXBsYXRlX3hzbG5ld2ZpbGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjQ2YTZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveG1fdGVtcGxhdGVfeHNsbmV3ZmlsZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbFN5bnRheENvbG9yaW5nLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsU3ludGF4Q29sb3JpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmViZWYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsU3ludGF4Q29sb3JpbmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfSW5zdGFsbGVkUHJvY2Vzc29ycy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9JbnN0YWxsZWRQcm9jZXNzb3JzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5NTA3OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9JbnN0YWxsZWRQcm9jZXNzb3JzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfb3V0cHV0cHJvcGVydGllcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDBhNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfb3V0cHV0cHJvcGVydGllcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbGZlYXR1cmVzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWRiZWM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiNzE4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbmRleC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Mzk1NGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+WFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbjwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaW50cm9kdWN0aW9uL2dldHRpbmdzdGFydGVkLmh0bWwiIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iYm9vayIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhTTFVzZXIiPjwvYT5YU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uPC9oMT48L2Rpdj48ZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPjxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPkRhdmlkPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+Q2FydmVyPC9zcGFuPjwvaDM+PC9kaXY+PC9kaXY+PGRpdj48cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgJmNvcHk7IDIwMDggRWNsaXBzZSBGb3VuZGF0aW9uIGFuZCBvdGhlcnM8L3A+PC9kaXY+PC9kaXY+PGhyPjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImludHJvZHVjdGlvbi9nZXR0aW5nc3RhcnRlZC5odG1sIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjb25jZXB0cy9jb25jZXB0cy5odG1sIj5YU0xUIENvbmNlcHRzPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjb25jZXB0cy9jb25jZXB0cy5odG1sI1Jlc3VjaW5nWFNMVCI+UmVzY3VpbmcgWFNMVCBGcm9tIE5pY2hlIFN0YXR1czwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY29uY2VwdHMvY29uY2VwdHMuaHRtbCNOMTAwNDMiPlRoZSBQcm9ibGVtPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY29uY2VwdHMvY29uY2VwdHMuaHRtbCNOMTAwNjkiPlRoZSBTb2x1dGlvbjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNvbmNlcHRzL2NvbmNlcHRzLmh0bWwjTjEwMDkwIj5RdWVyaWVzPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJjb25jZXB0cy9jb25jZXB0cy5odG1sI04xMDA5RSI+eHNsOmZvci1lYWNoPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iY29uY2VwdHMvY29uY2VwdHMuaHRtbCNOMTAwQUEiPnhzbDppZjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNvbmNlcHRzL2NvbmNlcHRzLmh0bWwjTjEwMEI0Ij54c2w6Y2hvb3NlPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNvbmNlcHRzL2NvbmNlcHRzLmh0bWwjTjEwMEJFIj5Db25jbHVzaW9uPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImNvbmNlcHRzL3Jlc291cmNlcy5odG1sIj5SZXNvdXJjZXM8L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjxsaT48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZWRpdG9yL3hzbGVkaXRvci5odG1sIj5YU0wgRWRpdGluZzwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZWRpdG9yL3hzbGVkaXRvci5odG1sI1ZhbGlkYXRpb24iPlZhbGlkYXRpb248L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCI+Q29udGVudCBBc3Npc3Q8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImVkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdC5odG1sI2VkX1hTTFByb3Bvc2FscyI+WFNMVCBFbGVtZW50IFByb3Bvc2FsczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImVkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9zZWxlY3R0ZXN0Lmh0bWwiPlNlbGVjdCwgVGVzdCwgYW5kIE1hdGNoIEF0dHJpYnV0ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfZXhjbHVkZS5odG1sIj5FeGNsdWRlLVJlc3VsdC1QcmVmaXhlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImVkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9tb2RlYXNzaXN0Lmh0bWwiPk1vZGUgYXR0cmlidXRlIGFzc2lzdGFuY2U8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfbmFtZWR0ZW1wbGF0ZS5odG1sIj5OYW1lZCBUZW1wbGF0ZSBBc3Npc3RhbmNlPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X2NhbGx0ZW1wbGF0ZS5odG1sIj5DYWxsLVRlbXBsYXRlIEFzc2lzdGFuY2U8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfaW5jbHVkZS5odG1sIj4KLSAgICAgICAgICAgICAgICBJbmNsdWRlIGFuZCBJbXBvcnQKLSAgICAgICAgICAgICAgICBocmVmCi0gICAgICAgICAgICAgICAgQXNzaXN0YW5jZQotICAgICAgICAgICAgPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImVkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwiPlRlbXBsYXRlczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZWRpdG9yL3hzbGVkaXRvcl90ZW1wbGF0ZXMuaHRtbCNOMTAxRTIiPlhQYXRoIFRlbXBsYXRlczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJlZGl0b3IveHNsZWRpdG9yX2NvbG9yaW5nLmh0bWwiPlhTTFQgU3ludGF4IENvbG9yaW5nPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZWRpdG9yL3hzbGVkaXRvcl9tYXJrZXJzLmh0bWwiPlhTTFQgTWFya2VycyBhbmQgQW5ub3RhdGlvbnM8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImVkaXRvci94c2xlZGl0b3JfbWFya2Vycy5odG1sI3hzbHRPdmVyUmlkZSI+VGVtcGxhdGUgT3ZlcnJpZGU8L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZWRpdG9yL3hzbGVkaXRvcl9kZWJ1Z2dpbmcuaHRtbCI+WFNMIERlYnVnZ2luZzwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImVkaXRvci94c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiPk5hdmlnYXRpb248L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjxsaT48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0ibGF1bmNoaW5nL2xhdW5jaGluZy5odG1sIj5YU0wgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmc8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImxhdW5jaGluZy9sYXVuY2hpbmcuaHRtbCNYU0xMYXVuY2giPlhTTCBMYXVuY2hpbmc8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImxhdW5jaGluZy9sYXVuY2hpbmcuaHRtbCNYU0xMYXVuY2hDb25maWciPkxhdW5jaCBDb25maWd1cmF0aW9uPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJsYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoX01haW4iPk1haW4gVGFiPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nL2xhdW5jaGluZy5odG1sI1hTTExhdW5jaF9PdXRwdXQiPk91dHB1dCBUYWI8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJsYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoX1Byb2Nlc3NvciI+UHJvY2Vzc29yIFRhYjwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PC91bD48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nL2RlYnVnZ2luZy5odG1sIj5YU0xUIERlYnVnZ2luZzwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nL2RlYnVnZ2luZy5odG1sI0RlYnVnR2V0dGluZ1N0YXJ0ZWQiPlN0YXJ0aW5nIGEgRGVidWcgU2Vzc2lvbjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImxhdW5jaGluZy9kZWJ1Z2dpbmdfY29tbW9uLmh0bWwiPkNvbW1vbiBEZWJ1Z2dpbmcgT3BlcmF0aW9uczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nL2RlYnVnZ2luZ19jb21tb24uaHRtbCNYU0xEZWJ1Z1Jlc3VsdFZpZXciPlJlc3VsdCBWaWV3PC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nL2RlYnVnZ2luZ192YXJpYWJsZXN2aWV3Lmh0bWwiPlZhcmlhYmxlcyBWaWV3PC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImxhdW5jaGluZy9kZWJ1Z2dpbmdfcHJvY2Vzc29ycy5odG1sIj5YU0xUIFByb2Nlc3NvciBTcGVjaWZpYyBTdXBwb3J0PC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJsYXVuY2hpbmcvZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCNYU0xEZWJ1Z1hhbGFuIj5YU0wgRGVidWdnaW5nIHdpdGggWGFsYW48L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjwvdWw+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJwcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5odG1sIj5YU0wgVG9vbHMgUHJlZmVyZW5jZXM8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLmh0bWwjWFNMRmVhdHVyZXMiPkZlYXR1cmVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icHJlZmVyZW5jZXMveHNscHJvY2Vzc29ycy5odG1sIj5JbnN0YWxsZWQgUHJvY2Vzc29yczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InByZWZlcmVuY2VzL3hzbG91dHB1dHByb3BlcnRpZXMuaHRtbCI+T3V0cHV0IFByb3BlcnRpZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJwcmVmZXJlbmNlcy94cGF0aHRlbXBsYXRlcy5odG1sIj5YUGF0aCBUZW1wbGF0ZXM8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InByZWZlcmVuY2VzL3hwYXRodGVtcGxhdGVzLmh0bWwjWFBhdGhUZW1wbGF0ZU5ldyI+Q3JlYXRpbmcgTmV3IFRlbXBsYXRlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InByZWZlcmVuY2VzL3hwYXRoaW1wb3J0Lmh0bWwiPkltcG9ydCBYUGF0aCBUZW1wbGF0ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJwcmVmZXJlbmNlcy94cGF0aGV4cG9ydC5odG1sIj5JbXBvcnQgWFBhdGggVGVtcGxhdGVzPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InByZWZlcmVuY2VzL3ZhbGlkYXRpb24uaHRtbCI+UHJvamVjdCBWYWxpZGF0aW9uIFByZWZlcmVuY2VzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icHJlZmVyZW5jZXMvc3ludGF4Q29sb3JpbmcuaHRtbCI+WFNMVCBTeW50YXggQ29sb3Jpbmc8L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjxsaT48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0iZ2VuZXJhbC9nZW5lcmFsLmh0bWwiPkdlbmVyYWw8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImdlbmVyYWwvZ2VuZXJhbC5odG1sI1hJbmNsdWRlIj5YSW5jbHVkZTwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJzYW1wbGVzL3NhbXBsZXMuaHRtbCI+WFNMIFRvb2xpbmcgU2FtcGxlczwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ic2FtcGxlcy9zYW1wbGVzLmh0bWwjRWNsaXBzZUhlbHAiPkVjbGlwc2UgSGVscDwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ic2FtcGxlcy9zYW1wbGVzLmh0bWwjRG9jYm9va0VjbGlwc2VIZWxwIj5DcmVhdGluZyBFY2xpcHNlIEhlbHAgd2l0aCBEb2Nib29rIGFuZCBYU0wgVG9vbHM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJzYW1wbGVzL3NhbXBsZXMuaHRtbCNESVRBRWNsaXBzZUhlbHAiPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERJVEEgYW5kIFhTTCBUb29sczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PC91bD48L2xpPjxsaT48c3BhbiBjbGFzcz0iY2hhcHRlciI+PGEgaHJlZj0ibGVnYWwuaHRtbCI+Tm90aWNlczwvYT48L3NwYW4+PC9saT48L3VsPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2luZGV4LnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTViYzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2luZGV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTxpbmRleD48L2luZGV4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbnRyb2R1Y3Rpb24vZ2V0dGluZ3N0YXJ0ZWQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbnRyb2R1Y3Rpb24vZ2V0dGluZ3N0YXJ0ZWQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlmYTAzOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW50cm9kdWN0aW9uL2dldHRpbmdzdGFydGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+R2V0dGluZyBTdGFydGVkPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iLi4vY29uY2VwdHMvY29uY2VwdHMuaHRtbCIgdGl0bGU9IlhTTFQgQ29uY2VwdHMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Ik4xMDAxMiI+PC9hPkdldHRpbmcgU3RhcnRlZDwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+ICAKLSAgICAgIFhTTFQgc3RhbmRzIGZvciB0aGUgZVh0ZW5zaWJsZSBTdHlsZXNoZWV0IExhbmd1YWdlIFRyYW5zZm9ybWF0aW9ucy4gSXQgaXMKLSAgICAgIHBhcnQgb2YgdGhlIFhTTCBzcGVjaWZpY2F0aW9uIHdoaWNoIGluY2x1ZGVzIHRoZSB0cmFuc2Zvcm1hdGlvbiBhbmQgZm9ybWF0dGluZyBvYmplY3RzCi0gICAgICAoWFNMLUZPKS4gICBYU0wgVG9vbHMgcHJpbWFyaWx5IGRlYWxzIHdpdGggdGhlIGVkaXRpbmcsIGxhdW5jaGluZywgYW5kIGRlYnVnZ2luZwotICAgICAgb2YgWFNMIFN0eWxlIHNoZWV0cy4KLSAgIDwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjxwIGNsYXNzPSJ0aXRsZSI+PGI+R2V0dGluZyBTdGFydGVkPC9iPjwvcD48dWwgdHlwZT0iZGlzYyI+PGxpPjxwPjxhIGNsYXNzPSJ1bGluayIgaHJlZj0iLi4vY29uY2VwdHMvY29uY2VwdHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj5SZXNjdWluZyBYU0xUIEZyb20gTmljaGUgU3RhdHVzPC9hPiAtIGdpdmVzIGEgYmFzaWMgaW50cm9kdWN0aW9uIHRvIFhTTFQgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBjcmVhdGluZyBIVE1MIG91dHB1dC48L3A+PC9saT48bGk+PHA+PGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lm11bGJlcnJ5dGVjaC5jb20vcXVpY2tyZWYvIiB0YXJnZXQ9Il90b3AiPlhTTFQgYW5kIFhQYXRoIFF1aWNrIFJlZmVyZW5jZSBDYXJkczwvYT4gLSBhIHNldCBvZiBQREYgZmlsZXMgdGhhdCBjYW4gYmUgcHJpbnRlZCB0byBwcm92aWRlIHF1aWNrIHJlZmVyZW5jZXMgdG8gdGhlIFhTTFQgYW5kIFhQYXRoIGNvbW1hbmRzLjwvcD48L2xpPjwvdWw+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9kZWJ1Z2dpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYyY2JjZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YU0xUIERlYnVnZ2luZzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9ImxhdW5jaGluZy5odG1sIiB0aXRsZT0iWFNMIExhdW5jaGluZyBhbmQgRGVidWdnaW5nIj48bGluayByZWw9InByZXYiIGhyZWY9ImxhdW5jaGluZy5odG1sIiB0aXRsZT0iWFNMIExhdW5jaGluZyBhbmQgRGVidWdnaW5nIj48bGluayByZWw9Im5leHQiIGhyZWY9ImRlYnVnZ2luZ19jb21tb24uaHRtbCIgdGl0bGU9IkNvbW1vbiBEZWJ1Z2dpbmcgT3BlcmF0aW9ucyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJYU0xEZWJ1ZyI+PC9hPlhTTFQgRGVidWdnaW5nPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4gWFNMIFRvb2xzIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBYU0xUIHByb2Nlc3NvcnMgdG8gcHJvdmlkZQotCQkJZGVidWdnaW5nIHN1cHBvcnQuIFRoZSBzdXBwb3J0IHByb3ZpZGVkIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhlCi0JCQlwcm9jZXNzb3JzLiBYU0wgVG9vbHMgY29tZXMgd2l0aCBidWlsdCBpbiBzdXBwb3J0IGZvciB0aGUgWGFsYW4gMi43LjEKLQkJCXByb2Nlc3Nvci4gRGVidWdnaW5nIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB0aG9zZSBwcm9jZXNzb3JzIHRoYXQKLQkJCXN1cHBvcnQgdGhlIGZlYXR1cmUgYW5kIHBsdWcgaW50byB0aGUgZXh0ZW5zaW9uIHBvaW50LiBUaGUgWFNMIFRvb2xzCi0JCQlkZWJ1Z2dlciBsZXZlcmFnZXMgdGhlIGV4aXN0aW5nIGVjbGlwc2UgcGxhdGZvcm0gRGVidWcgVmlldzwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImZpZ19YU0xEZWJ1ZyI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7MTUuJm5ic3A7WFNMVCBEZWJ1Z2dpbmc8L2I+PC9wPjxkaXYgY2xhc3M9ImZpZ3VyZS1jb250ZW50cyI+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvbGF1bmNoaW5nL1hTTERlYnVnZ2luZy5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iWFNMVCBEZWJ1Z2dpbmciPjwvZGl2PjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZmlndXJlLWJyZWFrIj48cD4KLQkJCUhvdyB0aGUgZGVidWdnZXIgYWN0cyB3aWxsIGRlcGVuZCBvbiB0aGUgcHJvY2Vzc29yIGJlaW5nIHVzZWQuIE5vdAotCQkJYWxsIFhTTFQgcHJvY2Vzc29ycyBwYXNzIHRoZSBzYW1lIHR5cGUgb2YgaW5mb3JtYXRpb24gdG8gdGhlCi0JCQlkZWJ1Z2dlci4gVGhlc2UgZGlmZmVyZW5jZXMgd2lsbCBiZSBub3RlZCBpbiB0aGUKLQkJCTxhIGNsYXNzPSJ4cmVmIiBocmVmPSJkZWJ1Z2dpbmdfcHJvY2Vzc29ycy5odG1sIiB0aXRsZT0iWFNMVCBQcm9jZXNzb3IgU3BlY2lmaWMgU3VwcG9ydCI+dGhlIHNlY3Rpb24gY2FsbGVkICZsZHF1bztYU0xUIFByb2Nlc3NvciBTcGVjaWZpYyBTdXBwb3J0JnJkcXVvOzwvYT4KLQkJCXNlY3Rpb24uCi0JCTwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iRGVidWdHZXR0aW5nU3RhcnRlZCI+PC9hPlN0YXJ0aW5nIGEgRGVidWcgU2Vzc2lvbjwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IERlYnVnZ2luZyBpcyBzdGFydGVkIHRoZSBzYW1lIHdheSBhcyBsYXVuY2hpbmcgYW4gWFNMCi0JCQkJVHJhbmZvcm1hdGlvbiBpcyBkb25lLiBFeGNlcHQgdGhhdCB0aGUgZGVidWcgY29uZmlndXJhdGlvbiBpcyB1c2VkCi0JCQkJaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGxhdW5jaCBjb25maWd1cmF0aW9uLiBJZiBhIGRlYnVnZ2luZyBzZXNzaW9uCi0JCQkJaXMgc3RhcnRlZCBvbiBhIHByb2Nlc3NvciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgZGVidWdnaW5nLCBhIGRpYWxvZwotCQkJCXdpbGwgYXNrIGlmIHlvdSB3YW50IHRvIHN3aXRjaCB0byBvbmUgb2YgdGhlIHN1cHBvcnRlZCBkZWJ1Z2dlcnMuCi0JCQk8L3A+PGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPkRlZmF1bHQgSlJFPC9oMz48cD4gVGhlIGRlZmF1bHQgSlJFIGRvZXMgbm90IGhhdmUgYnVpbHQgaW4gc3VwcG9ydCBmb3IgZGVidWdnaW5nLAotCQkJCQlldmVuIHRob3VnaCBpdCBpcyBiYXNlZCBvbiBBcGFjaGUgWGFsYW4uIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZQotCQkJCQlYYWxhbiBvciBhbm90aGVyIHByb2Nlc3NvciBwcm92aWRlZCBieSBhbiBhZG9wdGVyIHRvIGRvIHlvdXIKLQkJCQkJdHJhbnNmb3JtYXRpb25zLiBUaGUgZGVmYXVsdCBwcm9jZXNzb3IgaXMga25vd24gdG8gaGF2ZSBzb21lIGlzc3VlcwotCQkJCQl0aGF0IFhhbGFuIGFuZCBvdGhlciBwcm9jZXNzb3JzIGRvIG5vdCBoYXZlLjwvcD48L2Rpdj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sYXVuY2hpbmcvZGVidWdnaW5nX2NvbW1vbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9kZWJ1Z2dpbmdfY29tbW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MTRjNDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9kZWJ1Z2dpbmdfY29tbW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbW1vbiBEZWJ1Z2dpbmcgT3BlcmF0aW9uczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9ImRlYnVnZ2luZy5odG1sIiB0aXRsZT0iWFNMVCBEZWJ1Z2dpbmciPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iZGVidWdnaW5nLmh0bWwiIHRpdGxlPSJYU0xUIERlYnVnZ2luZyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJkZWJ1Z2dpbmdfdmFyaWFibGVzdmlldy5odG1sIiB0aXRsZT0iVmFyaWFibGVzIFZpZXciPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhTTERlYnVnQ29tbW9uIj48L2E+Q29tbW9uIERlYnVnZ2luZyBPcGVyYXRpb25zPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLQkJCQlYU0xUIGRlYnVnZ2luZyBpcyBoYW5kbGVkIGJ5IHRoZSBlY2xpcHNlIHBsYXRmb3JtcyBkZWJ1Z2dpbmcKLQkJCQlmcmFtZXdvcmsgc3VwcG9ydCBhcyBvdXRsaW5lZCBpbiB0aGUKLQkJCQk8YSBjbGFzcz0idWxpbmsiIGhyZWY9Ii9oZWxwL3RvcGljL29yZy5lY2xpcHNlLnBsYXRmb3JtLmRvYy5pc3YvZ3VpZGUvZGVidWdfZGVidWcuaHRtIiB0YXJnZXQ9Il90b3AiPiJQcm9ncmFtIERlYnVnIGFuZCBMYXVuY2ggU3VwcG9ydCI8L2E+Ci0JCQkJLiBDb21tb24gb3BlcmF0aW9ucyBsaWtlIHN0ZXBwaW5nIGludG8gKEY1KSwgc3RlcHBpbmcgb3ZlciAoRjYpLAotCQkJCXBhdXNpbmcsIHJ1bm5pbmcgdG8gYSBicmVha3BvaW50LCBhbmQgcmVsYXVuY2hpbmcgYXJlIHN1cHBvcnRlZC4gSW4KLQkJCQlhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgVmFyaWFibGUgYW5kIEJyZWFrcG9pbnQgdmlld3MgcHJvdmlkZWQgYnkKLQkJCQl0aGUgcGxhdGZvcm0sIHRoZXJlIGFyZSBzb21lIFhTTFQgc3BlY2lmaWMgdmlld3MgYW5kIGZ1bmN0aW9uYWxpdHkKLQkJCQlhcyB3ZWxsLiBBbGwgb2YgdGhlc2UgYXJlIGNvbW1vbiByZWdhcmRsZXNzIG9mIHRoZSBwYXJ0aWN1bGFyIFhTTFQKLQkJCQlkZWJ1Z2dlciBiZWluZyB1c2VkLgotCQkJPC9wPjxkaXYgY2xhc3M9InRpcCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPkludHJvZHVjdGlvbiB0byBFY2xpcHNlIERlYnVnZ2luZzwvaDM+PHA+Ci0JCQkJCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5tY3MudnV3LmFjLm56L2NvdXJzZXMvQ09NUDIwNS8yMDA3VDEvdG9vbHMvZWNsaXBzZS9kZWJ1Z2dpbmcvYmFzaWNzLnNodG1sIiB0YXJnZXQ9Il90b3AiPkJhc2ljIERlYnVnZ2luZyBpbiBFY2xpcHNlPC9hPgotCQkJCQljb250YWlucyBhIGdvb2QgZ2VuZXJhbCBpbnRyb2R1Y3Rpb24gdG8gdGhlIGJhc2ljIGZlYXR1cmVzIHByb3ZpZGVkCi0JCQkJCWJ5IHRoZSBFY2xpcHNlIERlYnVnIHZpZXcuIFhTTCBUb29scyBsZXZlcmFnZXMgbWFueSBvZiB0aGVzZQotCQkJCQlmZWF0dXJlcyBhbmQgdGhlIHNhbWUgY29uY2VwdHMgYXBwbHkgdG8gdGhlIFhTTCBUb29scyBkZWJ1Z2dlci4KLQkJCQk8L3A+PC9kaXY+PHA+IEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBmZWF0dXJlcyBhbmQgZnVuY3Rpb25hbGl0eSwgdGhlCi0JCQkJWFNMIFRvb2xzIGRlYnVnZ2luZyBzdXBwb3J0IGFkZHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGl0ZW1zOgotCQkJPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD4gUmVzdWx0IFZpZXc8L3A+PC9saT48bGk+PHA+WFNMVCBzcGVjaWZpYyBWYXJpYWJsZXM8L3A+PC9saT48bGk+PHA+WFNMVCBQcm9jZXNzb3IgU3BlY2lmaWMgRnVuY3Rpb25hbGl0eTwvcD48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhTTERlYnVnUmVzdWx0VmlldyI+PC9hPlJlc3VsdCBWaWV3PC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4gVGhlIFhTTFQgRGVidWdnZXIgaGFzIGEgcmVzdWx0IHZpZXcuIFRoaXMgd2lsbCBzaG93IHRoZQotCQkJCQlvdXRwdXQgdGhhdCB0aGUgc3R5bGVzaGVldCBoYXMgZ2VuZXJhdGVkIHRvIHRoZSBjdXJyZW50IGJyZWFrIHBvaW50Ci0JCQkJCW9yIHNpbmNlIHRoZSBsYXN0IHN0ZXAgY29tbWFuZCB3YXMgaXNzdWVkLjwvcD48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9sYXVuY2hpbmcvcmVzdWx0Vmlldy5wbmciIGFsaWduPSJtaWRkbGUiPjwvZGl2PjxwPiBUaGUgcmVzdWx0IHZpZXcgaXMgdXBkYXRlZCB0aHJvdWdob3V0IHRoZSBkZWJ1Z2dpbmcgcHJvY2VzcywKLQkJCQkJYW5kIGlzIHVzZWZ1bCB0byBoZWxwIHNlZSB3aGF0IG91dHB1dCBpcyBnZW5lcmF0ZWQgYXQgc3BlY2lmaWMKLQkJCQkJcG9pbnRzIGR1cmluZyBhIHRyYW5zZm9ybWF0aW9uLjwvcD48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sYXVuY2hpbmcvZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sYXVuY2hpbmcvZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBiMTkyMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZ19wcm9jZXNzb3JzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlhTTFQgUHJvY2Vzc29yIFNwZWNpZmljIFN1cHBvcnQ8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSJkZWJ1Z2dpbmcuaHRtbCIgdGl0bGU9IlhTTFQgRGVidWdnaW5nIj48bGluayByZWw9InByZXYiIGhyZWY9ImRlYnVnZ2luZ192YXJpYWJsZXN2aWV3Lmh0bWwiIHRpdGxlPSJWYXJpYWJsZXMgVmlldyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFByZWZlcmVuY2VzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJYU0xEZWJ1Z1Byb2Nlc3NvclNwZWNpZmljIj48L2E+WFNMVCBQcm9jZXNzb3IgU3BlY2lmaWMgU3VwcG9ydDwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IFZhcmlvdXMgWFNMVCBwcm9jZXNzb3JzIHByb3ZpZGUgdmFyaW91cyBsZXZlbHMgb2YgZGVidWdnaW5nCi0JCQkJc3VwcG9ydC4gTWFueSBkbyBub3QgcHJvdmlkZSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcgb2Ygc3R5bGVzaGVldHMsCi0JCQkJYW5kIHRodXMgY2FuJ3QgYmUgdXNlZCBmb3IgZGVidWdnaW5nLiBYU0wgVG9vbHMgcHJvdmlkZXMgYmFzaWMKLQkJCQlzdXBwb3J0IGZvciBYYWxhbiwgYW5kIGNhbiBiZSB1c2VkIGFzIGEgZ3VpZGUgZm9yIGFkb3B0ZXJzIG9uIGhvdyB0bwotCQkJCWltcGxlbWVudCB0aGVpciBvd24gc3BlY2lmaWMgZGVidWdnaW5nIHN1cHBvcnQgZm9yIG90aGVyIHByb2Nlc3NvcnMuCi0JCQk8L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhTTERlYnVnWGFsYW4iPjwvYT5YU0wgRGVidWdnaW5nIHdpdGggWGFsYW48L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPiBYYWxhbiBwcm92aWRlcyBnZW5lcmFsIHN0eWxlc2hlZXQgZXhlY3V0aW9uIGFuZCBldmFsYXRpb24KLQkJCQkJZnVuY3Rpb25hbGl0eS4gSG93ZXZlciB0aGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRoYXQgWGFsYW4gZG9lcyBub3QKLQkJCQkJc3VwcG9yIHRoYXQgb3RoZXIgcHJvY2Vzc29ycyBkby48L3A+PGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxwIGNsYXNzPSJ0aXRsZSI+PGI+WGFsYW4gRGVidWdnaW5nIElzc3VlczwvYj48L3A+PG9sIHR5cGU9IjEiPjxsaT48cD4KLQkJCQkJCQk8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5CcmVha3BvaW50czwvZW0+PC9zcGFuPgotCQkJCQkJCS0gWGFsYW4gZG9lcyBub3Qgc3VwcG9ydCBzdG9wcGluZyBhdCBHbG9iYWwgVmFyaWFibGVzIG9yCi0JCQkJCQkJUGFyYW1ldGVycyB3aGVuIGEgZGVidWdnaW5nIHNlc3Npb24gaXMgc3RhcnRlZC4gSXQgd2lsbAotCQkJCQkJCWF1dG9tYXRpY2FsbHkgc3RhcnQgYXQgdGhlIGZpcnN0IHRlbXBsYXRlLiBCcmVhayBwb2ludHMgbXVzdCBiZQotCQkJCQkJCXBsYWNlZCBpbiB0ZW1wbGF0ZXMgdG8gYmUgaG9ub3JlZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0Ci0JCQkJCQkJWGFsYW4gbGF6aWx5IGluaXRpYWxpemVzIHRoZSB2YXJpYWJsZXMgb25seSB3aGVuIHRoZXkgYXJlIGZpcnN0Ci0JCQkJCQkJdXNlZC4KLQkJCQkJCTwvcD48L2xpPjxsaT48cD4KLQkJCQkJCQk8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5YU0xUIFRleHQgZWxlbWVudHM8L2VtPjwvc3Bhbj4KLQkJCQkJCQktIFhhbGFuIGRvZXMgbm90IHNlbmQgbm90aWZpY2F0aW9ucyBvZiB4c2w6dGV4dCBlbGVtZW50cy4gVGhlc2UKLQkJCQkJCQlhcmUgc2tpcHBlZCBvdmVyIHdoZW4gZGVidWdnaW5nLgotCQkJCQkJPC9wPjwvbGk+PGxpPjxwPgotCQkJCQkJCTxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPkJ1aWx0IEluIFRlbXBsYXRlczwvZW0+PC9zcGFuPgotCQkJCQkJCS0gWGFsYW4gZG9lcyBwcm92aWRlIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBidWlsdCBpbiB0ZW1wbGF0ZXMgYXJlCi0JCQkJCQkJY2FsbGVkLCBidXQgY3VycmVudGx5IHRoZSBkZWJ1Z2dlciBkb2VzIG5vdCBzdXBwb3J0IG9yIGRpc3BsYXkKLQkJCQkJCQlzdGVwcGluZyBpbnRvIHRoZXNlIHRlbXBsYXRlcy4KLQkJCQkJCTwvcD48L2xpPjwvb2w+PC9kaXY+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZ192YXJpYWJsZXN2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZ192YXJpYWJsZXN2aWV3Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0OGY2ZTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9kZWJ1Z2dpbmdfdmFyaWFibGVzdmlldy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5WYXJpYWJsZXMgVmlldzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9ImRlYnVnZ2luZ19jb21tb24uaHRtbCIgdGl0bGU9IkNvbW1vbiBEZWJ1Z2dpbmcgT3BlcmF0aW9ucyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJkZWJ1Z2dpbmdfY29tbW9uLmh0bWwiIHRpdGxlPSJDb21tb24gRGVidWdnaW5nIE9wZXJhdGlvbnMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCIgdGl0bGU9IlhTTFQgUHJvY2Vzc29yIFNwZWNpZmljIFN1cHBvcnQiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoNCBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhTTERlYnVnVmFyaWFibGVzIj48L2E+VmFyaWFibGVzIFZpZXc8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPiBUaGUgdmFyaWFibGVzIHZpZXcgd2lsbCBzaG93IGFsbCB0aGUgbG9jYWwgYW5kIGdsb2JhbAotCQkJCQl2YXJpYWJsZXMgYW5kIHBhcmFtcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gc2NvcGUuIFRoZXJlIGFyZSB0d28KLQkJCQkJdHlwZXMgb2YgdmFyaWFibGVzIHRoYXQgY2FuIGJlIHZpZXdzLjwvcD48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9sYXVuY2hpbmcvbm9kZXNldFZhcmlhYmxlLnBuZyIgYWxpZ249Im1pZGRsZSI+PC9kaXY+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48cCBjbGFzcz0idGl0bGUiPjxiPlZhcmlhYmxlIFR5cGVzPC9iPjwvcD48dWwgdHlwZT0iZGlzYyI+PGxpPjxwPgotCQkJCQkJCTxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlN0cmluZzwvZW0+PC9zcGFuPgotCQkJCQkJCS0gVGhlc2UgY29udGFpbiB0ZXh0IHZhbHVlcy4gVGhpcyBjb3VsZCBiZSBzdHJpbmdzIG9mIHRleHQsCi0JCQkJCQkJbnVtYmVycywgb3Igb3RoZXIgY2hhcmFjdGVycy4KLQkJCQkJCTwvcD48L2xpPjxsaT48cD4KLQkJCQkJCQk8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5Ob2Rlc2V0czwvZW0+PC9zcGFuPgotCQkJCQkJCS0gTm9kZXNldHMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSB2YXJpYWJsZXMgdmlldyBhcyBleHBhbmRhYmxlCi0JCQkJCQkJdmFyaWFibGVzLiBUaGV5IGNvbnRhaW4gc2VxdWVuY2VzIG9mIG5vZGVzLiBUaGUgdHlwZSBvZiBub2RlcyBhcmUKLQkJCQkJCQlyZXByZXNlbnRlZCBieSBpY29ucyBmb3IgZWxlbWVudHMsIGF0dHJpYnV0ZXMsIHRleHQsIGNvbW1lbnRzIG9yCi0JCQkJCQkJcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuCi0JCQkJCQk8L3A+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5DYW4gSSBjaGFuZ2UgdGhlIHZhbHVlIG9mIHZhcmlhYmxlcz88L2gzPjxwPiBDdXJyZW50bHkgdGhlIFhTTFQgRGVidWdnZXIgZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGUKLQkJCQkJCXZhbHVlcyBvciBjb250ZW50cyBvZiBhIHZhcmlhYmxlLiBBbGwgWFNMVCB2YXJpYWJsZXMgYXJlIHJlYWQKLQkJCQkJCW9ubHkuPC9wPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9kZWJ1Z2xhdW5jaGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9kZWJ1Z2xhdW5jaGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTg4ZDk3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sYXVuY2hpbmcvZGVidWdsYXVuY2hpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5MYXVuY2ggRGVidWdnaW5nPC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9ImxhdW5jaGluZy5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzMuJm5ic3A7WFNMIExhdW5jaGluZyBhbmQgRGVidWdnaW5nIj48bGluayByZWw9InByZXYiIGhyZWY9ImxhdW5jaGluZy5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzMuJm5ic3A7WFNMIExhdW5jaGluZyBhbmQgRGVidWdnaW5nIj48bGluayByZWw9Im5leHQiIGhyZWY9Ii4uL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7NC4mbmJzcDtYU0wgVG9vbHMgUHJlZmVyZW5jZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iWFNMRGVidWciPjwvYT5MYXVuY2ggRGVidWdnaW5nPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLQkgICAJCVRoaXMgaXMgYSBwbGFjZSBob2xkZXIgdW50aWwgc29tZSBhY3R1YWwgZG9jdW1lbnRhdGlvbiBjYW4gYmUgd3JpdHRlbi4KLQkgICA8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2xhdW5jaGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9sYXVuY2hpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJkYjcyZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2xhdW5jaGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YU0wgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmc8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9lZGl0b3IveHNsZWRpdG9yX2RlYnVnZ2luZy5odG1sIiB0aXRsZT0iTmF2aWdhdGlvbiI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJkZWJ1Z2dpbmcuaHRtbCIgdGl0bGU9IlhTTFQgRGVidWdnaW5nIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9ImNoYXB0ZXIiIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJOMTAyNEEiPjwvYT5YU0wgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRvYyI+PHA+PGI+VGFibGUgb2YgQ29udGVudHM8L2I+PC9wPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImxhdW5jaGluZy5odG1sI1hTTExhdW5jaCI+WFNMIExhdW5jaGluZzwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoQ29uZmlnIj5MYXVuY2ggQ29uZmlndXJhdGlvbjwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoX01haW4iPk1haW4gVGFiPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ibGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoX091dHB1dCI+T3V0cHV0IFRhYjwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImxhdW5jaGluZy5odG1sI1hTTExhdW5jaF9Qcm9jZXNzb3IiPlByb2Nlc3NvciBUYWI8L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjwvdWw+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImRlYnVnZ2luZy5odG1sIj5YU0xUIERlYnVnZ2luZzwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZGVidWdnaW5nLmh0bWwjRGVidWdHZXR0aW5nU3RhcnRlZCI+U3RhcnRpbmcgYSBEZWJ1ZyBTZXNzaW9uPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZGVidWdnaW5nX2NvbW1vbi5odG1sIj5Db21tb24gRGVidWdnaW5nIE9wZXJhdGlvbnM8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImRlYnVnZ2luZ19jb21tb24uaHRtbCNYU0xEZWJ1Z1Jlc3VsdFZpZXciPlJlc3VsdCBWaWV3PC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZGVidWdnaW5nX3ZhcmlhYmxlc3ZpZXcuaHRtbCI+VmFyaWFibGVzIFZpZXc8L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCI+WFNMVCBQcm9jZXNzb3IgU3BlY2lmaWMgU3VwcG9ydDwvYT48L3NwYW4+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCNYU0xEZWJ1Z1hhbGFuIj5YU0wgRGVidWdnaW5nIHdpdGggWGFsYW48L2E+PC9zcGFuPjwvbGk+PC91bD48L2xpPjwvdWw+PC9saT48L3VsPjwvZGl2PjxwPiBYU0wgVG9vbHMgYWRkcyBzdXBwb3J0IGZvciBYU0wgTGF1bmNoIGFuZCBEZWJ1Z2dpbmcKLQkJY29uZmlndXJhdGlvbnMuIFRoZXNlIGFsbG93IHlvdSB0byBzZXR1cCBYU0wgY29uZmlndXJhdGlvbnMgZm9yCi0JCXZhcmlvdXMgam9icywgYW5kIHRvIGFsc28gZGVidWcgeHNsIHN0eWxzaGVldCB0cmFuc2Zvcm1hdGlvbnMuPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlhTTExhdW5jaCI+PC9hPlhTTCBMYXVuY2hpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotCQkJSW4gdGhlIFByb2plY3QgRXhwbG9yZXIsIHNpbXBseSBzZWxlY3QgdGhlIGlucHV0IFhNTCBmaWxlIGFuZCB0aGUKLQkJCXN0eWxlc2hlZXQocykgdG8gdHJhbnNmb3JtIGl0LCBhbmQgdGhlbiByaWdodC1jbGljayBhbmQgc2VsZWN0Ci0JCQk8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SdW4gQXMgJmd0OyBYU0wgVHJhbnNmb3JtYXRpb248L2VtPjwvc3Bhbj4KLQkJCS4KLQkJPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iZmlnX1hTTFJ1biI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7MTEuJm5ic3A7WFNMVCBSdW4vRGVidWc8L2I+PC9wPjxkaXYgY2xhc3M9ImZpZ3VyZS1jb250ZW50cyI+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3QucG5nIiBhbGlnbj0ibWlkZGxlIiBhbHQ9IlhTTFQgUnVuL0RlYnVnIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+PGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPlNlbGVjdGluZyBvbmx5IHRoZSBYU0wgU3R5bGVzaGVldDwvaDM+PHA+Ci0JCQkJSWYgb25seSB0aGUgWFNMIFN0eWxlc2hlZXQgaXMgc2VsZWN0ZWQgdGhlbiBhIGRpYWxvZyBib3ggd2lsbCBwcm9tcHQgeW91IGZvciB0aGUgaW5wdXQgZmlsZSB0byB1c2UuCi0JCQk8L3A+PC9kaXY+PHA+Ci0JCQlMYXVuY2ggY2FuIGFsc28gYmUgZG9uZSB0aHJvdWdoIHRoZSBMYXVuY2ggQ29uZmlndXJhdGlvbnMgcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgYm90aCBkZWJ1Z2dpbmcgYW5kIG5vcm1hbCB0cmFuc2Zvcm1hdGlvbnMuCi0JCQlUaGVzZSBjb25maWd1cmF0aW9ucyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5SdW4tJmd0O1J1biBDb25maWd1cmF0aW9uczwvZW0+PC9zcGFuPiBtZW51IGJhciBvcHRpb24uCi0JCTwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iWFNMTGF1bmNoQ29uZmlnIj48L2E+TGF1bmNoIENvbmZpZ3VyYXRpb248L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotCQkJCUN1cnJlbnRseSwgWFNMIFRvb2xzIG9ubHkgc3VwcG9ydHMgdGhlIGxhdW5jaGluZyBvZiBqYXZhIGJhc2VkCi0JCQkJcHJvY2Vzc29ycyB0aHJvdWdoIHRoZSBSdW4gYW5kIERlYnVnIGZyYW1ld29yay4gVG8gdGhpcyBwb2ludCwgaXQKLQkJCQlsZXZlcmFnZXMgYW5kIGV4dGVuZHMgc29tZSBvZiB0aGUgc3VwcG9ydCBwcm92aWRlZCBieSB0aGUgSmF2YQotCQkJCWxhdW5jaCBjb25maWd1cmF0aW9ucy4gWFNMIFRvb2xzIGRvZXMgYWRkIGl0J3Mgb3duIHNwZWNpZmljIGZlYXR1cmVzCi0JCQkJZm9yIGxhdW5jaGluZy4KLQkJCTwvcD48ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIG5hbWU9ImZpZ19YU0xMYXVuY2hDb25maWciPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkZpZ3VyZSZuYnNwOzEyLiZuYnNwO0phdmEgWFNMVCBMYXVuY2ggQ29uZmlndXJhdGlvbjwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9sYXVuY2hpbmcvWFNMUnVuRGVidWdDb25maWd1cmF0aW9ucy5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iSmF2YSBYU0xUIExhdW5jaCBDb25maWd1cmF0aW9uIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+PHA+Ci0JCQkJVGhlIHRhYnMgTWFpbiwgT3V0cHV0LCBhbmQgUHJvY2Vzc29yIGNvbnRyb2wgc3BlY2lmaWNzIGZvciB0aGUgWFNMVCBwcm9jZXNzb3IgYW5kIGZpbGVzIHRvIGJlIHJ1biB0aHJvdWdoCi0JCQkJdGhlIHRyYW5zZm9ybWF0aW9uLgotCQkJPC9wPjxkaXYgY2xhc3M9Im5vdGUiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5YU0xUIEV4dGVuc2lvbnM8L2gzPjxwPklmIHRoZSB0cmFuc2Zvcm1hdGlvbiBuZWVkcyBvciBtYWtlcyB1c2Ugb2YgZXh0ZW5zaW9uCi0JCQkJCWZ1bmN0aW9ucyB0aGVuIHRob3NlIGphciBmaWxlcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIENsYXNzcGF0aCB0YWIKLQkJCQkJc28gdGhhdCB0aGV5IGFyZSBwaWNrZWQgdXAgZHVyaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbi4gT3RoZXJ3aXNlIHRoZQotCQkJCQl0cmFuc2Zvcm1hdGlvbiB3aWxsIGZhaWwuPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJYU0xMYXVuY2hfTWFpbiI+PC9hPk1haW4gVGFiPC9oND48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLQkJCQkJQXMgc2hvd24gaW4gPGEgY2xhc3M9InhyZWYiIGhyZWY9ImxhdW5jaGluZy5odG1sI2ZpZ19YU0xMYXVuY2hDb25maWciIHRpdGxlPSJGaWd1cmUmbmJzcDsxMi4mbmJzcDtKYXZhIFhTTFQgTGF1bmNoIENvbmZpZ3VyYXRpb24iPkZpZ3VyZSZuYnNwOzEyLCAmbGRxdW87SmF2YSBYU0xUIExhdW5jaCBDb25maWd1cmF0aW9uJnJkcXVvOzwvYT4sIHRoZSBNYWluIFRhYiBpcyB3aGVyZSB0aGUgaW5wdXQgWE1MIGZpbGUgaXMgc3BlY2lmaWVkLiAgSWYgYSBwYXJ0aWN1bGFyCi0JCQkJCVhNTCBmaWxlIGlzIG5vdCBzaG93biBpbiB0aGUgYXZhaWxhYmxlIGxpc3Qgd2hlbiBicm93c2luZyB0aGUgV29ya3NwYWNlLCBtYWtlIHN1cmUgdGhhdCBpdCBpcyBhZGRlZCB0byB1bmRlciB0aGUgWE1MIENvbnRlbnQKLQkJCQkJVHlwZSBpbiB0aGUgR2VuZXJhbCBwcmVmZXJlbmNlIHBhZ2UuICBTdGFuZGFyZCBlY2xpcHNlIGxhdW5jaGluZyB2YXJpYWJsZXMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGlucHV0IGZpbGUuCi0JCQkJPC9wPjxwPgotCQkJCQlBIHJ1biBjb25maWd1cmF0aW9uIGNhbiBhbHNvIHVzZSBhIHNpbXBsZSBwaXBlbGluZSB0cmFuc2Zvcm1hdGlvbi4gIE1lYW5pbmcgdGhhdCB0aGUgb3V0cHV0IGZyb20gb25lIHN0eWxlc2hlZXQgaXMgdXNlZCBhcyBpbnB1dAotCQkJCQl0byB0aGUgbmV4dCBzdHlsZXNoZWV0LiAgIFRoZSBTdHlsZXNoZWV0IGlucHV0IGJveCBjYW4gaGF2ZSBvbmUgdG8gbWFueSBzdHlsZXNoZWV0cyBzcGVjaWZpZWQuICBBdCBsZWFzdCBvbmUgc3R5bGVzaGVldCBpcyByZXF1aXJlZAotCQkJCQlmb3IgYSB0cmFuc2Zvcm1hdGlvbi4KLQkJCQk8L3A+PHA+Ci0JCQkJCVRoZSBsYXN0IG9wdGlvbmFsIGl0ZW0gYXJlIHBhcmFtZXRlcnMuICAgU3R5bGVzaGVldHMgY2FuIGhhdmUgcGFyYW1ldGVycyBwYXNzZWQgaW50byB0aGVtIHRvIHNldHVwIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uICBBbgotCQkJCQlleGFtcGxlIHdvdWxkIGJlIHRoZSBudW1lcm91cyBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHNldCBmb3IgYSBEb2NCb29rIHN0eWxlc2hlZXQgdHJhbnNmb3JtYXRpb24uICAgSWYgdGhlIHBhcmFtZXRlcnMgYXJlIG5vdAotCQkJCQlzcGVjaWZpZWQgdGhlIGRlZmF1bHRzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN0eWxlc2hlZXQgd2lsbCB0YWtlIHByZWNlZGVuY2UuIAotCQkJCTwvcD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iWFNMTGF1bmNoX091dHB1dCI+PC9hPk91dHB1dCBUYWI8L2g0PjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotCQkJCQlUaGUgT3V0cHV0IFRhYiBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2Ygd2hlcmUgdGhlIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBzdG9yZSB0aGUgaW5mb3JtYXRpb24uCi0JCQkJCVRoaXMgY2FuIGJlIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2Ugb3IgYSBwaHlzaWNhbCBsb2NhdGlvbiBvdXRzaWRlIHRoZSB3b3Jrc3BhY2UuCi0JCQkJPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iZmlnX1hTTE91dHB1dFRhYiI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7MTMuJm5ic3A7SmF2YSBYU0xUIExhdW5jaCBDb25maWd1cmF0aW9uPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2xhdW5jaGluZy9YU0xPdXRwdXRUYWIucG5nIiBhbGlnbj0ibWlkZGxlIiBhbHQ9IkphdmEgWFNMVCBMYXVuY2ggQ29uZmlndXJhdGlvbiI+PC9kaXY+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJmaWd1cmUtYnJlYWsiPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDQgY2xhc3M9InRpdGxlIj48YSBuYW1lPSJYU0xMYXVuY2hfUHJvY2Vzc29yIj48L2E+UHJvY2Vzc29yIFRhYjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0JCQkJCVRoZSBwYXJ0aWN1bGFyIFhTTFQgcHJvY2Vzc29yIHRoYXQgd2lsbCBiZSB1c2VkIGNhbiBiZSBjaG9vc2VuIGZyb20gdGhpcyB0YWIuIFRoZQotCQkJCQlkZWZhdWx0IGlzIHRvIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgcHJvY2Vzc29yIG9yIHdoYXQgZXZlciBwcm9jZXNzb3IgeW91IGhhdmUKLQkJCQkJc2V0IGFzIHRoZSBkZWZhdWx0IHByb2Nlc3NvciBpbiB0aGUgcHJlZmVyZW5jZSBwYWdlcy4KLQkJCQk8L3A+PGRpdiBjbGFzcz0iZmlndXJlIj48YSBuYW1lPSJmaWdfWFNMUHJvY2Vzc29yVGFiIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5GaWd1cmUmbmJzcDsxNC4mbmJzcDtKYXZhIFhTTFQgTGF1bmNoIENvbmZpZ3VyYXRpb248L2I+PC9wPjxkaXYgY2xhc3M9ImZpZ3VyZS1jb250ZW50cyI+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvbGF1bmNoaW5nL1hTTFByb2Nlc3NvclRhYi5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iSmF2YSBYU0xUIExhdW5jaCBDb25maWd1cmF0aW9uIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+PGRpdiBjbGFzcz0ibm90ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPlhTTFQgRGVidWdnaW5nPC9oMz48cD4KLQkJCQkJCUlmIHlvdSBhcmUgc2V0dGluZyB1cCBhIGxhdW5jaCBjb25maWd1cmF0aW9uIGZvciBkZWJ1Z2dpbmcsIGRvIG5vdCBjaG9vc2UKLQkJCQkJCXRoZSBKUkUgRGVmYXVsdCBwcm9jZXNzb3IsIHlvdSBzaG91bGQgY2hvb3NlIGVpdGhlciBYYWxhbiBvciBhbm90aGVyIGFkb3B0ZXJzCi0JCQkJCQlwcm9jZXNzb3IgdGhhdCBzdXBwb3J0cyBkZWJ1Z2dpbmcuCi0JCQkJCTwvcD48L2Rpdj48cD4KLQkJCQkJSW4gYWRkaXRpb24sIGV2ZXJ5IHByb2Nlc3NvciBoYXMgdGhlaXIgb3duIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuCi0JCQkJCVRoaXMgY29udHJvbHMgc3VjaCBpdGVtcyBhcyBpbmRlbnRhdGlvbiwgaGFuZGxpbmcgb2Ygd2hpdGUgc3BhY2UsIGV0Yy4gIFJlZmVyIHRvIHlvdXIKLQkJCQkJcHJvY2Vzc29ycyBkb2N1bWVudGF0aW9uIGZvciB0aGUgc3BlY2lmaWMgb3B0aW9ucyBhdmFpbGFibGUuCi0JCQkJPC9wPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xlZ2FsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGVnYWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIzZThhZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGVnYWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Tm90aWNlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InByZXYiIGhyZWY9InNhbXBsZXMvc2FtcGxlcy5odG1sIiB0aXRsZT0iWFNMIFRvb2xpbmcgU2FtcGxlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTjEwNDZGIj48L2E+Tm90aWNlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAgICBUaGUgbWF0ZXJpYWwgaW4gdGhpcyBndWlkZSBpcyBDb3B5cmlnaHQgKGMpIERvdWcgU2F0Y2h3ZWxsICg8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrIiB0YXJnZXQ9Il90b3AiPkNoYXNlIFRlY2hub2xvZ3kgTHRkPC9hPiksIAotICAgICAgRGF2aWQgQ2FydmVyICg8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZyIgdGFyZ2V0PSJfdG9wIj5TdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWw8L2E+KQotICAgICAgYW5kIG90aGVycyAyMDA4LgotICAgIDwvcD48cD4KLQkJVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi0JCXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAotCQk8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLSAgICA8L3A+PHA+Ci0JCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iYWJvdXQuaHRtbCIgdGFyZ2V0PSJfdG9wIj5UZXJtcyBhbmQgY29uZGl0aW9ucyByZWdhcmRpbmcgdGhlIHVzZSBvZiB0aGlzIGd1aWRlLjwvYT4uCi0JPC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3N5bnRheENvbG9yaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMvc3ludGF4Q29sb3JpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ5MzdhYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMvc3ludGF4Q29sb3JpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YU0xUIFN5bnRheCBDb2xvcmluZzwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbHByZWZlcmVuY2VzLmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgUHJlZmVyZW5jZXMiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0idmFsaWRhdGlvbi5odG1sIiB0aXRsZT0iUHJvamVjdCBWYWxpZGF0aW9uIFByZWZlcmVuY2VzIj48bGluayByZWw9Im5leHQiIGhyZWY9Ii4uL2dlbmVyYWwvZ2VuZXJhbC5odG1sIiB0aXRsZT0iR2VuZXJhbCI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJwcmVmX1N5bnRheENvbG9yaW5nIj48L2E+WFNMVCBTeW50YXggQ29sb3Jpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgICAgWFNMIFRvb2xzIGFsc28gaGFzIHRoZSBhYmlsaXR5IHRvIHN5bnRheCBjb2xvciB0aGUgWFNMVCBuYW1lc3BhY2UgaXRlbXMgYSBkaWZmZXJlbnQKLSAgICAgICAgICAgIGNvbG9yIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIFhNTCBzeW50YXggaW5jbHVkZWQuICAgVGhlIGRlZmF1bHQgaXMgZm9yIGFsbCBYU0wgc3ludGF4IHRvIGJlCi0gICAgICAgICAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5ib2xkPC9zdHJvbmc+PC9zcGFuPi4KLSAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iZmlnX1hTTFN5bnRheENvbG9yaW5nUHJlZmVyZW5jZSI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RmlndXJlJm5ic3A7MTguJm5ic3A7WFNMIFRvb2xzIFN5bnRheCBDb2xvcmluZyBQcmVmZXJlbmNlPC9iPjwvcD48ZGl2IGNsYXNzPSJmaWd1cmUtY29udGVudHMiPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbFN5bnRheENvbG9yaW5nLnBuZyIgYWxpZ249Im1pZGRsZSIgYWx0PSJYU0wgVG9vbHMgU3ludGF4IENvbG9yaW5nIFByZWZlcmVuY2UiPjwvZGl2PjwvZGl2PjwvZGl2PjxiciBjbGFzcz0iZmlndXJlLWJyZWFrIj48ZGl2IGNsYXNzPSJub3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+WE1MIENvbG9yczwvaDM+PHA+Ci0gICAgICAgICAgICAgICAgVGhlIGNvbG9yIGZvciBzdGFuZGFyZCBYTUwgaXMgc3RpbGwgaGFuZGxlZCBieSB0aGUgWE1MIEZpbGVzIHN5bnRheCBjb2xvcmluZwotICAgICAgICAgICAgICAgIHByZWZlcmVuY2UgcGFnZS4gICBDaGFuZ2VzIG1hZGUgdGhlcmUgYXJlIHJlZmxlY3RlZCBpbiB0aGUgWFNMIGVkaXRvciBhcyB3ZWxsLgotICAgICAgICAgICAgPC9wPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3ZhbGlkYXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy92YWxpZGF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMmE1ZWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3ZhbGlkYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Qcm9qZWN0IFZhbGlkYXRpb24gUHJlZmVyZW5jZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSJ4c2xwcmVmZXJlbmNlcy5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFByZWZlcmVuY2VzIj48bGluayByZWw9InByZXYiIGhyZWY9InhwYXRoZXhwb3J0Lmh0bWwiIHRpdGxlPSJJbXBvcnQgWFBhdGggVGVtcGxhdGVzIj48bGluayByZWw9Im5leHQiIGhyZWY9InN5bnRheENvbG9yaW5nLmh0bWwiIHRpdGxlPSJYU0xUIFN5bnRheCBDb2xvcmluZyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJwcmVmX1Byb2plY3RWYWxpZGF0aW9uUHJlZmVyZW5jZXMiPjwvYT5Qcm9qZWN0IFZhbGlkYXRpb24gUHJlZmVyZW5jZXM8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgICAgICAgWFNMIFRvb2xzIGhhcyB0aGUgYWJpbGl0eSB0byBzZXQgYm90aCB3b3Jrc3BhY2Ugd2lkZSBwcmVmZXJlbmNlcyBmb3IKLSAgICAgICAgICAgIHZhbGlkYXRpb24gYXMgd2VsbCBhcyBwcm9qZWN0IGxldmVsIHByZWZlcmVuY2VzLiBUaGVzZSBwcmVmZXJlbmNlcywgYXMgc2hvd24KLSAgICAgICAgICAgIGluCi0gICAgICAgICAgICA8YSBjbGFzcz0ieHJlZiIgaHJlZj0idmFsaWRhdGlvbi5odG1sI2ZpZ19Qcm9qZWN0TGV2ZWxQcmVmZXJlbmNlcyIgdGl0bGU9IkZpZ3VyZSZuYnNwOzE3LiZuYnNwO1Byb2plY3QgTGV2ZWwgVmFsaWRhdGlvbiBQcmVmZXJlbmNlcyI+RmlndXJlJm5ic3A7MTcsICZsZHF1bztQcm9qZWN0IExldmVsIFZhbGlkYXRpb24gUHJlZmVyZW5jZXMmcmRxdW87PC9hPgotICAgICAgICAgICAgYWxsb3cgZm9yIHRoZSBmaW5lIGdyYWluIGNvbnRyb2wgb2Ygd2hhdCB0aGUgdmFsaWRhdG9yIHdpbGwgY29uc2lkZXIgdG8gYmUgYW4KLSAgICAgICAgICAgIHN5bnRheCBlcnJvci4KLSAgICAgICAgPC9wPjxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgbmFtZT0iZmlnX1Byb2plY3RMZXZlbFByZWZlcmVuY2VzIj48L2E+PHAgY2xhc3M9InRpdGxlIj48Yj5GaWd1cmUmbmJzcDsxNy4mbmJzcDtQcm9qZWN0IExldmVsIFZhbGlkYXRpb24gUHJlZmVyZW5jZXM8L2I+PC9wPjxkaXYgY2xhc3M9ImZpZ3VyZS1jb250ZW50cyI+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMvcHJvamVjdExldmVsVmFsaWRhdGlvbi5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iUHJvamVjdCBMZXZlbCBWYWxpZGF0aW9uIFByZWZlcmVuY2VzIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+PHA+IFRoZXNlIHByZWZlcmVuY2VzIGFyZSBhY2Nlc3NlZCB2aWEgdGhlIFByb2plY3RzIHByb3BlcnRpZXMgZGlhbG9nLjwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy94cGF0aGV4cG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hwYXRoZXhwb3J0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjdlMDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hwYXRoZXhwb3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkltcG9ydCBYUGF0aCBUZW1wbGF0ZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSJ4cGF0aHRlbXBsYXRlcy5odG1sIiB0aXRsZT0iWFBhdGggVGVtcGxhdGVzIj48bGluayByZWw9InByZXYiIGhyZWY9InhwYXRoaW1wb3J0Lmh0bWwiIHRpdGxlPSJJbXBvcnQgWFBhdGggVGVtcGxhdGVzIj48bGluayByZWw9Im5leHQiIGhyZWY9InZhbGlkYXRpb24uaHRtbCIgdGl0bGU9IlByb2plY3QgVmFsaWRhdGlvbiBQcmVmZXJlbmNlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iWFBhdGhFeHBvcnQiPjwvYT5JbXBvcnQgWFBhdGggVGVtcGxhdGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4gQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgaW1wb3J0aW5nIG5ldyB0ZW1wbGF0ZXMuPC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hwYXRoaW1wb3J0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHBhdGhpbXBvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJlY2I2Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHBhdGhpbXBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+SW1wb3J0IFhQYXRoIFRlbXBsYXRlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhwYXRodGVtcGxhdGVzLmh0bWwiIHRpdGxlPSJYUGF0aCBUZW1wbGF0ZXMiPjxsaW5rIHJlbD0icHJldiIgaHJlZj0ieHBhdGh0ZW1wbGF0ZXMuaHRtbCIgdGl0bGU9IlhQYXRoIFRlbXBsYXRlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4cGF0aGV4cG9ydC5odG1sIiB0aXRsZT0iSW1wb3J0IFhQYXRoIFRlbXBsYXRlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iWFBhdGhJbXBvcnQiPjwvYT5JbXBvcnQgWFBhdGggVGVtcGxhdGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4gQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgaW1wb3J0aW5nIG5ldyB0ZW1wbGF0ZXMuPC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hwYXRodGVtcGxhdGVzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHBhdGh0ZW1wbGF0ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVhMmU2OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHBhdGh0ZW1wbGF0ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+WFBhdGggVGVtcGxhdGVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNscHJlZmVyZW5jZXMuaHRtbCIgdGl0bGU9IlhTTCBUb29scyBQcmVmZXJlbmNlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xvdXRwdXRwcm9wZXJ0aWVzLmh0bWwiIHRpdGxlPSJPdXRwdXQgUHJvcGVydGllcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4cGF0aGltcG9ydC5odG1sIiB0aXRsZT0iSW1wb3J0IFhQYXRoIFRlbXBsYXRlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBuYW1lPSJYUGF0aFRlbXBsYXRlcyI+PC9hPlhQYXRoIFRlbXBsYXRlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IFhQYXRoIHRlbXBsYXRlIHByb3Bvc2FsIGlzIHN1cHBvcnRlZCBieSB0aGUgWFNMIFRvb2xpbmcgcHJvamVjdCB0aHJvdWdoIHRoZQotICAgICAgICAgICAgYnVpbHQgaW4gdGVtcGxhdGUgZnVuY3Rpb25hbGl0eSBvZiBlY2xpcHNlLiBVc2VycyBhbmQgQWRvcHRlcnMgY2FuIGFkZCB0aGVpcgotICAgICAgICAgICAgb3duIHNwZWNpZmljIHhwYXRoIGV4dGVuc2lvbnMgZm9yIHByb2Nlc3NvciBzcGVjaWZpYyBleHRlbnNpb25zLiBBbiBleGFtcGxlCi0gICAgICAgICAgICB3b3VsZCBiZSB0byBhZGQgdGhlIEVYU0xUIGV4dGVuc2lvbnMgZm9yIHByb3Bvc2FsIHN1cHBvcnQuPC9wPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL1hQYXRoVGVtcGxhdGVzLnBuZyIgYWxpZ249Im1pZGRsZSI+PC9kaXY+PHA+IFRoZSBmb2xsb3dpbmcgY29udGVudCB0eXBlcyBhcmUgYXZhaWxhYmxlOjwvcD48ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCB0eXBlPSJkaXNjIj48bGk+PHA+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmF4aXM8L3N0cm9uZz48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIC0gYW4gWFBhdGggbmF2aWdhdGlvbiBheGlzIHN0YXRlbWVudC4KLSAgICAgICAgICAgICAgICA8L3A+PC9saT48bGk+PHA+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmV4c2x0PC9zdHJvbmc+PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAtIEFuIFhQYXRoIHN0YXRlbWVudCB0aGF0IGlzIGRlZmluZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5leHNsdC5vcmcvIiB0YXJnZXQ9Il90b3AiPkVYU0xUPC9hPgotICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LiBYYWxhbiBhbmQgbW9zdCBvdGhlciBwcm9jZXNzb3JzIGhhdmUgYnVpbHQgaW4gc3VwcG9ydCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgIEVYU0xUIGxpYnJhcnkuCi0gICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpPjxwPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz54cGF0aDwvc3Ryb25nPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIGFuIFhQQVRIIDEuMCBmdW5jdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9ucyBhcyBkZWZpbmVkIGJ5Ci0gICAgICAgICAgICAgICAgICAgIHRoZSBYUGF0aCAxLjAgc3BlY2lmaWNhdGlvbi4KLSAgICAgICAgICAgICAgICA8L3A+PC9saT48bGk+PHA+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnhwYXRoIDIuMDwvc3Ryb25nPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIGFuIFhQYXRoIDIuMCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+Tm90ZTogVGhhdCBjdXJyZW50bHkgWFNMIFRvb2xzIG9ubHkgc2hpcHMgd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzIGRlZmluZWQgZm9yIFhQYXRoIDEuMCAuPC9lbT48L3NwYW4+Ci0gICAgICAgICAgICAgICAgPC9wPjwvbGk+PGxpPjxwPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5vcGVyYXRvcjwvc3Ryb25nPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgLSBBbiB4cGF0aCBsb2dpY2FsIG9wZXJhdG9yIGxpa2UgQU5ELCBPUiwgZXRjLgotICAgICAgICAgICAgICAgIDwvcD48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhQYXRoVGVtcGxhdGVOZXciPjwvYT5DcmVhdGluZyBOZXcgVGVtcGxhdGVzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4gQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgY3JlYXRpbmcgbmV3IHRlbXBsYXRlcy48L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNsb3V0cHV0cHJvcGVydGllcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hzbG91dHB1dHByb3BlcnRpZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYxYjY2Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNsb3V0cHV0cHJvcGVydGllcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPk91dHB1dCBQcm9wZXJ0aWVzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNscHJlZmVyZW5jZXMuaHRtbCIgdGl0bGU9IlhTTCBUb29scyBQcmVmZXJlbmNlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xwcm9jZXNzb3JzLmh0bWwiIHRpdGxlPSJJbnN0YWxsZWQgUHJvY2Vzc29ycyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4cGF0aHRlbXBsYXRlcy5odG1sIiB0aXRsZT0iWFBhdGggVGVtcGxhdGVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlhTTE91dHB1dFByb3BlcnRpZXMiPjwvYT5PdXRwdXQgUHJvcGVydGllczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IFRoZSB2YXJpb3VzIHhzbCBwcm9jZXNzb3JzIHN1cHBvcnQgYSB3aWRlIHZhcmlldHkgb2YgcHJvY2Vzc29yIHNwZWNpZmljCi0gICAgICAgICAgICB0d2Vha3MuIEhvd2V2ZXIgdGhlcmUgYXJlIHNldmVyYWwgU3RhbmRhcmQgcHJvY2Vzc29yIGZlYXR1cmVzIHRoYXQgYWxsIFhTTFQKLSAgICAgICAgICAgIHByb2Nlc3NvcnMgc3VwcG9ydC4gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc2V0IGFuZCB3aWxsIGFjdCBhcyB0aGUgZGVmYXVsdHMgZm9yCi0gICAgICAgICAgICBhbGwgdHJhbnNmb3JtYXRpb25zIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgb3ZlcnJpZGVuIGJ5IHRoZSBzdHlsZXNoZWV0Ci0gICAgICAgICAgICBvciB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24uPC9wPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9vdXRwdXRwcm9wZXJ0aWVzLnBuZyIgYWxpZ249Im1pZGRsZSI+PC9kaXY+PHA+IEluIGFkZGl0aW9uIHRvIHRoZSBTdGFuZGFyZCBPdXRwdXQgUHJvcGVydGllcywgZWFjaCBYU0xUIHByb2Nlc3NvciBjYW4gaGF2ZQotICAgICAgICAgICAgcHJvY2Vzc29ycyBzcGVjaWZpYyBmZWF0dXJlcy48L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2EyNmQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YU0wgVG9vbHMgUHJlZmVyZW5jZXM8L3RpdGxlPjxsaW5rIGhyZWY9ImJvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bGluayBocmVmPSIuLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzQuMCIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9sYXVuY2hpbmcvZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCIgdGl0bGU9IlhTTFQgUHJvY2Vzc29yIFNwZWNpZmljIFN1cHBvcnQiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieHNscHJvY2Vzc29ycy5odG1sIiB0aXRsZT0iSW5zdGFsbGVkIFByb2Nlc3NvcnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PGRpdiBjbGFzcz0iY2hhcHRlciIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhTTFByZWZlcmVuY2VzIj48L2E+WFNMIFRvb2xzIFByZWZlcmVuY2VzPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0b2MiPjxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xwcmVmZXJlbmNlcy5odG1sI1hTTEZlYXR1cmVzIj5GZWF0dXJlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InhzbHByb2Nlc3NvcnMuaHRtbCI+SW5zdGFsbGVkIFByb2Nlc3NvcnM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4c2xvdXRwdXRwcm9wZXJ0aWVzLmh0bWwiPk91dHB1dCBQcm9wZXJ0aWVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ieHBhdGh0ZW1wbGF0ZXMuaHRtbCI+WFBhdGggVGVtcGxhdGVzPC9hPjwvc3Bhbj48dWw+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4cGF0aHRlbXBsYXRlcy5odG1sI1hQYXRoVGVtcGxhdGVOZXciPkNyZWF0aW5nIE5ldyBUZW1wbGF0ZXM8L2E+PC9zcGFuPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ4cGF0aGltcG9ydC5odG1sIj5JbXBvcnQgWFBhdGggVGVtcGxhdGVzPC9hPjwvc3Bhbj48L2xpPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ieHBhdGhleHBvcnQuaHRtbCI+SW1wb3J0IFhQYXRoIFRlbXBsYXRlczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PGxpPjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJ2YWxpZGF0aW9uLmh0bWwiPlByb2plY3QgVmFsaWRhdGlvbiBQcmVmZXJlbmNlczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InN5bnRheENvbG9yaW5nLmh0bWwiPlhTTFQgU3ludGF4IENvbG9yaW5nPC9hPjwvc3Bhbj48L2xpPjwvdWw+PC9kaXY+PHA+IFRoZSBYU0wgUHJlZmVyZW5jZSBwYWdlcyBoYXMgc2V2ZXJhbCBzdWIgc2VjdGlvbnMuIEVhY2ggb2YgdGhlc2UgYWxsb3cgZm9yCi0gICAgICAgIGNvbmZpZ3VyYXRpb24gb2YgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBwcmVmZXJlbmNlcy4gRnJvbSB0aGUgY29udHJvbGxpbmcgb2YgdGhlCi0gICAgICAgIGRlZmF1bHQgWFNMIHByb2Nlc3NvciB0byBiZSB1c2VkIGR1cmluZyB0cmFuc2Zvcm1hdGlvbnMuIFRvIGV4dGVuZGluZyB0aGUgY29udGVudAotICAgICAgICBhc3Npc3Qgc3VwcG9ydCBvZiB0aGUgWFBhdGggZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGUgWE1MIGVkaXRvci48L3A+PGRpdiBjbGFzcz0iZmlndXJlIj48YSBuYW1lPSJmaWdfWFNMUHJlZmVyZW5jZXMiPjwvYT48cCBjbGFzcz0idGl0bGUiPjxiPkZpZ3VyZSZuYnNwOzE2LiZuYnNwO1hTTCBUb29scyBQcmVmZXJlbmNlczwvYj48L3A+PGRpdiBjbGFzcz0iZmlndXJlLWNvbnRlbnRzIj48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5wbmciIGFsaWduPSJtaWRkbGUiIGFsdD0iWFNMIFRvb2xzIFByZWZlcmVuY2VzIj48L2Rpdj48L2Rpdj48L2Rpdj48YnIgY2xhc3M9ImZpZ3VyZS1icmVhayI+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iWFNMRmVhdHVyZXMiPjwvYT5GZWF0dXJlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IFRoZSBYU0wgRmVhdHVyZXMgcHJlZmVyZW5jZSBwYWdlIGFsbG93cyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgZmVhdHVyZXMKLSAgICAgICAgICAgIGZvciBhIHBhcnRpY3VsYXIgcHJvY2Vzc29yLiBYU0wgVG9vbHMgY29tZXMgd2l0aCBYYWxhbiAyLjcuMCBieSBkZWZhdWx0LgotICAgICAgICAgICAgQWRvcHRlcnMgY2FuIGV4dGVuZCBhbmQgaW5jbHVkZSB0aGVpciBvd24gc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHRoZWlyIG93bgotICAgICAgICAgICAgcHJvY2Vzb29ycy4gQW4gYWRvcHRlciBjb3VsZCBleHRlbmQgdGhlIHRvb2xpbmcgdG8gc3VwcG9ydCBYU0xUIDIuMAotICAgICAgICAgICAgdHJhbnNmb3JtYXRpb25zLCBhbmQgZmVhdHVyZXMgcGFydGljdWxhciB0byB0aGF0IHBhcnNlci48L3A+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nIiBhbGlnbj0ibWlkZGxlIj48L2Rpdj48cD4KLSAgICAgICAgICAgIFRoZQotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+UHJvY2Vzc29yIFR5cGU8L3N0cm9uZz48L3NwYW4+Ci0gICAgICAgICAgICBhbGxvd3MgeW91IHRvIHNldCBmZWF0dXJlcyBmb3IgYSBzcGVjaWZpYyBwcm9jZXNzb3IuIEluIHRoaXMgY2FzZSB0aGlzIGlzIGZvcgotICAgICAgICAgICAgdGhlIHByb2Nlc3NvciB0aGF0IGlzIGJlaW5nIGluc3RhbGxlZC4gWFNMIFRvb2xzIGNvbWVzIHdpdGggWGFsYW4gMi43LjAsIGFuZAotICAgICAgICAgICAgaXQgaXMgdGhlIG9ubHkgYXZhaWxhYmxlIHByb2Nlc3NvciB0eXBlIGJ5IGRlZmF1bHQuCi0gICAgICAgIDwvcD48cD4gVGhlIGZlYXR1cmUgdGFibGUgbGlzdHMgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBwcm9jZXNzb3IKLSAgICAgICAgICAgIHRoYXQgd2FzIHNlbGVjdGVkLiBBcyB5b3Ugc2VsZWN0IGVhY2ggb2YgdGhlIGZlYXR1cmVzLCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKLSAgICAgICAgICAgIHRoYXQgZmVhdHVyZSBhbmQgaXQncyBhYmlsaXRpZXMgaXMgZGlzcGxheWVkIGluIHRoZSBkZXNjcmlwdGlvbiBib3guIEJ5Ci0gICAgICAgICAgICBjbGlja2luZyBpbiB0aGUgdmFsdWUgY29sdW1uLCBuZXh0IHRvIHRoZSBmZWF0dXJlIHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUKLSAgICAgICAgICAgIGZvciwgdGhlIHVzZXIgY2FuIHNldCB0aGUgZmVhdHVyZS48L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNscHJvY2Vzc29ycy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hzbHByb2Nlc3NvcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY3OTlmYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNscHJvY2Vzc29ycy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkluc3RhbGxlZCBQcm9jZXNzb3JzPC90aXRsZT48bGluayBocmVmPSJib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PGxpbmsgaHJlZj0iLi4vYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc0LjAiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNscHJlZmVyZW5jZXMuaHRtbCIgdGl0bGU9IlhTTCBUb29scyBQcmVmZXJlbmNlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xwcmVmZXJlbmNlcy5odG1sIiB0aXRsZT0iWFNMIFRvb2xzIFByZWZlcmVuY2VzIj48bGluayByZWw9Im5leHQiIGhyZWY9InhzbG91dHB1dHByb3BlcnRpZXMuaHRtbCIgdGl0bGU9Ik91dHB1dCBQcm9wZXJ0aWVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlhTTFByb2Nlc3NvcnMiPjwvYT5JbnN0YWxsZWQgUHJvY2Vzc29yczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+IFRoZSBpbnN0YWxsZWQgcHJvY2Vzc29ycyBwYWdlIGxldHMgeW91IHBpY2sgd2hpY2ggb2YgdGhlIGluc3RhbGxlZCBYU0xUCi0gICAgICAgICAgICBwcm9jZXNzb3JzIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0LiBUaGUgZGVmYXVsdCBpcyB0aGUgU3lzdGVtIERlZmF1bHQKLSAgICAgICAgICAgIFByb2Nlc29vciwgYnV0IHlvdSBjYW4gc2VsZWN0IGFueSBvZiB0aGUgYXZhaWxhYmxlIHByb2Nlc3NvcnMgdG8gYmUgdXNlZCBhcwotICAgICAgICAgICAgdGhlIGRlZmF1bHQgcHJvY2Vzc29yLjwvcD48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfSW5zdGFsbGVkUHJvY2Vzc29ycy5wbmciIGFsaWduPSJtaWRkbGUiPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9tYWludG9waWMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9yZWZlcmVuY2UvbWFpbnRvcGljLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NzYwNzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9tYWludG9waWMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPk1haW4gVG9waWM8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keT4KLTxoMT5NYWluIFRvcGljPC9oMT4KLVBsZWFzZSBlbnRlciB5b3VyIHRleHQgaGVyZS4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNjFjNTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9zdWJ0b3BpYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+U3ViIFRvcGljPC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHk+Ci08aDE+U3ViIFRvcGljPC9oMT4KLVBsZWFzZSBlbnRlciB5b3VyIHRleHQgaGVyZS4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9zdWJ0b3BpYzIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZiY2JmOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+U3ViIFRvcGljIDI8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keT4KLTxoMT5TdWIgVG9waWMgMjwvaDE+Ci1QbGVhc2UgZW50ZXIgeW91ciB0ZXh0IGhlcmUuCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjg0YmQ2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9zYW1wbGVzL3NhbXBsZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+WFNMIFRvb2xpbmcgU2FtcGxlczwvdGl0bGU+PGxpbmsgaHJlZj0iYm9vay5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjxsaW5rIGhyZWY9Ii4uL2Jvb2suY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43NC4wIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29scyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InByZXYiIGhyZWY9Ii4uL2dlbmVyYWwvZ2VuZXJhbC5odG1sIiB0aXRsZT0iR2VuZXJhbCI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi9sZWdhbC5odG1sIiB0aXRsZT0iTm90aWNlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48ZGl2IGNsYXNzPSJjaGFwdGVyIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iTjEwNDUwIj48L2E+WFNMIFRvb2xpbmcgU2FtcGxlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0idG9jIj48cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+PHVsPjxsaT48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0ic2FtcGxlcy5odG1sI0VjbGlwc2VIZWxwIj5FY2xpcHNlIEhlbHA8L2E+PC9zcGFuPjx1bD48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InNhbXBsZXMuaHRtbCNEb2Nib29rRWNsaXBzZUhlbHAiPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERvY2Jvb2sgYW5kIFhTTCBUb29sczwvYT48L3NwYW4+PC9saT48bGk+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InNhbXBsZXMuaHRtbCNESVRBRWNsaXBzZUhlbHAiPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERJVEEgYW5kIFhTTCBUb29sczwvYT48L3NwYW4+PC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj48cD5UaGlzIHNlY3Rpb24gY29udGFpbnMgc2V2ZXJhbCBzYW1wbGVzIGFuZCByZWZlcmVuY2VzIHRvIHNhbXBsZSBwcm9qZWN0cy48L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iRWNsaXBzZUhlbHAiPjwvYT5FY2xpcHNlIEhlbHA8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPjwvcD48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iRG9jYm9va0VjbGlwc2VIZWxwIj48L2E+Q3JlYXRpbmcgRWNsaXBzZSBIZWxwIHdpdGggRG9jYm9vayBhbmQgWFNMIFRvb2xzPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLQkJCQlUaGlzIHR1dG9yaWFsIGFzc3VtZXMgdGhhdCB5b3UgaGF2ZSBrbm93bGVkZ2Ugb2YgRG9jYm9vaywgQU5ULCBhbmQgdGhlCi0JCQkJYWJpbGl0eSB0byBzZXR1cCBBTlQgYnVpbGQgc2NyaXB0cy4KLQkJCTwvcD48cD4KLQkJCQlUbyBEbyB3cml0ZSB1cCB0aGUgcmVzdCBvZiB0aGUgdHV0b3JpYWwuCi0JCQk8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkRJVEFFY2xpcHNlSGVscCI+PC9hPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERJVEEgYW5kIFhTTCBUb29sczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0JCQkJVGhpcyB0dXRvcmlhbCBhc3N1bWVzIHRoYXQgeW91IGhhdmUga25vd2xlZGdlIG9mIERJVEEsIEFOVCwgYW5kIHRoZQotCQkJCWFiaWxpdHkgdG8gc2V0dXAgQU5UIGJ1aWxkIHNjcmlwdHMuCi0JCQk8L3A+PHA+Ci0JCQkJVG8gRG8gd3JpdGUgdXAgdGhlIHJlc3Qgb2YgdGhlIHR1dG9yaWFsLgotCQkJPC9wPjwvZGl2PjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZWY1YjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MKLXZlbmRvck5hbWUgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotcGx1Z2luTmFtZSA9IFhTTCBVc2VyIERvY3VtZW50YXRpb24gKEluY3ViYXRpbmcpCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNWE2MWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBwcmltYXJ5PSJ0cnVlIiBmaWxlPSJ0b2MueG1sIj48L3RvYz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvdG9jLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRkNWI5Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08dG9jIHRvcGljPSJodG1sL2luZGV4Lmh0bWwiIGxhYmVsPSJYU0wgVG9vbHMgVXNlciBEb2N1bWVudGF0aW9uIj48dG9waWMgaHJlZj0iaHRtbC9pbnRyb2R1Y3Rpb24vZ2V0dGluZ3N0YXJ0ZWQuaHRtbCIgbGFiZWw9IkdldHRpbmcgU3RhcnRlZCI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9jb25jZXB0cy9jb25jZXB0cy5odG1sIiBsYWJlbD0iWFNMVCBDb25jZXB0cyI+PHRvcGljIGhyZWY9Imh0bWwvY29uY2VwdHMvY29uY2VwdHMuaHRtbCNSZXN1Y2luZ1hTTFQiIGxhYmVsPSJSZXNjdWluZyBYU0xUIEZyb20gTmljaGUgU3RhdHVzIj48dG9waWMgaHJlZj0iaHRtbC9jb25jZXB0cy9jb25jZXB0cy5odG1sI04xMDA0MyIgbGFiZWw9IlRoZSBQcm9ibGVtIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NvbmNlcHRzL2NvbmNlcHRzLmh0bWwjTjEwMDY5IiBsYWJlbD0iVGhlIFNvbHV0aW9uIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2NvbmNlcHRzL2NvbmNlcHRzLmh0bWwjTjEwMDkwIiBsYWJlbD0iUXVlcmllcyI+PHRvcGljIGhyZWY9Imh0bWwvY29uY2VwdHMvY29uY2VwdHMuaHRtbCNOMTAwOUUiIGxhYmVsPSJ4c2w6Zm9yLWVhY2giPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY29uY2VwdHMvY29uY2VwdHMuaHRtbCNOMTAwQUEiIGxhYmVsPSJ4c2w6aWYiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY29uY2VwdHMvY29uY2VwdHMuaHRtbCNOMTAwQjQiIGxhYmVsPSJ4c2w6Y2hvb3NlIj48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY29uY2VwdHMvY29uY2VwdHMuaHRtbCNOMTAwQkUiIGxhYmVsPSJDb25jbHVzaW9uIj48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvY29uY2VwdHMvcmVzb3VyY2VzLmh0bWwiIGxhYmVsPSJSZXNvdXJjZXMiPjwvdG9waWM+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9lZGl0b3IveHNsZWRpdG9yLmh0bWwiIGxhYmVsPSJYU0wgRWRpdGluZyI+PHRvcGljIGhyZWY9Imh0bWwvZWRpdG9yL3hzbGVkaXRvci5odG1sI1ZhbGlkYXRpb24iIGxhYmVsPSJWYWxpZGF0aW9uIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdC5odG1sIiBsYWJlbD0iQ29udGVudCBBc3Npc3QiPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdC5odG1sI2VkX1hTTFByb3Bvc2FscyIgbGFiZWw9IlhTTFQgRWxlbWVudCBQcm9wb3NhbHMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X3NlbGVjdHRlc3QuaHRtbCIgbGFiZWw9IlNlbGVjdCwgVGVzdCwgYW5kIE1hdGNoIEF0dHJpYnV0ZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0X2V4Y2x1ZGUuaHRtbCIgbGFiZWw9IkV4Y2x1ZGUtUmVzdWx0LVByZWZpeGVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9tb2RlYXNzaXN0Lmh0bWwiIGxhYmVsPSJNb2RlIGF0dHJpYnV0ZSBhc3Npc3RhbmNlIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9uYW1lZHRlbXBsYXRlLmh0bWwiIGxhYmVsPSJOYW1lZCBUZW1wbGF0ZSBBc3Npc3RhbmNlIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfY29udGVudGFzc2lzdF9jYWxsdGVtcGxhdGUuaHRtbCIgbGFiZWw9IkNhbGwtVGVtcGxhdGUgQXNzaXN0YW5jZSI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3RfaW5jbHVkZS5odG1sIiBsYWJlbD0iSW5jbHVkZSBhbmQgSW1wb3J0IGhyZWYgQXNzaXN0YW5jZSI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwiIGxhYmVsPSJUZW1wbGF0ZXMiPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwjTjEwMUUyIiBsYWJlbD0iWFBhdGggVGVtcGxhdGVzIj48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb2xvcmluZy5odG1sIiBsYWJlbD0iWFNMVCBTeW50YXggQ29sb3JpbmciPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvZWRpdG9yL3hzbGVkaXRvcl9tYXJrZXJzLmh0bWwiIGxhYmVsPSJYU0xUIE1hcmtlcnMgYW5kIEFubm90YXRpb25zIj48dG9waWMgaHJlZj0iaHRtbC9lZGl0b3IveHNsZWRpdG9yX21hcmtlcnMuaHRtbCN4c2x0T3ZlclJpZGUiIGxhYmVsPSJUZW1wbGF0ZSBPdmVycmlkZSI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiIGxhYmVsPSJYU0wgRGVidWdnaW5nIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiIGxhYmVsPSJOYXZpZ2F0aW9uIj48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvbGF1bmNoaW5nL2xhdW5jaGluZy5odG1sIiBsYWJlbD0iWFNMIExhdW5jaGluZyBhbmQgRGVidWdnaW5nIj48dG9waWMgaHJlZj0iaHRtbC9sYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoIiBsYWJlbD0iWFNMIExhdW5jaGluZyI+PHRvcGljIGhyZWY9Imh0bWwvbGF1bmNoaW5nL2xhdW5jaGluZy5odG1sI1hTTExhdW5jaENvbmZpZyIgbGFiZWw9IkxhdW5jaCBDb25maWd1cmF0aW9uIj48dG9waWMgaHJlZj0iaHRtbC9sYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoX01haW4iIGxhYmVsPSJNYWluIFRhYiI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9sYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwjWFNMTGF1bmNoX091dHB1dCIgbGFiZWw9Ik91dHB1dCBUYWIiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvbGF1bmNoaW5nL2xhdW5jaGluZy5odG1sI1hTTExhdW5jaF9Qcm9jZXNzb3IiIGxhYmVsPSJQcm9jZXNzb3IgVGFiIj48L3RvcGljPjwvdG9waWM+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9sYXVuY2hpbmcvZGVidWdnaW5nLmh0bWwiIGxhYmVsPSJYU0xUIERlYnVnZ2luZyI+PHRvcGljIGhyZWY9Imh0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZy5odG1sI0RlYnVnR2V0dGluZ1N0YXJ0ZWQiIGxhYmVsPSJTdGFydGluZyBhIERlYnVnIFNlc3Npb24iPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZ19jb21tb24uaHRtbCIgbGFiZWw9IkNvbW1vbiBEZWJ1Z2dpbmcgT3BlcmF0aW9ucyI+PHRvcGljIGhyZWY9Imh0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZ19jb21tb24uaHRtbCNYU0xEZWJ1Z1Jlc3VsdFZpZXciIGxhYmVsPSJSZXN1bHQgVmlldyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9sYXVuY2hpbmcvZGVidWdnaW5nX3ZhcmlhYmxlc3ZpZXcuaHRtbCIgbGFiZWw9IlZhcmlhYmxlcyBWaWV3Ij48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvbGF1bmNoaW5nL2RlYnVnZ2luZ19wcm9jZXNzb3JzLmh0bWwiIGxhYmVsPSJYU0xUIFByb2Nlc3NvciBTcGVjaWZpYyBTdXBwb3J0Ij48dG9waWMgaHJlZj0iaHRtbC9sYXVuY2hpbmcvZGVidWdnaW5nX3Byb2Nlc3NvcnMuaHRtbCNYU0xEZWJ1Z1hhbGFuIiBsYWJlbD0iWFNMIERlYnVnZ2luZyB3aXRoIFhhbGFuIj48L3RvcGljPjwvdG9waWM+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLmh0bWwiIGxhYmVsPSJYU0wgVG9vbHMgUHJlZmVyZW5jZXMiPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLmh0bWwjWFNMRmVhdHVyZXMiIGxhYmVsPSJGZWF0dXJlcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9wcmVmZXJlbmNlcy94c2xwcm9jZXNzb3JzLmh0bWwiIGxhYmVsPSJJbnN0YWxsZWQgUHJvY2Vzc29ycyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9wcmVmZXJlbmNlcy94c2xvdXRwdXRwcm9wZXJ0aWVzLmh0bWwiIGxhYmVsPSJPdXRwdXQgUHJvcGVydGllcyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9wcmVmZXJlbmNlcy94cGF0aHRlbXBsYXRlcy5odG1sIiBsYWJlbD0iWFBhdGggVGVtcGxhdGVzIj48dG9waWMgaHJlZj0iaHRtbC9wcmVmZXJlbmNlcy94cGF0aHRlbXBsYXRlcy5odG1sI1hQYXRoVGVtcGxhdGVOZXciIGxhYmVsPSJDcmVhdGluZyBOZXcgVGVtcGxhdGVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hwYXRoaW1wb3J0Lmh0bWwiIGxhYmVsPSJJbXBvcnQgWFBhdGggVGVtcGxhdGVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hwYXRoZXhwb3J0Lmh0bWwiIGxhYmVsPSJJbXBvcnQgWFBhdGggVGVtcGxhdGVzIj48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvcHJlZmVyZW5jZXMvdmFsaWRhdGlvbi5odG1sIiBsYWJlbD0iUHJvamVjdCBWYWxpZGF0aW9uIFByZWZlcmVuY2VzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3N5bnRheENvbG9yaW5nLmh0bWwiIGxhYmVsPSJYU0xUIFN5bnRheCBDb2xvcmluZyI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2dlbmVyYWwvZ2VuZXJhbC5odG1sIiBsYWJlbD0iR2VuZXJhbCI+PHRvcGljIGhyZWY9Imh0bWwvZ2VuZXJhbC9nZW5lcmFsLmh0bWwjWEluY2x1ZGUiIGxhYmVsPSJYSW5jbHVkZSI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sIiBsYWJlbD0iWFNMIFRvb2xpbmcgU2FtcGxlcyI+PHRvcGljIGhyZWY9Imh0bWwvc2FtcGxlcy9zYW1wbGVzLmh0bWwjRWNsaXBzZUhlbHAiIGxhYmVsPSJFY2xpcHNlIEhlbHAiPjx0b3BpYyBocmVmPSJodG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sI0RvY2Jvb2tFY2xpcHNlSGVscCIgbGFiZWw9IkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERvY2Jvb2sgYW5kIFhTTCBUb29scyI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9zYW1wbGVzL3NhbXBsZXMuaHRtbCNESVRBRWNsaXBzZUhlbHAiIGxhYmVsPSJDcmVhdGluZyBFY2xpcHNlIEhlbHAgd2l0aCBESVRBIGFuZCBYU0wgVG9vbHMiPjwvdG9waWM+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2xlZ2FsLmh0bWwiIGxhYmVsPSJOb3RpY2VzIj48L3RvcGljPjwvdG9jPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uY2xhc3NwYXRoIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmRmMjlkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb248L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzZlZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1NhdCBKdW4gMjEgMTg6MjI6MzAgR01ULTA1OjAwIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTE1M2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNTYXQgQXVnIDAyIDA4OjQ1OjM5IEdNVC0wNTowMCAyMDA4Ci1ERUxFR0FURVNfUFJFRkVSRU5DRT1kZWxlZ2F0ZVZhbGlkYXRvckxpc3QKLVVTRVJfQlVJTERfUFJFRkVSRU5DRT1lbmFibGVkQnVpbGRWYWxpZGF0b3JMaXN0Ci1VU0VSX01BTlVBTF9QUkVGRVJFTkNFPWVuYWJsZWRNYW51YWxWYWxpZGF0b3JMaXN0Ci1VU0VSX1BSRUZFUkVOQ0U9b3ZlcnJpZGVHbG9iYWxQcmVmZXJlbmNlc3RydWVkaXNhYmxlQWxsVmFsaWRhdGlvbmZhbHNldmVyc2lvbjEuMi4wLnYyMDA4MDYwNTE0MDIKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vdmVycmlkZT10cnVlCi1zdXNwZW5kPWZhbHNlCi12YWxzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5KU1BCYXRjaFZhbGlkYXRvci9nbG9iYWw9RkYwMQotdmFscy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuSlNQQ29udGVudFZhbGlkYXRvci9nbG9iYWw9RkYwMQotdmFscy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkRFREVmFsaWRhdG9yL2dsb2JhbD1GRjAxCi12YWxzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLkhUTUxWYWxpZGF0b3IvZ2xvYmFsPUZGMDEKLXZhbHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsL2dsb2JhbD1GRjAyMTU4b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvcgotdmFscy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sL2dsb2JhbD1UVDAzCi12YWxzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS54c2QvZ2xvYmFsPUZGMDIxNjJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcgotdmFscy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUueHNsL2dsb2JhbD1UVDAyCi12Zi52ZXJzaW9uPTMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkZDMyNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24uQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmhlbHAKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vUmVhZE1lLnR4dCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9SZWFkTWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmI1OTFiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9SZWFkTWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1UbyBidWlsZCB0aGUgU0RLIGRvY3VtZW50YXRpb24sIHlvdSBuZWVkIHRoZSBEb2NsZXQgSkVMRG9jTGV0Lmphci4KLQotVGhpcyBjYW4gYmUgcmV0cmlldmVkIGZyb206Ci0KLWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvamVsZG9jbGV0Ci0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjY2ZjOTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBidWlsZC54bWwsXAotICAgICAgICAgICAgICAgdG9jLnhtbCxcCi0gICAgICAgICAgICAgICBkb2MvaHRtbC8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBiaW4vLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHRvY0V4dGVuc2lvbi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9idWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmU2NzAxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICBKdWwgMjEsIDIwMDggNjo0NjowMiBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgU0RLIERvY3VtZW50YXRpb24gICAgCi0gICAgIEJ1aWxkcyBTREsgVE9DIERvY3VtZW50YXRpb24gdXNpbmcgSkVMRG9jbGV0LgotICAgICAgICAgICAgICAgICAgIAotICAgICBkY2FydmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHByb2plY3QgbmFtZT0iU0RLIERvY3VtZW50YXRpb24iIGRlZmF1bHQ9ImRlZmF1bHQiPgotICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIEJ1aWxkcyBTREsgVE9DIERvY3VtZW50YXRpb24gdXNpbmcgSkVMRG9jbGV0LgotICAgIDwvZGVzY3JpcHRpb24+Ci0JCi0JPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgbG9jYXRpb249Ii4iLz4KLQk8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlbG9jIiBsb2NhdGlvbj0iLi4iLz4KLQotICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAgICAgIHRhcmdldDogZGVmYXVsdCAgICAgICAgICAgICAgCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJkZWZhdWx0IiBkZXNjcmlwdGlvbj0iQnVpbGRzIFNESyBUT0MgRG9jdW1lbnRhdGlvbiB1c2luZyBKRUxEb2NsZXQuIj4KLQotICAJICA8amF2YWRvYyBkZXN0ZGlyPSJkb2MiIHBhY2thZ2U9InRydWUiIGRvY2xldHBhdGg9IiR7d29ya3NwYWNlfS9saWIvamVsZG9jbGV0LmphciI+Ci0gIAkgIAkgPGZpbGVzZXQgZGlyPSIke3dvcmtzcGFjZWxvY30iPgotICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjLyoqLyouamF2YSIvPgotICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS8qKi8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS9zcmMvKiovKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMtZGVidWdnZXIvKiovKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMtaW52b2tlci8qKi8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvKiovKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvKiovKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjLXhwYXRoLyoqLyouamF2YSIvPgotICAJICAJIDwvZmlsZXNldD4KLSAgCSAgICAgPGRvY2xldCBuYW1lPSJjb20uamVsZG9jbGV0LkpFTERvY2xldCIvPgotICAJICA8L2phdmFkb2M+Ci0gICAgCQotICAgICA8eHNsdCBiYXNlZGlyPSIuIiBzdHlsZT0iZG9jL2plbHRvaHRtbC54c2wiIGluPSJkb2MvamVsLnhtbCIgb3V0PSJkb2MvaHRtbC9kZWxldGVtZS5odG1sIj4KLSAgCQk8ZmFjdG9yeSBuYW1lPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIj4KLSAgCQkJPGF0dHJpYnV0ZSBuYW1lPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vZmVhdHVyZXMvb3B0aW1pemUiIHZhbHVlPSJ0cnVlIi8+Ci0gIAkJPC9mYWN0b3J5PgotICAgICA8L3hzbHQ+Ci0gICAgCQotICAgIAkKLSAgICAgPHhzbHQgc3R5bGU9ImRvYy9qZWx0b3RvYy54c2wiIGluPSJkb2MvamVsLnhtbCIgb3V0PSJ0b2MueG1sIiBkZXN0ZGlyPSIuIj4KLSAgCQk8ZmFjdG9yeSBuYW1lPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIj4KLSAgCQkJPGF0dHJpYnV0ZSBuYW1lPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vZmVhdHVyZXMvb3B0aW1pemUiIHZhbHVlPSJ0cnVlIi8+Ci0gIAkJPC9mYWN0b3J5PgotICAgICAJPHBhcmFtIG5hbWU9InNka25hbWUiIGV4cHJlc3Npb249IlhTTCBUb29scyBTREsgRG9jdW1lbnRhdGlvbiIvPgotICAgICA8L3hzbHQ+Ci0gICAgCQotICAgIDwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iRG9jQ2hlY2siPgotCSAgCSAgPGphdmFkb2MgZGVzdGRpcj0iZG9jL2RvY2NoZWNrIiBwYWNrYWdlPSJ0cnVlIiBkb2NsZXRwYXRoPSIke3dvcmtzcGFjZX0vbGliL2RvY2NoZWNrLmphciI+Ci0JICAJICAJIDxmaWxlc2V0IGRpcj0iJHt3b3Jrc3BhY2Vsb2N9Ij4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcvKiovKi5qYXZhIi8+Ci0JICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvKiovKi5qYXZhIi8+Ci0JICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjLXhwYXRoL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvKi5qYXZhIi8+Ci0JICAJICAJIDwvZmlsZXNldD4KLQkgIAkgICAgIDxkb2NsZXQgbmFtZT0iY29tLnN1bi50b29scy5kb2NsZXRzLmRvY2NoZWNrLkRvY0NoZWNrIj4KLQkgIAkgICAgIAk8cGFyYW0gbmFtZT0iLWV4ZWNEZXB0aCIgdmFsdWU9IjIiLz4KLQkgIAkgIAkgPC9kb2NsZXQ+Ci0JICAJICA8L2phdmFkb2M+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJFeHRlbnNpb25Qb2ludERvYyI+Ci0JCTxwZGUuY29udmVydFNjaGVtYVRvSFRNTCBtYW5pZmVzdD0iLi4vb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wbHVnaW4ueG1sIgotCQkJICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb249IiR7d29ya3NwYWNlfS9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQiCi0JCS8+Ci0JCTxwZGUuY29udmVydFNjaGVtYVRvSFRNTCBtYW5pZmVzdD0iLi4vb3JnLmVjbGlwc2Uud3N0LnhzbC51aS9wbHVnaW4ueG1sIgotCQkJICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb249IiR7d29ya3NwYWNlfS9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQiCi0JCS8+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4NzIyZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotZG9jY2hlY2sKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIuWFNMU291cmNlUGFyc2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5PdXRwdXRQcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVmlld2VyRmlsdGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5hcmd1bWVudF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFBhdGhUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvclhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuWFNMVFNvdXJjZUxvb2t1cFBhcnRpY2lwYW50LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuRGVidWdnZXJSZWdpc3RyeS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xBdHRyaWJ1dGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMub3V0cHV0Lk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uUGFyYW1ldGVyVmlld2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5JbnN0YWxsU3RhbmRpbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIudmFyaWFibGVfcmVmZXJlbmNlX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWFNMTW9kZWxMb2FkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V2l6YXJkQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5tb2RlbC5YU0xNb2RlbFByZXNlbnRhdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkRlYnVnZ2VyRGVzY3JpcHRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlhTTFRTb3VyY2VMb29rdXBEaXJlY3Rvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YU0xEb2N1bWVudExvYWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LklYU0xQYXJ0aXRpb25zLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFkZFBhcmFtZXRlckFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5SZW1vdmVBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLmZvcm1hdHRlci5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5mb3JtYXR0ZXIuRk9Gb3JtYXR0ZXJUYWIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIucmVsYXRpdmVfbG9jYXRpb25fcGF0aF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMuZm9ybWF0dGVyLlhTTEZPQ29tYm9CbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlhTTE1haW5UYWIueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnMuWFBhdGhTZXBhcmF0b3JSZWdpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5Lkludm9rZXJSZWdpc3RyeVJlYWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHlwZWRWYWx1ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblJvb3RTdHlsZUZyYW1lLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhQYXRoVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEh5cGVybGlua0RldGVjdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5wYXRoX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLk91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFNMUGFyc2VyUmVnaW9uRmFjdG9yeS54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguaW50ZXJuYWwudWkudmlld3MuSkZhY2VOb2RlTGFiZWxQcm92aWRlclhQYXRoLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMRGVidWdFbGVtZW50LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnVuaW9uX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5Qcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmVxdWFsaXR5X2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudC5YSW5jbHVkZVRhc2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLm1vZGVsLlhTTEJyZWFrcG9pbnRBZGFwdGVyRmFjdG9yeS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuUHJvY2Vzc29yRGV0YWlsc0RpYWxvZy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuZmlsdGVyX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50cy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcuaW50ZXJuYWwudXRpbC5YU0xEZWJ1Z1BsdWdpbkltYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DdXN0b21UZW1wbGF0ZVByb3Bvc2FsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuUHJvY2Vzc29yUmVnaXN0cnlSZWFkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTFRUYWJHcm91cC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5LlByb2Nlc3NvclJlZ2lzdHJ5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFkZFdvcmtzcGFjZUZpbGVBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLkZlYXR1cmVzQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMRWxlbWVudC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0TW9kZWwueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuSW1wb3J0LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5NYWluUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnNwZWNpYWxfc3RlcF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmFiYnJfYXhpc19zcGVjaWZpZXJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLlRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xMYXVuY2hTaG9ydGN1dC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuQWRkUHJvY2Vzc29yRGlhbG9nLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci5YUGF0aFBhcnNlckxleGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5pbnRlcm5hbC51aS52aWV3cy5YUGF0aENvbXB1dGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5mdW5jdGlvbl9jYWxsX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuWFBhdGhVSU1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblByaW50VHJhY2VMaXN0ZW5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlV0aWxzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLkluY2x1ZGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmFic29sdXRlX2xvY2F0aW9uX3BhdGhfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmludGVybmFsLnVpLnZpZXdzLlhQYXRoVmlldy54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhVSU1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dC5PdXRwdXRGaWxlQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudXRpbC5YUGF0aFBsdWdpbkltYWdlSGVscGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMRGVidWdUYXJnZXQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuSVByb2Nlc3Nvckludm9rZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuVmFyaWFibGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLkFic3RyYWN0VGFibGVCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5Qcm9jZXNzb3JNZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuUGlwZWxpbmVEZWZpbml0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uSVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMub3V0cHV0Lk91dHB1dFRhYi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuQ3JlYXRpb25FeGNlcHRpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLlByb2Nlc3NvckRlc2NyaXB0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuTXVsdGlwbGVJbnB1dERpYWxvZy5GaWVsZFN1bW1hcnkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5EZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW4ueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmludGVybmFsLnVpLnZpZXdzLkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlclhQYXRoLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudXRpbC5YUGF0aFBsdWdpbkltYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIubGl0ZXJhbF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblRyYWNlTGlzdGVuZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNMRmlsZVdpemFyZERlbGVnYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFic3RyYWN0U3R5bGVzaGVldEFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3RFRERmlsZVdpemFyZERlbGVnYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljay5YU0xEb3VibGVDbGlja1N0cmF0ZWd5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5yZWxhdGlvbmFsX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvbk1lc3NhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhQYXRoUHJlZmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGwueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5NYWluVGFiTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMTm9kZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRMYWJlbFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0Lk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFByb3BlcnRpZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1Zy54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuSmFyTGFiZWxQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlBhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIueG1sCi1qZWwueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuUGx1Z2luUHJvY2Vzc29ySmFyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5wcmltYXJ5X2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuWFNMUHJvcGVydHlUZXN0ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlJlc291cmNlU2VsZWN0aW9uQmxvY2suV2lkZ2V0TGlzdGVuZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLm51bWJlcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMTWFya3VwVmFsaWRhdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYnJlYWtwb2ludC5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWGFsYW5YU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMuZm9ybWF0dGVyLlJlbmRlcmVyVGFiTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTENvbnNvbGVMaW5lVHJhY2tlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLklQcm9jZXNzb3JJbnZva2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMuZm9ybWF0dGVyLlJlbmRlcmVyQ29uZmlndXJhdGlvbkJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uSW5wdXRGaWxlQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLklYU0xEZWJ1Z2dlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLklGZWF0dXJlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5tb2RlbC5YU0xMaW5lQnJlYWtwb2ludEFkYXB0ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuUHJvY2Vzc29yUHJlZmVyZW5jZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkRlYnVnUnVubmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5pX3JlbGF0aXZlX2xvY2F0aW9uX3BhdGhfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRmlsZVV0aWwueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLlhTTFByb2Nlc3NvclRhYi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wYXJzZXIuWFBhdGhQYXJzZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLlByb2Nlc3NvckxpYnJhcnlCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5QYXJhbWV0ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucmVzb2x2ZXIuVVJJUmVzb2x2ZXJCbG9jazIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xMaW5lQnJlYWtwb2ludC54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVJZHNYUGF0aC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5yZXNvbHZlci5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5LkFic3RyYWN0UmVnaXN0cnlSZWFkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci54cGF0aF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLkZlYXR1cmVzQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5SZW1vdmVQYXJhbWV0ZXJBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuTXVsdGlwbGVJbnB1dERpYWxvZy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVXaXphcmQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5JWFNMRGVidWdUYXJnZXQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5UcmFuc2Zvcm1zQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuSkFYUFNBWFByb2Nlc3Nvckludm9rZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5PdXRwdXRQcm9wZXJ0eS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhQYXRoUmVnaW9uQ29udGV4dC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5Db250cm9sQWNjZXNzaWJsZUxpc3RlbmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5PdXRwdXRCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm0ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkRlYnVnQ29uc3RhbnRzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmFiYnJfc3RlcF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoQXR0cmlidXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5sb2NhdGlvbl9wYXRoX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRWaWV3ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlZhcmlhYmxlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFNMVFhQYXRoSGVscGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnJlc29sdmVyLldvcmtpbmdEaXJlY3RvcnlCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5DYWxsVGVtcGxhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuUmVzb2x2ZXJFeHRlbnNpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlBhcmFtZXRlcnNCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhWaWV3UGx1Z2luLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuUHJlZmVyZW5jZVV0aWwueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5JWFNMQ29uc3RhbnRzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuSURlYnVnZ2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uUGFyYW1ldGVyc0xhYmVsUHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLm11bHRfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5GZWF0dXJlUHJlZmVyZW5jZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5JT3V0cHV0UHJvcGVydHkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xUaHJlYWQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uUmVwb3J0LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEZlYXR1cmVzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5GZWF0dXJlc1ByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01Ob2RlTGFiZWxQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlByb2Nlc3NvclR5cGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMRXJyb3JMaXN0ZW5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucmVzb2x2ZXIuVVJJUmVzb2x2ZXJCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BYnN0cmFjdFBhcmFtZXRlckFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hIZWxwZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5Tb3VyY2VGaWxlSHlwZXJsaW5rLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMVmFyaWFibGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xWYWx1ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFN0YWNrRnJhbWUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuVGVtcGxhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLkJhc2VQcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIucHJlZGljYXRlX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlLlhJbmNsdWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVHJlZUNvbnRlbnRQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQuT3V0cHV0UHJvcGVydGllc0Jsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci51bmFyeV9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5Lkludm9rZXJSZWdpc3RyeS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5Nb3ZlVXBBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlRyYW5zZm9ybURlZmluaXRpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLk9wZW5EaWFsb2dBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmFkZGl0aXZlX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5zdGVwX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYXJnX2xpc3RfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucGVyc3BlY3RpdmUuWE1MUGVyc3BlY3RpdmVGYWN0b3J5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5oYW5kbGVycy5PcGVuRGVjbGFyYXRpb25IYW5kbGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFBpcGVsaW5lLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFkZEV4dGVybmFsRmlsZUFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlByb2Nlc3Nvckphci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTFRSdW50aW1lLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldENvbnRlbnRQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoTGV4ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlJlc291cmNlU2VsZWN0aW9uQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLkphckNvbnRlbnRQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQWJzdHJhY3REZWJ1Z2dlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BY3Rpb25NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlhTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYnJlYWtwb2ludC5YU0xCcmVha3BvaW50UHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuTW92ZURvd25BY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLlByb2Nlc3NvckJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguaW50ZXJuYWwudWkudmlld3MuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnByZWRpY2F0ZV9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmludGVybmFsLnVpLnZpZXdzLlhQYXRoVmlld0FjdGlvbnMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLklQcm9jZXNzb3JKYXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLm9yX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLk11bHRpcGxlSW5wdXREaWFsb2cuVmFsaWRhdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5heGlzX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSUNvbnN0YW50cy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkZlYXR1cmUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkJyZWFrUG9pbnQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5Qcm9jZXNzb3JJbnN0YWxsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5hbmRfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuTWFpbi54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NWEyYTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1kZWxldGVtZS5odG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfZGVidWdnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19kZWJ1Z2dlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTk2ZDNlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19kZWJ1Z2dlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotPEhFQUQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+WFNMVCBEZWJ1Z2dlcjwvdGl0bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9ib29rLmNzcyIpOzwvc3R5bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9zY2hlbWEuY3NzIik7PC9zdHlsZT4KLTwvSEVBRD4KLTxCT0RZPgotPEgxIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+WFNMVCBEZWJ1Z2dlcjwvSDE+Ci08cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5JZGVudGlmaWVyOiA8L2g2Pm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAuZGVidWdnZXI8cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5EZXNjcmlwdGlvbjogPC9oNj5Db250cmlidXRlIGEgZGVidWdnZXIgZm9yIGEgcGFydGljdWxhciBKQVhQIHByb2Nlc3NvciB0eXBlIChlLmcuIFNheG9uKS4gVGhlIGV4dGVuc2lvbiBwb2ludCBwcmltYXJpbHkgZGVmaW5lcyB0aGUgY2xhc3NwYXRoIGFuZCB0cmFuc2Zvcm1lciBmYWN0b3J5IHRvIGJlIHVzZWQgd2hlbiBkZWJ1Z2dpbmcuPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+Q29uZmlndXJhdGlvbiBNYXJrdXA6PC9oNj4KLTxwPjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZXh0ZW5zaW9uIj5leHRlbnNpb248L2E+ICg8YSBocmVmPSIjZS5kZWJ1Z2dlciI+ZGVidWdnZXI8L2E+KykmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZXh0ZW5zaW9uPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+cG9pbnQmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmRlYnVnZ2VyIj5kZWJ1Z2dlcjwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZGVidWdnZXI8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmNsYXNzcGF0aCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wcm9jZXNzb3JUeXBlSWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Y2xhc3NOYW1lJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzJm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPiZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotQSBkZWJ1Z2dlciBmb3IgYSBwcm9jZXNzb3IgdHlwZTwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmlkPC9iPiAtIEEgdW5pcXVlIGlkIGZvciB0aGlzIGRlYnVnZ2VyPC9saT4KLTxsaT48Yj5uYW1lPC9iPiAtIEEgbmFtZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIFVJPC9saT4KLTxsaT48Yj5jbGFzc3BhdGg8L2I+IC0gQSAnOyctc2VwYXJhdGVkIGNsYXNzcGF0aCByZXF1aXJlZCB0byBydW4gdGhlIGRlYnVnZ2VyIChpbiBhZGRpdGlvbiB0byB0aGF0IGFscmVhZHkgYWRkZWQgYnkgdGhlIHByb2Nlc3NvciBpdHNlbGYpLjwvbGk+Ci08bGk+PGI+cHJvY2Vzc29yVHlwZUlkPC9iPiAtIFRoZSBwcm9jZXNzb3IgdHlwZSB0aGF0IHRoaXMgZGVidWdnZXIgd29ya3Mgd2l0aDwvbGk+Ci08bGk+PGI+Y2xhc3NOYW1lPC9iPiAtIEEgZnVsbHktcXVhbGlmaWVkIGNsYXNzIHRoYXQgaW1wbGVtZW50IHRoZSBJWFNMRGVidWdnZXIgaW50ZXJmYWNlLiBJdCBpcyBlYXNpZXIgdG8gZXh0ZW5kIEFic3RyYWN0WFNMRGVidWdnZXIuPC9saT4KLTxsaT48Yj50cmFuc2Zvcm1lckZhY3RvcnlDbGFzczwvYj4gLSBUaGUgZnVsbHktcXVhbGlmaWVkIGNsYXNzIG5hbWUgb2YgdGhlIHRyYW5zZm9ybWVyIGZhY3RvcnkgdG8gdXNlIGZvciBkZWJ1Z2dpbmcuIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIHRyYW5zZm9ybWVyIGZhY3RvcmllcyBiZWxvbmdpbmcgdG8gdGhlIHByb2Nlc3NvciB0eXBlLjwvbGk+Ci08L3VsPgotPGJyPjxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkV4YW1wbGVzOiA8L2g2PjxwcmUgY2xhc3M9IkV4YW1wbGUiPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5kZWJ1Z2dlciZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPiZndDsKLSAgICAgICZsdDtkZWJ1Z2dlcgotICAgICAgICAgICAgY2xhc3NOYW1lPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXImcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGNsYXNzcGF0aD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7JHtlY2xpcHNlX29yYml0Om9yZy5lY2xpcHNlLndzdC54c2wueGFsYW59JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBpZD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlciZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgbmFtZT08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7WGFsYW4gMi41LjEgb3IgZ3JlYXRlciZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIHRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Jmd0OwotICAgICAgJmx0Oy9kZWJ1Z2dlciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotPC9zcGFuPjwvcHJlPgotPHA+PC9wPgotCi08YnI+Ci08cCBjbGFzcz0ibm90ZSBTY2hlbWFDb3B5cmlnaHQiPgotQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gPGEgaHJlZj0iaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsiPmh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrPC9hPi48YnI+Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgPGEKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4KLQotPC9wPgotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX2ludm9rZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX2ludm9rZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTljNDQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19pbnZva2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPlhTTFQgUHJvY2Vzc29yIEludm9rZXI8L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vYm9vay5jc3MiKTs8L3N0eWxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vc2NoZW1hLmNzcyIpOzwvc3R5bGU+Ci08L0hFQUQ+Ci08Qk9EWT4KLTxIMSBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPlhTTFQgUHJvY2Vzc29yIEludm9rZXI8L0gxPgotPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzk5MDAwMDsgcGFkZGluZzogNXB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiByZWQ7Ij5UaGlzIGV4dGVuc2lvbiBwb2ludCBpcyBpbnRlcm5hbDwvZGl2PgotPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+SWRlbnRpZmllcjogPC9oNj5vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwLmludm9rZTxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkRlc2NyaXB0aW9uOiA8L2g2PjxiPlRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuPC9iPjxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkNvbmZpZ3VyYXRpb24gTWFya3VwOjwvaDY+Ci08cD48L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmV4dGVuc2lvbiI+ZXh0ZW5zaW9uPC9hPiAoPGEgaHJlZj0iI2UuaW52b2tlciI+aW52b2tlcjwvYT4pJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGV4dGVuc2lvbjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnBvaW50Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bmFtZSZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPiZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5pbnZva2VyIj5pbnZva2VyPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBpbnZva2VyPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Y2xhc3MmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Y2xhc3NwYXRoJm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPiZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5pZDwvYj4gLSBVbmlxdWUgaWQgZm9yIHRoaXMgaW52b2tlcjwvbGk+Ci08bGk+PGI+Y2xhc3M8L2I+IC0gQSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIElQcm9jZXNzb3JJbnZva2VyIGludGVyZmFjZTwvbGk+Ci08bGk+PGI+Y2xhc3NwYXRoPC9iPiAtIEEgc2VtaS1jb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBqYXJzIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBjb250cmlidXRpbmcgcGx1Z2luLiBPbmUgb2YgdGhlIGphcnMgbXVzdCBjb250YWluIHRoZSBJbnZva2VyIGNsYXNzIG5hbWVkIGluIHRoZSBjbGFzcyBhdHRyaWJ1dGUuPC9saT4KLTwvdWw+Ci08YnI+PGJyPgotPHAgY2xhc3M9Im5vdGUgU2NoZW1hQ29weXJpZ2h0Ij4KLUNvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrIj5odHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51azwvYT4uPGJyPgotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IDxhCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+Ci0KLTwvcD4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhMmNhZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfcHJvY2Vzc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5YU0xUIFByb2Nlc3NvcjwvdGl0bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9ib29rLmNzcyIpOzwvc3R5bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9zY2hlbWEuY3NzIik7PC9zdHlsZT4KLTwvSEVBRD4KLTxCT0RZPgotPEgxIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+WFNMVCBQcm9jZXNzb3I8L0gxPgotPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+SWRlbnRpZmllcjogPC9oNj5vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwLnByb2Nlc3NvcjxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkRlc2NyaXB0aW9uOiA8L2g2PkNvbnRyaWJ1dGUgYSBKYXZhIFhTTFQgcHJvY2Vzc29yIGluc3RhbmNlIChlLmcuIFhhbGFuIDIuNy4wKS4gVGhlIGV4dGVuc2lvbiBwb2ludCBwcmltYXJpbHkgZGVmaW5lcyB0aGUgY2xhc3NwYXRoIHRvIGJlIHVzZWQgd2hlbiBsYXVuY2hpbmcgYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbi48cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5Db25maWd1cmF0aW9uIE1hcmt1cDo8L2g2PgotPHA+PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5leHRlbnNpb24iPmV4dGVuc2lvbjwvYT4gKDxhIGhyZWY9IiNlLnByb2Nlc3NvciI+cHJvY2Vzc29yPC9hPispJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGV4dGVuc2lvbjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnBvaW50Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bmFtZSZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPiZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5wcm9jZXNzb3IiPnByb2Nlc3NvcjwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgcHJvY2Vzc29yPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bGFiZWwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+cHJvY2Vzc29yVHlwZUlkJm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmNsYXNzcGF0aCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5kZWJ1Z2dlcklkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+c3VwcG9ydHMmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1BbiBpbnN0YW5jZSBvZiBhIEpBWFAtY29tcGxpYW50IFhTTFQgcHJvY2Vzc29yPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+aWQ8L2I+IC0gQSB1bmlxdWUgaWQgZm9yIHRoaXMgcHJvY2Vzc29yIGluc3RhbmNlPC9saT4KLTxsaT48Yj5sYWJlbDwvYj4gLSBBIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgVUk8L2xpPgotPGxpPjxiPnByb2Nlc3NvclR5cGVJZDwvYj4gLSBUaGUgaWQgZm9yIHRoZSBwcm9jZXNzb3IgdHlwZTwvbGk+Ci08bGk+PGI+Y2xhc3NwYXRoPC9iPiAtIFRoZSBjbGFzc3BhdGggdG8gdXNlIHdoZW4gdGhpcyBwcm9jZXNzb3IgaXMgbGF1bmNoZWQ8L2xpPgotPGxpPjxiPmRlYnVnZ2VySWQ8L2I+IC0gVGhlIGlkIG9mIGEgZGVidWdnZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb2Nlc3NvcjwvbGk+Ci08bGk+PGI+c3VwcG9ydHM8L2I+IC0gQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgWFNMVCB2ZXJzaW9ucyBlLmcuIDEuMCwyLjA8L2xpPgotPC91bD4KLTxicj48aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5FeGFtcGxlczogPC9oNj48cHJlIGNsYXNzPSJFeGFtcGxlIj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcucHJvY2Vzc29yJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Jmd0OwotICAgICAgJmx0OyEtLSBBbiBhZG9wdGVyIGNhbiBzcGVjaWZ5IHRoZSAke2VjbGlwc2Vfb3JiaXQ6IH0gdmFyaWFibGUgdG8gaW5kaWNhdGUgd2hpY2ggZWNsaXBzZQotICAgICAgICAgICBidW5kbGUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjbGFzcyBwYXRoLiAtLSZndDsKLSAgICAgICZsdDtwcm9jZXNzb3IKLSAgICAgIGNsYXNzcGF0aD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUueGFsYW59OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyfTske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS5iY2VsfTske2VjbGlwc2Vfb3JiaXQ6amF2YV9jdXAucnVudGltZX0mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGlkPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3ImcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGxhYmVsPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDslcHJvY2Vzc29yLmxhYmVsLjEmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIHByb2Nlc3NvclR5cGVJZD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBkZWJ1Z2dlcklkPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBzdXBwb3J0cz08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7MS4wJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Jmd0OwotICAgICAgJmx0Oy9wcm9jZXNzb3ImZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLTwvc3Bhbj48L3ByZT4KLTxwPjwvcD4KLQotPGJyPgotPHAgY2xhc3M9Im5vdGUgU2NoZW1hQ29weXJpZ2h0Ij4KLUNvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrIj5odHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51azwvYT4uPGJyPgotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IDxhCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+Ci0KLTwvcD4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3JUeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfcHJvY2Vzc29yVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZiNWYxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3JUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5YU0xUIFByb2Nlc3NvciBUeXBlPC90aXRsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL2Jvb2suY3NzIik7PC9zdHlsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL3NjaGVtYS5jc3MiKTs8L3N0eWxlPgotPC9IRUFEPgotPEJPRFk+Ci08SDEgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj5YU0xUIFByb2Nlc3NvciBUeXBlPC9IMT4KLTxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPklkZW50aWZpZXI6IDwvaDY+b3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cC5wcm9jZXNzb3JUeXBlPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RGVzY3JpcHRpb246IDwvaDY+Q29udHJpYnV0ZSBhIEphdmEgWFNMVCBwcm9jZXNzb3IgdHlwZSAoZS5nLiBYYWxhbiwgU2F4b24pLiBUaGUgcHJvY2Vzc29yIHR5cGUgZGVmaW5lcyB3aGljaCBKQVhQIGF0dHJpYnV0ZXMgYW5kIG91dHB1dCBwcm9wZXJpZXMgYXJlIHN1cHBvcnRlZCwgYW5kIGFsc28gdGhlIHRyYW5zZm9ybWVyIGZhY3RvcnkgY2xhc3NlcyBpdCBjb250YWlucy48cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5Db25maWd1cmF0aW9uIE1hcmt1cDo8L2g2PgotPHA+PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5leHRlbnNpb24iPmV4dGVuc2lvbjwvYT4gKDxhIGhyZWY9IiNlLnByb2Nlc3NvclR5cGUiPnByb2Nlc3NvclR5cGU8L2E+KykmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZXh0ZW5zaW9uPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+cG9pbnQmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLnByb2Nlc3NvclR5cGUiPnByb2Nlc3NvclR5cGU8L2E+ICg8YSBocmVmPSIjZS50cmFuc2Zvcm1lckZhY3RvcnkiPnRyYW5zZm9ybWVyRmFjdG9yeTwvYT4qKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBwcm9jZXNzb3JUeXBlPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bGFiZWwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+b3V0cHV0UHJvcGVydGllcyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmF0dHJpYnV0ZVByb3BlcnRpZXMmbmJzcDtDREFUQSAjSU1QTElFRDwvcD4mZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+aWQ8L2I+IC0gVW5pcXVlIGlkIGZvciB0aGUgcHJvY2Vzc29yIHR5cGU8L2xpPgotPGxpPjxiPmxhYmVsPC9iPiAtIE5hbWUgZm9yIGRpc3BsYXkgaW4gdGhlIFVJPC9saT4KLTxsaT48Yj5vdXRwdXRQcm9wZXJ0aWVzPC9iPiAtIExvY2F0aW9uIG9mIGEgcHJvcGVydGllcyBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdGhlIHByb2Nlc3NvcnMgb3V0cHV0IHByb3BlcnRpZXMuIE11c3QgYmUgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBidW5kbGUuPC9saT4KLTxsaT48Yj5hdHRyaWJ1dGVQcm9wZXJ0aWVzPC9iPiAtIExvY2F0aW9uIG9mIGEgcHJvcGVydGllcyBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGJ5IHRoaXMgcHJvY2Vzc29yLiBNdXN0IGJlIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgYnVuZGxlLjwvbGk+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUudHJhbnNmb3JtZXJGYWN0b3J5Ij50cmFuc2Zvcm1lckZhY3Rvcnk8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIHRyYW5zZm9ybWVyRmFjdG9yeTwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmZhY3RvcnlDbGFzcyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPiZndDs8L3A+Ci08cD48L3A+Ci08cCBjbGFzcz0iQ29uZmlnTWFya3VwRWxlbWVudERlc2MiPgotQSBUcmFuc2Zvcm1lckZhY3RvcnkgZm9yIHRoaXMgdHlwZTwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmZhY3RvcnlDbGFzczwvYj4gLSBUaGUgZnVsbHktcXVhbGlmaWVkIHRyYW5zZm9ybWVyIGZhY3RvcnkgY2xhc3M8L2xpPgotPGxpPjxiPm5hbWU8L2I+IC0gQSBuYW1lIGZvciB0aGlzIHRyYW5zZm9ybWVyIGZhY3RvcnkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBVSTwvbGk+Ci08L3VsPgotPGJyPjxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkV4YW1wbGVzOiA8L2g2PjxwcmUgY2xhc3M9IkV4YW1wbGUiPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Jmd0OwotICAgICAgJmx0O3Byb2Nlc3NvclR5cGUKLSAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXM9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O1hhbGFuQXR0cmlidXRlcy5wcm9wZXJ0aWVzJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBpZD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBsYWJlbD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7JXByb2Nlc3NvclR5cGUubGFiZWwuMCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgb3V0cHV0UHJvcGVydGllcz08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7WGFsYW5PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4mZ3Q7Ci0gICAgICAgICAmbHQ7dHJhbnNmb3JtZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICBmYWN0b3J5Q2xhc3M9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgICAgIG5hbWU9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O0ludGVycHJldGl2ZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPiZndDsKLSAgICAgICAgICZsdDsvdHJhbnNmb3JtZXJGYWN0b3J5Jmd0OwotICAgICAgICAgJmx0O3RyYW5zZm9ybWVyRmFjdG9yeQotICAgICAgICAgICAgICAgZmFjdG9yeUNsYXNzPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuYXBhY2hlLnhhbGFuLnhzbHRjLnRyYXguVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgICAgbmFtZT08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7Q29tcGlsaW5nJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Jmd0OwotICAgICAgICAgJmx0Oy90cmFuc2Zvcm1lckZhY3RvcnkmZ3Q7Ci0gICAgICAmbHQ7L3Byb2Nlc3NvclR5cGUmZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLTwvc3Bhbj48L3ByZT4KLTxwPjwvcD4KLQotPGJyPgotPHAgY2xhc3M9Im5vdGUgU2NoZW1hQ29weXJpZ2h0Ij4KLUNvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrIj5odHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51azwvYT4uPGJyPgotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IDxhCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+Ci0KLTwvcD4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF91aV9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfdWlfY29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmQ2ZGNiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF91aV9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5YU0wgQ29udGVudCBBc3Npc3RhbmNlPC90aXRsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL2Jvb2suY3NzIik7PC9zdHlsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL3NjaGVtYS5jc3MiKTs8L3N0eWxlPgotPC9IRUFEPgotPEJPRFk+Ci08SDEgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj5YU0wgQ29udGVudCBBc3Npc3RhbmNlPC9IMT4KLTxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPklkZW50aWZpZXI6IDwvaDY+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5jb250ZW50QXNzaXN0UHJvY2Vzc29yPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+U2luY2U6IDwvaDY+MS4xCi08cD48L3A+Ci0KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkRlc2NyaXB0aW9uOiA8L2g2PlhTTCBDb250ZW50IEFzaXNzdGFuY2UgcHJvY2Vzc29yIGV4dGVuc2lvbiBwb2ludCwgYWxsb3dzIGZvciB0aGUgY29udHJpYnV0aW9uIG9mIGFkb3B0ZXIgZGVmaW5lZCBYU0wgcHJvY2Vzc29yIGV4dGVuc2lvbnMuPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+Q29uZmlndXJhdGlvbiBNYXJrdXA6PC9oNj4KLTxwPjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZXh0ZW5zaW9uIj5leHRlbnNpb248L2E+ICg8YSBocmVmPSIjZS5wcm9jZXNzb3IiPnByb2Nlc3NvcjwvYT4rKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBleHRlbnNpb248L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wb2ludCZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm5hbWUmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD4mZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+cG9pbnQ8L2I+IC0gQSB1bmlxdWUgSUQgZm9yIHRoaXMgZXh0ZW5zaW9uIHBvaW50PC9saT4KLTxsaT48Yj5uYW1lPC9iPiAtIEV4dGVuc2lvbiBwb2ludCBuYW1lPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5wcm9jZXNzb3IiPnByb2Nlc3NvcjwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgcHJvY2Vzc29yPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Y2xhc3MmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1Qcm9jZXNzb3IgdGhhdCBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2U8L3A+Ci08YnI+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5jbGFzczwvYj4gLSBUaGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBjb250ZW50IGFzc2lzdGFudCBwcm9jZXNzb3IuPC9saT4KLTwvdWw+Ci08YnI+PGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RXhhbXBsZXM6IDwvaDY+PHA+Jmx0O2V4dGVuc2lvbgotICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmNvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPjwvcD4KLTxwPiYjMTYwOyYjMTYwOyYjMTYwOyZsdDtwcm9jZXNzb3IKLSAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhNTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPjwvcD4KLTxwPiYjMTYwOyYjMTYwOyYjMTYwOyZsdDsvcHJvY2Vzc29yPjwvcD4KLTxwPiZsdDsvZXh0ZW5zaW9uPjwvcD4KLTxwPjwvcD4KLQotPGJyPgotPHAgY2xhc3M9Im5vdGUgU2NoZW1hQ29weXJpZ2h0Ij4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi08L3A+Ci08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRiODFlZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoQ29yZVBsdWdpbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoQ29yZVBsdWdpbjwvc3Ryb25nPgotZXh0ZW5kcyBQbHVnaW48L3ByZT5UaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUExVR0lOX0lEIj5QTFVHSU5fSUQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoQ29yZVBsdWdpbiI+WFBhdGhDb3JlUGx1Z2luPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0Ij5zdGFydDwvYT4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0b3AiPnN0b3A8L2E+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1BMVUdJTl9JRCI+UExVR0lOX0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlBMVUdJTl9JRDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhDb3JlUGx1Z2luIj5YUGF0aENvcmVQbHVnaW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aENvcmVQbHVnaW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VGhlIGNvbnN0cnVjdG9yPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luIDxzdHJvbmc+Z2V0RGVmYXVsdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW48L2NvZGU+IC0gdGhlIHNoYXJlZCBpbnN0YW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFydCI+c3RhcnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0YXJ0PC9zdHJvbmc+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0b3AiPnN0b3A8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0b3A8L3N0cm9uZz4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmNDc5Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlczwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+WFBhdGggUHJvY2Vzc29yIHByZWZlcmVuY2VzPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBBVEhfMV8wX1BST0NFU1NPUiI+WFBBVEhfMV8wX1BST0NFU1NPUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBBVEhfMl8wX1BST0NFU1NPUiI+WFBBVEhfMl8wX1BST0NFU1NPUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBBVEhfT1RIRVIiPlhQQVRIX09USEVSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzIj5YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hQQVRIXzFfMF9QUk9DRVNTT1IiPlhQQVRIXzFfMF9QUk9DRVNTT1I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBBVEhfMV8wX1BST0NFU1NPUjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF8yXzBfUFJPQ0VTU09SIj5YUEFUSF8yXzBfUFJPQ0VTU09SPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIXzJfMF9QUk9DRVNTT1I8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBBVEhfT1RIRVIiPlhQQVRIX09USEVSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIX09USEVSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzIj5YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMWVkMzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlByZWZlcmVuY2VJbml0aWFsaXplcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjwvcHJlPlByZWZlcmVuY2VzIGluaXRpYWxpemVyIGZvciBYU0wgY29yZSBwcmVmZXJlbmNlcy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ByZWZlcmVuY2VJbml0aWFsaXplciI+UHJlZmVyZW5jZUluaXRpYWxpemVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzIj5pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUHJlZmVyZW5jZUluaXRpYWxpemVyIj5QcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyI+aW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLk5vZGVMaXN0SW1wbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLk5vZGVMaXN0SW1wbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTdkOTUzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5Ob2RlTGlzdEltcGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTm9kZUxpc3RJbXBsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+Tm9kZUxpc3RJbXBsPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIFJlc3VsdFNlcXVlbmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcnMiPnJzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Ob2RlTGlzdEltcGwiPk5vZGVMaXN0SW1wbDwvYT48L3N0cm9uZz4oUmVzdWx0U2VxdWVuY2UgcmVzdWx0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMZW5ndGgiPmdldExlbmd0aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2l0ZW0iPml0ZW08L2E+KGludCBhcmcwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfcnMiPnJzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIFJlc3VsdFNlcXVlbmNlIDxzdHJvbmc+cnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX05vZGVMaXN0SW1wbCI+Tm9kZUxpc3RJbXBsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Tm9kZUxpc3RJbXBsPC9zdHJvbmc+KFJlc3VsdFNlcXVlbmNlIHJlc3VsdCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldExlbmd0aCI+Z2V0TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldExlbmd0aDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXRlbSI+aXRlbTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlIDxzdHJvbmc+aXRlbTwvc3Ryb25nPihpbnQgYXJnMCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnMDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aDIwSGVscGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGgyMEhlbHBlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTk1ZDAxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aDIwSGVscGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGgyMEhlbHBlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoMjBIZWxwZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGgyMEhlbHBlciI+WFBhdGgyMEhlbHBlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbXBpbGUiPmNvbXBpbGU8L2E+KGphdmEubGFuZy5TdHJpbmcgeHBhdGhFeHApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGgyMEhlbHBlciI+WFBhdGgyMEhlbHBlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoMjBIZWxwZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcGlsZSI+Y29tcGlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y29tcGlsZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHhwYXRoRXhwKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54cGF0aEV4cDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aENvcmVIZWxwZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aENvcmVIZWxwZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY5MDdjYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGhDb3JlSGVscGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhDb3JlSGVscGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhDb3JlSGVscGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhDb3JlSGVscGVyIj5YUGF0aENvcmVIZWxwZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgUHJlZmVyZW5jZXM8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJlZmVyZW5jZXMiPmdldFByZWZlcmVuY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhDb3JlSGVscGVyIj5YUGF0aENvcmVIZWxwZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aENvcmVIZWxwZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJlZmVyZW5jZXMiPmdldFByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFByZWZlcmVuY2VzIDxzdHJvbmc+Z2V0UHJlZmVyZW5jZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5QcmVmZXJlbmNlczwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjI2ZWM0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFRYUGF0aEhlbHBlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFRYUGF0aEhlbHBlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFRYUGF0aEhlbHBlciI+WFNMVFhQYXRoSGVscGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FsY3VsYXRlWFBhdGhUb05vZGUiPmNhbGN1bGF0ZVhQYXRoVG9Ob2RlPC9hPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhIFhQYXRoIGV4cHJlc3Npb24gZ2l2ZW4gYSBET00gTm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcGlsZSI+Y29tcGlsZTwvYT4oamF2YS5sYW5nLlN0cmluZyBleHByZXNzaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXZhbCI+ZXZhbDwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFVzaW5nIHRoaXMgbWV0aG9kLCBYUGF0aCBuYW1lc3BhY2UKLSBwcmVmaXhlcyB3aWxsIGJlIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsIj5ldmFsPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLSBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXZhbCI+ZXZhbDwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy5hcGFjaGUueG1sLnV0aWxzLlByZWZpeFJlc29sdmVyIHByZWZpeFJlc29sdmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLSBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgb3JnLmFwYWNoZS54cGF0aC5jb21waWxlci5GdW5jdGlvblRhYmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZ1bmN0aW9uVGFibGUiPmdldEZ1bmN0aW9uVGFibGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0Tm9kZUl0ZXJhdG9yIj5zZWxlY3ROb2RlSXRlcmF0b3I8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0Tm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0Tm9kZUl0ZXJhdG9yIj5zZWxlY3ROb2RlSXRlcmF0b3I8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcudzNjLmRvbS5Ob2RlTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3ROb2RlTGlzdCI+c2VsZWN0Tm9kZUxpc3Q8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0Tm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLk5vZGVMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdE5vZGVMaXN0Ij5zZWxlY3ROb2RlTGlzdDwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbmFtZXNwYWNlTm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0U2luZ2xlTm9kZSI+c2VsZWN0U2luZ2xlTm9kZTwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBzaW5nbGUgbm9kZS4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHQgbm9kZSwgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50IChzZWUgdGhlCi0gbmV4dCBtZXRob2QpLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3RTaW5nbGVOb2RlIj5zZWxlY3RTaW5nbGVOb2RlPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgc2luZ2xlIG5vZGUuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFRYUGF0aEhlbHBlciI+WFNMVFhQYXRoSGVscGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVFhQYXRoSGVscGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbGN1bGF0ZVhQYXRoVG9Ob2RlIj5jYWxjdWxhdGVYUGF0aFRvTm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Y2FsY3VsYXRlWFBhdGhUb05vZGU8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48L3A+PHA+UmV0dXJucyBhIFhQYXRoIGV4cHJlc3Npb24gZ2l2ZW4gYSBET00gTm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gVGhlIERPTSBOb2RlIHRvIGNyZWF0ZSB0aGUgWFBhdGggZXhwcmVzc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXBpbGUiPmNvbXBpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbXBpbGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBleHByZXNzaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5leHByZXNzaW9uPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbCI+ZXZhbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdCA8c3Ryb25nPmV2YWw8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5FdmFsdWF0ZSBYUGF0aCBzdHJpbmcgdG8gYW4gWE9iamVjdC4gVXNpbmcgdGhpcyBtZXRob2QsIFhQYXRoIG5hbWVzcGFjZQotIHByZWZpeGVzIHdpbGwgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdDwvY29kZT4gLSBBbiBYT2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYSBzdHJpbmcsIG51bWJlciwgICAgICAgICAgbm9kZWxpc3QsIGV0Yywgc2hvdWxkIG5ldmVyIGJlIG51bGwuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ldmFsIj5ldmFsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0IDxzdHJvbmc+ZXZhbDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48L3A+PHA+RXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpcyBhIGxpdHRsZQotIHNsb3csIHNpbmNlIGl0IGNyZWF0ZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLiBUaGlzCi0gY291bGQgYmUgb3B0aW1pemVkIHRvIGtlZXAgdGhlIHNhbWUgb2JqZWN0cyBhcm91bmQsIGJ1dCB0aGVuCi0gdGhyZWFkLXNhZmV0eSBpc3N1ZXMgd291bGQgYXJpc2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0Tm9kZTwvY29kZT4gLSBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS48L3A+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIEEgdmFsaWQgWFBhdGggc3RyaW5nLjwvcD48cD48Y29kZT5uYW1lc3BhY2VOb2RlPC9jb2RlPiAtIFRoZSBub2RlIGZyb20gd2hpY2ggcHJlZml4ZXMgaW4gdGhlIFhQYXRoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gICAgICAgICAgICAgbmFtZXNwYWNlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0PC9jb2RlPiAtIEFuIFhPYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN0cmluZywgbnVtYmVyLCAgICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V2YWwiPmV2YWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3QgPHN0cm9uZz5ldmFsPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhtbC51dGlscy5QcmVmaXhSZXNvbHZlciBwcmVmaXhSZXNvbHZlcik8L2NvZGU+PC9wPjxwPkV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLSBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PHA+PGNvZGU+cHJlZml4UmVzb2x2ZXI8L2NvZGU+IC0gV2lsbCBiZSBjYWxsZWQgaWYgdGhlIHBhcnNlciBlbmNvdW50ZXJzIG5hbWVzcGFjZSBwcmVmaXhlcywgdG8gICAgICAgICAgICAgcmVzb2x2ZSB0aGUgcHJlZml4ZXMgdG8gVVJMcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0PC9jb2RlPiAtIEFuIFhPYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN0cmluZywgbnVtYmVyLCAgICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZ1bmN0aW9uVGFibGUiPmdldEZ1bmN0aW9uVGFibGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmFwYWNoZS54cGF0aC5jb21waWxlci5GdW5jdGlvblRhYmxlIDxzdHJvbmc+Z2V0RnVuY3Rpb25UYWJsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueHBhdGguY29tcGlsZXIuRnVuY3Rpb25UYWJsZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0Tm9kZUl0ZXJhdG9yIj5zZWxlY3ROb2RlSXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20udHJhdmVyc2FsLk5vZGVJdGVyYXRvciA8c3Ryb25nPnNlbGVjdE5vZGVJdGVyYXRvcjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0Tm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS50cmF2ZXJzYWwuTm9kZUl0ZXJhdG9yPC9jb2RlPiAtIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdE5vZGVJdGVyYXRvciI+c2VsZWN0Tm9kZUl0ZXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3IgPHN0cm9uZz5zZWxlY3ROb2RlSXRlcmF0b3I8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbmFtZXNwYWNlTm9kZSk8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PHA+PGNvZGU+bmFtZXNwYWNlTm9kZTwvY29kZT4gLSBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvICAgICAgICAgICAgIG5hbWVzcGFjZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS50cmF2ZXJzYWwuTm9kZUl0ZXJhdG9yPC9jb2RlPiAtIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdE5vZGVMaXN0Ij5zZWxlY3ROb2RlTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlTGlzdCA8c3Ryb25nPnNlbGVjdE5vZGVMaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+VXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHROb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGVMaXN0PC9jb2RlPiAtIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdE5vZGVMaXN0Ij5zZWxlY3ROb2RlTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlTGlzdCA8c3Ryb25nPnNlbGVjdE5vZGVMaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjwvcD48cD5Vc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxwPjxjb2RlPm5hbWVzcGFjZU5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgZnJvbSB3aGljaCBwcmVmaXhlcyBpbiB0aGUgWFBhdGggd2lsbCBiZSByZXNvbHZlZCB0byAgICAgICAgICAgICBuYW1lc3BhY2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZUxpc3Q8L2NvZGU+IC0gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0U2luZ2xlTm9kZSI+c2VsZWN0U2luZ2xlTm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlIDxzdHJvbmc+c2VsZWN0U2luZ2xlTm9kZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgc2luZ2xlIG5vZGUuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0IG5vZGUsIHdoaWNoIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCAoc2VlIHRoZQotIG5leHQgbWV0aG9kKS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Ob2RlPC9jb2RlPiAtIFRoZSBmaXJzdCBub2RlIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgWFBhdGgsIG9yIG51bGwuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3RTaW5nbGVOb2RlIj5zZWxlY3RTaW5nbGVOb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5zZWxlY3RTaW5nbGVOb2RlPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjwvcD48cD5Vc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIHNpbmdsZSBub2RlLiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxwPjxjb2RlPm5hbWVzcGFjZU5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgZnJvbSB3aGljaCBwcmVmaXhlcyBpbiB0aGUgWFBhdGggd2lsbCBiZSByZXNvbHZlZCB0byAgICAgICAgICAgICBuYW1lc3BhY2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZTwvY29kZT4gLSBUaGUgZmlyc3Qgbm9kZSBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIFhQYXRoLCBvciBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhVSU1lc3NhZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFVJTWVzc2FnZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyMTIzMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFVJTWVzc2FnZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoVUlNZXNzYWdlczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoVUlNZXNzYWdlczwvc3Ryb25nPgotZXh0ZW5kcyBOTFM8L3ByZT5TdHJpbmdzIHVzZWQgYnkgWFBhdGggVUk8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfQ29udGV4dCI+WFBhdGhOYXZpZ2F0b3JfQ29udGV4dDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQiPlhQYXRoTmF2aWdhdG9yX0RvY3VtZW50PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9ET01fVHJlZSI+WFBhdGhOYXZpZ2F0b3JfRE9NX1RyZWU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb24iPlhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX05hbWVzcGFjZV9QcmVmaXhlcyI+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzIj5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcCI+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkIj5YUGF0aE5hdmlnYXRvcl9Ob2RlX2NvdWxkX25vdF9iZV9zZWxlY3RlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZCI+WFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jcyI+WFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXAiPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3NfVGlwPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9SdW5fb25fc2VsZWN0ZWQiPlhQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfUnVuX1hQYXRoX1F1ZXJ5Ij5YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1NlbGVjdF9zb3VyY2VfZmlyc3QiPlhQYXRoTmF2aWdhdG9yX1NlbGVjdF9zb3VyY2VfZmlyc3Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1NlbGVjdGlvbiI+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZSI+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1Nob3dfSW5fU291cmNlX1RpcCI+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9UZXh0Ij5YUGF0aE5hdmlnYXRvcl9UZXh0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50Ij5YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9YUGF0aF9FdmFsX0ZhaWxlZCI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfRXZhbF9GYWlsZWQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1hQYXRoX05hdmlnYXRvciI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9YUGF0aF9TaG93X0luX1NvdXJjZV9GYWlsZWQiPlhQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UmVzb3VyY2VCdW5kbGUiPmdldFJlc291cmNlQnVuZGxlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9Db250ZXh0Ij5YUGF0aE5hdmlnYXRvcl9Db250ZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX0NvbnRleHQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQiPlhQYXRoTmF2aWdhdG9yX0RvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX0RvY3VtZW50PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX0RPTV9UcmVlIj5YUGF0aE5hdmlnYXRvcl9ET01fVHJlZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9ET01fVHJlZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9FeHByZXNzaW9uIj5YUGF0aE5hdmlnYXRvcl9FeHByZXNzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzIj5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXMiPlhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcCI+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfTm9kZV9jb3VsZF9ub3RfYmVfc2VsZWN0ZWQiPlhQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX05vdGhpbmdfc2VsZWN0ZWQiPlhQYXRoTmF2aWdhdG9yX05vdGhpbmdfc2VsZWN0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzIj5YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3M8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXAiPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3NfVGlwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3NfVGlwPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZCI+WFBhdGhOYXZpZ2F0b3JfUnVuX29uX3NlbGVjdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnkiPlhQYXRoTmF2aWdhdG9yX1J1bl9YUGF0aF9RdWVyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdCI+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9TZWxlY3Rfc291cmNlX2ZpcnN0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1NlbGVjdGlvbiI+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1NlbGVjdGlvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZSI+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwIj5YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZV9UaXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1RleHQiPlhQYXRoTmF2aWdhdG9yX1RleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfVGV4dDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50Ij5YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1hNTF9Tb3VyY2VfRG9jdW1lbnQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfWFBhdGhfRXZhbF9GYWlsZWQiPlhQYXRoTmF2aWdhdG9yX1hQYXRoX0V2YWxfRmFpbGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1hQYXRoX0V2YWxfRmFpbGVkPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1hQYXRoX05hdmlnYXRvciI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1hQYXRoX05hdmlnYXRvcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9YUGF0aF9TaG93X0luX1NvdXJjZV9GYWlsZWQiPlhQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9YUGF0aF9TaG93X0luX1NvdXJjZV9GYWlsZWQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVzb3VyY2VCdW5kbGUiPmdldFJlc291cmNlQnVuZGxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZSA8c3Ryb25nPmdldFJlc291cmNlQnVuZGxlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLlJlc291cmNlQnVuZGxlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFZpZXdQbHVnaW4uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzQzNGMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWk8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhWaWV3UGx1Z2luPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhWaWV3UGx1Z2luPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0VUlQbHVnaW48L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhWaWV3UGx1Z2luIj5YUGF0aFZpZXdQbHVnaW48L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFZpZXdQbHVnaW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGx1Z2luSWQiPmdldFBsdWdpbklkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZXNvdXJjZUJ1bmRsZSI+Z2V0UmVzb3VyY2VCdW5kbGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UmVzb3VyY2VTdHJpbmciPmdldFJlc291cmNlU3RyaW5nPC9hPihqYXZhLmxhbmcuU3RyaW5nIGtleSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotIG9yICdrZXknIGlmIG5vdCBmb3VuZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgQ29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5Ij5nZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBUZW1wbGF0ZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhQYXRoVGVtcGxhdGVTdG9yZSI+Z2V0WFBhdGhUZW1wbGF0ZVN0b3JlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4cGF0aCB0ZW1wbGF0ZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5mbyI+aW5mbzwvYT4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXRpYWxpemVJbWFnZVJlZ2lzdHJ5Ij5pbml0aWFsaXplSW1hZ2VSZWdpc3RyeTwvYT4oSW1hZ2VSZWdpc3RyeSByZWcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9nIj5sb2c8L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSBleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sb2ciPmxvZzwvYT4oamF2YS5sYW5nLlRocm93YWJsZSBleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0QWN0aXZhdGVkIj5wYXJ0QWN0aXZhdGVkPC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnRCcm91Z2h0VG9Ub3AiPnBhcnRCcm91Z2h0VG9Ub3A8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFydENsb3NlZCI+cGFydENsb3NlZDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0RGVhY3RpdmF0ZWQiPnBhcnREZWFjdGl2YXRlZDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0SGlkZGVuIj5wYXJ0SGlkZGVuPC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnRJbnB1dENoYW5nZWQiPnBhcnRJbnB1dENoYW5nZWQ8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFydE9wZW5lZCI+cGFydE9wZW5lZDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0VmlzaWJsZSI+cGFydFZpc2libGU8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcCI+c3RvcDwvYT4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGhyb3dDb3JlRXhjZXB0aW9uIj50aHJvd0NvcmVFeGNlcHRpb248L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSB0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZVhQYXRoTmF2aWdhdG9yVmlldyI+dXBkYXRlWFBhdGhOYXZpZ2F0b3JWaWV3PC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3dhcm4iPndhcm48L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aFZpZXdQbHVnaW4iPlhQYXRoVmlld1BsdWdpbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoVmlld1BsdWdpbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgY29uc3RydWN0b3IuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbiA8c3Ryb25nPmdldERlZmF1bHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFZpZXdQbHVnaW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBsdWdpbklkIj5nZXRQbHVnaW5JZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UGx1Z2luSWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRSZXNvdXJjZUJ1bmRsZSI+Z2V0UmVzb3VyY2VCdW5kbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLlJlc291cmNlQnVuZGxlIDxzdHJvbmc+Z2V0UmVzb3VyY2VCdW5kbGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFJlc291cmNlU3RyaW5nIj5nZXRSZXNvdXJjZVN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UmVzb3VyY2VTdHJpbmc8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotIG9yICdrZXknIGlmIG5vdCBmb3VuZC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmtleTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnkiPmdldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgQ29udGV4dFR5cGVSZWdpc3RyeSA8c3Ryb25nPmdldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT4gLSB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYUGF0aFRlbXBsYXRlU3RvcmUiPmdldFhQYXRoVGVtcGxhdGVTdG9yZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBUZW1wbGF0ZVN0b3JlIDxzdHJvbmc+Z2V0WFBhdGhUZW1wbGF0ZVN0b3JlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHRlbXBsYXRlIHN0b3JlIGZvciB0aGUgeHBhdGggdGVtcGxhdGVzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGVtcGxhdGVTdG9yZTwvY29kZT4gLSB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4cGF0aCB0ZW1wbGF0ZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5mbyI+aW5mbzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5mbzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXRpYWxpemVJbWFnZVJlZ2lzdHJ5Ij5pbml0aWFsaXplSW1hZ2VSZWdpc3RyeTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+aW5pdGlhbGl6ZUltYWdlUmVnaXN0cnk8L3N0cm9uZz4oSW1hZ2VSZWdpc3RyeSByZWcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbG9nIj5sb2c8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmxvZzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5UaHJvd2FibGUgZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9wPjxwPjxjb2RlPmV4PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2ciPmxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bG9nPC9zdHJvbmc+KGphdmEubGFuZy5UaHJvd2FibGUgZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV4PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0QWN0aXZhdGVkIj5wYXJ0QWN0aXZhdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0QWN0aXZhdGVkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRCcm91Z2h0VG9Ub3AiPnBhcnRCcm91Z2h0VG9Ub3A8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnBhcnRCcm91Z2h0VG9Ub3A8L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFydENsb3NlZCI+cGFydENsb3NlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydENsb3NlZDwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0RGVhY3RpdmF0ZWQiPnBhcnREZWFjdGl2YXRlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydERlYWN0aXZhdGVkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRIaWRkZW4iPnBhcnRIaWRkZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnBhcnRIaWRkZW48L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFydElucHV0Q2hhbmdlZCI+cGFydElucHV0Q2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydElucHV0Q2hhbmdlZDwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0T3BlbmVkIj5wYXJ0T3BlbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0T3BlbmVkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRWaXNpYmxlIj5wYXJ0VmlzaWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydFZpc2libGU8L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydDwvc3Ryb25nPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9wIj5zdG9wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdG9wPC9zdHJvbmc+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aHJvd0NvcmVFeGNlcHRpb24iPnRocm93Q29yZUV4Y2VwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dGhyb3dDb3JlRXhjZXB0aW9uPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSB0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tZXNzYWdlPC9jb2RlPjwvcD48cD48Y29kZT50PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlWFBhdGhOYXZpZ2F0b3JWaWV3Ij51cGRhdGVYUGF0aE5hdmlnYXRvclZpZXc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnVwZGF0ZVhQYXRoTmF2aWdhdG9yVmlldzwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF93YXJuIj53YXJuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz53YXJuPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NTm9kZUxhYmVsUHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTU5vZGVMYWJlbFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NTk2ZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NTm9kZUxhYmVsUHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERPTU5vZGVMYWJlbFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RE9NTm9kZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgTGFiZWxQcm92aWRlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9ET01Ob2RlTGFiZWxQcm92aWRlciI+RE9NTm9kZUxhYmVsUHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbWFnZSI+Z2V0SW1hZ2U8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZXh0Ij5nZXRUZXh0PC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRE9NTm9kZUxhYmVsUHJvdmlkZXIiPkRPTU5vZGVMYWJlbFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RE9NTm9kZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlIDxzdHJvbmc+Z2V0SW1hZ2U8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVHJlZUNvbnRlbnRQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVHJlZUNvbnRlbnRQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWE5OWIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTVRyZWVDb250ZW50UHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERPTVRyZWVDb250ZW50UHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5ET01UcmVlQ29udGVudFByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25vZGUiPm5vZGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTk9USElORyI+Tk9USElORzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRE9NVHJlZUNvbnRlbnRQcm92aWRlciI+RE9NVHJlZUNvbnRlbnRQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2hpbGRyZW4iPmdldENoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IHBhcmVudEVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+KGphdmEubGFuZy5PYmplY3QgaW5wdXRFbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmVudCI+Z2V0UGFyZW50PC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzQ2hpbGRyZW4iPmhhc0NoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5wdXRDaGFuZ2VkIj5pbnB1dENoYW5nZWQ8L2E+KFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3Qgb2xkSW5wdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgbmV3SW5wdXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9ub2RlIj5ub2RlPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5ub2RlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05PVEhJTkciPk5PVEhJTkc8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5OT1RISU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9ET01UcmVlQ29udGVudFByb3ZpZGVyIj5ET01UcmVlQ29udGVudFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RE9NVHJlZUNvbnRlbnRQcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0Q2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBwYXJlbnRFbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnRFbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0RWxlbWVudHM8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBpbnB1dEVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlucHV0RWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmdldFBhcmVudDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9oYXNDaGlsZHJlbiI+aGFzQ2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmhhc0NoaWxkcmVuPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbnB1dENoYW5nZWQ8L3N0cm9uZz4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5vbGRJbnB1dDwvY29kZT48L3A+PHA+PGNvZGU+bmV3SW5wdXQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTVZpZXdlckZpbHRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVmlld2VyRmlsdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MjRhY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVmlld2VyRmlsdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBET01WaWV3ZXJGaWx0ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5ET01WaWV3ZXJGaWx0ZXI8L3N0cm9uZz4KLWV4dGVuZHMgVmlld2VyRmlsdGVyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RPTVZpZXdlckZpbHRlciI+RE9NVmlld2VyRmlsdGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3QiPnNlbGVjdDwvYT4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBwYXJlbnRFbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRE9NVmlld2VyRmlsdGVyIj5ET01WaWV3ZXJGaWx0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5ET01WaWV3ZXJGaWx0ZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0Ij5zZWxlY3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnNlbGVjdDwvc3Ryb25nPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IHBhcmVudEVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5wYXJlbnRFbGVtZW50PC9jb2RlPjwvcD48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTE5MjliLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2c8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nPC9zdHJvbmc+Ci1leHRlbmRzIERpYWxvZzwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBMYWJlbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2Vycm9yTWVzc2FnZUxhYmVsIj5lcnJvck1lc3NhZ2VMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9uYW1lc3BhY2VJbmZvTGlzdCI+bmFtZXNwYWNlSW5mb0xpc3Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElQYXRoPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcmVzb3VyY2VMb2NhdGlvbiI+cmVzb3VyY2VMb2NhdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZyI+RWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZzwvYT48L3N0cm9uZz4oU2hlbGwgcGFyZW50U2hlbGwKLSAgICAgICAgICwKLSAgICAgIElQYXRoIHJlc291cmNlTG9jYXRpb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyIj5jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb250cm9sPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZURpYWxvZ0FyZWEiPmNyZWF0ZURpYWxvZ0FyZWE8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2w8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGlhbG9nQXJlYSI+Z2V0RGlhbG9nQXJlYTwvYT4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZXNwYWNlSW5mb0xpc3QiPmdldE5hbWVzcGFjZUluZm9MaXN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0TmFtZXNwYWNlSW5mb0xpc3QiPnNldE5hbWVzcGFjZUluZm9MaXN0PC9hPihqYXZhLnV0aWwuTGlzdCBsaXN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZUVycm9yTWVzc2FnZSI+dXBkYXRlRXJyb3JNZXNzYWdlPC9hPihqYXZhLnV0aWwuTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91cGRhdGVPY2N1cmVkIj51cGRhdGVPY2N1cmVkPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9lcnJvck1lc3NhZ2VMYWJlbCI+ZXJyb3JNZXNzYWdlTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgTGFiZWwgPHN0cm9uZz5lcnJvck1lc3NhZ2VMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9uYW1lc3BhY2VJbmZvTGlzdCI+bmFtZXNwYWNlSW5mb0xpc3Q8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5uYW1lc3BhY2VJbmZvTGlzdDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9yZXNvdXJjZUxvY2F0aW9uIj5yZXNvdXJjZUxvY2F0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElQYXRoIDxzdHJvbmc+cmVzb3VyY2VMb2NhdGlvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZyI+RWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2c8L3N0cm9uZz4oU2hlbGwgcGFyZW50U2hlbGwKLSAgICAgICAgICwKLSAgICAgIElQYXRoIHJlc291cmNlTG9jYXRpb24pPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyIj5jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlRGlhbG9nQXJlYSI+Y3JlYXRlRGlhbG9nQXJlYTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb250cm9sIDxzdHJvbmc+Y3JlYXRlRGlhbG9nQXJlYTwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db250cm9sPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREaWFsb2dBcmVhIj5nZXREaWFsb2dBcmVhPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2wgPHN0cm9uZz5nZXREaWFsb2dBcmVhPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWVzcGFjZUluZm9MaXN0Ij5nZXROYW1lc3BhY2VJbmZvTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldE5hbWVzcGFjZUluZm9MaXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldE5hbWVzcGFjZUluZm9MaXN0Ij5zZXROYW1lc3BhY2VJbmZvTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0TmFtZXNwYWNlSW5mb0xpc3Q8L3N0cm9uZz4oamF2YS51dGlsLkxpc3QgbGlzdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlRXJyb3JNZXNzYWdlIj51cGRhdGVFcnJvck1lc3NhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnVwZGF0ZUVycm9yTWVzc2FnZTwvc3Ryb25nPihqYXZhLnV0aWwuTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZXNwYWNlSW5mb0xpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VwZGF0ZU9jY3VyZWQiPnVwZGF0ZU9jY3VyZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnVwZGF0ZU9jY3VyZWQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgYXJnKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmplY3Q8L2NvZGU+PC9wPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzBmY2MzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIExhYmVsUHJvdmlkZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBjaGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRElSVFlfSU5ESUNBVE9SIj5ESVJUWV9JTkRJQ0FUT1I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQSBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIGVkaXRvciBpcyBkaXJ0eTwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyIj5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSW1hZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfRElSVFlfSU5ESUNBVE9SIj5ESVJUWV9JTkRJQ0FUT1I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBjaGFyIDxzdHJvbmc+RElSVFlfSU5ESUNBVE9SPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5BIHN0cmluZyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYW4gZWRpdG9yIGlzIGRpcnR5PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlciI+WFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlIDxzdHJvbmc+Z2V0SW1hZ2U8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmJlYzNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb248L3N0cm9uZz4KLWV4dGVuZHMgQWN0aW9uPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcnVuIj5ydW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJ1bjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVjYjA4ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIEFjdGlvbjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcnVuIj5ydW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNTczNTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlcjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyIj5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+KGphdmEubGFuZy5PYmplY3QgaW5wdXRFbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG9sZElucHV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG5ld0lucHV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIiPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmRpc3Bvc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRFbGVtZW50czwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGlucHV0RWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5wdXRFbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbnB1dENoYW5nZWQiPmlucHV0Q2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5wdXRDaGFuZ2VkPC9zdHJvbmc+KFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3Qgb2xkSW5wdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgbmV3SW5wdXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+b2xkSW5wdXQ8L2NvZGU+PC9wPjxwPjxjb2RlPm5ld0lucHV0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhNGQ4Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIEFjdGlvbjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcnVuIj5ydW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJ1bjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNTEwMzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoTmF2aWdhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3I8L3N0cm9uZz4KLWV4dGVuZHMgVmlld1BhcnQ8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSU1lbWVudG88L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9tZW1lbnRvIj5tZW1lbnRvPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NRU1FTlRPX1FVRVJZQ09OVEVYVF9ET0NVTUVOVCI+TUVNRU5UT19RVUVSWUNPTlRFWFRfRE9DVU1FTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01FTUVOVE9fUVVFUllDT05URVhUX0tFWSI+TUVNRU5UT19RVUVSWUNPTlRFWFRfS0VZPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NRU1FTlRPX1FVRVJZQ09OVEVYVF9TRUxFQ1RJT04iPk1FTUVOVE9fUVVFUllDT05URVhUX1NFTEVDVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTUVNRU5UT19YUEFUSE5BVklHQVRPUl9TRUNUSU9OIj5NRU1FTlRPX1hQQVRITkFWSUdBVE9SX1NFQ1RJT048L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01FTUVOVE9fWFBBVEhRVUVSWV9LRVkiPk1FTUVOVE9fWFBBVEhRVUVSWV9LRVk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5XZWFrSGFzaE1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25hbWVzcGFjZUluZm8iPm5hbWVzcGFjZUluZm88L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yIj5YUGF0aE5hdmlnYXRvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlciI+WFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uIj5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIiPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uIj5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlUGFydENvbnRyb2wiPmNyZWF0ZVBhcnRDb250cm9sPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgaXMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYWxsb3cgdXMgdG8gY3JlYXRlIHRoZSB2aWV3ZXIgYW5kIGluaXRpYWxpemUKLSBpdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRRdWVyeUNvbnRleHQiPmdldFF1ZXJ5Q29udGV4dDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTZWxlY3RlZERvY3VtZW50Ij5nZXRTZWxlY3RlZERvY3VtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdCI+aW5pdDwvYT4oSVZpZXdTaXRlIHNpdGUKLSAgICAgICAgICwKLSAgICAgIElNZW1lbnRvIG1lbWVudG8pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzdG9yZVN0YXRlIj5yZXN0b3JlU3RhdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zYXZlU3RhdGUiPnNhdmVTdGF0ZTwvYT4oSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRGb2N1cyI+c2V0Rm9jdXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXNzaW5nIHRoZSBmb2N1cyByZXF1ZXN0IHRvIHRoZSB2aWV3ZXIncyBjb250cm9sLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZSI+dXBkYXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9tZW1lbnRvIj5tZW1lbnRvPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElNZW1lbnRvIDxzdHJvbmc+bWVtZW50bzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NRU1FTlRPX1FVRVJZQ09OVEVYVF9ET0NVTUVOVCI+TUVNRU5UT19RVUVSWUNPTlRFWFRfRE9DVU1FTlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TUVNRU5UT19RVUVSWUNPTlRFWFRfRE9DVU1FTlQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTUVNRU5UT19RVUVSWUNPTlRFWFRfS0VZIj5NRU1FTlRPX1FVRVJZQ09OVEVYVF9LRVk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TUVNRU5UT19RVUVSWUNPTlRFWFRfS0VZPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01FTUVOVE9fUVVFUllDT05URVhUX1NFTEVDVElPTiI+TUVNRU5UT19RVUVSWUNPTlRFWFRfU0VMRUNUSU9OPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1FTUVOVE9fUVVFUllDT05URVhUX1NFTEVDVElPTjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NRU1FTlRPX1hQQVRITkFWSUdBVE9SX1NFQ1RJT04iPk1FTUVOVE9fWFBBVEhOQVZJR0FUT1JfU0VDVElPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NRU1FTlRPX1hQQVRITkFWSUdBVE9SX1NFQ1RJT048L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTUVNRU5UT19YUEFUSFFVRVJZX0tFWSI+TUVNRU5UT19YUEFUSFFVRVJZX0tFWTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NRU1FTlRPX1hQQVRIUVVFUllfS0VZPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX25hbWVzcGFjZUluZm8iPm5hbWVzcGFjZUluZm88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLldlYWtIYXNoTWFwIDxzdHJvbmc+bmFtZXNwYWNlSW5mbzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IiPlhQYXRoTmF2aWdhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlUGFydENvbnRyb2wiPmNyZWF0ZVBhcnRDb250cm9sPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jcmVhdGVQYXJ0Q29udHJvbDwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48L3A+PHA+VGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZQotIGl0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRRdWVyeUNvbnRleHQiPmdldFF1ZXJ5Q29udGV4dDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5FbGVtZW50IDxzdHJvbmc+Z2V0UXVlcnlDb250ZXh0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uRWxlbWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U2VsZWN0ZWREb2N1bWVudCI+Z2V0U2VsZWN0ZWREb2N1bWVudDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5Eb2N1bWVudCA8c3Ryb25nPmdldFNlbGVjdGVkRG9jdW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJVmlld1NpdGUgc2l0ZQotICAgICAgICAgLAotICAgICAgSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c2l0ZTwvY29kZT48L3A+PHA+PGNvZGU+bWVtZW50bzwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPlBhcnRJbml0RXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZXN0b3JlU3RhdGUiPnJlc3RvcmVTdGF0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cmVzdG9yZVN0YXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zYXZlU3RhdGUiPnNhdmVTdGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2F2ZVN0YXRlPC9zdHJvbmc+KElNZW1lbnRvIG1lbWVudG8pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lbWVudG88L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEZvY3VzIj5zZXRGb2N1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0Rm9jdXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UGFzc2luZyB0aGUgZm9jdXMgcmVxdWVzdCB0byB0aGUgdmlld2VyJ3MgY29udHJvbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlIj51cGRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnVwZGF0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5NZXNzYWdlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5NZXNzYWdlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODE2NWI3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuTWVzc2FnZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBNZXNzYWdlczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM8L3ByZT48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfMCI+WEluY2x1ZGVUYXNrXzA8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzEiPlhJbmNsdWRlVGFza18xPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza18yIj5YSW5jbHVkZVRhc2tfMjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfMyI+WEluY2x1ZGVUYXNrXzM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzQiPlhJbmNsdWRlVGFza180PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza181Ij5YSW5jbHVkZVRhc2tfNTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfNiI+WEluY2x1ZGVUYXNrXzY8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzciPlhJbmNsdWRlVGFza183PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza184Ij5YSW5jbHVkZVRhc2tfODwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfOSI+WEluY2x1ZGVUYXNrXzk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMQ29yZVBsdWdpbl9iYWRJbml0aWFsaXphdGlvbkRhdGEiPlhTTENvcmVQbHVnaW5fYmFkSW5pdGlhbGl6YXRpb25EYXRhPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTENvcmVQbHVnaW5fY29yZUVycm9yIj5YU0xDb3JlUGx1Z2luX2NvcmVFcnJvcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb24iPlhTTENvcmVQbHVnaW5fcGFyc2VyQ29uZmlndXJhdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMSI+WFNMVmFsaWRhdG9yXzE8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xMCI+WFNMVmFsaWRhdG9yXzEwPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN0eWxlc2hlZXQgaW1wb3J0aW5nIGl0c2VsZjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTEiPlhTTFZhbGlkYXRvcl8xMTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUZW1wbGF0ZSBjb25mbGljdCAoaW50ZXJuYWwpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xMiI+WFNMVmFsaWRhdG9yXzEyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRlbXBsYXRlIGNvbmZsaWN0IChpbmNsdWRlZCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzEzIj5YU0xWYWxpZGF0b3JfMTM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGVtcGxhdGUgY29uZmxpY3QgKGV4dGVybmFsKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTQiPlhTTFZhbGlkYXRvcl8xNDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJhbWV0ZXIgbWlzc2luZyBuYW1lIGF0dHJpYnV0ZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTUiPlhTTFZhbGlkYXRvcl8xNTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJhbWV0ZXIgd2l0aCBlbXB0eSBuYW1lIGF0dHJpYnV0ZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTYiPlhTTFZhbGlkYXRvcl8xNjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEdXBsaWNhdGUgcGFyYW1ldGVyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xOCI+WFNMVmFsaWRhdG9yXzE4PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVucmVzb2x2ZWQgbmFtZWQgdGVtcGxhdGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzIiPlhTTFZhbGlkYXRvcl8yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENpcmN1bGFyIHJlZmVyZW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMjAiPlhTTFZhbGlkYXRvcl8yMDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJhbWV0ZXIgd2l0aG91dCBkZWZhdWx0IHZhbHVlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8yMiI+WFNMVmFsaWRhdG9yXzIyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcmFtZXRlciBkb2VzIG5vdCBleGlzdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMjMiPlhTTFZhbGlkYXRvcl8yMzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBocmVmIGF0dHJpYnV0ZSBpcyByZXF1aXJlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMyI+WFNMVmFsaWRhdG9yXzM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTWlzc2luZyBwYXJhbWV0ZXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzQiPlhTTFZhbGlkYXRvcl80PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVucmVzb2x2ZWQgaW5jbHVkZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfNiI+WFNMVmFsaWRhdG9yXzY8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3R5bGVzaGVldCBpbmNsdWRlcyBpdHNlbGY8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzgiPlhTTFZhbGlkYXRvcl84PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVucmVzb2x2ZWQgaW1wb3J0PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX01lc3NhZ2VzIj5NZXNzYWdlczwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbG9hZE1lc3NhZ2VzIj5yZWxvYWRNZXNzYWdlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfMCI+WEluY2x1ZGVUYXNrXzA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzA8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfMSI+WEluY2x1ZGVUYXNrXzE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzE8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfMiI+WEluY2x1ZGVUYXNrXzI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzI8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfMyI+WEluY2x1ZGVUYXNrXzM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfNCI+WEluY2x1ZGVUYXNrXzQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfNSI+WEluY2x1ZGVUYXNrXzU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfNiI+WEluY2x1ZGVUYXNrXzY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzY8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfNyI+WEluY2x1ZGVUYXNrXzc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzc8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfOCI+WEluY2x1ZGVUYXNrXzg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzg8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YSW5jbHVkZVRhc2tfOSI+WEluY2x1ZGVUYXNrXzk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WEluY2x1ZGVUYXNrXzk8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xDb3JlUGx1Z2luX2JhZEluaXRpYWxpemF0aW9uRGF0YSI+WFNMQ29yZVBsdWdpbl9iYWRJbml0aWFsaXphdGlvbkRhdGE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMQ29yZVBsdWdpbl9iYWRJbml0aWFsaXphdGlvbkRhdGE8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xDb3JlUGx1Z2luX2NvcmVFcnJvciI+WFNMQ29yZVBsdWdpbl9jb3JlRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMQ29yZVBsdWdpbl9jb3JlRXJyb3I8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb24iPlhTTENvcmVQbHVnaW5fcGFyc2VyQ29uZmlndXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb248L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMSI+WFNMVmFsaWRhdG9yXzE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzE8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzEwIj5YU0xWYWxpZGF0b3JfMTA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzEwPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TdHlsZXNoZWV0IGltcG9ydGluZyBpdHNlbGY8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xMSI+WFNMVmFsaWRhdG9yXzExPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xMTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGVtcGxhdGUgY29uZmxpY3QgKGludGVybmFsKTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzEyIj5YU0xWYWxpZGF0b3JfMTI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzEyPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UZW1wbGF0ZSBjb25mbGljdCAoaW5jbHVkZWQpPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTMiPlhTTFZhbGlkYXRvcl8xMzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRlbXBsYXRlIGNvbmZsaWN0IChleHRlcm5hbCk8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xNCI+WFNMVmFsaWRhdG9yXzE0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xNDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGFyYW1ldGVyIG1pc3NpbmcgbmFtZSBhdHRyaWJ1dGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xNSI+WFNMVmFsaWRhdG9yXzE1PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xNTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGFyYW1ldGVyIHdpdGggZW1wdHkgbmFtZSBhdHRyaWJ1dGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xNiI+WFNMVmFsaWRhdG9yXzE2PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xNjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+RHVwbGljYXRlIHBhcmFtZXRlcjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzE4Ij5YU0xWYWxpZGF0b3JfMTg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzE4PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5VbnJlc29sdmVkIG5hbWVkIHRlbXBsYXRlPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMiI+WFNMVmFsaWRhdG9yXzI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzI8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPkNpcmN1bGFyIHJlZmVyZW5jZTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzIwIj5YU0xWYWxpZGF0b3JfMjA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzIwPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXJhbWV0ZXIgd2l0aG91dCBkZWZhdWx0IHZhbHVlPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMjIiPlhTTFZhbGlkYXRvcl8yMjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMjI8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhcmFtZXRlciBkb2VzIG5vdCBleGlzdDwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzIzIj5YU0xWYWxpZGF0b3JfMjM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzIzPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5ocmVmIGF0dHJpYnV0ZSBpcyByZXF1aXJlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzMiPlhTTFZhbGlkYXRvcl8zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8zPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5NaXNzaW5nIHBhcmFtZXRlcjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzQiPlhTTFZhbGlkYXRvcl80PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl80PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5VbnJlc29sdmVkIGluY2x1ZGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl82Ij5YU0xWYWxpZGF0b3JfNjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfNjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U3R5bGVzaGVldCBpbmNsdWRlcyBpdHNlbGY8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl84Ij5YU0xWYWxpZGF0b3JfODwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfODwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VW5yZXNvbHZlZCBpbXBvcnQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9NZXNzYWdlcyI+TWVzc2FnZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWxvYWRNZXNzYWdlcyI+cmVsb2FkTWVzc2FnZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbG9hZE1lc3NhZ2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRPRE86IEFkZCBKYXZhRG9jPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTZhYTgzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVmFsaWRhdGlvblByZWZlcmVuY2VzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmFsaWRhdGlvblByZWZlcmVuY2VzPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5QcmVmZXJlbmNlIGNvbnN0YW50cyBzcGVjaWZpYyB0byB0aGUgWFNMIHZhbGlkYXRvci48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9DQUxMX1RFTVBMQVRFUyI+Q0FMTF9URU1QTEFURVM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGxldmVsIGF0IHdoaWNoIGFuIHVucmVzb2x2ZWQgY2FsbGVkIHRlbXBsYXRlIGlzIHJlcG9ydGVkLiAKLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9DSVJDVUxBUl9SRUYiPkNJUkNVTEFSX1JFRjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYW4gaW5jbHVkZS9pbXBvcnQgY2lyY3VsYXIgcmVmZXJlbmNlcyBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9EVVBMSUNBVEVfUEFSQU1FVEVSIj5EVVBMSUNBVEVfUEFSQU1FVEVSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgaXMgcmVwb3J0ZWQuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb25lIG9mICZsdDtjb2RlJmd0O0lNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPJmx0Oy9jb2RlJmd0OwotICZsdDsvcCZndDs8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRU1QVFlfUEFSQU0iPkVNUFRZX1BBUkFNPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB0aGF0IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGFuZCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgaXMgcmVwb3J0ZWQuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb25lIG9mICZsdDtjb2RlJmd0O0lNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPJmx0Oy9jb2RlJmd0OwotICZsdDsvcCZndDs8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTUFYX0VSUk9SUyI+TUFYX0VSUk9SUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgcGVyIFhTTCBmaWxlLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9mIHR5cGUgJmx0O2NvZGUmZ3Q7SW50ZWdlciZsdDsvY29kZSZndDsuCi0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NSVNTSU5HX0lOQ0xVREUiPk1JU1NJTkdfSU5DTFVERTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYW4gdW5yZXNvbHZlZCBpbXBvcnQgb3IgaW5jbHVkZWQgaXMgcmVwb3J0ZWQuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb25lIG9mICZsdDtjb2RlJmd0O0lNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPJmx0Oy9jb2RlJmd0OwotICZsdDsvcCZndDs8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTUlTU0lOR19QQVJBTSI+TUlTU0lOR19QQVJBTTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYSBtaXNzaW5nIHBhcmFtZXRlciBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OQU1FX0FUVFJJQlVURV9FTVBUWSI+TkFNRV9BVFRSSUJVVEVfRU1QVFk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGxldmVsIGF0IHdoaWNoIGEgcGFyYW1ldGVyIHdpdGggYW4gZW1wdHkgbmFtZSBhdHRyaWJ1dGUgaXMgcmVwb3J0ZWQuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb25lIG9mICZsdDtjb2RlJmd0O0lNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPJmx0Oy9jb2RlJmd0OwotICZsdDsvcCZndDs8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTkFNRV9BVFRSSUJVVEVfTUlTU0lORyI+TkFNRV9BVFRSSUJVVEVfTUlTU0lORzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYSBwYXJhbWV0ZXIgd2l0aG91dCBhIG5hbWUgYXR0cmlidXRlIGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RFTVBMQVRFX0NPTkZMSUNUIj5URU1QTEFURV9DT05GTElDVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYSB0ZW1wbGF0ZSBjb25mbGljdCBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSFMiPlhQQVRIUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYW4gaW52YWxpZCBYUGF0aCBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9WYWxpZGF0aW9uUHJlZmVyZW5jZXMiPlZhbGlkYXRpb25QcmVmZXJlbmNlczwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9DQUxMX1RFTVBMQVRFUyI+Q0FMTF9URU1QTEFURVM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Q0FMTF9URU1QTEFURVM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhbiB1bnJlc29sdmVkIGNhbGxlZCB0ZW1wbGF0ZSBpcyByZXBvcnRlZC4gCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NJUkNVTEFSX1JFRiI+Q0lSQ1VMQVJfUkVGPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkNJUkNVTEFSX1JFRjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGFuIGluY2x1ZGUvaW1wb3J0IGNpcmN1bGFyIHJlZmVyZW5jZXMgaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RVUExJQ0FURV9QQVJBTUVURVIiPkRVUExJQ0FURV9QQVJBTUVURVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+RFVQTElDQVRFX1BBUkFNRVRFUjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGEgZHVwbGljYXRlIHBhcmFtZXRlciBpcyByZXBvcnRlZC4KLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRU1QVFlfUEFSQU0iPkVNUFRZX1BBUkFNPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkVNUFRZX1BBUkFNPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYSBwYXJhbWV0ZXIgdGhhdCBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBhbmQgZG9lcyBub3Qgc3BlY2lmeSBhIHZhbHVlIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NQVhfRVJST1JTIj5NQVhfRVJST1JTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1BWF9FUlJPUlM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgYWxsb3dlZCBwZXIgWFNMIGZpbGUuCi0gPHA+Ci0gVmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JbnRlZ2VyPC9jb2RlPi4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NSVNTSU5HX0lOQ0xVREUiPk1JU1NJTkdfSU5DTFVERTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NSVNTSU5HX0lOQ0xVREU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhbiB1bnJlc29sdmVkIGltcG9ydCBvciBpbmNsdWRlZCBpcyByZXBvcnRlZC4KLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTUlTU0lOR19QQVJBTSI+TUlTU0lOR19QQVJBTTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NSVNTSU5HX1BBUkFNPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYSBtaXNzaW5nIHBhcmFtZXRlciBpcyByZXBvcnRlZC4KLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTkFNRV9BVFRSSUJVVEVfRU1QVFkiPk5BTUVfQVRUUklCVVRFX0VNUFRZPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5BTUVfQVRUUklCVVRFX0VNUFRZPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYSBwYXJhbWV0ZXIgd2l0aCBhbiBlbXB0eSBuYW1lIGF0dHJpYnV0ZSBpcyByZXBvcnRlZC4KLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTkFNRV9BVFRSSUJVVEVfTUlTU0lORyI+TkFNRV9BVFRSSUJVVEVfTUlTU0lORzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OQU1FX0FUVFJJQlVURV9NSVNTSU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYSBwYXJhbWV0ZXIgd2l0aG91dCBhIG5hbWUgYXR0cmlidXRlIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9URU1QTEFURV9DT05GTElDVCI+VEVNUExBVEVfQ09ORkxJQ1Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VEVNUExBVEVfQ09ORkxJQ1Q8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIHRlbXBsYXRlIGNvbmZsaWN0IGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSFMiPlhQQVRIUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSFM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhbiBpbnZhbGlkIFhQYXRoIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVmFsaWRhdGlvblByZWZlcmVuY2VzIj5WYWxpZGF0aW9uUHJlZmVyZW5jZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYWxpZGF0aW9uUHJlZmVyZW5jZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MGM2ZTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMQ29yZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTENvcmU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoZSBpbnRlcmZhY2UgdG8gYWxsIGFzcGVjdHMgb2YgdGhlIFhTTCBjb3JlIGZ1bmN0aW9uYWxpdHkuCi0gPHA+Ci0gVGhpcyBpcyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgYW5kIG1haW50YWluaW5nIHRoZSBjYWNoZSBvZiBidWlsdCBYU0wKLSBtb2RlbHMuCi0gPC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMX0NPTlRFTlRfVFlQRSI+WFNMX0NPTlRFTlRfVFlQRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgWFNMIGNvbnRlbnQgdHlwZSAoPSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xfTkFNRVNQQUNFX1VSSSI+WFNMX05BTUVTUEFDRV9VUkk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIFhTTCBuYW1lc3BhY2UgVVJJICg9IGh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSk8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYnVpbGRTdHlsZXNoZWV0Ij5idWlsZFN0eWxlc2hlZXQ8L2E+KElGaWxlIGZpbGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29tcGxldGVseSByZWJ1aWxkIHRoZSBzb3VyY2UgZmlsZSBmcm9tIGl0cyBET008L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbGVhbiI+Y2xlYW48L2E+KElQcm9qZWN0IHByb2plY3QKLSAgICAgICAgICwKLSAgICAgIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDbGVhbiBhbGwgb2YgdGhlIHN0eWxlc2hlZXRzIGZyb20gdGhlIGdpdmVuIHByb2plY3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcudzNjLmRvbS5BdHRyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEN1cnJlbnRBdHRyTm9kZSI+Z2V0Q3VycmVudEF0dHJOb2RlPC9hPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhbiBBdHRyIG5vZGUgZm9yIHRoZSBjdXJyZW50IE5vZGUgaWYgb25lIGV4aXRzIGF0IHRoZSBzcGVjaWZpZWQKLSBvZmZzZXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcudzNjLmRvbS5Ob2RlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEN1cnJlbnROb2RlIj5nZXRDdXJyZW50Tm9kZTwvYT4oSURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgTm9kZSBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc2luZ2xldG9uIDxjb2RlPlhTTENvcmU8L2NvZGU+IGluc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+KElGaWxlIGZpbGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBjYWNoZWQgc3R5bGVzaGVldCwgb3IgYnVpbGQgaXQgaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBidWlsdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNYTUxGaWxlIj5pc1hNTEZpbGU8L2E+KElGaWxlIGZpbGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYW4gWE1MIGZpbGUgYnkgaW5zcGVjdGluZyBpdHMgY29udGVudAotIHR5cGVzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1hTTEZpbGUiPmlzWFNMRmlsZTwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBYU0wgZmlsZSBieSBpbnNwZWN0aW5nIGl0cyBjb250ZW50Ci0gdHlwZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzWFNMTmFtZXNwYWNlIj5pc1hTTE5hbWVzcGFjZTwvYT4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRha2VzIGEgZ2l2ZW4gPGNvZGU+Tm9kZTwvY29kZT4gYW5kIHJldHVybnMgd2hldGhlciBpdCBpcyBwYXJ0IG9mIHRoZSB0aGUKLSBYU0xUIE5hbWVzcGFjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIElGaWxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmVGaWxlIj5yZXNvbHZlRmlsZTwvYT4oSUZpbGUgY3VycmVudEZpbGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIExvY2F0ZXMgYSBmaWxlIGZvciB0aGUgZ2l2ZW4gY3VycmVudCBmaWxlIGFuZCBVUkkuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xfQ09OVEVOVF9UWVBFIj5YU0xfQ09OVEVOVF9UWVBFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTF9DT05URU5UX1RZUEU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBYU0wgY29udGVudCB0eXBlICg9IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UpPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xfTkFNRVNQQUNFX1VSSSI+WFNMX05BTUVTUEFDRV9VUkk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMX05BTUVTUEFDRV9VUkk8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBYU0wgbmFtZXNwYWNlIFVSSSAoPSBodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0pPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9idWlsZFN0eWxlc2hlZXQiPmJ1aWxkU3R5bGVzaGVldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsIDxzdHJvbmc+YnVpbGRTdHlsZXNoZWV0PC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD5Db21wbGV0ZWx5IHJlYnVpbGQgdGhlIHNvdXJjZSBmaWxlIGZyb20gaXRzIERPTTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmlsZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+IC0gdGhlIHN0eWxlc2hlZXQgbW9kZWwsIG9yIG51bGwgaWYgaXQgY291bGQgbm90IGJlIGNyZWF0ZWQuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NsZWFuIj5jbGVhbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2xlYW48L3N0cm9uZz4oSVByb2plY3QgcHJvamVjdAotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48L3A+PHA+Q2xlYW4gYWxsIG9mIHRoZSBzdHlsZXNoZWV0cyBmcm9tIHRoZSBnaXZlbiBwcm9qZWN0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJvamVjdDwvY29kZT4gLSB0aGUgcHJvamVjdCB0byBiZSBjbGVhbmVkPC9wPjxwPjxjb2RlPm1vbml0b3I8L2NvZGU+IC0gYSBwcm9ncmVzcyBtb25pdG9yIHRvIHRyYWNrIHRoZSBjbGVhbiBwcm9ncmVzczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDdXJyZW50QXR0ck5vZGUiPmdldEN1cnJlbnRBdHRyTm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5BdHRyIDxzdHJvbmc+Z2V0Q3VycmVudEF0dHJOb2RlPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PC9wPjxwPlJldHVybnMgYW4gQXR0ciBub2RlIGZvciB0aGUgY3VycmVudCBOb2RlIGlmIG9uZSBleGl0cyBhdCB0aGUgc3BlY2lmaWVkCi0gb2Zmc2V0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uQXR0cjwvY29kZT4gLSBBIHczYy5kb20uQXR0cjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDdXJyZW50Tm9kZSI+Z2V0Q3VycmVudE5vZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uTm9kZSA8c3Ryb25nPmdldEN1cnJlbnROb2RlPC9zdHJvbmc+KElEb2N1bWVudCBkb2N1bWVudAotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGN1cnJlbnQgTm9kZSBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Ob2RlPC9jb2RlPiAtIGFuIHczYy5kb20uTm9kZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUgPHN0cm9uZz5nZXRJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHNpbmdsZXRvbiA8Y29kZT5YU0xDb3JlPC9jb2RlPiBpbnN0YW5jZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlPC9jb2RlPiAtIHRoZSA8Y29kZT5YU0xDb3JlPC9jb2RlPiBpbnN0YW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwgPHN0cm9uZz5nZXRTdHlsZXNoZWV0PC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGNhY2hlZCBzdHlsZXNoZWV0LCBvciBidWlsZCBpdCBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGJ1aWx0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmlsZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+IC0gc291cmNlIGZpbGUsIG9yIG51bGwgaWYgY291bGQgbm90IGJlIGJ1aWx0PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzWE1MRmlsZSI+aXNYTUxGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1hNTEZpbGU8L3N0cm9uZz4oSUZpbGUgZmlsZSk8L2NvZGU+PC9wPjxwPkRldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGFuIFhNTCBmaWxlIGJ5IGluc3BlY3RpbmcgaXRzIGNvbnRlbnQKLSB0eXBlcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+IC0gdGhlIGZpbGUgdG8gaW5zcGVjdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIHRoaXMgZmlsZSBpcyBhbiBYTUwgZmlsZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc1hTTEZpbGUiPmlzWFNMRmlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNYU0xGaWxlPC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD5EZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBYU0wgZmlsZSBieSBpbnNwZWN0aW5nIGl0cyBjb250ZW50Ci0gdHlwZXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPiAtIHRoZSBmaWxlIHRvIGluc3BlY3Q8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBpZiB0aGlzIGZpbGUgaXMgYW4gWFNMIGZpbGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNYU0xOYW1lc3BhY2UiPmlzWFNMTmFtZXNwYWNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1hTTE5hbWVzcGFjZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjwvcD48cD5UYWtlcyBhIGdpdmVuIDxjb2RlPk5vZGU8L2NvZGU+IGFuZCByZXR1cm5zIHdoZXRoZXIgaXQgaXMgcGFydCBvZiB0aGUgdGhlCi0gWFNMVCBOYW1lc3BhY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIFRoZSBOb2RlIHRvIGJlIGNoZWNrZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgcGFydCBvZiB0aGUgWFNMVCBuYW1lc3BhY2UsIGZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZUZpbGUiPnJlc29sdmVGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElGaWxlIDxzdHJvbmc+cmVzb2x2ZUZpbGU8L3N0cm9uZz4oSUZpbGUgY3VycmVudEZpbGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3A+PHA+TG9jYXRlcyBhIGZpbGUgZm9yIHRoZSBnaXZlbiBjdXJyZW50IGZpbGUgYW5kIFVSSS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmN1cnJlbnRGaWxlPC9jb2RlPiAtIHRoZSBmaWxlIHRvIHJlc29sdmUgcmVsYXRpdmUgdG88L3A+PHA+PGNvZGU+dXJpPC9jb2RlPiAtIHRoZSByZWxhdGl2ZSBVUkk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklGaWxlPC9jb2RlPiAtIHRoZSBmaWxlIGF0IHRoZSBVUkkgcmVsYXRpdmUgdG8gdGhpcyA8Y29kZT5jdXJyZW50RmlsZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5NZXNzYWdlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5NZXNzYWdlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDQ3OGJjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuTWVzc2FnZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBNZXNzYWdlczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+Ci1leHRlbmRzIE5MUzwvcHJlPjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza18wIj5YSW5jbHVkZVRhc2tfMDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfMSI+WEluY2x1ZGVUYXNrXzE8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzIiPlhJbmNsdWRlVGFza18yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza18zIj5YSW5jbHVkZVRhc2tfMzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfNCI+WEluY2x1ZGVUYXNrXzQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzUiPlhJbmNsdWRlVGFza181PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza182Ij5YSW5jbHVkZVRhc2tfNjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfNyI+WEluY2x1ZGVUYXNrXzc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzgiPlhJbmNsdWRlVGFza184PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza185Ij5YSW5jbHVkZVRhc2tfOTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xDb3JlUGx1Z2luX2JhZEluaXRpYWxpemF0aW9uRGF0YSI+WFNMQ29yZVBsdWdpbl9iYWRJbml0aWFsaXphdGlvbkRhdGE8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMQ29yZVBsdWdpbl9jb3JlRXJyb3IiPlhTTENvcmVQbHVnaW5fY29yZUVycm9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTENvcmVQbHVnaW5fcGFyc2VyQ29uZmlndXJhdGlvbiI+WFNMQ29yZVBsdWdpbl9wYXJzZXJDb25maWd1cmF0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xIj5YU0xWYWxpZGF0b3JfMTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzEwIj5YU0xWYWxpZGF0b3JfMTA8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU3R5bGVzaGVldCBpbXBvcnRpbmcgaXRzZWxmPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xMSI+WFNMVmFsaWRhdG9yXzExPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRlbXBsYXRlIGNvbmZsaWN0IChpbnRlcm5hbCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzEyIj5YU0xWYWxpZGF0b3JfMTI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGVtcGxhdGUgY29uZmxpY3QgKGluY2x1ZGVkKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTMiPlhTTFZhbGlkYXRvcl8xMzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUZW1wbGF0ZSBjb25mbGljdCAoZXh0ZXJuYWwpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xNCI+WFNMVmFsaWRhdG9yXzE0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcmFtZXRlciBtaXNzaW5nIG5hbWUgYXR0cmlidXRlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xNSI+WFNMVmFsaWRhdG9yXzE1PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcmFtZXRlciB3aXRoIGVtcHR5IG5hbWUgYXR0cmlidXRlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xNiI+WFNMVmFsaWRhdG9yXzE2PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIER1cGxpY2F0ZSBwYXJhbWV0ZXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzE4Ij5YU0xWYWxpZGF0b3JfMTg8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVW5yZXNvbHZlZCBuYW1lZCB0ZW1wbGF0ZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMiI+WFNMVmFsaWRhdG9yXzI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2lyY3VsYXIgcmVmZXJlbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8yMCI+WFNMVmFsaWRhdG9yXzIwPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhcmFtZXRlciB3aXRob3V0IGRlZmF1bHQgdmFsdWU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzIyIj5YU0xWYWxpZGF0b3JfMjI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyYW1ldGVyIGRvZXMgbm90IGV4aXN0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8yMyI+WFNMVmFsaWRhdG9yXzIzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGhyZWYgYXR0cmlidXRlIGlzIHJlcXVpcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8zIj5YU0xWYWxpZGF0b3JfMzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBNaXNzaW5nIHBhcmFtZXRlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfNCI+WFNMVmFsaWRhdG9yXzQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVW5yZXNvbHZlZCBpbmNsdWRlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl82Ij5YU0xWYWxpZGF0b3JfNjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdHlsZXNoZWV0IGluY2x1ZGVzIGl0c2VsZjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfOCI+WFNMVmFsaWRhdG9yXzg8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVW5yZXNvbHZlZCBpbXBvcnQ8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTWVzc2FnZXMiPk1lc3NhZ2VzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVsb2FkTWVzc2FnZXMiPnJlbG9hZE1lc3NhZ2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza18wIj5YSW5jbHVkZVRhc2tfMDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfMDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza18xIj5YSW5jbHVkZVRhc2tfMTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfMTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza18yIj5YSW5jbHVkZVRhc2tfMjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfMjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza18zIj5YSW5jbHVkZVRhc2tfMzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfMzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza180Ij5YSW5jbHVkZVRhc2tfNDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfNDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza181Ij5YSW5jbHVkZVRhc2tfNTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfNTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza182Ij5YSW5jbHVkZVRhc2tfNjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfNjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza183Ij5YSW5jbHVkZVRhc2tfNzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfNzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza184Ij5YSW5jbHVkZVRhc2tfODwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfODwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hJbmNsdWRlVGFza185Ij5YSW5jbHVkZVRhc2tfOTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YSW5jbHVkZVRhc2tfOTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTENvcmVQbHVnaW5fYmFkSW5pdGlhbGl6YXRpb25EYXRhIj5YU0xDb3JlUGx1Z2luX2JhZEluaXRpYWxpemF0aW9uRGF0YTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xDb3JlUGx1Z2luX2JhZEluaXRpYWxpemF0aW9uRGF0YTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTENvcmVQbHVnaW5fY29yZUVycm9yIj5YU0xDb3JlUGx1Z2luX2NvcmVFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xDb3JlUGx1Z2luX2NvcmVFcnJvcjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTENvcmVQbHVnaW5fcGFyc2VyQ29uZmlndXJhdGlvbiI+WFNMQ29yZVBsdWdpbl9wYXJzZXJDb25maWd1cmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTENvcmVQbHVnaW5fcGFyc2VyQ29uZmlndXJhdGlvbjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xIj5YU0xWYWxpZGF0b3JfMTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTAiPlhTTFZhbGlkYXRvcl8xMDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTA8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlN0eWxlc2hlZXQgaW1wb3J0aW5nIGl0c2VsZjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzExIj5YU0xWYWxpZGF0b3JfMTE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzExPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UZW1wbGF0ZSBjb25mbGljdCAoaW50ZXJuYWwpPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTIiPlhTTFZhbGlkYXRvcl8xMjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTI8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRlbXBsYXRlIGNvbmZsaWN0IChpbmNsdWRlZCk8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xMyI+WFNMVmFsaWRhdG9yXzEzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xMzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGVtcGxhdGUgY29uZmxpY3QgKGV4dGVybmFsKTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzE0Ij5YU0xWYWxpZGF0b3JfMTQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzE0PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXJhbWV0ZXIgbWlzc2luZyBuYW1lIGF0dHJpYnV0ZTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzE1Ij5YU0xWYWxpZGF0b3JfMTU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzE1PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXJhbWV0ZXIgd2l0aCBlbXB0eSBuYW1lIGF0dHJpYnV0ZTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzE2Ij5YU0xWYWxpZGF0b3JfMTY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzE2PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5EdXBsaWNhdGUgcGFyYW1ldGVyPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTgiPlhTTFZhbGlkYXRvcl8xODwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTg8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlVucmVzb2x2ZWQgbmFtZWQgdGVtcGxhdGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8yIj5YU0xWYWxpZGF0b3JfMjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+Q2lyY3VsYXIgcmVmZXJlbmNlPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMjAiPlhTTFZhbGlkYXRvcl8yMDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMjA8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhcmFtZXRlciB3aXRob3V0IGRlZmF1bHQgdmFsdWU8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8yMiI+WFNMVmFsaWRhdG9yXzIyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8yMjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGFyYW1ldGVyIGRvZXMgbm90IGV4aXN0PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMjMiPlhTTFZhbGlkYXRvcl8yMzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMjM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPmhyZWYgYXR0cmlidXRlIGlzIHJlcXVpcmVkPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMyI+WFNMVmFsaWRhdG9yXzM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPk1pc3NpbmcgcGFyYW1ldGVyPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfNCI+WFNMVmFsaWRhdG9yXzQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlVucmVzb2x2ZWQgaW5jbHVkZTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzYiPlhTTFZhbGlkYXRvcl82PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl82PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5TdHlsZXNoZWV0IGluY2x1ZGVzIGl0c2VsZjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzgiPlhTTFZhbGlkYXRvcl84PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl84PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5VbnJlc29sdmVkIGltcG9ydDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX01lc3NhZ2VzIj5NZXNzYWdlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbG9hZE1lc3NhZ2VzIj5yZWxvYWRNZXNzYWdlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVsb2FkTWVzc2FnZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VE9ETzogQWRkIEphdmFEb2M8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZkYmY3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xDb3JlUGx1Z2luPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMQ29yZVBsdWdpbjwvc3Ryb25nPgotZXh0ZW5kcyBQbHVnaW48L3ByZT5UaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUExVR0lOX0lEIj5QTFVHSU5fSUQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVVNFX1BST0pFQ1RfU0VUVElOR1MiPlVTRV9QUk9KRUNUX1NFVFRJTkdTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xDb3JlUGx1Z2luIj5YU0xDb3JlUGx1Z2luPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldERlZmF1bHQiPmdldERlZmF1bHQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGYWN0b3J5Ij5nZXRGYWN0b3J5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJuIHRoZSByZWdpc3RlcmVkIFNBWCBwYXJzZXIgZmFjdG9yeSBvciBudWxsIGlmIG9uZQotIGRvZXMgbm90IGV4aXN0LgkgKiBAcmV0dXJuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xvZyI+bG9nPC9hPihJU3RhdHVzIHN0YXR1cyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBMb2dzIHRoZSBzcGVjaWZpZWQgc3RhdHVzIHdpdGggdGhpcyBwbHVnLWluJ3MgbG9nLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgSVN0YXR1czwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXdFcnJvclN0YXR1cyI+bmV3RXJyb3JTdGF0dXM8L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSBleGNlcHRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhIG5ldyBlcnJvciBzdGF0dXMgZm9yIHRoaXMgcGx1Zy1pbiB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcCI+c3RvcDwvYT4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfUExVR0lOX0lEIj5QTFVHSU5fSUQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+UExVR0lOX0lEPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVVNFX1BST0pFQ1RfU0VUVElOR1MiPlVTRV9QUk9KRUNUX1NFVFRJTkdTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlVTRV9QUk9KRUNUX1NFVFRJTkdTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xDb3JlUGx1Z2luIj5YU0xDb3JlUGx1Z2luPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMQ29yZVBsdWdpbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgY29uc3RydWN0b3I8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREZWZhdWx0Ij5nZXREZWZhdWx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luIDxzdHJvbmc+Z2V0RGVmYXVsdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luPC9jb2RlPiAtIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmFjdG9yeSI+Z2V0RmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5IDxzdHJvbmc+Z2V0RmFjdG9yeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm4gdGhlIHJlZ2lzdGVyZWQgU0FYIHBhcnNlciBmYWN0b3J5IG9yIG51bGwgaWYgb25lCi0gZG9lcyBub3QgZXhpc3QuCSAqIEByZXR1cm48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk8L2NvZGU+IC0gcmV0dXJucyBhIFNBWFBhcnNlckZhY3Rvcnk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbG9nIj5sb2c8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmxvZzwvc3Ryb25nPihJU3RhdHVzIHN0YXR1cyk8L2NvZGU+PC9wPjxwPkxvZ3MgdGhlIHNwZWNpZmllZCBzdGF0dXMgd2l0aCB0aGlzIHBsdWctaW4ncyBsb2cuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdGF0dXM8L2NvZGU+IC0gc3RhdHVzIHRvIGxvZzwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXdFcnJvclN0YXR1cyI+bmV3RXJyb3JTdGF0dXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSVN0YXR1cyA8c3Ryb25nPm5ld0Vycm9yU3RhdHVzPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSBleGNlcHRpb24pPC9jb2RlPjwvcD48cD5SZXR1cm5zIGEgbmV3IGVycm9yIHN0YXR1cyBmb3IgdGhpcyBwbHVnLWluIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2U8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+IC0gdGhlIG1lc3NhZ2UgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHN0YXR1czwvcD48cD48Y29kZT5leGNlcHRpb248L2NvZGU+IC0gdGhlIGV4Y2VwdGlvbiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhdHVzIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTdGF0dXM8L2NvZGU+IC0gYSBuZXcgZXJyb3Igc3RhdHVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0YXJ0Ij5zdGFydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnQ8L3N0cm9uZz4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RvcCI+c3RvcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RvcDwvc3Ryb25nPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudC5YSW5jbHVkZVRhc2suaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50LlhJbmNsdWRlVGFzay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2MzZGIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50LlhJbmNsdWRlVGFzay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQ8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWEluY2x1ZGVUYXNrPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WEluY2x1ZGVUYXNrPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5hcGFjaGUudG9vbHMuYW50LlRhc2s8L3ByZT5UaGlzIGNsYXNzIHByb3ZpZGVzIGFuIFhJbmNsdWRlIEFOVCB0YXNrIGRlZmluaXRpb24uPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YSW5jbHVkZVRhc2siPlhJbmNsdWRlVGFzazwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhlY3V0ZSI+ZXhlY3V0ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9saXN0RmlsZXMiPmxpc3RGaWxlczwvYT4oamF2YS5pby5GaWxlIGRpcmVjdG9yeQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiByZWN1cnNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0SW4iPnNldEluPC9hPihqYXZhLmxhbmcuU3RyaW5nIGluRmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldE91dCI+c2V0T3V0PC9hPihqYXZhLmxhbmcuU3RyaW5nIG91dEZpbGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YSW5jbHVkZVRhc2siPlhJbmNsdWRlVGFzazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhJbmNsdWRlVGFzazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9leGVjdXRlIj5leGVjdXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5leGVjdXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9saXN0RmlsZXMiPmxpc3RGaWxlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiA8c3Ryb25nPmxpc3RGaWxlczwvc3Ryb25nPihqYXZhLmlvLkZpbGUgZGlyZWN0b3J5Ci0gICAgICAgICAsCi0gICAgICBib29sZWFuIHJlY3Vyc2UpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YURvYzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZGlyZWN0b3J5PC9jb2RlPjwvcD48cD48Y29kZT5yZWN1cnNlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkNvbGxlY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEluIj5zZXRJbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0SW48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbkZpbGUpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YURvYzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5GaWxlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRPdXQiPnNldE91dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0T3V0PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgb3V0RmlsZSk8L2NvZGU+PC9wPjxwPlRPRE86IEFkZCBKYXZhRG9jPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vdXRGaWxlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhTTERvY3VtZW50TG9hZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhTTERvY3VtZW50TG9hZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MjQwZDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YU0xEb2N1bWVudExvYWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2Rpbmc8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTERvY3VtZW50TG9hZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMRG9jdW1lbnRMb2FkZXI8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3REb2N1bWVudExvYWRlcjwvcHJlPlRoaXMgY2xhc3MgcmVhZHMgYW4gWFNMIGZpbGUgYW5kIGNyZWF0ZXMgYW4gWE1MIFN0cnVjdHVyZWQgTW9kZWwuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTERvY3VtZW50TG9hZGVyIj5YU0xEb2N1bWVudExvYWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElEb2N1bWVudFBhcnRpdGlvbmVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldERlZmF1bHREb2N1bWVudFBhcnRpdGlvbmVyIj5nZXREZWZhdWx0RG9jdW1lbnRQYXJ0aXRpb25lcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RG9jdW1lbnRFbmNvZGluZ0RldGVjdG9yIj5nZXREb2N1bWVudEVuY29kaW5nRGV0ZWN0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgUmVnaW9uUGFyc2VyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcnNlciI+Z2V0UGFyc2VyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3BlY0RlZmF1bHRFbmNvZGluZyI+Z2V0U3BlY0RlZmF1bHRFbmNvZGluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJRW5jb2RlZERvY3VtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25ld0VuY29kZWREb2N1bWVudCI+bmV3RW5jb2RlZERvY3VtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElEb2N1bWVudExvYWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXdJbnN0YW5jZSI+bmV3SW5zdGFuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xEb2N1bWVudExvYWRlciI+WFNMRG9jdW1lbnRMb2FkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xEb2N1bWVudExvYWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREZWZhdWx0RG9jdW1lbnRQYXJ0aXRpb25lciI+Z2V0RGVmYXVsdERvY3VtZW50UGFydGl0aW9uZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSURvY3VtZW50UGFydGl0aW9uZXIgPHN0cm9uZz5nZXREZWZhdWx0RG9jdW1lbnRQYXJ0aXRpb25lcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklEb2N1bWVudFBhcnRpdGlvbmVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREb2N1bWVudEVuY29kaW5nRGV0ZWN0b3IiPmdldERvY3VtZW50RW5jb2RpbmdEZXRlY3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3IgPHN0cm9uZz5nZXREb2N1bWVudEVuY29kaW5nRGV0ZWN0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcnNlciI+Z2V0UGFyc2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFJlZ2lvblBhcnNlciA8c3Ryb25nPmdldFBhcnNlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlJlZ2lvblBhcnNlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3BlY0RlZmF1bHRFbmNvZGluZyI+Z2V0U3BlY0RlZmF1bHRFbmNvZGluZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U3BlY0RlZmF1bHRFbmNvZGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25ld0VuY29kZWREb2N1bWVudCI+bmV3RW5jb2RlZERvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElFbmNvZGVkRG9jdW1lbnQgPHN0cm9uZz5uZXdFbmNvZGVkRG9jdW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRW5jb2RlZERvY3VtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXdJbnN0YW5jZSI+bmV3SW5zdGFuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSURvY3VtZW50TG9hZGVyIDxzdHJvbmc+bmV3SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRG9jdW1lbnRMb2FkZXI8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYxNDdjYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRCdWlsZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3R5bGVzaGVldEJ1aWxkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdHlsZXNoZWV0QnVpbGRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QSBidWlsZGVyIHRoYXQgY3JlYXRlcyBhbmQgbWFpbnRhaW5zIGEgY2FjaGUgb2YgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4ncy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRCdWlsZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc2luZ2xldG9uIDxjb2RlPlN0eWxlc2hlZXRCdWlsZGVyPC9jb2RlPiBpbnN0YW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT4oSUZpbGUgZmlsZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBmb3JjZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIDxjb2RlPlN0eWxlc2hlZXQ8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZmlsZS4gSWYgZWl0aGVyCi0gdGhlIDxjb2RlPlN0eWxlc2hlZXQ8L2NvZGU+IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZCBvcgotIDxjb2RlPmZvcmNlPC9jb2RlPiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4gaXMKLSBidWlsdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmVsZWFzZXMgYWxsIHRoZSBjYWNoZWQgc3R5bGVzaGVldHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVsZWFzZSI+cmVsZWFzZTwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXIgPHN0cm9uZz5nZXRJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHNpbmdsZXRvbiA8Y29kZT5TdHlsZXNoZWV0QnVpbGRlcjwvY29kZT4gaW5zdGFuY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXI8L2NvZGU+IC0gdGhlIDxjb2RlPlN0eWxlc2hlZXRCdWlsZGVyPC9jb2RlPiBpbnN0YW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IDxzdHJvbmc+Z2V0U3R5bGVzaGVldDwvc3Ryb25nPihJRmlsZSBmaWxlCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGZvcmNlKTwvY29kZT48L3A+PHA+R2V0IHRoZSA8Y29kZT5TdHlsZXNoZWV0PC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGZpbGUuIElmIGVpdGhlcgotIHRoZSA8Y29kZT5TdHlsZXNoZWV0PC9jb2RlPiBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQgb3IKLSA8Y29kZT5mb3JjZTwvY29kZT4gaXMgc3BlY2lmaWVkIHRoZW4gdGhlIDxjb2RlPlN0eWxlc2hlZXQ8L2NvZGU+IGlzCi0gYnVpbHQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPiAtIHRoZSBYU0wgZmlsZTwvcD48cD48Y29kZT5mb3JjZTwvY29kZT4gLSA8Y29kZT50cnVlPC9jb2RlPiB0byBmb3JjZSBhIHBhcnNlIG9mIHRoZSBmaWxlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDwvY29kZT4gLSB0aGUgPGNvZGU+U3R5bGVzaGVldDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVsZWFzZSI+cmVsZWFzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVsZWFzZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZWxlYXNlcyBhbGwgdGhlIGNhY2hlZCBzdHlsZXNoZWV0cy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVsZWFzZSI+cmVsZWFzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVsZWFzZTwvc3Ryb25nPihJRmlsZSBmaWxlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFhZDVkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3R5bGVzaGVldFBhcnNlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0eWxlc2hlZXRQYXJzZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdHlsZXNoZWV0UGFyc2VyIj5TdHlsZXNoZWV0UGFyc2VyPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfd2Fsa0RvY3VtZW50Ij53YWxrRG9jdW1lbnQ8L2E+KElET01Eb2N1bWVudCBkb2N1bWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdHlsZXNoZWV0UGFyc2VyIj5TdHlsZXNoZWV0UGFyc2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U3R5bGVzaGVldFBhcnNlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2Rfd2Fsa0RvY3VtZW50Ij53YWxrRG9jdW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPndhbGtEb2N1bWVudDwvc3Ryb25nPihJRE9NRG9jdW1lbnQgZG9jdW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMmFhNjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyRGF0YS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0eWxlc2hlZXRQYXJzZXJEYXRhPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3R5bGVzaGVldFBhcnNlckRhdGE8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoaXMgY2xhc3MgaXMgdXNlZCB0byBob2xkIERhdGEgbmVjZXNzYXJ5IGZvciBwYXJzaW5nIGFuZCB3YWxraW5nCi0gYW4gWFNMIFN0eWxlc2hlZXQgaW50byBhIE1vZGVsLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0eWxlc2hlZXRQYXJzZXJEYXRhIj5TdHlsZXNoZWV0UGFyc2VyRGF0YTwvYT48L3N0cm9uZz4oamF2YS51dGlsLlN0YWNrIGVsZW1lbnRTdGFjawotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLlN0YWNrIGNhbGxUZW1wbGF0ZXMKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5TdGFjayBmdW5jdGlvbnMpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLlN0YWNrPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENhbGxUZW1wbGF0ZXMiPmdldENhbGxUZW1wbGF0ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEN1cnJlbnRUZW1wbGF0ZSI+Z2V0Q3VycmVudFRlbXBsYXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5TdGFjazwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbGVtZW50U3RhY2siPmdldEVsZW1lbnRTdGFjazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuU3RhY2s8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RnVuY3Rpb25zIj5nZXRGdW5jdGlvbnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50RWwiPmdldFBhcmVudEVsPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRDYWxsVGVtcGxhdGVzIj5zZXRDYWxsVGVtcGxhdGVzPC9hPihqYXZhLnV0aWwuU3RhY2sgY2FsbFRlbXBsYXRlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRDdXJyZW50VGVtcGxhdGUiPnNldEN1cnJlbnRUZW1wbGF0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlIGN1cnJlbnRUZW1wbGF0ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRFbGVtZW50U3RhY2siPnNldEVsZW1lbnRTdGFjazwvYT4oamF2YS51dGlsLlN0YWNrIGVsZW1lbnRTdGFjayk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRGdW5jdGlvbnMiPnNldEZ1bmN0aW9uczwvYT4oamF2YS51dGlsLlN0YWNrIGZ1bmN0aW9ucyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRQYXJlbnRFbCI+c2V0UGFyZW50RWw8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IHBhcmVudEVsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFN0eWxlc2hlZXQiPnNldFN0eWxlc2hlZXQ8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHNmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0eWxlc2hlZXRQYXJzZXJEYXRhIj5TdHlsZXNoZWV0UGFyc2VyRGF0YTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0eWxlc2hlZXRQYXJzZXJEYXRhPC9zdHJvbmc+KGphdmEudXRpbC5TdGFjayBlbGVtZW50U3RhY2sKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5TdGFjayBjYWxsVGVtcGxhdGVzCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuU3RhY2sgZnVuY3Rpb25zKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q2FsbFRlbXBsYXRlcyI+Z2V0Q2FsbFRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuU3RhY2sgPHN0cm9uZz5nZXRDYWxsVGVtcGxhdGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLlN0YWNrPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDdXJyZW50VGVtcGxhdGUiPmdldEN1cnJlbnRUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUgPHN0cm9uZz5nZXRDdXJyZW50VGVtcGxhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVsZW1lbnRTdGFjayI+Z2V0RWxlbWVudFN0YWNrPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5TdGFjayA8c3Ryb25nPmdldEVsZW1lbnRTdGFjazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5TdGFjazwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RnVuY3Rpb25zIj5nZXRGdW5jdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLlN0YWNrIDxzdHJvbmc+Z2V0RnVuY3Rpb25zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLlN0YWNrPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJlbnRFbCI+Z2V0UGFyZW50RWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgPHN0cm9uZz5nZXRQYXJlbnRFbDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IDxzdHJvbmc+Z2V0U3R5bGVzaGVldDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRDYWxsVGVtcGxhdGVzIj5zZXRDYWxsVGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRDYWxsVGVtcGxhdGVzPC9zdHJvbmc+KGphdmEudXRpbC5TdGFjayBjYWxsVGVtcGxhdGVzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jYWxsVGVtcGxhdGVzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRDdXJyZW50VGVtcGxhdGUiPnNldEN1cnJlbnRUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0Q3VycmVudFRlbXBsYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSBjdXJyZW50VGVtcGxhdGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmN1cnJlbnRUZW1wbGF0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0RWxlbWVudFN0YWNrIj5zZXRFbGVtZW50U3RhY2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEVsZW1lbnRTdGFjazwvc3Ryb25nPihqYXZhLnV0aWwuU3RhY2sgZWxlbWVudFN0YWNrKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50U3RhY2s8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEZ1bmN0aW9ucyI+c2V0RnVuY3Rpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRGdW5jdGlvbnM8L3N0cm9uZz4oamF2YS51dGlsLlN0YWNrIGZ1bmN0aW9ucyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZnVuY3Rpb25zPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRQYXJlbnRFbCI+c2V0UGFyZW50RWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFBhcmVudEVsPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IHBhcmVudEVsKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnRFbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0U3R5bGVzaGVldCI+c2V0U3R5bGVzaGVldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0U3R5bGVzaGVldDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c2Y8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMRWxlbWVudEZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMRWxlbWVudEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRkY2FiMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTEVsZW1lbnRGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMRWxlbWVudEZhY3Rvcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xFbGVtZW50RmFjdG9yeTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QSBGYWN0b3J5IHRoYXQgY3JlYXRlcyBYU0wgRWxlbWVudHMgb2YgdGhlIHJlcXVlc3RlZCB0eXBlLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMRWxlbWVudEZhY3RvcnkiPlhTTEVsZW1lbnRGYWN0b3J5PC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlckRhdGEgZGF0YQotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uRWxlbWVudCBlbGVtZW50KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNhbGxUZW1wbGF0ZSI+Y3JlYXRlQ2FsbFRlbXBsYXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUZ1bmN0aW9uIj5jcmVhdGVGdW5jdGlvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVJbXBvcnQiPmNyZWF0ZUltcG9ydDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVJbmNsdWRlIj5jcmVhdGVJbmNsdWRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVBhcmFtYXRlciI+Y3JlYXRlUGFyYW1hdGVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVN0eWxlU2hlZXQiPmNyZWF0ZVN0eWxlU2hlZXQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGVtcGxhdGUiPmNyZWF0ZVRlbXBsYXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVZhcmlhYmxlIj5jcmVhdGVWYXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgeHNsRWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVdpdGhQYXJhbVBhcm0iPmNyZWF0ZVdpdGhQYXJhbVBhcm08L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlWFNMRWxlbWVudCI+Y3JlYXRlWFNMRWxlbWVudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTEVsZW1lbnRGYWN0b3J5Ij5YU0xFbGVtZW50RmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTEVsZW1lbnRGYWN0b3J5PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyRGF0YSBkYXRhCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5FbGVtZW50IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDYWxsVGVtcGxhdGUiPmNyZWF0ZUNhbGxUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZUNhbGxUZW1wbGF0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVGdW5jdGlvbiI+Y3JlYXRlRnVuY3Rpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgPHN0cm9uZz5jcmVhdGVGdW5jdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVJbXBvcnQiPmNyZWF0ZUltcG9ydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZUltcG9ydDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVJbmNsdWRlIj5jcmVhdGVJbmNsdWRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlSW5jbHVkZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVQYXJhbWF0ZXIiPmNyZWF0ZVBhcmFtYXRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZVBhcmFtYXRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVTdHlsZVNoZWV0Ij5jcmVhdGVTdHlsZVNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlU3R5bGVTaGVldDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVUZW1wbGF0ZSI+Y3JlYXRlVGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgPHN0cm9uZz5jcmVhdGVUZW1wbGF0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVWYXJpYWJsZSI+Y3JlYXRlVmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgPHN0cm9uZz5jcmVhdGVWYXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCB4c2xFbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHNsRWw8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlV2l0aFBhcmFtUGFybSI+Y3JlYXRlV2l0aFBhcmFtUGFybTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZVdpdGhQYXJhbVBhcm08L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlWFNMRWxlbWVudCI+Y3JlYXRlWFNMRWxlbWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZVhTTEVsZW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xNb2RlbE9iamVjdEZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMTW9kZWxPYmplY3RGYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOGM2ZDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xNb2RlbE9iamVjdEZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xNb2RlbE9iamVjdEZhY3Rvcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xNb2RlbE9iamVjdEZhY3Rvcnk8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xNb2RlbE9iamVjdEZhY3RvcnkiPlhTTE1vZGVsT2JqZWN0RmFjdG9yeTwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uRWxlbWVudCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCB4c2xFbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhIGRhdGEpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlWFNMTW9kZWxPYmplY3QiPmNyZWF0ZVhTTE1vZGVsT2JqZWN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhbiBYU0wgTW9kZWwgT2JqZWN0IG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTE1vZGVsT2JqZWN0RmFjdG9yeSI+WFNMTW9kZWxPYmplY3RGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMTW9kZWxPYmplY3RGYWN0b3J5PC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgZWxlbWVudAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgeHNsRWwKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyRGF0YSBkYXRhKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlWFNMTW9kZWxPYmplY3QiPmNyZWF0ZVhTTE1vZGVsT2JqZWN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlWFNMTW9kZWxPYmplY3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhbiBYU0wgTW9kZWwgT2JqZWN0IG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvclhTTC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9yWFNMLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3Zjg0ZDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9yWFNMLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBNb2RlbEhhbmRsZXJGb3JYU0w8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Nb2RlbEhhbmRsZXJGb3JYU0w8L3N0cm9uZz4KLWV4dGVuZHMgTW9kZWxIYW5kbGVyRm9yWE1MPC9wcmU+UHJvdmlkZXMgZ2VuZXJpYyBYTUwgbW9kZWwgaGFuZGxpbmcuIEl0IGlzIGFsc28gbWFya2VkIGFzIHRoZSBkZWZhdWx0Ci0gY29udGVudCB0eXBlIGhhbmRsZXIuIFRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLSBkZWZhdWx0Ljxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9Bc3NvY2lhdGVkQ29udGVudFR5cGVJRCI+QXNzb2NpYXRlZENvbnRlbnRUeXBlSUQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTmVlZHMgdG8gbWF0Y2ggd2hhdCdzIGluIHBsdWdpbiByZWdpc3RyeS4gSW4gZmFjdCwgY2FuIGJlIG92ZXJ3cml0dGVuCi0gYXQgcnVuIHRpbWUgd2l0aCB3aGF0J3MgaW4gcmVnaXN0cnkhIChzbyBzaG91bGQgbmV2ZXIgYmUgJ2ZpbmFsJyk8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTW9kZWxIYW5kbGVyRm9yWFNMIj5Nb2RlbEhhbmRsZXJGb3JYU0w8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRMb2FkZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RG9jdW1lbnRMb2FkZXIiPmdldERvY3VtZW50TG9hZGVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElEb2N1bWVudENoYXJzZXREZXRlY3RvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbmNvZGluZ0RldGVjdG9yIj5nZXRFbmNvZGluZ0RldGVjdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElNb2RlbExvYWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbExvYWRlciI+Z2V0TW9kZWxMb2FkZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0Fzc29jaWF0ZWRDb250ZW50VHlwZUlEIj5Bc3NvY2lhdGVkQ29udGVudFR5cGVJRDwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5Bc3NvY2lhdGVkQ29udGVudFR5cGVJRDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+TmVlZHMgdG8gbWF0Y2ggd2hhdCdzIGluIHBsdWdpbiByZWdpc3RyeS4gSW4gZmFjdCwgY2FuIGJlIG92ZXJ3cml0dGVuCi0gYXQgcnVuIHRpbWUgd2l0aCB3aGF0J3MgaW4gcmVnaXN0cnkhIChzbyBzaG91bGQgbmV2ZXIgYmUgJ2ZpbmFsJyk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Nb2RlbEhhbmRsZXJGb3JYU0wiPk1vZGVsSGFuZGxlckZvclhTTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk1vZGVsSGFuZGxlckZvclhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREb2N1bWVudExvYWRlciI+Z2V0RG9jdW1lbnRMb2FkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSURvY3VtZW50TG9hZGVyIDxzdHJvbmc+Z2V0RG9jdW1lbnRMb2FkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRG9jdW1lbnRMb2FkZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVuY29kaW5nRGV0ZWN0b3IiPmdldEVuY29kaW5nRGV0ZWN0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSURvY3VtZW50Q2hhcnNldERldGVjdG9yIDxzdHJvbmc+Z2V0RW5jb2RpbmdEZXRlY3Rvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklEb2N1bWVudENoYXJzZXREZXRlY3RvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxMb2FkZXIiPmdldE1vZGVsTG9hZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElNb2RlbExvYWRlciA8c3Ryb25nPmdldE1vZGVsTG9hZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SU1vZGVsTG9hZGVyPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YU0xNb2RlbExvYWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWFNMTW9kZWxMb2FkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAyNTMxOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YU0xNb2RlbExvYWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMTW9kZWxMb2FkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xNb2RlbExvYWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBYTUxNb2RlbExvYWRlcjwvcHJlPlRoaXMgY2xhc3MgcmVhZHMgYW4gWE1MIGZpbGUgYW5kIGNyZWF0ZXMgYW4gWE1MIFN0cnVjdHVyZWQgTW9kZWwuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTE1vZGVsTG9hZGVyIj5YU0xNb2RlbExvYWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElEb2N1bWVudExvYWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREb2N1bWVudExvYWRlciI+Z2V0RG9jdW1lbnRMb2FkZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSU1vZGVsTG9hZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25ld0luc3RhbmNlIj5uZXdJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJU3RydWN0dXJlZE1vZGVsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25ld01vZGVsIj5uZXdNb2RlbDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZUxvYWRBZGFwdCI+cHJlTG9hZEFkYXB0PC9hPihJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xNb2RlbExvYWRlciI+WFNMTW9kZWxMb2FkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xNb2RlbExvYWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5YTUxMb2FkZXIgY29uc3RydWN0b3IgY29tbWVudC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREb2N1bWVudExvYWRlciI+Z2V0RG9jdW1lbnRMb2FkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSURvY3VtZW50TG9hZGVyIDxzdHJvbmc+Z2V0RG9jdW1lbnRMb2FkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRG9jdW1lbnRMb2FkZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25ld0luc3RhbmNlIj5uZXdJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJTW9kZWxMb2FkZXIgPHN0cm9uZz5uZXdJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklNb2RlbExvYWRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV3TW9kZWwiPm5ld01vZGVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElTdHJ1Y3R1cmVkTW9kZWwgPHN0cm9uZz5uZXdNb2RlbDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTdHJ1Y3R1cmVkTW9kZWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByZUxvYWRBZGFwdCI+cHJlTG9hZEFkYXB0PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5wcmVMb2FkQWRhcHQ8L3N0cm9uZz4oSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cnVjdHVyZWRNb2RlbDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIuWFNMU291cmNlUGFyc2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5YU0xTb3VyY2VQYXJzZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkYzA1ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5YU0xTb3VyY2VQYXJzZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFNvdXJjZVBhcnNlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFNvdXJjZVBhcnNlcjwvc3Ryb25nPgotZXh0ZW5kcyBYTUxTb3VyY2VQYXJzZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMU291cmNlUGFyc2VyIj5YU0xTb3VyY2VQYXJzZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBSZWdpb25QYXJzZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmV3SW5zdGFuY2UiPm5ld0luc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VOb2RlcyI+cGFyc2VOb2RlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFRva2VuaXplciI+c2V0VG9rZW5pemVyPC9hPihCbG9ja1Rva2VuaXplciBuZXdUb2tlbml6ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMU291cmNlUGFyc2VyIj5YU0xTb3VyY2VQYXJzZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xTb3VyY2VQYXJzZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfbmV3SW5zdGFuY2UiPm5ld0luc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFJlZ2lvblBhcnNlciA8c3Ryb25nPm5ld0luc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UmVnaW9uUGFyc2VyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJzZU5vZGVzIj5wYXJzZU5vZGVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPHN0cm9uZz5wYXJzZU5vZGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0VG9rZW5pemVyIj5zZXRUb2tlbml6ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldFRva2VuaXplcjwvc3Ryb25nPihCbG9ja1Rva2VuaXplciBuZXdUb2tlbml6ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1Rva2VuaXplcjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9ucy5YUGF0aFNlcGFyYXRvclJlZ2lvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9ucy5YUGF0aFNlcGFyYXRvclJlZ2lvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzc4MTAyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnMuWFBhdGhTZXBhcmF0b3JSZWdpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9uczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aFNlcGFyYXRvclJlZ2lvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoU2VwYXJhdG9yUmVnaW9uPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhTZXBhcmF0b3JSZWdpb24iPlhQYXRoU2VwYXJhdG9yUmVnaW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aFNlcGFyYXRvclJlZ2lvbiI+WFBhdGhTZXBhcmF0b3JSZWdpb248L2E+PC9zdHJvbmc+KGludCBzdGFydAotICAgICAgICAgLAotICAgICAgaW50IHRleHRMZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGp1c3RMZW5ndGgiPmFkanVzdExlbmd0aDwvYT4oaW50IGkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRqdXN0U3RhcnQiPmFkanVzdFN0YXJ0PC9hPihpbnQgaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGp1c3RUZXh0TGVuZ3RoIj5hZGp1c3RUZXh0TGVuZ3RoPC9hPihpbnQgaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcXVhdGVQb3NpdGlvbnMiPmVxdWF0ZVBvc2l0aW9uczwvYT4oSVRleHRSZWdpb24gcmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RW5kIj5nZXRFbmQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExlbmd0aCI+Z2V0TGVuZ3RoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdGFydCI+Z2V0U3RhcnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRleHRFbmQiPmdldFRleHRFbmQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRleHRMZW5ndGgiPmdldFRleHRMZW5ndGg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUeXBlIj5nZXRUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFN0cnVjdHVyZWREb2N1bWVudEV2ZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZVJlZ2lvbiI+dXBkYXRlUmVnaW9uPC9hPihqYXZhLmxhbmcuT2JqZWN0IHJlcXVlc3RlcgotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgY2hhbmdlcwotICAgICAgICAgLAotICAgICAgaW50IHJlcXVlc3RTdGFydAotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aFRvUmVwbGFjZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aFNlcGFyYXRvclJlZ2lvbiI+WFBhdGhTZXBhcmF0b3JSZWdpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aFNlcGFyYXRvclJlZ2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fWFBhdGhTZXBhcmF0b3JSZWdpb24iPlhQYXRoU2VwYXJhdG9yUmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhTZXBhcmF0b3JSZWdpb248L3N0cm9uZz4oaW50IHN0YXJ0Ci0gICAgICAgICAsCi0gICAgICBpbnQgdGV4dExlbmd0aAotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkanVzdExlbmd0aCI+YWRqdXN0TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGp1c3RMZW5ndGg8L3N0cm9uZz4oaW50IGkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmk8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkanVzdFN0YXJ0Ij5hZGp1c3RTdGFydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRqdXN0U3RhcnQ8L3N0cm9uZz4oaW50IGkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmk8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkanVzdFRleHRMZW5ndGgiPmFkanVzdFRleHRMZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkanVzdFRleHRMZW5ndGg8L3N0cm9uZz4oaW50IGkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmk8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VxdWF0ZVBvc2l0aW9ucyI+ZXF1YXRlUG9zaXRpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5lcXVhdGVQb3NpdGlvbnM8L3N0cm9uZz4oSVRleHRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVuZCI+Z2V0RW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldEVuZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGVuZ3RoIj5nZXRMZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0TGVuZ3RoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdGFydCI+Z2V0U3RhcnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0U3RhcnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHRFbmQiPmdldFRleHRFbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0VGV4dEVuZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGV4dExlbmd0aCI+Z2V0VGV4dExlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRUZXh0TGVuZ3RoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUeXBlIj5nZXRUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50b1N0cmluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VwZGF0ZVJlZ2lvbiI+dXBkYXRlUmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFN0cnVjdHVyZWREb2N1bWVudEV2ZW50IDxzdHJvbmc+dXBkYXRlUmVnaW9uPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgcmVxdWVzdGVyCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBjaGFuZ2VzCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVxdWVzdFN0YXJ0Ci0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoVG9SZXBsYWNlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXF1ZXN0ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+Y2hhbmdlczwvY29kZT48L3A+PHA+PGNvZGU+cmVxdWVzdFN0YXJ0PC9jb2RlPjwvcD48cD48Y29kZT5sZW5ndGhUb1JlcGxhY2U8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5TdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MDkyODQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlByZWZlcmVuY2VJbml0aWFsaXplcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjwvcHJlPlByZWZlcmVuY2VzIGluaXRpYWxpemVyIGZvciBYU0wgY29yZSBwcmVmZXJlbmNlcy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ByZWZlcmVuY2VJbml0aWFsaXplciI+UHJlZmVyZW5jZUluaXRpYWxpemVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzIj5pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUHJlZmVyZW5jZUluaXRpYWxpemVyIj5QcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyI+aW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhQYXRoUmVnaW9uQ29udGV4dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhQYXRoUmVnaW9uQ29udGV4dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzkxOGY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YUGF0aFJlZ2lvbkNvbnRleHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhSZWdpb25Db250ZXh0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhSZWdpb25Db250ZXh0PC9zdHJvbmc+Ci1leHRlbmRzIDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9CTE9DS19URVhUIj5CTE9DS19URVhUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9VTkRFRklORUQiPlVOREVGSU5FRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfV0hJVEVfU1BBQ0UiPldISVRFX1NQQUNFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9DT05URU5UIj5YUEFUSF9DT05URU5UPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9GVU5DVElPTl9OQU1FIj5YUEFUSF9GVU5DVElPTl9OQU1FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX0NMT1NFIj5YUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX0NMT1NFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX09QRU4iPlhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfT1BFTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBBVEhfU0VQQVJBVE9SX0RJViI+WFBBVEhfU0VQQVJBVE9SX0RJVjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9CTE9DS19URVhUIj5CTE9DS19URVhUPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkJMT0NLX1RFWFQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVU5ERUZJTkVEIj5VTkRFRklORUQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VU5ERUZJTkVEPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1dISVRFX1NQQUNFIj5XSElURV9TUEFDRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5XSElURV9TUEFDRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF9DT05URU5UIj5YUEFUSF9DT05URU5UPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIX0NPTlRFTlQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBBVEhfRlVOQ1RJT05fTkFNRSI+WFBBVEhfRlVOQ1RJT05fTkFNRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSF9GVU5DVElPTl9OQU1FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfQ0xPU0UiPlhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfQ0xPU0U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19DTE9TRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX09QRU4iPlhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfT1BFTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX09QRU48L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBBVEhfU0VQQVJBVE9SX0RJViI+WFBBVEhfU0VQQVJBVE9SX0RJVjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSF9TRVBBUkFUT1JfRElWPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFNMUGFyc2VyUmVnaW9uRmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhTTFBhcnNlclJlZ2lvbkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQyMWY0Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFNMUGFyc2VyUmVnaW9uRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFBhcnNlclJlZ2lvbkZhY3Rvcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xQYXJzZXJSZWdpb25GYWN0b3J5PC9zdHJvbmc+Ci1leHRlbmRzIFhNTFBhcnNlclJlZ2lvbkZhY3Rvcnk8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMUGFyc2VyUmVnaW9uRmFjdG9yeSI+WFNMUGFyc2VyUmVnaW9uRmFjdG9yeTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMUGFyc2VyUmVnaW9uRmFjdG9yeSI+WFNMUGFyc2VyUmVnaW9uRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFBhcnNlclJlZ2lvbkZhY3Rvcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5JWFNMUGFydGl0aW9ucy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LklYU0xQYXJ0aXRpb25zLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYzAwNDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LklYU0xQYXJ0aXRpb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQ8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQ8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSVhTTFBhcnRpdGlvbnM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5JWFNMUGFydGl0aW9uczwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5UaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQuCi0gSXQgZGVmaW5lcyB0aGUgcGFydGl0aW9uIHR5cGVzIGZvciBYU0wuCi0gQ2xpZW50cyBzaG91bGQgcmVmZXJlbmNlIHRoZSBwYXJ0aXRpb24gdHlwZSBTdHJpbmdzIGRlZmluZWQgaGVyZSBkaXJlY3RseS48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTF9YUEFUSCI+WFNMX1hQQVRIPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTF9YUEFUSCI+WFNMX1hQQVRIPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTF9YUEFUSDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMDBlZWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0w8L3N0cm9uZz4KLWV4dGVuZHMgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDwvcHJlPkNvbnRhaW5zIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHNldHRpbmcgdXAgU3RydWN0dXJlZCBEb2N1bWVudCBQYXJ0aW9ucyAKLSBpbiBYU0wgZG9jdW1lbnRzLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCI+U3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyI+Z2V0Q29uZmlndXJlZENvbnRlbnRUeXBlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcnRpdGlvblR5cGUiPmdldFBhcnRpdGlvblR5cGU8L2E+KElUZXh0UmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSURvY3VtZW50UGFydGl0aW9uZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmV3SW5zdGFuY2UiPm5ld0luc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCI+U3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0w8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VGhlIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wgYWRkcyB0aGUgbmVjZXNzYXJ5Ci0gUGFydGl0aW9uIHR5cGVzIHRvIGhlbHAgSWRlbnRpZnkgcG90ZW50aWFsIFhQYXRoIGFyZWFzLgotIFRoaXMgaXMgYWxzbyB1c2VkIGZvciBMaW5lIFN0eWxpbmcgYW5kIENvbnRlbnQgQXNzaXN0YW5jZS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb25maWd1cmVkQ29udGVudFR5cGVzIj5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmdbXSA8c3Ryb25nPmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcnRpdGlvblR5cGUiPmdldFBhcnRpdGlvblR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFBhcnRpdGlvblR5cGU8L3N0cm9uZz4oSVRleHRSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25ld0luc3RhbmNlIj5uZXdJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRQYXJ0aXRpb25lciA8c3Ryb25nPm5ld0luc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SURvY3VtZW50UGFydGl0aW9uZXI8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1Zy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMWM5MGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERlYnVnPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RGVidWc8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkRlYnVnIENsYXNzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZW4gRGVidWdnaW5nIG91dHB1dCB0byBzeXN0ZW0gb3V0LjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY2hlY2tGb3JNZW1vcnlMZWFrcyI+Y2hlY2tGb3JNZW1vcnlMZWFrczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY29sbGVjdFN0YXRzIj5jb2xsZWN0U3RhdHM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfREVCVUciPkRFQlVHPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ERUJVR19USFJFQURMT0NBTCI+REVCVUdfVEhSRUFETE9DQUw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnQnJlYWtwb2ludHMiPmRlYnVnQnJlYWtwb2ludHM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnQ2FyZXRNZWRpYXRvciI+ZGVidWdDYXJldE1lZGlhdG9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z0Rpc3BsYXlUcmVlUG9zaXRpb25zIj5kZWJ1Z0Rpc3BsYXlUcmVlUG9zaXRpb25zPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z0xhdW5jaGVyIj5kZWJ1Z0xhdW5jaGVyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z01lZGlhdG9yIj5kZWJ1Z01lZGlhdG9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z05vdGlmaWNhdGlvbiI+ZGVidWdOb3RpZmljYXRpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnTm90aWZpY2F0aW9uQW5kRXZlbnRzIj5kZWJ1Z05vdGlmaWNhdGlvbkFuZEV2ZW50czwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdOb3RpZnlEZWZlcnJlZCI+ZGVidWdOb3RpZnlEZWZlcnJlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdSZWNvbmNpbGluZyI+ZGVidWdSZWNvbmNpbGluZzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdSdGZGb3JtYXRQcm92aWRlciI+ZGVidWdSdGZGb3JtYXRQcm92aWRlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdTdHJ1Y3R1cmVkRG9jdW1lbnQiPmRlYnVnU3RydWN0dXJlZERvY3VtZW50PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z1RhZ2xpYnMiPmRlYnVnVGFnbGliczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdUb2tlbml6ZXIiPmRlYnVnVG9rZW5pemVyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z1RyZWVNb2RlbCI+ZGVidWdUcmVlTW9kZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnVXBkYXRlVHJlZVBvc2l0aW9ucyI+ZGVidWdVcGRhdGVUcmVlUG9zaXRpb25zPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z1hTTE1vZGVsIj5kZWJ1Z1hTTE1vZGVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE91dHB1dCBNb2RlbGluZyBNZXNzYWdlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGlzcGxheUluZm8iPmRpc3BsYXlJbmZvPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kaXNwbGF5VG9Db25zb2xlIj5kaXNwbGF5VG9Db25zb2xlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGVmZmVjdHMgb3V0cHV0IG9mIExvZ2dlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kaXNwbGF5V2FybmluZ3MiPmRpc3BsYXlXYXJuaW5nczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfaGVhZFBhcnNpbmciPmhlYWRQYXJzaW5nPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9qc0RlYnVnQ29udGV4dEFzc2lzdCI+anNEZWJ1Z0NvbnRleHRBc3Npc3Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2pzRGVidWdTeW50YXhDb2xvcmluZyI+anNEZWJ1Z1N5bnRheENvbG9yaW5nPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9MT0NLUyI+TE9DS1M8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3BlcmZUZXN0Ij5wZXJmVGVzdDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGVyZlRlc3RBZGFwdGVyQ2xhc3NMb2FkaW5nIj5wZXJmVGVzdEFkYXB0ZXJDbGFzc0xvYWRpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3BlcmZUZXN0Rm9ybWF0Ij5wZXJmVGVzdEZvcm1hdDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGVyZlRlc3RSYXdTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5Ij5wZXJmVGVzdFJhd1N0cnVjdHVyZWREb2N1bWVudE9ubHk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3BlcmZUZXN0U3RydWN0dXJlZERvY3VtZW50RXZlbnRPbmx5Ij5wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudEV2ZW50T25seTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGVyZlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5Ij5wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudE9ubHk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3N5bnRheEhpZ2hsaWdodGluZyI+c3ludGF4SGlnaGxpZ2h0aW5nPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF91c2VTdGFuZGFyZEVvbEluV2lkZ2V0Ij51c2VTdGFuZGFyZEVvbEluV2lkZ2V0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWJ1ZyI+RGVidWc8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kdW1wIj5kdW1wPC9hPihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBGb3IgdGVzdHMgYW5kIGRlYnVnIG9ubHk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZHVtcCI+ZHVtcDwvYT4oSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gdmVyYm9zZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZHVtcCI+ZHVtcDwvYT4oSVRleHRSZWdpb25Db2xsZWN0aW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB2ZXJib3NlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmludGxuIj5wcmludGxuPC9hPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTaW1wbGUgdXRpbGl0eSB0byBtYWtlIHN1cmUgcHJpbnRsbidzIGFyZSBzb21lIHdoYXQgaW4gb3JkZXI8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdG9TdHJpbmdVdGlsIj50b1N0cmluZ1V0aWw8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgb2JqZWN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90b1N0cmluZ1V0aWwiPnRvU3RyaW5nVXRpbDwvYT4oSVRleHRSZWdpb25Db2xsZWN0aW9uIG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2NoZWNrRm9yTWVtb3J5TGVha3MiPmNoZWNrRm9yTWVtb3J5TGVha3M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+Y2hlY2tGb3JNZW1vcnlMZWFrczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9jb2xsZWN0U3RhdHMiPmNvbGxlY3RTdGF0czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5jb2xsZWN0U3RhdHM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfREVCVUciPkRFQlVHPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+REVCVUc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfREVCVUdfVEhSRUFETE9DQUwiPkRFQlVHX1RIUkVBRExPQ0FMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPkRFQlVHX1RIUkVBRExPQ0FMPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnQnJlYWtwb2ludHMiPmRlYnVnQnJlYWtwb2ludHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdCcmVha3BvaW50czwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z0NhcmV0TWVkaWF0b3IiPmRlYnVnQ2FyZXRNZWRpYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z0NhcmV0TWVkaWF0b3I8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdEaXNwbGF5VHJlZVBvc2l0aW9ucyI+ZGVidWdEaXNwbGF5VHJlZVBvc2l0aW9uczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z0Rpc3BsYXlUcmVlUG9zaXRpb25zPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnTGF1bmNoZXIiPmRlYnVnTGF1bmNoZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdMYXVuY2hlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z01lZGlhdG9yIj5kZWJ1Z01lZGlhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnTWVkaWF0b3I8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdOb3RpZmljYXRpb24iPmRlYnVnTm90aWZpY2F0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnTm90aWZpY2F0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnTm90aWZpY2F0aW9uQW5kRXZlbnRzIj5kZWJ1Z05vdGlmaWNhdGlvbkFuZEV2ZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z05vdGlmaWNhdGlvbkFuZEV2ZW50czwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z05vdGlmeURlZmVycmVkIj5kZWJ1Z05vdGlmeURlZmVycmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnTm90aWZ5RGVmZXJyZWQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdSZWNvbmNpbGluZyI+ZGVidWdSZWNvbmNpbGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1JlY29uY2lsaW5nPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnUnRmRm9ybWF0UHJvdmlkZXIiPmRlYnVnUnRmRm9ybWF0UHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdSdGZGb3JtYXRQcm92aWRlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z1N0cnVjdHVyZWREb2N1bWVudCI+ZGVidWdTdHJ1Y3R1cmVkRG9jdW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdTdHJ1Y3R1cmVkRG9jdW1lbnQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdUYWdsaWJzIj5kZWJ1Z1RhZ2xpYnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdUYWdsaWJzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnVG9rZW5pemVyIj5kZWJ1Z1Rva2VuaXplcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1Rva2VuaXplcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z1RyZWVNb2RlbCI+ZGVidWdUcmVlTW9kZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdUcmVlTW9kZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdVcGRhdGVUcmVlUG9zaXRpb25zIj5kZWJ1Z1VwZGF0ZVRyZWVQb3NpdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdVcGRhdGVUcmVlUG9zaXRpb25zPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnWFNMTW9kZWwiPmRlYnVnWFNMTW9kZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdYU0xNb2RlbDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+T3V0cHV0IE1vZGVsaW5nIE1lc3NhZ2VzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGlzcGxheUluZm8iPmRpc3BsYXlJbmZvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRpc3BsYXlJbmZvPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2Rpc3BsYXlUb0NvbnNvbGUiPmRpc3BsYXlUb0NvbnNvbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGlzcGxheVRvQ29uc29sZTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+ZWZmZWN0cyBvdXRwdXQgb2YgTG9nZ2VyPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kaXNwbGF5V2FybmluZ3MiPmRpc3BsYXlXYXJuaW5nczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kaXNwbGF5V2FybmluZ3M8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfaGVhZFBhcnNpbmciPmhlYWRQYXJzaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmhlYWRQYXJzaW5nPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2pzRGVidWdDb250ZXh0QXNzaXN0Ij5qc0RlYnVnQ29udGV4dEFzc2lzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5qc0RlYnVnQ29udGV4dEFzc2lzdDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9qc0RlYnVnU3ludGF4Q29sb3JpbmciPmpzRGVidWdTeW50YXhDb2xvcmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5qc0RlYnVnU3ludGF4Q29sb3Jpbmc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTE9DS1MiPkxPQ0tTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPkxPQ0tTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3BlcmZUZXN0Ij5wZXJmVGVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5wZXJmVGVzdDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9wZXJmVGVzdEFkYXB0ZXJDbGFzc0xvYWRpbmciPnBlcmZUZXN0QWRhcHRlckNsYXNzTG9hZGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5wZXJmVGVzdEFkYXB0ZXJDbGFzc0xvYWRpbmc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcGVyZlRlc3RGb3JtYXQiPnBlcmZUZXN0Rm9ybWF0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPnBlcmZUZXN0Rm9ybWF0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3BlcmZUZXN0UmF3U3RydWN0dXJlZERvY3VtZW50T25seSI+cGVyZlRlc3RSYXdTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPnBlcmZUZXN0UmF3U3RydWN0dXJlZERvY3VtZW50T25seTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudEV2ZW50T25seSI+cGVyZlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudE9ubHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+cGVyZlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudE9ubHk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcGVyZlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5Ij5wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudE9ubHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+cGVyZlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3N5bnRheEhpZ2hsaWdodGluZyI+c3ludGF4SGlnaGxpZ2h0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPnN5bnRheEhpZ2hsaWdodGluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF91c2VTdGFuZGFyZEVvbEluV2lkZ2V0Ij51c2VTdGFuZGFyZEVvbEluV2lkZ2V0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPnVzZVN0YW5kYXJkRW9sSW5XaWRnZXQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RlYnVnIj5EZWJ1ZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlYnVnPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkRlYnVnIGNvbnN0cnVjdG9yIGNvbW1lbnQuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZHVtcCI+ZHVtcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZHVtcDwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCk8L2NvZGU+PC9wPjxwPkZvciB0ZXN0cyBhbmQgZGVidWcgb25seTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RydWN0dXJlZERvY3VtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kdW1wIj5kdW1wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kdW1wPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBib29sZWFuIHZlcmJvc2UpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cnVjdHVyZWREb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+dmVyYm9zZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZHVtcCI+ZHVtcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZHVtcDwvc3Ryb25nPihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHZlcmJvc2UpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+dmVyYm9zZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJpbnRsbiI+cHJpbnRsbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cHJpbnRsbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZyk8L2NvZGU+PC9wPjxwPlNpbXBsZSB1dGlsaXR5IHRvIG1ha2Ugc3VyZSBwcmludGxuJ3MgYXJlIHNvbWUgd2hhdCBpbiBvcmRlcjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bXNnPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90b1N0cmluZ1V0aWwiPnRvU3RyaW5nVXRpbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dG9TdHJpbmdVdGlsPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgb2JqZWN0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmplY3Q8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90b1N0cmluZ1V0aWwiPnRvU3RyaW5nVXRpbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dG9TdHJpbmdVdGlsPC9zdHJvbmc+KElUZXh0UmVnaW9uQ29sbGVjdGlvbiBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5GaWxlVXRpbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkZpbGVVdGlsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYWRiNTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkZpbGVVdGlsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEZpbGVVdGlsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RmlsZVV0aWw8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoaXMgaXMgYSBnZW5lcmFsIGZpbGUgdXRpbGl0eSBjbGFzcy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0ZpbGVVdGlsIj5GaWxlVXRpbDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzWE1MRmlsZSI+aXNYTUxGaWxlPC9hPihJRmlsZSBmaWxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIERldGVybWluZXMgaWYgYSBmaWxlIGlzIG9uZSBvZiB0aGUgdmFsaWQgWE1MIGNvbnRlbnQgdHlwZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzWFNMRmlsZSI+aXNYU0xGaWxlPC9hPihJRmlsZSBmaWxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIERldGVybWluZXMgaWYgYSBmaWxlIGlzIGEgWFNMVCBGaWxlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0ZpbGVVdGlsIj5GaWxlVXRpbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZpbGVVdGlsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzWE1MRmlsZSI+aXNYTUxGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1hNTEZpbGU8L3N0cm9uZz4oSUZpbGUgZmlsZSk8L2NvZGU+PC9wPjxwPkRldGVybWluZXMgaWYgYSBmaWxlIGlzIG9uZSBvZiB0aGUgdmFsaWQgWE1MIGNvbnRlbnQgdHlwZXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPiAtIFRoZSBpbnB1dCBJRmlsZSB0byBjaGVjazwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGl0IGlzIGEgWE1MIGZpbGUsIGZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNYU0xGaWxlIj5pc1hTTEZpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzWFNMRmlsZTwvc3Ryb25nPihJRmlsZSBmaWxlKTwvY29kZT48L3A+PHA+RGV0ZXJtaW5lcyBpZiBhIGZpbGUgaXMgYSBYU0xUIEZpbGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPiAtIFRoZSBpbnB1dCBJRmlsZSB0byBjaGVjay48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBpdCBpcyBhIFhTTFQgZmlsZSwgZmFsc2Ugb3RoZXJ3aXNlLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuU3RydWN0dXJlZERvY3VtZW50VXRpbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlN0cnVjdHVyZWREb2N1bWVudFV0aWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NDcyNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuU3RydWN0dXJlZERvY3VtZW50VXRpbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RydWN0dXJlZERvY3VtZW50VXRpbDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+R2VuZXJhbCBQdXJwb3NlIHV0aWxpdHkgY2xhc3NlcyB0byBjb252ZXJ0IGZyb20gU3RydWN0dXJlZERvY3VtZW50IHRvIERPTS48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0cnVjdHVyZWREb2N1bWVudFV0aWwiPlN0cnVjdHVyZWREb2N1bWVudFV0aWw8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgSURPTU5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Tm9kZSI+Z2V0Tm9kZTwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gdGV4dFJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHaXZlbiBhIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgYSBUZXh0UmVnaW9uLCByZXR1cm4gYQotIElET01Ob2RlIGZvciB0aGF0IHBhcnRpY3VsYXIgcG9zaXRpb24gaW4gdGhlIFN0cnVjdHVyZWREb2N1bWVudDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0cnVjdHVyZWREb2N1bWVudFV0aWwiPlN0cnVjdHVyZWREb2N1bWVudFV0aWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5vZGUiPmdldE5vZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSURPTU5vZGUgPHN0cm9uZz5nZXROb2RlPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIHRleHRSZWdpb24pPC9jb2RlPjwvcD48cD5HaXZlbiBhIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgYSBUZXh0UmVnaW9uLCByZXR1cm4gYQotIElET01Ob2RlIGZvciB0aGF0IHBhcnRpY3VsYXIgcG9zaXRpb24gaW4gdGhlIFN0cnVjdHVyZWREb2N1bWVudDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jdW1lbnRSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPnRleHRSZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRE9NTm9kZTwvY29kZT4gLSBJRE9NTm9kZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuWE1MQ29udGVudFR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5YTUxDb250ZW50VHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmM2OWZiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5YTUxDb250ZW50VHlwZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYTUxDb250ZW50VHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhNTENvbnRlbnRUeXBlPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5YTUxDb250ZXRUeXBlIGhhbmRsZXMgdGhlIGdhdGhlcmluZyBvZiBYTUwgY29udGVudCB0eXBlIHJlbGF0ZWQgaW5mb3JtYXRpb24KLSBiZXR3ZWVuIHRoZSBwbGF0Zm9ybXMgeG1sIGNvbnRlbnQgdHlwZSBhbmQgV1RQJ3Mgc3BlY2lmaWMgdmVyc2lvbi48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YTUxDb250ZW50VHlwZSI+WE1MQ29udGVudFR5cGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RmlsZUV4dGVuc2lvbnMiPmdldEZpbGVFeHRlbnNpb25zPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhbGwgdGhlIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIGFuIFhNTCBDb250ZW50IFR5cGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWE1MQ29udGVudFR5cGUiPlhNTENvbnRlbnRUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WE1MQ29udGVudFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmlsZUV4dGVuc2lvbnMiPmdldEZpbGVFeHRlbnNpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmdbXSA8c3Ryb25nPmdldEZpbGVFeHRlbnNpb25zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgYWxsIHRoZSBleHRlbnNpb25zIGFzc29jaWF0ZWQgd2l0aCBhbiBYTUwgQ29udGVudCBUeXBlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZ1tdPC9jb2RlPiAtIFRoZSBhcnJheSBvZiBmaWxlIGV4dGVuc2lvbnM8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLk1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBiMjRjZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5FeGNlcHRpb248L3ByZT5BbiBleGNlcHRpb24gdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgaGFzIGJlZW4gcmVhY2hlZCAKLSBmb3IgYSBnaXZlbiBTdHlsZXNoZWV0IHZhbGlkYXRpb24uPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiI+TWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX01heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIj5NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvbk1lc3NhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2I0NTNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xWYWxpZGF0aW9uTWVzc2FnZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFZhbGlkYXRpb25NZXNzYWdlPC9zdHJvbmc+Ci1leHRlbmRzIFZhbGlkYXRpb25NZXNzYWdlPC9wcmU+QSB2YWxpZGF0aW9uIG1lc3NhZ2Ugc3BlY2lmaWMgdG8gdGhlIFhTTCB2YWxpZGF0b3Igd2hpY2ggYWRkcyB0aGUgYWJpbGl0eSAKLSB0byBzcGVjaWZ5IHRoZSBYU0wgbm9kZS48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xWYWxpZGF0aW9uTWVzc2FnZSI+WFNMVmFsaWRhdGlvbk1lc3NhZ2U8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgaW50IGxpbmVOdW1iZXIKLSAgICAgICAgICwKLSAgICAgIGludCBjb2x1bW5OdW1iZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5vZGUiPmdldE5vZGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIG5vZGUgdGhhdCB0aGlzIG1lc3NhZ2UgYXBwbGllcyB0by48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlYWxTZXZlcml0eSI+Z2V0UmVhbFNldmVyaXR5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgV29ya2Fyb3VuZCBmb3Igc3VwZXJjbGFzcydzIGJpemFycmUgaGFuZGxpbmcgb2Ygc2V2ZXJpdHk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXROb2RlIj5zZXROb2RlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB0aGUgbm9kZSB0aGF0IHRoaXMgbWVzc2FnZSBhcHBsaWVzIHRvLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFNldmVyaXR5Ij5zZXRTZXZlcml0eTwvYT4oaW50IHNldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgc2V2ZXJpdHkgc2V0IGhlcmUgc2hvdWxkIGJlIHRoZSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlIHNldmVyaXR5LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFZhbGlkYXRpb25NZXNzYWdlIj5YU0xWYWxpZGF0aW9uTWVzc2FnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFZhbGlkYXRpb25NZXNzYWdlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgaW50IGxpbmVOdW1iZXIKLSAgICAgICAgICwKLSAgICAgIGludCBjb2x1bW5OdW1iZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Tm9kZSI+Z2V0Tm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSA8c3Ryb25nPmdldE5vZGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBub2RlIHRoYXQgdGhpcyBtZXNzYWdlIGFwcGxpZXMgdG8uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZTwvY29kZT4gLSB0aGUgbm9kZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRSZWFsU2V2ZXJpdHkiPmdldFJlYWxTZXZlcml0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRSZWFsU2V2ZXJpdHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+V29ya2Fyb3VuZCBmb3Igc3VwZXJjbGFzcydzIGJpemFycmUgaGFuZGxpbmcgb2Ygc2V2ZXJpdHk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0Tm9kZSI+c2V0Tm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0Tm9kZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlKTwvY29kZT48L3A+PHA+U2V0IHRoZSBub2RlIHRoYXQgdGhpcyBtZXNzYWdlIGFwcGxpZXMgdG8uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFNldmVyaXR5Ij5zZXRTZXZlcml0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0U2V2ZXJpdHk8L3N0cm9uZz4oaW50IHNldik8L2NvZGU+PC9wPjxwPlRoZSBzZXZlcml0eSBzZXQgaGVyZSBzaG91bGQgYmUgdGhlIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2Ugc2V2ZXJpdHkuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zZXY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dG9TdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvblJlcG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25SZXBvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM1NzIyMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvblJlcG9ydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xWYWxpZGF0aW9uUmVwb3J0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVmFsaWRhdGlvblJlcG9ydDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhlIFhTTCB2YWxpZGF0b3IuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVmFsaWRhdGlvblJlcG9ydCI+WFNMVmFsaWRhdGlvblJlcG9ydDwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkRXJyb3IiPmFkZEVycm9yPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBYU0wgbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkSW5mbyI+YWRkSW5mbzwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhbiBpbmZvIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBYU0wgbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkV2FybmluZyI+YWRkV2FybmluZzwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhbiB3YXJuaW5nIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBYU0wgbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RXJyb3JzIj5nZXRFcnJvcnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RmlsZVVSSSI+Z2V0RmlsZVVSSTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgVVJJIHRoYXQgdGhpcyByZXBvcnQgYXBwbGllcyB0by48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5mb3MiPmdldEluZm9zPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuSGFzaE1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROZXN0ZWRNZXNzYWdlcyI+Z2V0TmVzdGVkTWVzc2FnZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYWxpZGF0aW9uTWVzc2FnZXMiPmdldFZhbGlkYXRpb25NZXNzYWdlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0V2FybmluZ3MiPmdldFdhcm5pbmdzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzVmFsaWQiPmlzVmFsaWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHdoZXRoZXIgdGhlIGZpbGUgaXMgdmFsaWQuIFRoZSBmaWxlIG1heSBoYXZlIHdhcm5pbmdzIGFzc29jaWF0ZWQgd2l0aCBpdC48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xWYWxpZGF0aW9uUmVwb3J0Ij5YU0xWYWxpZGF0aW9uUmVwb3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVmFsaWRhdGlvblJlcG9ydDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZEVycm9yIj5hZGRFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZSA8c3Ryb25nPmFkZEVycm9yPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PC9wPjxwPkFkZCBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4gWFNMIG5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIHRoZSBub2RlIHRoZSB3YXJuaW5nIGFwcGxpZXMgdG88L3A+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT4gLSB0aGUgbWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvbk1lc3NhZ2U8L2NvZGU+IC0gdGhlIHZhbGlkYXRpb24gbWVzc2FnZSBjcmVhdGVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZEluZm8iPmFkZEluZm88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2UgPHN0cm9uZz5hZGRJbmZvPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PC9wPjxwPkFkZCBhbiBpbmZvIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBYU0wgbm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gdGhlIG5vZGUgdGhlIHdhcm5pbmcgYXBwbGllcyB0bzwvcD48cD48Y29kZT5tZXNzYWdlPC9jb2RlPiAtIHRoZSBtZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYWxpZGF0aW9uTWVzc2FnZTwvY29kZT4gLSB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNyZWF0ZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkV2FybmluZyI+YWRkV2FybmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZSA8c3Ryb25nPmFkZFdhcm5pbmc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48L3A+PHA+QWRkIGFuIHdhcm5pbmcgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSB0aGUgbm9kZSB0aGUgd2FybmluZyBhcHBsaWVzIHRvPC9wPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+IC0gdGhlIG1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25NZXNzYWdlPC9jb2RlPiAtIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgY3JlYXRlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFcnJvcnMiPmdldEVycm9yczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEVycm9yczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB2YWxpZGF0aW9uIG1lc3NhZ2VzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZpbGVVUkkiPmdldEZpbGVVUkk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEZpbGVVUkk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBVUkkgdGhhdCB0aGlzIHJlcG9ydCBhcHBsaWVzIHRvLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgVVJJPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluZm9zIj5nZXRJbmZvczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEluZm9zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHZhbGlkYXRpb24gbWVzc2FnZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmVzdGVkTWVzc2FnZXMiPmdldE5lc3RlZE1lc3NhZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5IYXNoTWFwIDxzdHJvbmc+Z2V0TmVzdGVkTWVzc2FnZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuSGFzaE1hcDwvY29kZT4gLSBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhbGlkYXRpb25NZXNzYWdlcyI+Z2V0VmFsaWRhdGlvbk1lc3NhZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFZhbGlkYXRpb25NZXNzYWdlW10gPHN0cm9uZz5nZXRWYWxpZGF0aW9uTWVzc2FnZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvbk1lc3NhZ2VbXTwvY29kZT4gLSBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRXYXJuaW5ncyI+Z2V0V2FybmluZ3M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRXYXJuaW5nczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB2YWxpZGF0aW9uIG1lc3NhZ2VzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzVmFsaWQiPmlzVmFsaWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzVmFsaWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIGlzIHZhbGlkLiBUaGUgZmlsZSBtYXkgaGF2ZSB3YXJuaW5ncyBhc3NvY2lhdGVkIHdpdGggaXQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgdGhlIGZpbGUgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDQ3NzQ0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb248L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb248L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVmFsaWRhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVmFsaWRhdG9yPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UaGUgWFNMIHZhbGlkYXRvciBmb3Igd29ya3NwYWNlIFhTTCBmaWxlcy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc2luZ2xldG9uIFhTTFZhbGlkYXRvciBpbnN0YW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvblJlcG9ydDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+KElGaWxlIHhzbEZpbGUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gZm9yY2VCdWlsZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSB0aGUgZ2l2ZW4gWFNMIGZpbGUuIFNhbWUgYXMKLSA8Y29kZT52YWxpZGF0ZSh4c2xGaWxlLHJlcG9ydCxmb3JjZUJ1aWxkKTwvY29kZT4gZXhjZXB0IGEgbmV3IHJlcG9ydCBpcwotIGNyZWF0ZWQgYW5kIHJldHVybmVkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT4oSUZpbGUgeHNsRmlsZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gZm9yY2VCdWlsZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBWYWxpZGF0ZSB0aGUgZ2l2ZW4gWFNMIGZpbGUgdXNpbmcgdGhlIHNwZWNpZmllZCByZXBvcnQuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yIDxzdHJvbmc+Z2V0SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBzaW5nbGV0b24gWFNMVmFsaWRhdG9yIGluc3RhbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yPC9jb2RlPiAtIHRoZSBzaW5nbGV0b24gWFNMVmFsaWRhdG9yIGluc3RhbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0IDxzdHJvbmc+dmFsaWRhdGU8L3N0cm9uZz4oSUZpbGUgeHNsRmlsZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBmb3JjZUJ1aWxkKTwvY29kZT48L3A+PHA+VmFsaWRhdGUgdGhlIGdpdmVuIFhTTCBmaWxlLiBTYW1lIGFzCi0gPGNvZGU+dmFsaWRhdGUoeHNsRmlsZSxyZXBvcnQsZm9yY2VCdWlsZCk8L2NvZGU+IGV4Y2VwdCBhIG5ldyByZXBvcnQgaXMKLSBjcmVhdGVkIGFuZCByZXR1cm5lZC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnhzbEZpbGU8L2NvZGU+IC0gdGhlIFhTTCBmaWxlPC9wPjxwPjxjb2RlPmZvcmNlQnVpbGQ8L2NvZGU+IC0gdHJ1ZSBpZiBidWlsZCBzaG91bGQgYWx3YXlzIGJlIGZvcmNlZDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvblJlcG9ydDwvY29kZT4gLSB0aGUgdmFsaWRhdGlvbiByZXBvcnQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPkNvcmVFeGNlcHRpb24gLSBpZiBhbnkgZXhjZXB0aW9uIG9jY3VycyB3aGlsZSB2YWxpZGF0aW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KElGaWxlIHhzbEZpbGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0Ci0gICAgICAgICAsCi0gICAgICBib29sZWFuIGZvcmNlQnVpbGQpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSB0aGUgZ2l2ZW4gWFNMIGZpbGUgdXNpbmcgdGhlIHNwZWNpZmllZCByZXBvcnQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54c2xGaWxlPC9jb2RlPiAtIHRoZSBYU0wgZmlsZTwvcD48cD48Y29kZT5yZXBvcnQ8L2NvZGU+IC0gdGhlIHJlcG9ydCB0byB1c2UgZm9yIHJlcG9ydGluZyB2YWxpZGF0aW9uIGVycm9yczwvcD48cD48Y29kZT5mb3JjZUJ1aWxkPC9jb2RlPiAtIHRydWUgaWYgYnVpbGQgc2hvdWxkIGFsd2F5cyBiZSBmb3JjZWQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPkNvcmVFeGNlcHRpb24gLSBpZiBhbnkgZXhjZXB0aW9uIG9jY3VycyB3aGlsZSB2YWxpZGF0aW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmI1ZDc4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVmFsaWRhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmFsaWRhdG9yPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0TmVzdGVkVmFsaWRhdG9yPC9wcmU+VGhlIFhTTCB2YWxpZGF0b3IgZXh0ZW5kcyB0aGUgWE1MIDxjb2RlPkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yPC9jb2RlPi48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ZhbGlkYXRvciI+VmFsaWRhdG9yPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRJbmZvVG9NZXNzYWdlIj5hZGRJbmZvVG9NZXNzYWdlPC9hPihWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZQotICAgICAgICAgLAotICAgICAgSU1lc3NhZ2UgbWVzc2FnZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbGVhbiI+Y2xlYW48L2E+KElQcm9qZWN0IHByb2plY3QKLSAgICAgICAgICwKLSAgICAgIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZQotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uUmVzdWx0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT4oSVJlc291cmNlIHJlc291cmNlCi0gICAgICAgICAsCi0gICAgICBpbnQga2luZAotICAgICAgICAgLAotICAgICAgVmFsaWRhdGlvblN0YXRlIHN0YXRlCi0gICAgICAgICAsCi0gICAgICBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFZhbGlkYXRpb25SZXBvcnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihqYXZhLmxhbmcuU3RyaW5nIHVyaQotICAgICAgICAgLAotICAgICAgamF2YS5pby5JbnB1dFN0cmVhbSBpbnB1dHN0cmVhbQotICAgICAgICAgLAotICAgICAgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJU3RhdHVzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlSW5Kb2IiPnZhbGlkYXRlSW5Kb2I8L2E+KElWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0Ci0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVmFsaWRhdG9yIj5WYWxpZGF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYWxpZGF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkSW5mb1RvTWVzc2FnZSI+YWRkSW5mb1RvTWVzc2FnZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkSW5mb1RvTWVzc2FnZTwvc3Ryb25nPihWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZQotICAgICAgICAgLAotICAgICAgSU1lc3NhZ2UgbWVzc2FnZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFsaWRhdGlvbk1lc3NhZ2U8L2NvZGU+PC9wPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NsZWFuIj5jbGVhbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2xlYW48L3N0cm9uZz4oSVByb2plY3QgcHJvamVjdAotICAgICAgICAgLAotICAgICAgVmFsaWRhdGlvblN0YXRlIHN0YXRlCi0gICAgICAgICAsCi0gICAgICBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByb2plY3Q8L2NvZGU+PC9wPjxwPjxjb2RlPnN0YXRlPC9jb2RlPjwvcD48cD48Y29kZT5tb25pdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFsaWRhdGlvblJlc3VsdCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KElSZXNvdXJjZSByZXNvdXJjZQotICAgICAgICAgLAotICAgICAgaW50IGtpbmQKLSAgICAgICAgICwKLSAgICAgIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZQotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXNvdXJjZTwvY29kZT48L3A+PHA+PGNvZGU+a2luZDwvY29kZT48L3A+PHA+PGNvZGU+c3RhdGU8L2NvZGU+PC9wPjxwPjxjb2RlPm1vbml0b3I8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYWxpZGF0aW9uUmVzdWx0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFsaWRhdGlvblJlcG9ydCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpCi0gICAgICAgICAsCi0gICAgICBqYXZhLmlvLklucHV0U3RyZWFtIGlucHV0c3RyZWFtCi0gICAgICAgICAsCi0gICAgICBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVyaTwvY29kZT48L3A+PHA+PGNvZGU+aW5wdXRzdHJlYW08L2NvZGU+PC9wPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYWxpZGF0aW9uUmVwb3J0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZUluSm9iIj52YWxpZGF0ZUluSm9iPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElTdGF0dXMgPHN0cm9uZz52YWxpZGF0ZUluSm9iPC9zdHJvbmc+KElWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0Ci0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxwPjxjb2RlPnJlcG9ydGVyPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVN0YXR1czwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcjIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcjIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkzYzU0ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWYWxpZGF0b3IyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmFsaWRhdG9yMjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdFZhbGlkYXRvcjwvcHJlPlZhbGlkYXRvciBmb3IgYm90aCBidWlsZCB2YWxpZGF0aW9uIChBYnN0cmFjdFZhbGlkYXRvcikgYW5kIGFzLXlvdS10eXBlIHZhbGlkYXRpb24gKElWYWxpZGF0b3JKb2IpLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVmFsaWRhdG9yMiI+VmFsaWRhdG9yMjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2xlYW4iPmNsZWFuPC9hPihJUHJvamVjdCBwcm9qZWN0Ci0gICAgICAgICAsCi0gICAgICBWYWxpZGF0aW9uU3RhdGUgc3RhdGUKLSAgICAgICAgICwKLSAgICAgIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbGVhbnVwIj5jbGVhbnVwPC9hPihJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElTY2hlZHVsaW5nUnVsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTY2hlZHVsaW5nUnVsZSI+Z2V0U2NoZWR1bGluZ1J1bGU8L2E+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFZhbGlkYXRpb25SZXN1bHQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihJUmVzb3VyY2UgcmVzb3VyY2UKLSAgICAgICAgICwKLSAgICAgIGludCBraW5kCi0gICAgICAgICAsCi0gICAgICBWYWxpZGF0aW9uU3RhdGUgc3RhdGUKLSAgICAgICAgICwKLSAgICAgIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSVN0YXR1czwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZUluSm9iIj52YWxpZGF0ZUluSm9iPC9hPihJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVmFsaWRhdG9yMiI+VmFsaWRhdG9yMjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlZhbGlkYXRvcjI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2xlYW4iPmNsZWFuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jbGVhbjwvc3Ryb25nPihJUHJvamVjdCBwcm9qZWN0Ci0gICAgICAgICAsCi0gICAgICBWYWxpZGF0aW9uU3RhdGUgc3RhdGUKLSAgICAgICAgICwKLSAgICAgIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJvamVjdDwvY29kZT48L3A+PHA+PGNvZGU+c3RhdGU8L2NvZGU+PC9wPjxwPjxjb2RlPm1vbml0b3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NsZWFudXAiPmNsZWFudXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNsZWFudXA8L3N0cm9uZz4oSVJlcG9ydGVyIHJlcG9ydGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXBvcnRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U2NoZWR1bGluZ1J1bGUiPmdldFNjaGVkdWxpbmdSdWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElTY2hlZHVsaW5nUnVsZSA8c3Ryb25nPmdldFNjaGVkdWxpbmdSdWxlPC9zdHJvbmc+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmhlbHBlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTY2hlZHVsaW5nUnVsZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFZhbGlkYXRpb25SZXN1bHQgPHN0cm9uZz52YWxpZGF0ZTwvc3Ryb25nPihJUmVzb3VyY2UgcmVzb3VyY2UKLSAgICAgICAgICwKLSAgICAgIGludCBraW5kCi0gICAgICAgICAsCi0gICAgICBWYWxpZGF0aW9uU3RhdGUgc3RhdGUKLSAgICAgICAgICwKLSAgICAgIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVzb3VyY2U8L2NvZGU+PC9wPjxwPjxjb2RlPmtpbmQ8L2NvZGU+PC9wPjxwPjxjb2RlPnN0YXRlPC9jb2RlPjwvcD48cD48Y29kZT5tb25pdG9yPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvblJlc3VsdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz52YWxpZGF0ZTwvc3Ryb25nPihJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmhlbHBlcjwvY29kZT48L3A+PHA+PGNvZGU+cmVwb3J0ZXI8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5WYWxpZGF0aW9uRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZUluSm9iIj52YWxpZGF0ZUluSm9iPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElTdGF0dXMgPHN0cm9uZz52YWxpZGF0ZUluSm9iPC9zdHJvbmc+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aGVscGVyPC9jb2RlPjwvcD48cD48Y29kZT5yZXBvcnRlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTdGF0dXM8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5WYWxpZGF0aW9uRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0xWYWxpZGF0aW9uUmVwb3J0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0xWYWxpZGF0aW9uUmVwb3J0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMzk4MDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNMVmFsaWRhdGlvblJlcG9ydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVmFsaWRhdGlvblJlcG9ydDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFZhbGlkYXRpb25SZXBvcnQ8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xWYWxpZGF0aW9uUmVwb3J0Ij5YU0xWYWxpZGF0aW9uUmVwb3J0PC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZpbGVVUkkiPmdldEZpbGVVUkk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkhhc2hNYXA8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmVzdGVkTWVzc2FnZXMiPmdldE5lc3RlZE1lc3NhZ2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFZhbGlkYXRpb25NZXNzYWdlW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzIj5nZXRWYWxpZGF0aW9uTWVzc2FnZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1ZhbGlkIj5pc1ZhbGlkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVmFsaWRhdGlvblJlcG9ydCI+WFNMVmFsaWRhdGlvblJlcG9ydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFZhbGlkYXRpb25SZXBvcnQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRGaWxlVVJJIj5nZXRGaWxlVVJJPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRGaWxlVVJJPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmVzdGVkTWVzc2FnZXMiPmdldE5lc3RlZE1lc3NhZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5IYXNoTWFwIDxzdHJvbmc+Z2V0TmVzdGVkTWVzc2FnZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuSGFzaE1hcDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzIj5nZXRWYWxpZGF0aW9uTWVzc2FnZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXSA8c3Ryb25nPmdldFZhbGlkYXRpb25NZXNzYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25NZXNzYWdlW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzVmFsaWQiPmlzVmFsaWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzVmFsaWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlLlhJbmNsdWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54aW5jbHVkZS5YSW5jbHVkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJmMzYwMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlLlhJbmNsdWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhJbmNsdWRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhJbmNsdWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+WEluY2x1ZGVyIHdpbGwgcmVhZCBhbiBYTUwgZmlsZSwgdGhhdCBoYXMgZWxlbWVudHMgZnJvbSB0aGUgWEluY2x1ZGUKLSBuYW1lc3BhY2UgYW5kIGZvbGxvd3MgdGhlIFczQyBYSW5jbHVkZSBzcGVjaWZpY2F0aW9uIChodHRwOi8vd3d3LnczLm9yZy9UUi94aW5jbHVkZS8pLgotIEl0IHdpbGwgb3V0cHV0IGEgbWVyZ2VkIGZpbGUuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YSW5jbHVkZXIiPlhJbmNsdWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXh0cmFjdFhNTEZpbGUiPmV4dHJhY3RYTUxGaWxlPC9hPihqYXZhLmxhbmcuU3RyaW5nIGluCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG91dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBleHRyYWNYTUxGaWxlIG1lcmdlcyB0aGUgZmlsZXMgcmVmZXJlbmNlZCBieSB4aW5jbHVkZSBpbmNsdWRlIGVsZW1lbnRzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hJbmNsdWRlciI+WEluY2x1ZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WEluY2x1ZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2V4dHJhY3RYTUxGaWxlIj5leHRyYWN0WE1MRmlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZXh0cmFjdFhNTEZpbGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBvdXQpPC9jb2RlPjwvcD48cD5leHRyYWNYTUxGaWxlIG1lcmdlcyB0aGUgZmlsZXMgcmVmZXJlbmNlZCBieSB4aW5jbHVkZSBpbmNsdWRlIGVsZW1lbnRzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW48L2NvZGU+IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgaW5wdXQgWE1MIGZpbGU8L3A+PHA+PGNvZGU+b3V0PC9jb2RlPiAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIG1lcmdlZCBYTUwgZmlsZTwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuQ2FsbFRlbXBsYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjYWQ1ZmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDYWxsVGVtcGxhdGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DYWxsVGVtcGxhdGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L3ByZT5UaGUgPGNvZGU+eHNsOmNhbGwtdGVtcGxhdGU8L2NvZGU+IG1vZGVsIGVsZW1lbnQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9wYXJhbWV0ZXJzIj5wYXJhbWV0ZXJzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9DYWxsVGVtcGxhdGUiPkNhbGxUZW1wbGF0ZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFBhcmFtZXRlciI+YWRkUGFyYW1ldGVyPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyIHBhcmFtZXRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSBwYXJhbWV0ZXIgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmFtZXRlcnMiPmdldFBhcmFtZXRlcnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcy48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX3BhcmFtZXRlcnMiPnBhcmFtZXRlcnM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5wYXJhbWV0ZXJzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9DYWxsVGVtcGxhdGUiPkNhbGxUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkNhbGxUZW1wbGF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkUGFyYW1ldGVyIj5hZGRQYXJhbWV0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZFBhcmFtZXRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyIHBhcmFtZXRlcik8L2NvZGU+PC9wPjxwPkFkZCBhIHBhcmFtZXRlciB0byB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyYW1ldGVyPC9jb2RlPiAtIHRoZSBwYXJhbWV0ZXIgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSBuYW1lLCBvciBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmFtZXRlcnMiPmdldFBhcmFtZXRlcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRQYXJhbWV0ZXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gYSBsaXN0IG9mIHBhcmFtZXRlcnM8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjhkMTk5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuRnVuY3Rpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBGdW5jdGlvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkZ1bmN0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9wcmU+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3BhcmFtZXRlcnMiPnBhcmFtZXRlcnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfdmFyaWFibGVzIj52YXJpYWJsZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0Z1bmN0aW9uIj5GdW5jdGlvbjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFBhcmFtZXRlciI+YWRkUGFyYW1ldGVyPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyIHBhcmFtZXRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSBwYXJhbWV0ZXIgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRWYXJpYWJsZSI+YWRkVmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZSB2YXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgdmFyaWFibGUgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBc1ZhbHVlIj5nZXRBc1ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE92ZXJSaWRlVmFsdWUiPmdldE92ZXJSaWRlVmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyYW1ldGVycyI+Z2V0UGFyYW1ldGVyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybiB0aGUgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoaXMgZnVuY3Rpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFZhcmlhYmxlcyI+Z2V0VmFyaWFibGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJuIHRoZSB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGlzIGZ1bmN0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfcGFyYW1ldGVycyI+cGFyYW1ldGVyczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPnBhcmFtZXRlcnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfdmFyaWFibGVzIj52YXJpYWJsZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz52YXJpYWJsZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0Z1bmN0aW9uIj5GdW5jdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkZ1bmN0aW9uPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRQYXJhbWV0ZXIiPmFkZFBhcmFtZXRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkUGFyYW1ldGVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXIgcGFyYW1ldGVyKTwvY29kZT48L3A+PHA+QWRkIGEgcGFyYW1ldGVyIHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJhbWV0ZXI8L2NvZGU+IC0gdGhlIHBhcmFtZXRlciB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkVmFyaWFibGUiPmFkZFZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRWYXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVmFyaWFibGUgdmFyKTwvY29kZT48L3A+PHA+QWRkIGEgdmFyaWFibGUgdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT4gLSB0aGUgdmFyaWFibGUgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEFzVmFsdWUiPmdldEFzVmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEFzVmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXROYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgZnVuY3Rpb24gbmFtZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRPdmVyUmlkZVZhbHVlIj5nZXRPdmVyUmlkZVZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRPdmVyUmlkZVZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyYW1ldGVycyI+Z2V0UGFyYW1ldGVyczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldFBhcmFtZXRlcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJuIHRoZSBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhpcyBmdW5jdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYXJpYWJsZXMiPmdldFZhcmlhYmxlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldFZhcmlhYmxlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm4gdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoaXMgZnVuY3Rpb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbXBvcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW1wb3J0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNDU5NmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbXBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEltcG9ydDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW5jbHVkZTwvcHJlPlRoZSA8Y29kZT54c2w6aW1wb3J0PC9jb2RlPiBtb2RlbCBlbGVtZW50LjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0ltcG9ydCI+SW1wb3J0PC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSW1wb3J0Ij5JbXBvcnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5JbXBvcnQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkluY2x1ZGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW5jbHVkZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNiOTFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW5jbHVkZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEluY2x1ZGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5JbmNsdWRlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9wcmU+VGhlIDxjb2RlPnhzbDppbmNsdWRlPC9jb2RlPiBtb2RlbCBlbGVtZW50LjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1QT1JUIj5JTVBPUlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29uc3RhbnQgaW5kaWNhdGluZyB0aGF0IHRoaXMgaXMgYW4gJmx0O2NvZGUmZ3Q7SW1wb3J0Jmx0Oy9jb2RlJmd0Oy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTkNMVURFIj5JTkNMVURFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbnN0YW50IGluZGljYXRpbmcgdGhhdCB0aGlzIGlzIGFuICZsdDtjb2RlJmd0O0luY2x1ZGUmbHQ7L2NvZGUmZ3Q7LjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9JbmNsdWRlIj5JbmNsdWRlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSW5jbHVkZSI+SW5jbHVkZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldAotICAgICAgICAgLAotICAgICAgaW50IHR5cGUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRIcmVmIj5nZXRIcmVmPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+aHJlZjwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElGaWxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEhyZWZBc0ZpbGUiPmdldEhyZWZBc0ZpbGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXRzIHRoZSBpbmNsdWRlZCBmaWxlIGFzIGEgc291cmNlIGZpbGUsIGlmIHBvc3NpYmxlIChyZXR1cm5lZCBmaWxlIG1heSBiZSBudWxsIGFuZCBuZWVkIG5vdCBleGlzdCkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbmNsdWRlVHlwZSI+Z2V0SW5jbHVkZVR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHR5cGUgb2YgaW5jbHVkZSwgd2hldGhlciBhbiA8Y29kZT5JbmNsdWRlPC9jb2RlPiBvciBhbiA8Y29kZT5JbXBvcnQ8L2NvZGU+LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfSU1QT1JUIj5JTVBPUlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5JTVBPUlQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPkNvbnN0YW50IGluZGljYXRpbmcgdGhhdCB0aGlzIGlzIGFuIDxjb2RlPkltcG9ydDwvY29kZT4uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTkNMVURFIj5JTkNMVURFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgaW50IDxzdHJvbmc+SU5DTFVERTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+Q29uc3RhbnQgaW5kaWNhdGluZyB0aGF0IHRoaXMgaXMgYW4gPGNvZGU+SW5jbHVkZTwvY29kZT4uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSW5jbHVkZSI+SW5jbHVkZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkluY2x1ZGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9JbmNsdWRlIj5JbmNsdWRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIDxzdHJvbmc+SW5jbHVkZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0Ci0gICAgICAgICAsCi0gICAgICBpbnQgdHlwZSk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLCBzcGVjaWZ5aW5nIHdoZXRoZXIgYW4gPGNvZGU+SW5jbHVkZTwvY29kZT4gb3IgYW4gPGNvZGU+SW1wb3J0PC9jb2RlPi48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRIcmVmIj5nZXRIcmVmPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRIcmVmPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPmhyZWY8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgPGNvZGU+aHJlZjwvY29kZT4gdmFsdWUsIG9yIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SHJlZkFzRmlsZSI+Z2V0SHJlZkFzRmlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRmlsZSA8c3Ryb25nPmdldEhyZWZBc0ZpbGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0cyB0aGUgaW5jbHVkZWQgZmlsZSBhcyBhIHNvdXJjZSBmaWxlLCBpZiBwb3NzaWJsZSAocmV0dXJuZWQgZmlsZSBtYXkgYmUgbnVsbCBhbmQgbmVlZCBub3QgZXhpc3QpLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUZpbGU8L2NvZGU+IC0gdGhlIGluY2x1ZGVkIGZpbGUsIG9yIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5jbHVkZVR5cGUiPmdldEluY2x1ZGVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldEluY2x1ZGVUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdHlwZSBvZiBpbmNsdWRlLCB3aGV0aGVyIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+IG9yIGFuIDxjb2RlPkltcG9ydDwvY29kZT4uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gb25lIG9mIHRoZSBjb25zdGFudHMgPGNvZGU+SU5DTFVERTwvY29kZT4gb3IgPGNvZGU+SU1QT1JUPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQyM2NkZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFBhcmFtZXRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlBhcmFtZXRlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVmFyaWFibGU8L3ByZT5UaGUgPGNvZGU+eHNsOnBhcmFtZXRlcjwvY29kZT4gb3IgPGNvZGU+eHNsOndpdGgtcGFyYW08L2NvZGU+IG1vZGVsIGVsZW1lbnQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUGFyYW1ldGVyIj5QYXJhbWV0ZXI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBcyI+Z2V0QXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1ZhbHVlIj5pc1ZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHdoZXRoZXIgdGhpcyBoYXMgYSB2YWx1ZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRWYWx1ZSI+c2V0VmFsdWU8L2E+KGJvb2xlYW4gdmFsdWVTZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHdoZXRoZXIgdGhpcyBoYXMgYSB2YWx1ZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9QYXJhbWV0ZXIiPlBhcmFtZXRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlBhcmFtZXRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXMiPmdldEFzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRBczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzVmFsdWUiPmlzVmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzVmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHdoZXRoZXIgdGhpcyBoYXMgYSB2YWx1ZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBoYXMgYSB2YWx1ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRWYWx1ZSI+c2V0VmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFZhbHVlPC9zdHJvbmc+KGJvb2xlYW4gdmFsdWVTZXQpPC9jb2RlPjwvcD48cD5TZXQgd2hldGhlciB0aGlzIGhhcyBhIHZhbHVlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFsdWVTZXQ8L2NvZGU+IC0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBoYXMgYSB2YWx1ZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjM1MGNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0eWxlc2hlZXQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdHlsZXNoZWV0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9wcmU+VGhlIDxjb2RlPnhzbDpzdHlsZXNoZWV0PC9jb2RlPiBtb2RlbCBlbGVtZW50LjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY2FsbGVkVGVtcGxhdGVzIj5jYWxsZWRUZW1wbGF0ZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZWxlbWVudHMiPmVsZW1lbnRzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBJRmlsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2ZpbGUiPmZpbGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZnVuY3Rpb25zIj5mdW5jdGlvbnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZ2xvYmFsVmFyaWFibGVzIj5nbG9iYWxWYXJpYWJsZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfaW1wb3J0cyI+aW1wb3J0czwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9pbmNsdWRlcyI+aW5jbHVkZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfdGVtcGxhdGVzIj50ZW1wbGF0ZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF92ZXJzaW9uIj52ZXJzaW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdHlsZXNoZWV0Ij5TdHlsZXNoZWV0PC9hPjwvc3Ryb25nPihJRmlsZSBmaWxlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkQ2FsbGVkVGVtcGxhdGUiPmFkZENhbGxlZFRlbXBsYXRlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuQ2FsbFRlbXBsYXRlIHRlbXBsYXRlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhIDxjb2RlPkNhbGxUZW1wbGF0ZTwvY29kZT4gdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRGdW5jdGlvbiI+YWRkRnVuY3Rpb248L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbiBmdW5jdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRHbG9iYWxWYXJpYWJsZSI+YWRkR2xvYmFsVmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZSB2YXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgZ2xvYmFsIHZhcmlhYmxlIHRvIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkSW1wb3J0Ij5hZGRJbXBvcnQ8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbXBvcnQgaW5jbHVkZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYW4gPGNvZGU+SW1wb3J0PC9jb2RlPiB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZEluY2x1ZGUiPmFkZEluY2x1ZGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlIGluY2x1ZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+IHRvIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkVGVtcGxhdGUiPmFkZFRlbXBsYXRlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUgdGVtcGxhdGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgPGNvZGU+VGVtcGxhdGU8L2NvZGU+IHRvIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENhbGxlZFRlbXBsYXRlcyI+Z2V0Q2FsbGVkVGVtcGxhdGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBsaXN0IG9mIGNhbGxlZCB0ZW1wbGF0ZXMgZm9yIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElGaWxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZpbGUiPmdldEZpbGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGZpbGUgdGhhdCB0aGlzIHJlcHJlc2VudHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZ1bmN0aW9ucyI+Z2V0RnVuY3Rpb25zPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBmb3IgdGhpcyBzdHlsZXNoZWV0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRHbG9iYWxWYXJpYWJsZXMiPmdldEdsb2JhbFZhcmlhYmxlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbXBvcnRzIj5nZXRJbXBvcnRzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBsaXN0IG9mIGltcG9ydHMgZm9yIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluY2x1ZGVzIj5nZXRJbmNsdWRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgbGlzdCBvZiBpbmNsdWRlcyBmb3IgdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZW1wbGF0ZXMiPmdldFRlbXBsYXRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmVyc2lvbiI+Z2V0VmVyc2lvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc3R5bGVzaGVldCB2ZXJzaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFZlcnNpb24iPnNldFZlcnNpb248L2E+KGphdmEubGFuZy5TdHJpbmcgdmVyc2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIHN0eWxlc2hlZXQgdmVyc2lvbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2NhbGxlZFRlbXBsYXRlcyI+Y2FsbGVkVGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Y2FsbGVkVGVtcGxhdGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2VsZW1lbnRzIj5lbGVtZW50czwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmVsZW1lbnRzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ZpbGUiPmZpbGU8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgSUZpbGUgPHN0cm9uZz5maWxlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2Z1bmN0aW9ucyI+ZnVuY3Rpb25zPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+ZnVuY3Rpb25zPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2dsb2JhbFZhcmlhYmxlcyI+Z2xvYmFsVmFyaWFibGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2xvYmFsVmFyaWFibGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ltcG9ydHMiPmltcG9ydHM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5pbXBvcnRzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2luY2x1ZGVzIj5pbmNsdWRlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmluY2x1ZGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3RlbXBsYXRlcyI+dGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+dGVtcGxhdGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3ZlcnNpb24iPnZlcnNpb248L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnZlcnNpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0eWxlc2hlZXQiPlN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdHlsZXNoZWV0PC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD5DcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRDYWxsZWRUZW1wbGF0ZSI+YWRkQ2FsbGVkVGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZENhbGxlZFRlbXBsYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGUgdGVtcGxhdGUpPC9jb2RlPjwvcD48cD5BZGQgYSA8Y29kZT5DYWxsVGVtcGxhdGU8L2NvZGU+IHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZW1wbGF0ZTwvY29kZT4gLSB0aGUgdGVtcGxhdGUgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZEZ1bmN0aW9uIj5hZGRGdW5jdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkRnVuY3Rpb248L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkZ1bmN0aW9uIGZ1bmN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mdW5jdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkR2xvYmFsVmFyaWFibGUiPmFkZEdsb2JhbFZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRHbG9iYWxWYXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVmFyaWFibGUgdmFyKTwvY29kZT48L3A+PHA+QWRkIGEgZ2xvYmFsIHZhcmlhYmxlIHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YXI8L2NvZGU+IC0gdGhlIHZhcmlhYmxlIHRvIGFkZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRJbXBvcnQiPmFkZEltcG9ydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkSW1wb3J0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbXBvcnQgaW5jbHVkZSk8L2NvZGU+PC9wPjxwPkFkZCBhbiA8Y29kZT5JbXBvcnQ8L2NvZGU+IHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbmNsdWRlPC9jb2RlPiAtIHRoZSBpbXBvcnQgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZEluY2x1ZGUiPmFkZEluY2x1ZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZEluY2x1ZGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkluY2x1ZGUgaW5jbHVkZSk8L2NvZGU+PC9wPjxwPkFkZCBhbiA8Y29kZT5JbmNsdWRlPC9jb2RlPiB0byB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5jbHVkZTwvY29kZT4gLSB0aGUgaW5jbHVkZSB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkVGVtcGxhdGUiPmFkZFRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRUZW1wbGF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUgdGVtcGxhdGUpPC9jb2RlPjwvcD48cD5BZGQgYSA8Y29kZT5UZW1wbGF0ZTwvY29kZT4gdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRlbXBsYXRlPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q2FsbGVkVGVtcGxhdGVzIj5nZXRDYWxsZWRUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRDYWxsZWRUZW1wbGF0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBsaXN0IG9mIGNhbGxlZCB0ZW1wbGF0ZXMgZm9yIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgbGlzdCBvZiBjYWxsZWQgdGVtcGxhdGVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZpbGUiPmdldEZpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUZpbGUgPHN0cm9uZz5nZXRGaWxlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgZmlsZSB0aGF0IHRoaXMgcmVwcmVzZW50cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklGaWxlPC9jb2RlPiAtIHRoZSBmaWxlIHRoYXQgdGhpcyByZXByZXNlbnRzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZ1bmN0aW9ucyI+Z2V0RnVuY3Rpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0RnVuY3Rpb25zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgZm9yIHRoaXMgc3R5bGVzaGVldC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBsaXN0IG9mIGNhbGxlZCB0ZW1wbGF0ZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0R2xvYmFsVmFyaWFibGVzIj5nZXRHbG9iYWxWYXJpYWJsZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRHbG9iYWxWYXJpYWJsZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1wb3J0cyI+Z2V0SW1wb3J0czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEltcG9ydHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBsaXN0IG9mIGltcG9ydHMgZm9yIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgbGlzdCBvZiBpbXBvcnRzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluY2x1ZGVzIj5nZXRJbmNsdWRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEluY2x1ZGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGlzdCBvZiBpbmNsdWRlcyBmb3IgdGhpcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBsaXN0IG9mIGluY2x1ZGVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgPHN0cm9uZz5nZXRTdHlsZXNoZWV0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRlbXBsYXRlcyI+Z2V0VGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0VGVtcGxhdGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmVyc2lvbiI+Z2V0VmVyc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VmVyc2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHN0eWxlc2hlZXQgdmVyc2lvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFZlcnNpb24iPnNldFZlcnNpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFZlcnNpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB2ZXJzaW9uKTwvY29kZT48L3A+PHA+U2V0IHRoZSBzdHlsZXNoZWV0IHZlcnNpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52ZXJzaW9uPC9jb2RlPiAtIHRoZSB2ZXJzaW9uIHRvIHNldDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkzOWJjNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0eWxlc2hlZXRNb2RlbDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0eWxlc2hlZXRNb2RlbDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3Q8L3ByZT5UaGUgY29tcG9zZWQgc3R5bGVzaGVldCwgY29uc2lzdGluZyBvZiBhbGwgdGVtcGxhdGVzIGFuZCB2YXJpYWJsZXMgYXZhaWxhYmxlCi0gdmlhIGltcG9ydHMgYW5kIGluY2x1ZGVzLgotIAotIDxwPgotIFRoZSA8Y29kZT5maXgoKTwvY29kZT4gbWV0aG9kIGRvZXMgdGhlIGFjdHVhbCB3b3JrIG9mIHBvcHVsYXRpbmcgdGhlIGZpZWxkcwotIG9mIHRoaXMsIHNvIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGFueSBvZiB0aGUgb3RoZXIgbWV0aG9kcy4KLSA8L3A+Ci0gCi0gPHA+Ci0gTm90ZSB0aGF0IHRoaXMgbW9kZWwgbWF5IG5vdCBiZSB2YWxpZCAtIGZvciBpbnN0YW5jZSB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuCi0gb25lIG5hbWVkIHRlbXBsYXRlIGZvciBhIGdpdmVuIG5hbWUgb3IgbW9yZSB0aGFuIG9uZSBnbG9iYWwgdmFyaWFibGUgd2l0aCBhCi0gZ2l2ZW4gbmFtZS4KLSA8L3A+PHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jYWxsVGVtcGxhdGVzIj5jYWxsVGVtcGxhdGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY2lyY3VsYXJSZWZlcmVuY2UiPmNpcmN1bGFyUmVmZXJlbmNlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZmlsZXMiPmZpbGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2Z1bmN0aW9ucyI+ZnVuY3Rpb25zPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2dsb2JhbFZhcmlhYmxlcyI+Z2xvYmFsVmFyaWFibGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2ltcG9ydE1vZGVsIj5pbXBvcnRNb2RlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9pbmNsdWRlTW9kZWwiPmluY2x1ZGVNb2RlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLlNldDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3N0eWxlc2hlZXRzIj5zdHlsZXNoZWV0czwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF90ZW1wbGF0ZXMiPnRlbXBsYXRlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLlNldDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3RlbXBsYXRlU2V0Ij50ZW1wbGF0ZVNldDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3R5bGVzaGVldE1vZGVsIj5TdHlsZXNoZWV0TW9kZWw8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmluZEFsbE5lc3RlZFRlbXBsYXRlcyI+ZmluZEFsbE5lc3RlZFRlbXBsYXRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEEgdXRpbGl0eSBtZXRob2QgdGhhdCB0cmF2ZXJzZXMgYWxsIHN0eWxlc2hlZXQgaW4gdGhlIGhpZXJhcmNoeSBvZgotIHN0eWxlc2hlZXRzIChub3QgaW5jbHVkaW5nIHRoZSBjdXJyZW50IHN0eWxlc2hlZXQpLCBhbmQgYWRkcyBhbGwgdGhlaXIKLSB0ZW1wbGF0ZXMgdG8gdGhlIHJldHVybmVkIGxpc3QuIFRoZXJlZm9yZSB0aGUgcmV0dXJuZWQgbGlzdCBoYXMgbm8gcmVnYXJkCi0gZm9yIHdoZXRoZXIgYSB0ZW1wbGF0ZSBpcyAndmlzaWJsZScgKGkuZS4gd2hldGhlciBpdCBtaWdodCBiZSBvdmVycmlkZGVuCi0gc2luY2UgaXQgd2FzIGluY2x1ZGVkIHZpYSBhbiBpbXBvcnQpLiBUaGUgb3JkZXIgb2YgdGhlIHRlbXBsYXRlcyBpbiB0aGUKLSBsaXN0IGlzIGFyYml0cmFyeS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZmluZE1hdGNoaW5nIj5maW5kTWF0Y2hpbmc8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSB0b01hdGNoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBhbGwgdGVtcGxhdGVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHRlbXBsYXRlIChkZXRlcm1pbmVkIGZyb20KLSA8Y29kZT5UZW1wbGF0ZS5lcXVhbHMoKTwvY29kZT4pLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZpeCI+Zml4PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGVyZm9ybSB0aGUgcHJvY2VzcyBvZiB0cmF2ZXJzaW5nIHRoZSBoaWVyYXJjaHkgdG8gZGV0ZXJtaW5lIGFsbCBvZiB0aGUKLSBwcm9wZXJ0aWVzIG9mIHRoaXMuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBtYXkgZm9yY2Ugb3RoZXIKLSA8Y29kZT5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+J3MgdG8gYmUgYnVpbHQgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGZpeGluZy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2FsbFRlbXBsYXRlcyI+Z2V0Q2FsbFRlbXBsYXRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuU2V0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZpbGVEZXBlbmRlbmNpZXMiPmdldEZpbGVEZXBlbmRlbmNpZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgYWxsIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbiB0aGUKLSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RnVuY3Rpb25CeU5hbWUiPmdldEZ1bmN0aW9uQnlOYW1lPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlIHdoaWNoIGhhdmUgdGhlIGdpdmVuIG5hbWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZ1bmN0aW9ucyI+Z2V0RnVuY3Rpb25zPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGEgTGlzdCBvZiBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGtub3duLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRHbG9iYWxWYXJpYWJsZXMiPmdldEdsb2JhbFZhcmlhYmxlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBhbGwgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4KLSB0aGUgaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluY2x1ZGVzIj5nZXRJbmNsdWRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBhbGwgc3R5bGVzaGVldHMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBpcyB0aGUgbW9kZWwgZm9yLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZW1wbGF0ZXMiPmdldFRlbXBsYXRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBhbGwgdGVtcGxhdGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbiB0aGUKLSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGVtcGxhdGVzQnlOYW1lIj5nZXRUZW1wbGF0ZXNCeU5hbWU8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgYWxsIG5hbWVkIHRlbXBsYXRlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4KLSB0aGUgaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUgd2hpY2ggaGF2ZSB0aGUgZ2l2ZW4gbmFtZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9oYXNDaXJjdWxhclJlZmVyZW5jZSI+aGFzQ2lyY3VsYXJSZWZlcmVuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgd2hldGhlciB0aGlzIGhhcyBhIGNpcmN1bGFyIHJlZmVyZW5jZSBhbnl3aGVyZSBpbiBpdHMgaW1wb3J0L2luY2x1ZGVkCi0gaGllcmFyY2h5LjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfY2FsbFRlbXBsYXRlcyI+Y2FsbFRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmNhbGxUZW1wbGF0ZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfY2lyY3VsYXJSZWZlcmVuY2UiPmNpcmN1bGFyUmVmZXJlbmNlPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW4gPHN0cm9uZz5jaXJjdWxhclJlZmVyZW5jZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9maWxlcyI+ZmlsZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLlNldCA8c3Ryb25nPmZpbGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2Z1bmN0aW9ucyI+ZnVuY3Rpb25zPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+ZnVuY3Rpb25zPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2dsb2JhbFZhcmlhYmxlcyI+Z2xvYmFsVmFyaWFibGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2xvYmFsVmFyaWFibGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ltcG9ydE1vZGVsIj5pbXBvcnRNb2RlbDwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmltcG9ydE1vZGVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2luY2x1ZGVNb2RlbCI+aW5jbHVkZU1vZGVsPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+aW5jbHVkZU1vZGVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3N0eWxlc2hlZXRzIj5zdHlsZXNoZWV0czwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0IDxzdHJvbmc+c3R5bGVzaGVldHM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfdGVtcGxhdGVzIj50ZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz50ZW1wbGF0ZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfdGVtcGxhdGVTZXQiPnRlbXBsYXRlU2V0PC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5TZXQgPHN0cm9uZz50ZW1wbGF0ZVNldDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3R5bGVzaGVldE1vZGVsIj5TdHlsZXNoZWV0TW9kZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdHlsZXNoZWV0TW9kZWw8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2ZpbmRBbGxOZXN0ZWRUZW1wbGF0ZXMiPmZpbmRBbGxOZXN0ZWRUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5maW5kQWxsTmVzdGVkVGVtcGxhdGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkEgdXRpbGl0eSBtZXRob2QgdGhhdCB0cmF2ZXJzZXMgYWxsIHN0eWxlc2hlZXQgaW4gdGhlIGhpZXJhcmNoeSBvZgotIHN0eWxlc2hlZXRzIChub3QgaW5jbHVkaW5nIHRoZSBjdXJyZW50IHN0eWxlc2hlZXQpLCBhbmQgYWRkcyBhbGwgdGhlaXIKLSB0ZW1wbGF0ZXMgdG8gdGhlIHJldHVybmVkIGxpc3QuIFRoZXJlZm9yZSB0aGUgcmV0dXJuZWQgbGlzdCBoYXMgbm8gcmVnYXJkCi0gZm9yIHdoZXRoZXIgYSB0ZW1wbGF0ZSBpcyAndmlzaWJsZScgKGkuZS4gd2hldGhlciBpdCBtaWdodCBiZSBvdmVycmlkZGVuCi0gc2luY2UgaXQgd2FzIGluY2x1ZGVkIHZpYSBhbiBpbXBvcnQpLiBUaGUgb3JkZXIgb2YgdGhlIHRlbXBsYXRlcyBpbiB0aGUKLSBsaXN0IGlzIGFyYml0cmFyeS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIGFuIHVub3JkZXJlZCBsaXN0IG9mIGFsbCB0ZW1wbGF0ZXMgZnJvbSBhbGwgc3R5bGVzaGVldHMuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZpbmRNYXRjaGluZyI+ZmluZE1hdGNoaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+ZmluZE1hdGNoaW5nPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSB0b01hdGNoKTwvY29kZT48L3A+PHA+R2V0IGFsbCB0ZW1wbGF0ZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gdGVtcGxhdGUgKGRldGVybWluZWQgZnJvbQotIDxjb2RlPlRlbXBsYXRlLmVxdWFscygpPC9jb2RlPikuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50b01hdGNoPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSB0byBtYXRjaDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdCBtYXRjaDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9maXgiPmZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Zml4PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlBlcmZvcm0gdGhlIHByb2Nlc3Mgb2YgdHJhdmVyc2luZyB0aGUgaGllcmFyY2h5IHRvIGRldGVybWluZSBhbGwgb2YgdGhlCi0gcHJvcGVydGllcyBvZiB0aGlzLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbWF5IGZvcmNlIG90aGVyCi0gPGNvZGU+U3R5bGVzaGVldE1vZGVsPC9jb2RlPidzIHRvIGJlIGJ1aWx0IGR1cmluZyB0aGUgcHJvY2VzcyBvZiBmaXhpbmcuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENhbGxUZW1wbGF0ZXMiPmdldENhbGxUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRDYWxsVGVtcGxhdGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZpbGVEZXBlbmRlbmNpZXMiPmdldEZpbGVEZXBlbmRlbmNpZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLlNldCA8c3Ryb25nPmdldEZpbGVEZXBlbmRlbmNpZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IGFsbCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4gdGhlCi0gaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuU2V0PC9jb2RlPiAtIHRoZSBzZXQgb2YgZmlsZXMgaW4gdGhlIGVudGlyZSBoaWVyYXJjaHk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RnVuY3Rpb25CeU5hbWUiPmdldEZ1bmN0aW9uQnlOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0RnVuY3Rpb25CeU5hbWU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48L3A+PHA+R2V0IGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlIHdoaWNoIGhhdmUgdGhlIGdpdmVuIG5hbWUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgc2V0IG9mIG5hbWVkIHRlbXBsYXRlcyB3aXRoIHRoZSBnaXZlbiBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZ1bmN0aW9ucyI+Z2V0RnVuY3Rpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0RnVuY3Rpb25zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCBhIExpc3Qgb2YgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBrbm93bi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRHbG9iYWxWYXJpYWJsZXMiPmdldEdsb2JhbFZhcmlhYmxlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEdsb2JhbFZhcmlhYmxlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgYWxsIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluCi0gdGhlIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIHNldCBvZiBmaWxlcyBpbiB0aGUgZW50aXJlIGhpZXJhcmNoeTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbmNsdWRlcyI+Z2V0SW5jbHVkZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRJbmNsdWRlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgYWxsIHN0eWxlc2hlZXRzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbiB0aGUKLSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBzZXQgb2Ygc3R5bGVzaGVldHMgaW4gdGhlIGVudGlyZSBoaWVyYXJjaHk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5nZXRNb2RlbFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCA8c3Ryb25nPmdldFN0eWxlc2hlZXQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBpcyB0aGUgbW9kZWwgZm9yLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+IC0gdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGlzIHRoZSBtb2RlbCBmb3I8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGVtcGxhdGVzIj5nZXRUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRUZW1wbGF0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IGFsbCB0ZW1wbGF0ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIHNldCBvZiB0ZW1wbGF0ZXMgaW4gdGhlIGVudGlyZSBoaWVyYXJjaHk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGVtcGxhdGVzQnlOYW1lIj5nZXRUZW1wbGF0ZXNCeU5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRUZW1wbGF0ZXNCeU5hbWU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48L3A+PHA+R2V0IGFsbCBuYW1lZCB0ZW1wbGF0ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluCi0gdGhlIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlIHdoaWNoIGhhdmUgdGhlIGdpdmVuIG5hbWUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSBuYW1lPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgc2V0IG9mIG5hbWVkIHRlbXBsYXRlcyB3aXRoIHRoZSBnaXZlbiBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc0NpcmN1bGFyUmVmZXJlbmNlIj5oYXNDaXJjdWxhclJlZmVyZW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aGFzQ2lyY3VsYXJSZWZlcmVuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHdoZXRoZXIgdGhpcyBoYXMgYSBjaXJjdWxhciByZWZlcmVuY2UgYW55d2hlcmUgaW4gaXRzIGltcG9ydC9pbmNsdWRlZAotIGhpZXJhcmNoeS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBoYXMgYSBjaXJjdWxhciByZWZlcmVuY2U8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTg1OWVjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBUZW1wbGF0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlRlbXBsYXRlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9wcmU+VGhlIDxjb2RlPnhzbDp0ZW1wbGF0ZTwvY29kZT4gbW9kZWwgZWxlbWVudC48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3BhcmFtZXRlcnMiPnBhcmFtZXRlcnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfdmFyaWFibGVzIj52YXJpYWJsZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1RlbXBsYXRlIj5UZW1wbGF0ZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFBhcmFtZXRlciI+YWRkUGFyYW1ldGVyPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyIHBhcmFtZXRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSBwYXJhbWV0ZXIgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRWYXJpYWJsZSI+YWRkVmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZSB2YXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgdmFyaWFibGUgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcXVhbHMiPmVxdWFsczwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmopPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TWF0Y2giPmdldE1hdGNoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bWF0Y2g8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGUiPmdldE1vZGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5tb2RlPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmFtZXRlcnMiPmdldFBhcmFtZXRlcnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBvZiB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFByaW9yaXR5Ij5nZXRQcmlvcml0eTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByaW9yaXR5PC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhc2hDb2RlIj5oYXNoQ29kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21hdGNoZXNCeU1hdGNoT3JOYW1lIj5tYXRjaGVzQnlNYXRjaE9yTmFtZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlIGluY2x1ZGVkVGVtcGxhdGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9wYXJhbWV0ZXJzIj5wYXJhbWV0ZXJzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+cGFyYW1ldGVyczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF92YXJpYWJsZXMiPnZhcmlhYmxlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPnZhcmlhYmxlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVGVtcGxhdGUiPlRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VGVtcGxhdGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFBhcmFtZXRlciI+YWRkUGFyYW1ldGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRQYXJhbWV0ZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlciBwYXJhbWV0ZXIpPC9jb2RlPjwvcD48cD5BZGQgYSBwYXJhbWV0ZXIgdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmFtZXRlcjwvY29kZT4gLSB0aGUgcGFyYW1ldGVyIHRvIGFkZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRWYXJpYWJsZSI+YWRkVmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZFZhcmlhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZSB2YXIpPC9jb2RlPjwvcD48cD5BZGQgYSB2YXJpYWJsZSB0byB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFyPC9jb2RlPiAtIHRoZSB2YXJpYWJsZSB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXF1YWxzIj5lcXVhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmVxdWFsczwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iaik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TWF0Y2giPmdldE1hdGNoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRNYXRjaDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5tYXRjaDwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBtYXRjaCB2YWx1ZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlIj5nZXRNb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRNb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm1vZGU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgbW9kZSB2YWx1ZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXROYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgdGVtcGxhdGUgbmFtZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJhbWV0ZXJzIj5nZXRQYXJhbWV0ZXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0UGFyYW1ldGVyczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBvZiB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIGxpc3Qgb2YgcGFyYW1ldGVyczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmlvcml0eSI+Z2V0UHJpb3JpdHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFByaW9yaXR5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnByaW9yaXR5PC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIHByaW9yaXR5IHZhbHVlLCBvciBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc2hDb2RlIj5oYXNoQ29kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5oYXNoQ29kZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWF0Y2hlc0J5TWF0Y2hPck5hbWUiPm1hdGNoZXNCeU1hdGNoT3JOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5tYXRjaGVzQnlNYXRjaE9yTmFtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUgaW5jbHVkZWRUZW1wbGF0ZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5jbHVkZWRUZW1wbGF0ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dG9TdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZDY4NmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFZhcmlhYmxlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmFyaWFibGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L3ByZT5UaGUgPGNvZGU+eHNsOnZhcmlhYmxlPC9jb2RlPiBtb2RlbCBlbGVtZW50LjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ZhcmlhYmxlIj5WYXJpYWJsZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFzIj5nZXRBczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIElmIGFuIFhTTFQgMi4wLCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5hczwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNlbGVjdCI+Z2V0U2VsZWN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+c2VsZWN0PC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9WYXJpYWJsZSI+VmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXMiPmdldEFzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRBczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5JZiBhbiBYU0xUIDIuMCwgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+YXM8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgYXMgdmFsdWUsIG9yIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5nZXRNb2RlbFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIHZhcmlhYmxlIG5hbWUsIG9yIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U2VsZWN0Ij5nZXRTZWxlY3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFNlbGVjdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5zZWxlY3Q8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgc2VsZWN0IHZhbHVlLCBvciBudWxsPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTBmNWYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMQXR0cmlidXRlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMQXR0cmlidXRlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlPC9wcmU+QW4gYXR0cmlidXRlIG9mIGFuIGVsZW1lbnQgaW4gdGhlIFhTTCBuYW1lc3BhY2UuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25hbWUiPm5hbWU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF92YWx1ZSI+dmFsdWU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTEF0dHJpYnV0ZSI+WFNMQXR0cmlidXRlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBuYW1lIG9mIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGlzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfbmFtZSI+bmFtZTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+bmFtZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF92YWx1ZSI+dmFsdWU8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnZhbHVlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xBdHRyaWJ1dGUiPlhTTEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTEF0dHJpYnV0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXROYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbmFtZSBvZiB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgYXR0cmlidXRlJ3MgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYWx1ZSI+Z2V0VmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhpcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIGF0dHJpYnV0ZSdzIHZhbHVlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MGIwZjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMRWxlbWVudDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTEVsZW1lbnQ8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU8L3ByZT5BbiBlbGVtZW50IGluIHRoZSBYU0wgbmFtZXNwYWNlLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5NYXA8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9hdHRyaWJ1dGVzIj5hdHRyaWJ1dGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2NoaWxkRWxlbWVudHMiPmNoaWxkRWxlbWVudHM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTEVsZW1lbnQiPlhTTEVsZW1lbnQ8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRDaGlsZCI+YWRkQ2hpbGQ8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgY2hpbGQgZWxlbWVudCBvZiB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEF0dHJpYnV0ZSI+Z2V0QXR0cmlidXRlPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBdHRyaWJ1dGVzIj5nZXRBdHRyaWJ1dGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBhdHRyaWJ1dGVzIGtleWVkIGJ5IHRoZWlyIG5hbWVzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEF0dHJpYnV0ZVZhbHVlIj5nZXRBdHRyaWJ1dGVWYWx1ZTwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDaGlsZEVsZW1lbnRzIj5nZXRDaGlsZEVsZW1lbnRzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0QXR0cmlidXRlIj5zZXRBdHRyaWJ1dGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGUgYXR0cmlidXRlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhbiBhdHRyaWJ1dGUgb2YgdGhpczwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfYXR0cmlidXRlcyI+YXR0cmlidXRlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTWFwIDxzdHJvbmc+YXR0cmlidXRlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9jaGlsZEVsZW1lbnRzIj5jaGlsZEVsZW1lbnRzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Y2hpbGRFbGVtZW50czwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMRWxlbWVudCI+WFNMRWxlbWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTEVsZW1lbnQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZENoaWxkIj5hZGRDaGlsZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkQ2hpbGQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgZWxlbWVudCk8L2NvZGU+PC9wPjxwPkFkZCBhIGNoaWxkIGVsZW1lbnQgb2YgdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+IC0gdGhlIGNob2xkIGVsZW1lbnQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXR0cmlidXRlIj5nZXRBdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZSA8c3Ryb25nPmdldEF0dHJpYnV0ZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlPC9jb2RlPiAtIHRoZSBhdHRyaWJ1dGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXR0cmlidXRlcyI+Z2V0QXR0cmlidXRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwIDxzdHJvbmc+Z2V0QXR0cmlidXRlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGF0dHJpYnV0ZXMga2V5ZWQgYnkgdGhlaXIgbmFtZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTWFwPC9jb2RlPiAtIHRoZSBtYXAgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCBpbnN0YW5jZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXR0cmlidXRlVmFsdWUiPmdldEF0dHJpYnV0ZVZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRBdHRyaWJ1dGVWYWx1ZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgYXR0cmlidXRlIHZhbHVlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENoaWxkRWxlbWVudHMiPmdldENoaWxkRWxlbWVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRDaGlsZEVsZW1lbnRzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGlzdCBvZiBjaGlsZCBlbGVtZW50czwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIGxpc3Qgb2YgY2hpbGRyZW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5nZXRNb2RlbFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0QXR0cmlidXRlIj5zZXRBdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEF0dHJpYnV0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlIGF0dHJpYnV0ZSk8L2NvZGU+PC9wPjxwPkFkZCBhbiBhdHRyaWJ1dGUgb2YgdGhpczwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXR0cmlidXRlPC9jb2RlPiAtIHRoZSBhdHRyaWJ1dGUgdG8gYWRkPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwODcxMzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMTW9kZWxPYmplY3QuVHlwZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTE1vZGVsT2JqZWN0LlR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLkVudW08L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0FUVFJJQlVURSI+QVRUUklCVVRFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQ0FMTF9URU1QTEFURSI+Q0FMTF9URU1QTEFURTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0ZVTkNUSU9OIj5GVU5DVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNUE9SVCI+SU1QT1JUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU5DTFVERSI+SU5DTFVERTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX09USEVSX0VMRU1FTlQiPk9USEVSX0VMRU1FTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9QQVJBTSI+UEFSQU08L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TVFlMRVNIRUVUIj5TVFlMRVNIRUVUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU1RZTEVTSEVFVF9NT0RFTCI+U1RZTEVTSEVFVF9NT0RFTDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RFTVBMQVRFIj5URU1QTEFURTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1ZBUklBQkxFIj5WQVJJQUJMRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWx1ZU9mIj52YWx1ZU9mPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZVtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlcyI+dmFsdWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9BVFRSSUJVVEUiPkFUVFJJQlVURTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+QVRUUklCVVRFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NBTExfVEVNUExBVEUiPkNBTExfVEVNUExBVEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPkNBTExfVEVNUExBVEU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRlVOQ1RJT04iPkZVTkNUSU9OPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5GVU5DVElPTjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTVBPUlQiPklNUE9SVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+SU1QT1JUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lOQ0xVREUiPklOQ0xVREU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPklOQ0xVREU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfT1RIRVJfRUxFTUVOVCI+T1RIRVJfRUxFTUVOVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+T1RIRVJfRUxFTUVOVDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9QQVJBTSI+UEFSQU08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPlBBUkFNPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1NUWUxFU0hFRVQiPlNUWUxFU0hFRVQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPlNUWUxFU0hFRVQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfU1RZTEVTSEVFVF9NT0RFTCI+U1RZTEVTSEVFVF9NT0RFTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+U1RZTEVTSEVFVF9NT0RFTDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9URU1QTEFURSI+VEVNUExBVEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPlRFTVBMQVRFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1ZBUklBQkxFIj5WQVJJQUJMRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+VkFSSUFCTEU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWVPZiI+dmFsdWVPZjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPnZhbHVlT2Y8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbHVlcyI+dmFsdWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlW10gPHN0cm9uZz52YWx1ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZVtdPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NTk5MmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMTW9kZWxPYmplY3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xNb2RlbE9iamVjdDwvc3Ryb25nPgotZXh0ZW5kcyBQbGF0Zm9ybU9iamVjdDwvcHJlPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMTW9kZWxPYmplY3QiPlhTTE1vZGVsT2JqZWN0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xNb2RlbE9iamVjdCI+WFNMTW9kZWxPYmplY3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xNb2RlbE9iamVjdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWIwZTNlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTE5vZGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xOb2RlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdDwvcHJlPkEgbm9kZSBpbiB0aGUgWFNMIG5hbWVzcGFjZS48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIHNob3J0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQVRUUklCVVRFX05PREUiPkFUVFJJQlVURV9OT0RFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEEgY29uc3RhbnQgZm9yIHRoZSBhdHRyaWJ1dGUgbm9kZSAoPSAmbHQ7Y29kZSZndDtvcmcudzNjLmRvbS5Ob2RlLkFUVFJJQlVURV9OT0RFJmx0Oy9jb2RlJmd0Oyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY29sdW1uTnVtYmVyIj5jb2x1bW5OdW1iZXI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgc2hvcnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FTEVNRU5UX05PREUiPkVMRU1FTlRfTk9ERTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBIGNvbnN0YW50IGZvciB0aGUgZWxlbWVudCBub2RlICg9ICZsdDtjb2RlJmd0O29yZy53M2MuZG9tLk5vZGUuRUxFTUVOVF9OT0RFJmx0Oy9jb2RlJmd0Oyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfbGluZU51bWJlciI+bGluZU51bWJlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMTm9kZSI+WFNMTm9kZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldAotICAgICAgICAgLAotICAgICAgc2hvcnQgdHlwZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29sdW1uTnVtYmVyIj5nZXRDb2x1bW5OdW1iZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIGNvbHVtbiBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMZW5ndGgiPmdldExlbmd0aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgbGVuZ3RoIG9mIHRoaXMgbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExpbmVOdW1iZXIiPmdldExpbmVOdW1iZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc2hvcnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Tm9kZVR5cGUiPmdldE5vZGVUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB0eXBlIG9mIG5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRPZmZzZXQiPmdldE9mZnNldDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgZG9jdW1lbnQgb2Zmc2V0IHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGJlbG9uZ3MgdG8uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0Q29sdW1uTnVtYmVyIj5zZXRDb2x1bW5OdW1iZXI8L2E+KGludCBjb2x1bW5OdW1iZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBjb2x1bW5zIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRMZW5ndGgiPnNldExlbmd0aDwvYT4oaW50IGxlbmd0aCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIGxlbmd0aCBvZiB0aGlzIG5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0TGluZU51bWJlciI+c2V0TGluZU51bWJlcjwvYT4oaW50IGxpbmVOdW1iZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXROYW1lIj5zZXROYW1lPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0T2Zmc2V0Ij5zZXRPZmZzZXQ8L2E+KGludCBvZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBkb2N1bWVudCBvZmZzZXQgd2hlcmUgdGhpcyBub2RlIG9jY3Vycy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FUVFJJQlVURV9OT0RFIj5BVFRSSUJVVEVfTk9ERTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIHNob3J0IDxzdHJvbmc+QVRUUklCVVRFX05PREU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPkEgY29uc3RhbnQgZm9yIHRoZSBhdHRyaWJ1dGUgbm9kZSAoPSA8Y29kZT5vcmcudzNjLmRvbS5Ob2RlLkFUVFJJQlVURV9OT0RFPC9jb2RlPik8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2NvbHVtbk51bWJlciI+Y29sdW1uTnVtYmVyPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGludCA8c3Ryb25nPmNvbHVtbk51bWJlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9FTEVNRU5UX05PREUiPkVMRU1FTlRfTk9ERTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIHNob3J0IDxzdHJvbmc+RUxFTUVOVF9OT0RFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5BIGNvbnN0YW50IGZvciB0aGUgZWxlbWVudCBub2RlICg9IDxjb2RlPm9yZy53M2MuZG9tLk5vZGUuRUxFTUVOVF9OT0RFPC9jb2RlPik8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2xpbmVOdW1iZXIiPmxpbmVOdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgaW50IDxzdHJvbmc+bGluZU51bWJlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMTm9kZSI+WFNMTm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTE5vZGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldAotICAgICAgICAgLAotICAgICAgc2hvcnQgdHlwZSk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbHVtbk51bWJlciI+Z2V0Q29sdW1uTnVtYmVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldENvbHVtbk51bWJlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TZXQgdGhlIGNvbHVtbiBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIGNvbHVtbiBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldExlbmd0aCI+Z2V0TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldExlbmd0aDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGxlbmd0aCBvZiB0aGlzIG5vZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIG5vZGUgbGVuZ3RoPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldExpbmVOdW1iZXIiPmdldExpbmVOdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0TGluZU51bWJlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TZXQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5vZGVUeXBlIj5nZXROb2RlVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzaG9ydCA8c3Ryb25nPmdldE5vZGVUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdHlwZSBvZiBub2RlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+c2hvcnQ8L2NvZGU+IC0gb25lIG9mIDxjb2RlPkVMRU1FTlRfTk9ERTwvY29kZT4gb3IgPGNvZGU+QVRUUklCVVRFX05PREU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE9mZnNldCI+Z2V0T2Zmc2V0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldE9mZnNldDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGRvY3VtZW50IG9mZnNldCB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBkb2N1bWVudCBvZmZzZXQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCA8c3Ryb25nPmdldFN0eWxlc2hlZXQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+IC0gdGhlIHN0eWxlc2hlZXQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0Q29sdW1uTnVtYmVyIj5zZXRDb2x1bW5OdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldENvbHVtbk51bWJlcjwvc3Ryb25nPihpbnQgY29sdW1uTnVtYmVyKTwvY29kZT48L3A+PHA+U2V0IHRoZSBjb2x1bW5zIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbHVtbk51bWJlcjwvY29kZT4gLSB0aGUgY29sdW1uIG51bWJlcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRMZW5ndGgiPnNldExlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0TGVuZ3RoPC9zdHJvbmc+KGludCBsZW5ndGgpPC9jb2RlPjwvcD48cD5TZXQgdGhlIGxlbmd0aCBvZiB0aGlzIG5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5sZW5ndGg8L2NvZGU+IC0gdGhlIG5vZGUgbGVuZ3RoPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldExpbmVOdW1iZXIiPnNldExpbmVOdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldExpbmVOdW1iZXI8L3N0cm9uZz4oaW50IGxpbmVOdW1iZXIpPC9jb2RlPjwvcD48cD5TZXQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bGluZU51bWJlcjwvY29kZT4gLSB0aGUgbGluZSBudW1iZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0TmFtZSI+c2V0TmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0TmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldE9mZnNldCI+c2V0T2Zmc2V0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRPZmZzZXQ8L3N0cm9uZz4oaW50IG9mZnNldCk8L2NvZGU+PC9wPjxwPlNldCB0aGUgZG9jdW1lbnQgb2Zmc2V0IHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vZmZzZXQ8L2NvZGU+IC0gdGhlIGRvY3VtZW50IG9mZnNldDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnRvU3RyaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODY4YzhhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuUmVzb2x2ZXJFeHRlbnNpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBSZXNvbHZlckV4dGVuc2lvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlJlc29sdmVyRXh0ZW5zaW9uPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UT0RPOiBKYXZhZG9jPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9SZXNvbHZlckV4dGVuc2lvbiI+UmVzb2x2ZXJFeHRlbnNpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmUiPnJlc29sdmU8L2E+KElGaWxlIGZpbGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgYmFzZUxvY2F0aW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHB1YmxpY0lkCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN5c3RlbUlkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1Jlc29sdmVyRXh0ZW5zaW9uIj5SZXNvbHZlckV4dGVuc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJlc29sdmVyRXh0ZW5zaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc29sdmUiPnJlc29sdmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnJlc29sdmU8L3N0cm9uZz4oSUZpbGUgZmlsZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBiYXNlTG9jYXRpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+PC9wPjxwPjxjb2RlPmJhc2VMb2NhdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+cHVibGljSWQ8L2NvZGU+PC9wPjxwPjxjb2RlPnN5c3RlbUlkPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5TdG9wUGFyc2luZ0V4Y2VwdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5TdG9wUGFyc2luZ0V4Y2VwdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2NlNTJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuU3RvcFBhcnNpbmdFeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0b3BQYXJzaW5nRXhjZXB0aW9uPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+U3RvcFBhcnNpbmdFeGNlcHRpb248L3N0cm9uZz4KLWV4dGVuZHMgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9wcmU+QW4gZXhjZXB0aW9uIGluZGljYXRpbmcgdGhhdCB0aGUgcGFyc2luZyBzaG91bGQgc3RvcC4gVGhpcyBpcyB1c3VhbGx5Ci0gdHJpZ2dlcmVkIHdoZW4gdGhlIHRvcC1sZXZlbCBlbGVtZW50IGhhcyBiZWVuIGZvdW5kLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3RvcFBhcnNpbmdFeGNlcHRpb24iPlN0b3BQYXJzaW5nRXhjZXB0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdG9wUGFyc2luZ0V4Y2VwdGlvbiI+U3RvcFBhcnNpbmdFeGNlcHRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdG9wUGFyc2luZ0V4Y2VwdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RzIGFuIGluc3RhbmNlIG9mIDxjb2RlPlN0b3BQYXJzaW5nRXhjZXB0aW9uPC9jb2RlPiB3aXRoIGEKLSA8Y29kZT5udWxsPC9jb2RlPiBkZXRhaWwgbWVzc2FnZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzBmMzFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuWFNMVmVyc2lvbkhhbmRsZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xWZXJzaW9uSGFuZGxlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFZlcnNpb25IYW5kbGVyPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L3ByZT5BIHNpbXBsZSBYTUwgcGFyc2VyIHRvIGZpbmQgdGhlIFhTTCB2ZXJzaW9uIG9mIGEgZ2l2ZW4gWE1MIGZpbGUsIGV4cGVjdGVkbHkgYSBYU0xUIHN0eWxlc2hlZXQuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFZlcnNpb25IYW5kbGVyIj5YU0xWZXJzaW9uSGFuZGxlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tbWVudCI+Y29tbWVudDwvYT4oY2hhcltdIGNoCi0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnQKLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW5kQ0RBVEEiPmVuZENEQVRBPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW5kRFREIj5lbmREVEQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbmRFbnRpdHkiPmVuZEVudGl0eTwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Vycm9yIj5lcnJvcjwvYT4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24gZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mYXRhbEVycm9yIj5mYXRhbEVycm9yPC9hPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFZlcnNpb25BdHRyaWJ1dGUiPmdldFZlcnNpb25BdHRyaWJ1dGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YWRvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlQ29udGVudHMiPnBhcnNlQ29udGVudHM8L2E+KG9yZy54bWwuc2F4LklucHV0U291cmNlIGNvbnRlbnRzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhZG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy54bWwuc2F4LklucHV0U291cmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmVFbnRpdHkiPnJlc29sdmVFbnRpdHk8L2E+KGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRDREFUQSI+c3RhcnRDREFUQTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0RFREIj5zdGFydERURDwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHB1YmxpY0lkCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN5c3RlbUlkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0RWxlbWVudCI+c3RhcnRFbGVtZW50PC9hPihqYXZhLmxhbmcuU3RyaW5nIHVyaQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBlbGVtZW50TmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBxdWFsaWZpZWROYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcueG1sLnNheC5BdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRFbnRpdHkiPnN0YXJ0RW50aXR5PC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfd2FybmluZyI+d2FybmluZzwvYT4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24gZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xWZXJzaW9uSGFuZGxlciI+WFNMVmVyc2lvbkhhbmRsZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xWZXJzaW9uSGFuZGxlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YWRvYzwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbW1lbnQiPmNvbW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbW1lbnQ8L3N0cm9uZz4oY2hhcltdIGNoCi0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnQKLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNoPC9jb2RlPjwvcD48cD48Y29kZT5zdGFydDwvY29kZT48L3A+PHA+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmRDREFUQSI+ZW5kQ0RBVEE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmVuZENEQVRBPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmREVEQiPmVuZERURDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZW5kRFREPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmRFbnRpdHkiPmVuZEVudGl0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZW5kRW50aXR5PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXJyb3IiPmVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5lcnJvcjwvc3Ryb25nPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mYXRhbEVycm9yIj5mYXRhbEVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5mYXRhbEVycm9yPC9zdHJvbmc+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZlcnNpb25BdHRyaWJ1dGUiPmdldFZlcnNpb25BdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFZlcnNpb25BdHRyaWJ1dGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VE9ETzogQWRkIEphdmFkb2M8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlQ29udGVudHMiPnBhcnNlQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBhcnNlQ29udGVudHM8L3N0cm9uZz4ob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UgY29udGVudHMpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YWRvYzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGVudHM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5pby5JT0V4Y2VwdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+amF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+b3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZXNvbHZlRW50aXR5Ij5yZXNvbHZlRW50aXR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy54bWwuc2F4LklucHV0U291cmNlIDxzdHJvbmc+cmVzb2x2ZUVudGl0eTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHB1YmxpY0lkCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN5c3RlbUlkKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wdWJsaWNJZDwvY29kZT48L3A+PHA+PGNvZGU+c3lzdGVtSWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5JbnB1dFNvdXJjZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnRDREFUQSI+c3RhcnRDREFUQTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnRDREFUQTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnREVEQiPnN0YXJ0RFREPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydERURDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPnB1YmxpY0lkPC9jb2RlPjwvcD48cD48Y29kZT5zeXN0ZW1JZDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnRFbGVtZW50Ij5zdGFydEVsZW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0YXJ0RWxlbWVudDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBlbGVtZW50TmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBxdWFsaWZpZWROYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcueG1sLnNheC5BdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVyaTwvY29kZT48L3A+PHA+PGNvZGU+ZWxlbWVudE5hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPnF1YWxpZmllZE5hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPmF0dHJpYnV0ZXM8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0YXJ0RW50aXR5Ij5zdGFydEVudGl0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnRFbnRpdHk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF93YXJuaW5nIj53YXJuaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz53YXJuaW5nPC9zdHJvbmc+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLk1lc3NhZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzllN2UzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLk1lc3NhZ2VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTWVzc2FnZXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPgotZXh0ZW5kcyBOTFM8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlSm9iIj5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VKb2I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZU1iVGV4dCI+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlTWJUZXh0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VQcm9qZWN0Ij5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VQcm9qZWN0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VXb3Jrc3BhY2UiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVdvcmtzcGFjZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZSI+Q2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZUZpbGUiPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWVGaWxlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FcnJvckxldmVsVGV4dCI+RXJyb3JMZXZlbFRleHQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0V4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QiPkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lnbm9yZUxldmVsVGV4dCI+SWdub3JlTGV2ZWxUZXh0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NYWluUHJlZmVyZW5jZVBhZ2UiPk1haW5QcmVmZXJlbmNlUGFnZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTmV3WFNMQ29sdW1uVGVtcGxhdGVEZXNjcmlwdGlvbiI+TmV3WFNMQ29sdW1uVGVtcGxhdGVEZXNjcmlwdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTmV3WFNMQ29sdW1uVGVtcGxhdGVOYW1lIj5OZXdYU0xDb2x1bW5UZW1wbGF0ZU5hbWU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05ld1hTTEZpbGVBbHJlYWRFeGlzdHNFcnJvciI+TmV3WFNMRmlsZUFscmVhZEV4aXN0c0Vycm9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xGaWxlUGFnZURlc2NyaXB0aW9uIj5OZXdYU0xGaWxlUGFnZURlc2NyaXB0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xGaWxlUGFnZVRpdGxlIj5OZXdYU0xGaWxlUGFnZVRpdGxlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xGaWxlUGFnZVdpbmRvd1RpdGxlIj5OZXdYU0xGaWxlUGFnZVdpbmRvd1RpdGxlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xGaWxlV2l6YXJkRXh0ZW5zaW9uRXJyb3IiPk5ld1hTTEZpbGVXaXphcmRFeHRlbnNpb25FcnJvcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTmV3WFNMTGlua1ByZWZlcmVuY2VQYWdlIj5OZXdYU0xMaW5rUHJlZmVyZW5jZVBhZ2U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05ld1hTTFNlbGVjdFRlbXBsYXRlIj5OZXdYU0xTZWxlY3RUZW1wbGF0ZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTmV3WFNMVGVtcGxhdGVEZXNjcmlwdGlvbiI+TmV3WFNMVGVtcGxhdGVEZXNjcmlwdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTmV3WFNMVGVtcGxhdGVQcmV2aWV3VGl0bGUiPk5ld1hTTFRlbXBsYXRlUHJldmlld1RpdGxlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xVc2VUZW1wbGF0ZUJ1dHRvblRleHQiPk5ld1hTTFVzZVRlbXBsYXRlQnV0dG9uVGV4dDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTm9Db250ZW50QXNzaXN0YW5jZSI+Tm9Db250ZW50QXNzaXN0YW5jZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfT3BlbiI+T3BlbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclBhZ2VEZXNjcmlwdGlvbiI+VmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclBhZ2VEZXNjcmlwdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfV2FybmluZ0xldmVsVGV4dCI+V2FybmluZ0xldmVsVGV4dDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZSI+WFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZU1vZGUiPlhTTEVkaXRvck92ZXJyaWRlVGVtcGxhdGVNb2RlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xTeW50YXhDb2xvcmluZ1BhZ2UiPlhTTFN5bnRheENvbG9yaW5nUGFnZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfeHNsdFN0eWxlRG9jdW1lbnQiPnhzbHRTdHlsZURvY3VtZW50PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUGFnZVNldmVyaXR5TGV2ZWwiPlhTTFZhbGlkYXRpb25QYWdlU2V2ZXJpdHlMZXZlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VDYWxsVGVtcGxhdGVzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2FsbFRlbXBsYXRlc0xhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUNpcmN1bGFyUmVmZXJlbmNlc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUNpcmN1bGFyUmVmZXJlbmNlc0xhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUR1cGxpY2F0ZVBhcmFtZXRlckxhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUR1cGxpY2F0ZVBhcmFtZXRlckxhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc0xhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc01zZ0Vycm9yIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc01zZ0Vycm9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW1ldGVyQXR0cmlidXRlTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtdGVyc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbXRlcnNMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VOYW1lZFRlbXBsYXRlc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU5hbWVkVGVtcGxhdGVzTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZURlc2NyaXB0aW9uIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2VEZXNjcmlwdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlVGl0bGUiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZVRpdGxlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtZXRlckVtcHR5QXR0cmlidXRlTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW1ldGVyRW1wdHlBdHRyaWJ1dGVMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbXRlcnNXaXRob3V0VmFsdWVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbXRlcnNXaXRob3V0VmFsdWVMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VUZW1wbGF0ZUNvbmZsaWN0c0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVRlbXBsYXRlQ29uZmxpY3RzTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlZFRlbXBsYXRlc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZWRUZW1wbGF0ZXNMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVJbXBvcnRJbmNsdWRlTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlSW1wb3J0SW5jbHVkZUxhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVhQYXRoTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aFN5bnRheExhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVhQYXRoU3ludGF4TGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX01lc3NhZ2VzIj5NZXNzYWdlczwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VKb2IiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZUpvYjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VKb2I8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlTWJUZXh0Ij5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VNYlRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlTWJUZXh0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVByb2plY3QiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVByb2plY3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlUHJvamVjdDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VXb3Jrc3BhY2UiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVdvcmtzcGFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VXb3Jrc3BhY2U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZSI+Q2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0NhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWVGaWxlIj5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lRmlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lRmlsZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9FcnJvckxldmVsVGV4dCI+RXJyb3JMZXZlbFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+RXJyb3JMZXZlbFRleHQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdCI+RXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lnbm9yZUxldmVsVGV4dCI+SWdub3JlTGV2ZWxUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklnbm9yZUxldmVsVGV4dDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NYWluUHJlZmVyZW5jZVBhZ2UiPk1haW5QcmVmZXJlbmNlUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NYWluUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMQ29sdW1uVGVtcGxhdGVEZXNjcmlwdGlvbiI+TmV3WFNMQ29sdW1uVGVtcGxhdGVEZXNjcmlwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xDb2x1bW5UZW1wbGF0ZURlc2NyaXB0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTENvbHVtblRlbXBsYXRlTmFtZSI+TmV3WFNMQ29sdW1uVGVtcGxhdGVOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTENvbHVtblRlbXBsYXRlTmFtZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xGaWxlQWxyZWFkRXhpc3RzRXJyb3IiPk5ld1hTTEZpbGVBbHJlYWRFeGlzdHNFcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xGaWxlQWxyZWFkRXhpc3RzRXJyb3I8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMRmlsZVBhZ2VEZXNjcmlwdGlvbiI+TmV3WFNMRmlsZVBhZ2VEZXNjcmlwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xGaWxlUGFnZURlc2NyaXB0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTEZpbGVQYWdlVGl0bGUiPk5ld1hTTEZpbGVQYWdlVGl0bGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TmV3WFNMRmlsZVBhZ2VUaXRsZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xGaWxlUGFnZVdpbmRvd1RpdGxlIj5OZXdYU0xGaWxlUGFnZVdpbmRvd1RpdGxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTEZpbGVQYWdlV2luZG93VGl0bGU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMRmlsZVdpemFyZEV4dGVuc2lvbkVycm9yIj5OZXdYU0xGaWxlV2l6YXJkRXh0ZW5zaW9uRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TmV3WFNMRmlsZVdpemFyZEV4dGVuc2lvbkVycm9yPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTExpbmtQcmVmZXJlbmNlUGFnZSI+TmV3WFNMTGlua1ByZWZlcmVuY2VQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTExpbmtQcmVmZXJlbmNlUGFnZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xTZWxlY3RUZW1wbGF0ZSI+TmV3WFNMU2VsZWN0VGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TmV3WFNMU2VsZWN0VGVtcGxhdGU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMVGVtcGxhdGVEZXNjcmlwdGlvbiI+TmV3WFNMVGVtcGxhdGVEZXNjcmlwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xUZW1wbGF0ZURlc2NyaXB0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTFRlbXBsYXRlUHJldmlld1RpdGxlIj5OZXdYU0xUZW1wbGF0ZVByZXZpZXdUaXRsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xUZW1wbGF0ZVByZXZpZXdUaXRsZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xVc2VUZW1wbGF0ZUJ1dHRvblRleHQiPk5ld1hTTFVzZVRlbXBsYXRlQnV0dG9uVGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xVc2VUZW1wbGF0ZUJ1dHRvblRleHQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTm9Db250ZW50QXNzaXN0YW5jZSI+Tm9Db250ZW50QXNzaXN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5Ob0NvbnRlbnRBc3Npc3RhbmNlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX09wZW4iPk9wZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+T3Blbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyUGFnZURlc2NyaXB0aW9uIj5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyUGFnZURlc2NyaXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJQYWdlRGVzY3JpcHRpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfV2FybmluZ0xldmVsVGV4dCI+V2FybmluZ0xldmVsVGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5XYXJuaW5nTGV2ZWxUZXh0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTEVkaXRvck92ZXJyaWRlVGVtcGxhdGUiPlhTTEVkaXRvck92ZXJyaWRlVGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlTW9kZSI+WFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZU1vZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZU1vZGU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMU3ludGF4Q29sb3JpbmdQYWdlIj5YU0xTeW50YXhDb2xvcmluZ1BhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMU3ludGF4Q29sb3JpbmdQYWdlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3hzbHRTdHlsZURvY3VtZW50Ij54c2x0U3R5bGVEb2N1bWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz54c2x0U3R5bGVEb2N1bWVudDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUGFnZVNldmVyaXR5TGV2ZWwiPlhTTFZhbGlkYXRpb25QYWdlU2V2ZXJpdHlMZXZlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUGFnZVNldmVyaXR5TGV2ZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VDYWxsVGVtcGxhdGVzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2FsbFRlbXBsYXRlc0xhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2FsbFRlbXBsYXRlc0xhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2lyY3VsYXJSZWZlcmVuY2VzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2lyY3VsYXJSZWZlcmVuY2VzTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VDaXJjdWxhclJlZmVyZW5jZXNMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUR1cGxpY2F0ZVBhcmFtZXRlckxhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUR1cGxpY2F0ZVBhcmFtZXRlckxhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlRHVwbGljYXRlUGFyYW1ldGVyTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VJbXBvcnRzSW5jbHVkZXNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VJbXBvcnRzSW5jbHVkZXNMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc01zZ0Vycm9yIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc01zZ0Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTXNnRXJyb3I8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW1ldGVyQXR0cmlidXRlTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtZXRlckF0dHJpYnV0ZUxhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtZXRlckF0dHJpYnV0ZUxhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtdGVyc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbXRlcnNMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbXRlcnNMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU5hbWVkVGVtcGxhdGVzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTmFtZWRUZW1wbGF0ZXNMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU5hbWVkVGVtcGxhdGVzTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlRGVzY3JpcHRpb24iPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZURlc2NyaXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZURlc2NyaXB0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZVRpdGxlIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2VUaXRsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2VUaXRsZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtZXRlckVtcHR5QXR0cmlidXRlTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW1ldGVyRW1wdHlBdHRyaWJ1dGVMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtZXRlckVtcHR5QXR0cmlidXRlTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbXRlcnNXaXRob3V0VmFsdWVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbXRlcnNXaXRob3V0VmFsdWVMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlVGVtcGxhdGVDb25mbGljdHNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VUZW1wbGF0ZUNvbmZsaWN0c0xhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVGVtcGxhdGVDb25mbGljdHNMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZWRUZW1wbGF0ZXNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVkVGVtcGxhdGVzTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVkVGVtcGxhdGVzTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVJbXBvcnRJbmNsdWRlTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlSW1wb3J0SW5jbHVkZUxhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlSW1wb3J0SW5jbHVkZUxhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aExhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVhQYXRoU3ludGF4TGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhTeW50YXhMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVhQYXRoU3ludGF4TGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX01lc3NhZ2VzIj5NZXNzYWdlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDM3YTE4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5QcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUHJlZmVyZW5jZUluaXRpYWxpemVyIj5QcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMiPmluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPlByZWZlcmVuY2VJbml0aWFsaXplcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlByZWZlcmVuY2VJbml0aWFsaXplcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzIj5pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzM5NWY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMPC9zdHJvbmc+Ci1leHRlbmRzIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDwvcHJlPlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTCBpbXBsZW1lbnRzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IKLSBhdHRyaWJ1dGVzIGFuZCBvdGhlciBYUGF0aCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wiPlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmdbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb25maWd1cmVkQ29udGVudFR5cGVzIj5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzPC9hPihJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElDb250ZW50QXNzaXN0UHJvY2Vzc29yW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29udGVudEFzc2lzdFByb2Nlc3NvcnMiPmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3JzPC9hPihJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwYXJ0aXRpb25UeXBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybiB0aGUgcHJvY2Vzc29ycyBmb3IgdGhlIGN1cnJlbnQgY29udGVudCB0eXBlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJSHlwZXJsaW5rRGV0ZWN0b3JbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRIeXBlcmxpbmtEZXRlY3RvcnMiPmdldEh5cGVybGlua0RldGVjdG9yczwvYT4oSVNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBMaW5lU3R5bGVQcm92aWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMaW5lU3R5bGVQcm92aWRlckZvclhTTCI+Z2V0TGluZVN0eWxlUHJvdmlkZXJGb3JYU0w8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wiPlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Db25maWd1cmF0aW9uIGZvciBYU0wgQ29udGVudCBUeXBlczwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbmZpZ3VyZWRDb250ZW50VHlwZXMiPmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIDxzdHJvbmc+Z2V0Q29uZmlndXJlZENvbnRlbnRUeXBlczwvc3Ryb25nPihJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNvdXJjZVZpZXdlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmdbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29udGVudEFzc2lzdFByb2Nlc3NvcnMiPmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3JzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElDb250ZW50QXNzaXN0UHJvY2Vzc29yW10gPHN0cm9uZz5nZXRDb250ZW50QXNzaXN0UHJvY2Vzc29yczwvc3Ryb25nPihJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwYXJ0aXRpb25UeXBlKTwvY29kZT48L3A+PHA+UmV0dXJuIHRoZSBwcm9jZXNzb3JzIGZvciB0aGUgY3VycmVudCBjb250ZW50IHR5cGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zb3VyY2VWaWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnBhcnRpdGlvblR5cGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29udGVudEFzc2lzdFByb2Nlc3NvcltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRIeXBlcmxpbmtEZXRlY3RvcnMiPmdldEh5cGVybGlua0RldGVjdG9yczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJSHlwZXJsaW5rRGV0ZWN0b3JbXSA8c3Ryb25nPmdldEh5cGVybGlua0RldGVjdG9yczwvc3Ryb25nPihJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNvdXJjZVZpZXdlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklIeXBlcmxpbmtEZXRlY3RvcltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMaW5lU3R5bGVQcm92aWRlckZvclhTTCI+Z2V0TGluZVN0eWxlUHJvdmlkZXJGb3JYU0w8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgTGluZVN0eWxlUHJvdmlkZXIgPHN0cm9uZz5nZXRMaW5lU3R5bGVQcm92aWRlckZvclhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkxpbmVTdHlsZVByb3ZpZGVyPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50cy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlDb25zdGFudHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYwN2Y0YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVUlDb25zdGFudHM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xVSUNvbnN0YW50czwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05FV19GSUxFX1RFTVBMQVRFX05BTUUiPk5FV19GSUxFX1RFTVBMQVRFX05BTUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RFTVBMQVRFX0NPTlRFWFRfWFNMX05FVyI+VEVNUExBVEVfQ09OVEVYVF9YU0xfTkVXPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xVSUNvbnN0YW50cyI+WFNMVUlDb25zdGFudHM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfTkVXX0ZJTEVfVEVNUExBVEVfTkFNRSI+TkVXX0ZJTEVfVEVNUExBVEVfTkFNRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5ORVdfRklMRV9URU1QTEFURV9OQU1FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RFTVBMQVRFX0NPTlRFWFRfWFNMX05FVyI+VEVNUExBVEVfQ09OVEVYVF9YU0xfTkVXPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlRFTVBMQVRFX0NPTlRFWFRfWFNMX05FVzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVUlDb25zdGFudHMiPlhTTFVJQ29uc3RhbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVUlDb25zdGFudHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzJiYWRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xVSVBsdWdpbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFVJUGx1Z2luPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0VUlQbHVnaW48L3ByZT5UaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUExVR0lOX0lEIj5QTFVHSU5fSUQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIHBsdWdpbiBpZCBmb3IgdGhpcyBwbHVnaW4uPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFVJUGx1Z2luIj5YU0xVSVBsdWdpbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldERlZmF1bHQiPmdldERlZmF1bHQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgQ29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSI+Z2V0VGVtcGxhdGVDb250ZXh0UmVnaXN0cnk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHRoZSB4c2wgcGx1Z2luLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBUZW1wbGF0ZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRlbXBsYXRlU3RvcmUiPmdldFRlbXBsYXRlU3RvcmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBzdG9yZSBmb3IgdGhlIHhzbCB0ZW1wbGF0ZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xvZyI+bG9nPC9hPihqYXZhLmxhbmcuRXhjZXB0aW9uIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xvZyI+bG9nPC9hPihDb3JlRXhjZXB0aW9uIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLmlvLkZpbGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWFrZUZpbGVGb3IiPm1ha2VGaWxlRm9yPC9hPihqYXZhLmxhbmcuU3RyaW5nIGRpcmVjdG9yeQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWxlbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGFydCI+c3RhcnQ8L2E+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdG9wIj5zdG9wPC9hPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9QTFVHSU5fSUQiPlBMVUdJTl9JRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5QTFVHSU5fSUQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBwbHVnaW4gaWQgZm9yIHRoaXMgcGx1Z2luLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFVJUGx1Z2luIj5YU0xVSVBsdWdpbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFVJUGx1Z2luPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSBjb25zdHJ1Y3RvcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERlZmF1bHQiPmdldERlZmF1bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbiA8c3Ryb25nPmdldERlZmF1bHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luPC9jb2RlPiAtIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGVtcGxhdGVDb250ZXh0UmVnaXN0cnkiPmdldFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIENvbnRleHRUeXBlUmVnaXN0cnkgPHN0cm9uZz5nZXRUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHRoZSB4c2wgcGx1Z2luLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT4gLSB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB0aGUgeHNsIHBsdWdpbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZW1wbGF0ZVN0b3JlIj5nZXRUZW1wbGF0ZVN0b3JlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFRlbXBsYXRlU3RvcmUgPHN0cm9uZz5nZXRUZW1wbGF0ZVN0b3JlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHRlbXBsYXRlIHN0b3JlIGZvciB0aGUgeHNsIHRlbXBsYXRlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlRlbXBsYXRlU3RvcmU8L2NvZGU+IC0gdGhlIHRlbXBsYXRlIHN0b3JlIGZvciB0aGUgeHNsIHRlbXBsYXRlczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2ciPmxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bG9nPC9zdHJvbmc+KGphdmEubGFuZy5FeGNlcHRpb24gZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbG9nIj5sb2c8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmxvZzwvc3Ryb25nPihDb3JlRXhjZXB0aW9uIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21ha2VGaWxlRm9yIj5tYWtlRmlsZUZvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmlvLkZpbGUgPHN0cm9uZz5tYWtlRmlsZUZvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGRpcmVjdG9yeQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWxlbmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZGlyZWN0b3J5PC9jb2RlPjwvcD48cD48Y29kZT5maWxlbmFtZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEuaW8uRmlsZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEuaW8uSU9FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0YXJ0Ij5zdGFydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnQ8L3N0cm9uZz4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RvcCI+c3RvcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RvcDwvc3Ryb25nPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdEVERGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3YTc5MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05ld0RUREZpbGVXaXphcmREZWxlZ2F0ZSI+TmV3RFRERmlsZVdpemFyZERlbGVnYXRlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdCI+aW5pdDwvYT4oSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcnVuIj5ydW48L2E+KElBY3Rpb24gYWN0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdGlvbkNoYW5nZWQiPnNlbGVjdGlvbkNoYW5nZWQ8L2E+KElBY3Rpb24gYWN0aW9uCi0gICAgICAgICAsCi0gICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OZXdEVERGaWxlV2l6YXJkRGVsZWdhdGUiPk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0Ij5pbml0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbml0PC9zdHJvbmc+KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT53aW5kb3c8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3J1biI+cnVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5ydW48L3N0cm9uZz4oSUFjdGlvbiBhY3Rpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFjdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0aW9uQ2hhbmdlZCI+c2VsZWN0aW9uQ2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2VsZWN0aW9uQ2hhbmdlZDwvc3Ryb25nPihJQWN0aW9uIGFjdGlvbgotICAgICAgICAgLAotICAgICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFjdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+c2VsZWN0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dTRExGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDc4NjE3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld1dTRExGaWxlV2l6YXJkRGVsZWdhdGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZSI+TmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPihJQWN0aW9uIGFjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3Rpb25DaGFuZ2VkIj5zZWxlY3Rpb25DaGFuZ2VkPC9hPihJQWN0aW9uIGFjdGlvbgotICAgICAgICAgLAotICAgICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZSI+TmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld1dTRExGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoV2luZG93IHdpbmRvdyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+d2luZG93PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KElBY3Rpb24gYWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdGlvbkNoYW5nZWQiPnNlbGVjdGlvbkNoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdGlvbkNoYW5nZWQ8L3N0cm9uZz4oSUFjdGlvbiBhY3Rpb24KLSAgICAgICAgICwKLSAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxwPjxjb2RlPnNlbGVjdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXaXphcmRBY3Rpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V2l6YXJkQWN0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZTJiMzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXaXphcmRBY3Rpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOZXdXaXphcmRBY3Rpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OZXdXaXphcmRBY3Rpb248L3N0cm9uZz4KLWV4dGVuZHMgQWN0aW9uPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05ld1dpemFyZEFjdGlvbiI+TmV3V2l6YXJkQWN0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGlkKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcnVuIj5ydW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRTZWxlY3Rpb24iPnNldFNlbGVjdGlvbjwvYT4oSVNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmV3V2l6YXJkQWN0aW9uIj5OZXdXaXphcmRBY3Rpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OZXdXaXphcmRBY3Rpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpZCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3J1biI+cnVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5ydW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFNlbGVjdGlvbiI+c2V0U2VsZWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRTZWxlY3Rpb248L3N0cm9uZz4oSVNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNlbGVjdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WE1MRmlsZVdpemFyZERlbGVnYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMGI3ZjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUiPk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPihJQWN0aW9uIGFjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3Rpb25DaGFuZ2VkIj5zZWxlY3Rpb25DaGFuZ2VkPC9hPihJQWN0aW9uIGFjdGlvbgotICAgICAgICAgLAotICAgICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmV3WE1MRmlsZVdpemFyZERlbGVnYXRlIj5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoV2luZG93IHdpbmRvdyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+d2luZG93PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KElBY3Rpb24gYWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdGlvbkNoYW5nZWQiPnNlbGVjdGlvbkNoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdGlvbkNoYW5nZWQ8L3N0cm9uZz4oSUFjdGlvbiBhY3Rpb24KLSAgICAgICAgICwKLSAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxwPjxjb2RlPnNlbGVjdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNERmlsZVdpemFyZERlbGVnYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Y2IzNzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUiPk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPihJQWN0aW9uIGFjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3Rpb25DaGFuZ2VkIj5zZWxlY3Rpb25DaGFuZ2VkPC9hPihJQWN0aW9uIGFjdGlvbgotICAgICAgICAgLAotICAgICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmV3WFNERmlsZVdpemFyZERlbGVnYXRlIj5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoV2luZG93IHdpbmRvdyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+d2luZG93PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KElBY3Rpb24gYWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdGlvbkNoYW5nZWQiPnNlbGVjdGlvbkNoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdGlvbkNoYW5nZWQ8L3N0cm9uZz4oSUFjdGlvbiBhY3Rpb24KLSAgICAgICAgICwKLSAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxwPjxjb2RlPnNlbGVjdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNMRmlsZVdpemFyZERlbGVnYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMDZhZjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUiPk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPihJQWN0aW9uIGFjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3Rpb25DaGFuZ2VkIj5zZWxlY3Rpb25DaGFuZ2VkPC9hPihJQWN0aW9uIGFjdGlvbgotICAgICAgICAgLAotICAgICAgSVNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmV3WFNMRmlsZVdpemFyZERlbGVnYXRlIj5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoV2luZG93IHdpbmRvdyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+d2luZG93PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KElBY3Rpb24gYWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdGlvbkNoYW5nZWQiPnNlbGVjdGlvbkNoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdGlvbkNoYW5nZWQ8L3N0cm9uZz4oSUFjdGlvbiBhY3Rpb24KLSAgICAgICAgICwKLSAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hY3Rpb248L2NvZGU+PC9wPjxwPjxjb2RlPnNlbGVjdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5BdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiZjY3NS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QXR0cmlidXRlQ29udGVudEFzc2lzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdDwvcHJlPlRoaXMgY2xhc3MgcHJvdmlkZXMgY29udGVudCBhc3Npc3RhbmNlIGZvciBhdHRyaWJ1dGVzIHRoYXQgY29udGFpbiB0aGUgInsiIGNoYXJhY3RlciBhdHRyaWJ1dGUuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQXR0cmlidXRlQ29udGVudEFzc2lzdCI+QXR0cmlidXRlQ29udGVudEFzc2lzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BdHRyaWJ1dGVDb250ZW50QXNzaXN0Ij5BdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QXR0cmlidXRlQ29udGVudEFzc2lzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgdGhlIFhTTCBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHRoZSB0ZXN0IGF0dHJpYnV0ZS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU3YzY3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvcHJlPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RhbmNlIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBmb3IKLSA8eHNsOmNhbGwtd2l0aD4gdGVtcGxhdGVzLiAgIEl0IHdpbGwgcHJvdmlkZSBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZQotIG5hbWVkIHRlbXBsYXRlcy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QWRkaXRpb25hbEluZm8iPmdldEFkZGl0aW9uYWxJbmZvPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUgdGVtcGxhdGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdCI+Q2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBZGRpdGlvbmFsSW5mbyI+Z2V0QWRkaXRpb25hbEluZm88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEFkZGl0aW9uYWxJbmZvPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSB0ZW1wbGF0ZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGVtcGxhdGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFByb2Nlc3NvckZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFByb2Nlc3NvckZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmYTZhYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ29udGVudEFzc2lzdFByb2Nlc3NvckZhY3Rvcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QSBmYWN0b3J5IGNsYXNzIHRoYXQgcmVhZHMgYW4gZWNsaXBzZSBleHRlbnNpb24gcG9pbnQgZm9yIENvbnRlbnQgQXNzaXN0Ci0gUHJvY2Vzc29ycy48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeSI+Q29udGVudEFzc2lzdFByb2Nlc3NvckZhY3Rvcnk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVQcm9jZXNzb3JzIj5jcmVhdGVQcm9jZXNzb3JzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyB0aGUgbmVjZXNzYXJ5IENvbnRlbnQgQXNzaXN0IFByb2Nlc3NvcnMgdGhhdCBoYXZlIGJlZW4KLSBDb250cmlidXRlZCB0byB0aGUgWFNMIEVkaXRvciBjb25maWd1cmF0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5Ij5Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkNvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVByb2Nlc3NvcnMiPmNyZWF0ZVByb2Nlc3NvcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXSA8c3Ryb25nPmNyZWF0ZVByb2Nlc3NvcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlcyB0aGUgbmVjZXNzYXJ5IENvbnRlbnQgQXNzaXN0IFByb2Nlc3NvcnMgdGhhdCBoYXZlIGJlZW4KLSBDb250cmlidXRlZCB0byB0aGUgWFNMIEVkaXRvciBjb25maWd1cmF0aW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmMThlNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBFeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvcHJlPlByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgeHNsIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUKLSBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcyBhdHRyaWJ1dGUuICBUaGlzIHdpbGwgcHJvdmlkZSBhIGxpc3QgCi0gb2YgYWxsIGtub3duIHJlc3VsdCBwcmVmaXhlcyB0aGF0IGFyZW4ndCBjdXJyZW50bHkgaW4gdGhlIGF0dHJpYnV0ZQotIGxpc3QuICBUaGlzIGxpc3QgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdC4gICBUaGUgWFNMIHByZWZpeCBpcwotIGV4Y2x1ZGVkLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmdbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3Rva2VucyI+dG9rZW5zPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0Ij5FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luY2x1ZGVQcmVmaXgiPmluY2x1ZGVQcmVmaXg8L2E+KE5hbWVzcGFjZUluZm8gbmFtZXNwYWNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZWZpeEV4aXN0cyI+cHJlZml4RXhpc3RzPC9hPihqYXZhLmxhbmcuU3RyaW5nIHByZWZpeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX3Rva2VucyI+dG9rZW5zPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmdbXSA8c3Ryb25nPnRva2Vuczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdCI+RXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbmNsdWRlUHJlZml4Ij5pbmNsdWRlUHJlZml4PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pbmNsdWRlUHJlZml4PC9zdHJvbmc+KE5hbWVzcGFjZUluZm8gbmFtZXNwYWNlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lc3BhY2U8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmVmaXhFeGlzdHMiPnByZWZpeEV4aXN0czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+cHJlZml4RXhpc3RzPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcHJlZml4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcmVmaXg8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDRkMWI4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9wcmU+VGhpcyBjbGFzcyBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHRoZSBYU0wgc2VsZWN0IGF0dHJpYnV0ZS48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TRUxFQ1RfQVRUUklCVVRFIj5TRUxFQ1RfQVRUUklCVVRFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0Ij5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRTZWxlY3RQcm9wb3NhbHMiPmFkZFNlbGVjdFByb3Bvc2FsczwvYT4ob3JnLnczYy5kb20uRWxlbWVudCByb290RWxlbWVudAotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRUZW1wbGF0ZXMiPmFkZFRlbXBsYXRlczwvYT4oamF2YS5sYW5nLlN0cmluZyBjb250ZXh0Ci0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnRPZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkcyBYUGF0aCByZWxhdGVkIHRlbXBsYXRlcyB0byB0aGUgbGlzdCBvZiBwcm9wb3NhbHM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGp1c3RYUGF0aFN0YXJ0Ij5hZGp1c3RYUGF0aFN0YXJ0PC9hPihqYXZhLmxhbmcuU3RyaW5nIGF0dHJOYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgbmVlZHMgdG8gc2V0dXAgdGhlIGNvbnRlbnQgYXNzaXN0YW5jZSBjb3JyZWN0bHkuIEhlcmUgaXMgd2hhdCBuZWVkcwotIHRvIGhhcHBlbjogMS4gQWRqdXN0IHRoZSBtYXRjaFN0cmluZyAoVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQKLSBlYXJsaWVyKSAyLiBHZXQgdGhlIGN1cnJlbnQgdG9rZW5zIG9mZnNldCBwb3NpdGlvbi4udGhpcyB3aWxsIGJlIHRoZQotIHN0YXJ0aW5nIG9mZnNldC4gMy4gR2V0IHRoZSByZXBsYWNlbWVudCBsZW5ndGguLi50aGlzIGlzIHRoZSBkaWZmZXJlbmNlCi0gYmV0d2VlbiB0aGUgdG9rZW4gb2Zmc2V0IGFuZCB0aGUgbmV4dCB0b2tlbiBvciBlbmQgb2YgdGhlIHN0cmluZzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4dHJhY3RYUGF0aE1hdGNoU3RyaW5nIj5leHRyYWN0WFBhdGhNYXRjaFN0cmluZzwvYT4oSURPTUF0dHIgbm9kZQotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gYVJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSURPTUF0dHI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXR0cmlidXRlIj5nZXRBdHRyaWJ1dGU8L2E+KGphdmEubGFuZy5TdHJpbmcgYXR0ck5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhQYXRoU2VwZXJhdG9yUG9zIj5nZXRYUGF0aFNlcGVyYXRvclBvczwvYT4oaW50IGNvbHVtbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBub2RlVmFsdWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9TRUxFQ1RfQVRUUklCVVRFIj5TRUxFQ1RfQVRUUklCVVRFPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlNFTEVDVF9BVFRSSUJVVEU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1NlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiPlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPkhhbmRsZXMgQ29udGVudCBBc3Npc3RhbmNlIHJlcXVlc3RzIGZvciBTZWxlY3QgQXR0cmlidXRlcy4gVGhpcyBpcyBjYWxsZWQKLSBhbiBpbnN0YW50aWF0ZWQgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBjb21wdXRlUHJvcG9zYWxzIG1ldGhvZCBmcm9tIHRoZQotIFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuIEl0IHdpbGwgY2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgcHJvcG9zYWxzIHRoYXQKLSBhcmUgYXZhaWxhYmxlIGZvciB0aGUgWFNMIHNlbGVjdCBhdHRyaWJ1dGUuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkU2VsZWN0UHJvcG9zYWxzIj5hZGRTZWxlY3RQcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmFkZFNlbGVjdFByb3Bvc2Fsczwvc3Ryb25nPihvcmcudzNjLmRvbS5FbGVtZW50IHJvb3RFbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yb290RWxlbWVudDwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRUZW1wbGF0ZXMiPmFkZFRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkVGVtcGxhdGVzPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgY29udGV4dAotICAgICAgICAgLAotICAgICAgaW50IHN0YXJ0T2Zmc2V0KTwvY29kZT48L3A+PHA+QWRkcyBYUGF0aCByZWxhdGVkIHRlbXBsYXRlcyB0byB0aGUgbGlzdCBvZiBwcm9wb3NhbHM8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxwPjxjb2RlPnN0YXJ0T2Zmc2V0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGp1c3RYUGF0aFN0YXJ0Ij5hZGp1c3RYUGF0aFN0YXJ0PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGp1c3RYUGF0aFN0YXJ0PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgYXR0ck5hbWUpPC9jb2RlPjwvcD48cD5UaGlzIG5lZWRzIHRvIHNldHVwIHRoZSBjb250ZW50IGFzc2lzdGFuY2UgY29ycmVjdGx5LiBIZXJlIGlzIHdoYXQgbmVlZHMKLSB0byBoYXBwZW46IDEuIEFkanVzdCB0aGUgbWF0Y2hTdHJpbmcgKFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYWxjdWxhdGVkCi0gZWFybGllcikgMi4gR2V0IHRoZSBjdXJyZW50IHRva2VucyBvZmZzZXQgcG9zaXRpb24uLnRoaXMgd2lsbCBiZSB0aGUKLSBzdGFydGluZyBvZmZzZXQuIDMuIEdldCB0aGUgcmVwbGFjZW1lbnQgbGVuZ3RoLi4udGhpcyBpcyB0aGUgZGlmZmVyZW5jZQotIGJldHdlZW4gdGhlIHRva2VuIG9mZnNldCBhbmQgdGhlIG5leHQgdG9rZW4gb3IgZW5kIG9mIHRoZSBzdHJpbmc8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0dHJOYW1lPC9jb2RlPiAtIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gdXNlIGFzIHRoZSBzdGFydGluZyBub2RlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHRyYWN0WFBhdGhNYXRjaFN0cmluZyI+ZXh0cmFjdFhQYXRoTWF0Y2hTdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmV4dHJhY3RYUGF0aE1hdGNoU3RyaW5nPC9zdHJvbmc+KElET01BdHRyIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGFSZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmFSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEF0dHJpYnV0ZSI+Z2V0QXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElET01BdHRyIDxzdHJvbmc+Z2V0QXR0cmlidXRlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgYXR0ck5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0dHJOYW1lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SURPTUF0dHI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0WFBhdGhTZXBlcmF0b3JQb3MiPmdldFhQYXRoU2VwZXJhdG9yUG9zPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmdldFhQYXRoU2VwZXJhdG9yUG9zPC9zdHJvbmc+KGludCBjb2x1bW4KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbm9kZVZhbHVlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb2x1bW48L2NvZGU+PC9wPjxwPjxjb2RlPm5vZGVWYWx1ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc2OGE2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBUZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvcHJlPlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QgcHJvdmlkZXMgY29udGVudCBhc3Npc3RhbmNlIHByb3Bvc2FscyBmb3IKLSA8eHNsOnRlbXBsYXRlcz4gd2l0aCBhIG1vZGUgYXR0cmlidXRlLiAgIEl0IGxvb2tzIGF0IGFsbCB0aGUgbW9kZXMgZGVmaW5lZAotIHdpdGhpbiB0aGUgeHNsIG1vZGVsLCBhbmQgcHVsbHMgb3V0IGFueSBtb2RlcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1RlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiPlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZE1vZGVQcm9wb3NhbHMiPmFkZE1vZGVQcm9wb3NhbHM8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwgbW9kZWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBtYWluIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcG9zYWxzLiBSZXR1cm5zIHRoZSBhdmFpbGFibGUKLSBtb2RlcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSB7QGxpbmsgU3R5bGVzaGVldE1vZGVsfS4gIElmIG5vIHByb3Bvc2FscwotIGFyZSBmb3VuZCBpdCByZXR1cm5zIGEgTlVMTCB2YWx1ZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0Ij5UZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgdGhlIFRlbXBsYXRlTW9kZSBDb250ZW50IEFzc2lzdGFuY2UgY2xhc3MuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkTW9kZVByb3Bvc2FscyI+YWRkTW9kZVByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkTW9kZVByb3Bvc2Fsczwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsIG1vZGVsKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tb2RlbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgbWFpbiBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIHByb3Bvc2Fscy4gUmV0dXJucyB0aGUgYXZhaWxhYmxlCi0gbW9kZXMgdGhhdCBoYXZlIGJlZW4gZGVmaW5lZCBpbiB0aGUge0BsaW5rIFN0eWxlc2hlZXRNb2RlbH0uICBJZiBubyBwcm9wb3NhbHMKLSBhcmUgZm91bmQgaXQgcmV0dXJucyBhIE5VTEwgdmFsdWUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPiAtIElDb21wbGV0aW9uUHJvcHNhbFtdPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ODJmYjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q8L3ByZT5Qcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIFhTTFQgTmFtZWQgVGVtcGxhdGVzLiAgIEl0IHByb3ZpZGVzIGEgbGlzdAotIG9mIGF2YWlsYWJsZSBjYWxsLXRlbXBsYXRlIG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdXNlZCB3aXRoIGluIHRoZQotIHN0eWxlc2hlZXQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdCI+VGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1RlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiPlRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPlByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgWFNMVCBOYW1lZCBUZW1wbGF0ZXMuICBXaWxsIHByb3ZpZGUgYSBsaXN0Ci0gb2YgcHJvcG9zYWxzIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgbmFtZWQtdGVtcGxhdGVzIGlmIGFueSBhcmUgZGVmaW5lZCBpbgotIHRoZSBYU0wgU3R5bGVzaGVldCBtb2RlbC4gICBPbmx5IHByb3ZpZGVzIGEgbGlzdCBvZiBuYW1lZCB0ZW1wbGF0ZXMgdGhhdCBoYXZlbid0IGFscmVhZHkKLSBiZWVuIGFkZGVkIGFzIGEgcHJvcG9zYWwuICBEb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgaXQncyBhbHJlYWR5IGlzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgc3R5bGVzaGVldC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGU4ZjM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBUZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9wcmU+VGhpcyBjbGFzcyBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHRoZSB4c2wgPGVtcGhhc2lzPnRlc3Q8L2VtcGhhaXM+IGF0dHJpYnV0ZS48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdCI+VGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiPlRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIHRoZSBYU0wgY29udGVudCBhc3Npc3RhbmNlIGZvciB0aGUgdGVzdCBhdHRyaWJ1dGUuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjY0OGM1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvcHJlPlRoaXMgY2xhc3MgcHJvdmlkZXMgWE1MIEVsZW1lbnQgcHJvcG9zYWxzIHdpdGhpbiBYUGF0aCByZWxhdGVkIGl0ZW1zIGxpa2UKLSBzZWxlY3QsIHRlc3QsIGFuZCBtYXRjaCBhdHRyaWJ1dGVzLiAgVGhpcyB3aWxsIGxldmVyYWdlIGFuIENvbnRlbnRNb2RlbCB0aGF0Ci0gaGFzIGJlZW4gbG9hZGVkIGFuZCB0cnkgdG8gcHJvdmlkZSBhbGwgYXZhaWxhYmxlIFhNTCBlbGVtZW50cyB0aGF0IGNvdWxkIGJlIHVzZWQuCi0gSXQgc2hvdWxkIGJlIGVuaGFuY2VkIHRvIGtub3cgdGhlIGVsZW1lbnRzIHRvIGJlIHVzZWQgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbQotIHRoZSBYUGF0aC48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0Ij5YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsaXN0IG9mIHBvc3NpYmxlIHByb3Bvc2FscyBmb3IgdGhlIFhNTCBFbGVtZW50cyB3aXRoaW4gdGhlIGN1cnJlbnQKLSBzY29wZS4gIFRoaXMgbGV2ZXJhZ2VzIHRoZSBDb250ZW50TW9kZWwgdGhhdCB3YXMgbG9hZGVkIGJ5IHRoZSBYTUwgQ2F0YWxvZywgCi0gQ3VzdG9tIFJlc29sdmVyLCBvciB0aGUgaW5mZXJyZWQgZ3JhbW1hci48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0Ij5YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhFbGVtZW50Q29udGVudEFzc2lzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlByb3ZpZGVzIGEgbGlzdCBvZiBwb3NzaWJsZSBwcm9wb3NhbHMgZm9yIHRoZSBYTUwgRWxlbWVudHMgd2l0aGluIHRoZSBjdXJyZW50Ci0gc2NvcGUuICBUaGlzIGxldmVyYWdlcyB0aGUgQ29udGVudE1vZGVsIHRoYXQgd2FzIGxvYWRlZCBieSB0aGUgWE1MIENhdGFsb2csIAotIEN1c3RvbSBSZXNvbHZlciwgb3IgdGhlIGluZmVycmVkIGdyYW1tYXIuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDQyM2E1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L3ByZT5UaGUgWFNMIENvbnRlbnQgQXNzaXN0IFByb2Nlc3NvciBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHZhcmlvdXMKLSBhdHRyaWJ1dGVzIHZhbHVlcyB3aXRoaW4gdGhlIFhTTCBFZGl0b3IuIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCBmb3IgeHBhdGhzIG9uCi0gc2VsZWN0IHN0YXRlbWVudHMgYXMgd2VsbCBhcyBvbiB0ZXN0IGFuZCBtYXRjaCBhdHRyaWJ1dGVzLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPlhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Fzc2lzdGFuY2VPbkF0dHJpYnV0ZSI+YXNzaXN0YW5jZU9uQXR0cmlidXRlPC9hPihJRE9NTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBhUmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMiPmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzPC9hPihJVGV4dFZpZXdlciB0ZXh0Vmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgZG9jdW1lbnRQb3NpdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDT05URU5UIEFTU0lTVCBTVEFSVFMgSEVSRQotIAotIFJldHVybiBhIGxpc3Qgb2YgcHJvcG9zZWQgY29kZSBjb21wbGV0aW9ucyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkCi0gbG9jYXRpb24gd2l0aGluIHRoZSBkb2N1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IGN1cnNvcgotIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGV4dC1lZGl0b3IgY29udHJvbC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvbltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbXB1dGVDb250ZXh0SW5mb3JtYXRpb24iPmNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb248L2E+KElUZXh0Vmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGNoYXJbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZXh0SW5mb3JtYXRpb25BdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnMiPmdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IiPmdldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNYXhpbXVtVmVyc2lvbiI+Z2V0TWF4aW11bVZlcnNpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNaW5pbXVtVmVyc2lvbiI+Z2V0TWluaW11bVZlcnNpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lc3BhY2VzIj5nZXROYW1lc3BhY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciI+WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UHJvdmlkZXMgYW4gWFNMIENvbnRlbnQgQXNzaXN0IFByb2Nlc3NvciBjbGFzcyB0aGF0IGlzIFhTTCBhd2FyZSBhbmQgWE1MCi0gYXdhcmUuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYXNzaXN0YW5jZU9uQXR0cmlidXRlIj5hc3Npc3RhbmNlT25BdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmFzc2lzdGFuY2VPbkF0dHJpYnV0ZTwvc3Ryb25nPihJRE9NTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBhUmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48cD48Y29kZT5hUmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMiPmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXSA8c3Ryb25nPmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KElUZXh0Vmlld2VyIHRleHRWaWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBkb2N1bWVudFBvc2l0aW9uKTwvY29kZT48L3A+PHA+Q09OVEVOVCBBU1NJU1QgU1RBUlRTIEhFUkUKLSAKLSBSZXR1cm4gYSBsaXN0IG9mIHByb3Bvc2VkIGNvZGUgY29tcGxldGlvbnMgYmFzZWQgb24gdGhlIHNwZWNpZmllZAotIGxvY2F0aW9uIHdpdGhpbiB0aGUgZG9jdW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBjdXJzb3IKLSBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQtZWRpdG9yIGNvbnRyb2wuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZXh0Vmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5kb2N1bWVudFBvc2l0aW9uPC9jb2RlPiAtIC0gdGhlIGN1cnNvciBsb2NhdGlvbiB3aXRoaW4gdGhlIGRvY3VtZW50PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+IC0gYW4gYXJyYXkgb2YgSUNvbXBsZXRpb25Qcm9wb3NhbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wdXRlQ29udGV4dEluZm9ybWF0aW9uIj5jb21wdXRlQ29udGV4dEluZm9ybWF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb250ZXh0SW5mb3JtYXRpb25bXSA8c3Ryb25nPmNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb248L3N0cm9uZz4oSVRleHRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29udGV4dEluZm9ybWF0aW9uW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycyI+Z2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGNoYXJbXSA8c3Ryb25nPmdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVyczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5jaGFyW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvciI+Z2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IgPHN0cm9uZz5nZXRDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TWF4aW11bVZlcnNpb24iPmdldE1heGltdW1WZXJzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRNYXhpbXVtVmVyc2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1pbmltdW1WZXJzaW9uIj5nZXRNaW5pbXVtVmVyc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TWluaW11bVZlcnNpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lc3BhY2VzIj5nZXROYW1lc3BhY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXROYW1lc3BhY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZTA1MTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3Rvcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3Rvcnk8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkEgRmFjdG9yeSB0aGF0IGRldGVybWluZXMgd2hpY2ggQ29udGVudCBBc3Npc3QgUmVxdWVzdCBjbGFzcyBpcyBuZWVkZWQgYW5kCi0gcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY2xhc3MuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5Ij5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3Rvcnk8L2E+PC9zdHJvbmc+KElUZXh0Vmlld2VyIHRleHRWaWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBkb2N1bWVudFBvc2l0aW9uCi0gICAgICAgICAsCi0gICAgICBJRE9NTm9kZSB4bWxOb2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNkUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG1hdGNoU3RyaW5nKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZW50QXNzaXN0UmVxdWVzdCI+Z2V0Q29udGVudEFzc2lzdFJlcXVlc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGFwcHJvcHJpYXRlIGNvbnRlbnQgYXNzaXN0IHJlcXVlc3QgY2xhc3MgZm9yIHRoZSBYU0wgcmVxdWVzdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9oYXNBdHRyaWJ1dGVBdFRleHRSZWdpb24iPmhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbjwvYT4oamF2YS5sYW5nLlN0cmluZyBhdHRyTmFtZQotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwIG5vZGVNYXAKLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGFSZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5Ij5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3Rvcnk8L3N0cm9uZz4oSVRleHRWaWV3ZXIgdGV4dFZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IGRvY3VtZW50UG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIElET01Ob2RlIHhtbE5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2RSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbWF0Y2hTdHJpbmcpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZW50QXNzaXN0UmVxdWVzdCI+Z2V0Q29udGVudEFzc2lzdFJlcXVlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0IDxzdHJvbmc+Z2V0Q29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBhcHByb3ByaWF0ZSBjb250ZW50IGFzc2lzdCByZXF1ZXN0IGNsYXNzIGZvciB0aGUgWFNMIHJlcXVlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbiI+aGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5oYXNBdHRyaWJ1dGVBdFRleHRSZWdpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBhdHRyTmFtZQotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwIG5vZGVNYXAKLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGFSZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0dHJOYW1lPC9jb2RlPjwvcD48cD48Y29kZT5ub2RlTWFwPC9jb2RlPjwvcD48cD48Y29kZT5hUmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MDZkNmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9wcmU+VGhpcyBjbGFzcyBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgcHJvcG9zYWxzIG91dHNpZGUgb2YgdGhlIFhTTCBuYW1lc3BhY2UuICBOb3JtYWwKLSBYTUwgZWRpdG9yIGNvbnRlbnQgYXNzaXN0YW5jZSBvbmx5IHByb3ZpZGVzIHByb3Bvc2FscyBmb3IgaXRlbXMgd2l0aGluIHRoZSBzYW1lIG5hbWVzcGFjZQotIG9yIGlmIGFuIGVsZW1lbnQgaGFzIGNoaWxkcmVuIGVsZW1lbnRzLiAgIFRoaXMgY2xhc3MgZXh0ZW5kcyB0aGlzIGZ1bmN0aW9uYWxpdHkgYnkgY2hlY2tpbmcKLSBmb3IgdGhlIGZpcnN0IFhTTCBhbmNlc3RvciBhbmQgdXNlcyB0aGF0IHRvIGRldGVybWluZSB3aGF0IHByb3Bvc2FscyBzaG91bGQgYmUKLSBwcm92aWRlZCBpbiB0aGUgd2F5IG9mIHhzbCBlbGVtZW50cy48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QiPlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcHV0ZVRhZ05hbWVQcm9wb3NhbHMiPmNvbXB1dGVUYWdOYW1lUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2FsY3VsYXRlcyB0aGUgcHJvcG9zYWxzIGZvciB0aGUgWE1MIFRhZyBOYW1lIFJlZ2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21wdXRlVGFnT3BlblByb3Bvc2FscyI+Y29tcHV0ZVRhZ09wZW5Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDYWxjdWxhdGUgcHJvcG9zYWxzIGZvciBvcGVuIGNvbnRlbnQgcmVnaW9ucy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsaXN0IG9mIHBvc3NpYmxlIHByb3Bvc2FscyBmb3IgdGhlIFhTTCBFbGVtZW50cyB3aXRoaW4gdGhlIGN1cnJlbnQKLSBzY29wZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QiPlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wdXRlVGFnTmFtZVByb3Bvc2FscyI+Y29tcHV0ZVRhZ05hbWVQcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmNvbXB1dGVUYWdOYW1lUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNhbGN1bGF0ZXMgdGhlIHByb3Bvc2FscyBmb3IgdGhlIFhNTCBUYWcgTmFtZSBSZWdpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVUYWdPcGVuUHJvcG9zYWxzIj5jb21wdXRlVGFnT3BlblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+Y29tcHV0ZVRhZ09wZW5Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2FsY3VsYXRlIHByb3Bvc2FscyBmb3Igb3BlbiBjb250ZW50IHJlZ2lvbnMuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UHJvdmlkZXMgYSBsaXN0IG9mIHBvc3NpYmxlIHByb3Bvc2FscyBmb3IgdGhlIFhTTCBFbGVtZW50cyB3aXRoaW4gdGhlIGN1cnJlbnQKLSBzY29wZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3Nvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYThkMTkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+WFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yPC9zdHJvbmc+Ci1leHRlbmRzIFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvcjwvcHJlPkNvbXBsZXRpb24gcHJvY2Vzc29yIGZvciBYTUwgVGVtcGxhdGVzLiBNb3N0IG9mIHRoZSB3b3JrIGlzIGFscmVhZHkgZG9uZSBieQotIHRoZSBYTUwgQ29udGVudCBBc3Npc3QgcHJvY2Vzc29yLCBzbyBieSB0aGUgdGltZSB0aGUKLSBYTUxUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IgaXMgYXNrZWQgZm9yIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscywgdGhlCi0gWE1MIGNvbnRlbnQgYXNzaXN0IHByb2Nlc3NvciBoYXMgYWxyZWFkeSBzZXQgdGhlIGNvbnRleHQgdHlwZSBmb3IKLSB0ZW1wbGF0ZXMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciI+WFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzIj5jb21wdXRlQ29tcGxldGlvblByb3Bvc2FsczwvYT4oSVRleHRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJQ29tcGxldGlvblByb3Bvc2FsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVByb3Bvc2FsIj5jcmVhdGVQcm9wb3NhbDwvYT4oVGVtcGxhdGUgdGVtcGxhdGUKLSAgICAgICAgICwKLSAgICAgIFRlbXBsYXRlQ29udGV4dCBjb250ZXh0Ci0gICAgICAgICAsCi0gICAgICBJUmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IHJlbGV2YW5jZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGVtcGxhdGVDb250ZXh0VHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZXh0VHlwZSI+Z2V0Q29udGV4dFR5cGU8L2E+KElUZXh0Vmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgSVJlZ2lvbiByZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIEltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT4oVGVtcGxhdGUgdGVtcGxhdGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFRlbXBsYXRlW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGVtcGxhdGVzIj5nZXRUZW1wbGF0ZXM8L2E+KGphdmEubGFuZy5TdHJpbmcgY29udGV4dFR5cGVJZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRDb250ZXh0VHlwZSI+c2V0Q29udGV4dFR5cGU8L2E+KGphdmEubGFuZy5TdHJpbmcgY29udGV4dFR5cGVJZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IiPlhTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlhTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3Nvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wdXRlQ29tcGxldGlvblByb3Bvc2FscyI+Y29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIDxzdHJvbmc+Y29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oSVRleHRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklDb21wbGV0aW9uUHJvcG9zYWxbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlUHJvcG9zYWwiPmNyZWF0ZVByb3Bvc2FsPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElDb21wbGV0aW9uUHJvcG9zYWwgPHN0cm9uZz5jcmVhdGVQcm9wb3NhbDwvc3Ryb25nPihUZW1wbGF0ZSB0ZW1wbGF0ZQotICAgICAgICAgLAotICAgICAgVGVtcGxhdGVDb250ZXh0IGNvbnRleHQKLSAgICAgICAgICwKLSAgICAgIElSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVsZXZhbmNlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZW1wbGF0ZTwvY29kZT48L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5yZWxldmFuY2U8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29tcGxldGlvblByb3Bvc2FsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZXh0VHlwZSI+Z2V0Q29udGV4dFR5cGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgVGVtcGxhdGVDb250ZXh0VHlwZSA8c3Ryb25nPmdldENvbnRleHRUeXBlPC9zdHJvbmc+KElUZXh0Vmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgSVJlZ2lvbiByZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGVtcGxhdGVDb250ZXh0VHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIEltYWdlIDxzdHJvbmc+Z2V0SW1hZ2U8L3N0cm9uZz4oVGVtcGxhdGUgdGVtcGxhdGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRlbXBsYXRlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRlbXBsYXRlcyI+Z2V0VGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFRlbXBsYXRlW10gPHN0cm9uZz5nZXRUZW1wbGF0ZXM8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBjb250ZXh0VHlwZUlkKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0VHlwZUlkPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGVtcGxhdGVbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0Q29udGV4dFR5cGUiPnNldENvbnRleHRUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQgPHN0cm9uZz5zZXRDb250ZXh0VHlwZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvbnRleHRUeXBlSWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHRUeXBlSWQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDQ2OGZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yIj5YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMiPmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzPC9hPihJVGV4dFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElDb250ZXh0SW5mb3JtYXRpb25bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21wdXRlQ29udGV4dEluZm9ybWF0aW9uIj5jb21wdXRlQ29udGV4dEluZm9ybWF0aW9uPC9hPihJVGV4dFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGNoYXJbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZXh0SW5mb3JtYXRpb25BdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnMiPmdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvciI+Z2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TWF4aW11bVZlcnNpb24iPmdldE1heGltdW1WZXJzaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TWluaW11bVZlcnNpb24iPmdldE1pbmltdW1WZXJzaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZXNwYWNlcyI+Z2V0TmFtZXNwYWNlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3NvciI+WFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzIj5jb21wdXRlQ29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW10gPHN0cm9uZz5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPihJVGV4dFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wdXRlQ29udGV4dEluZm9ybWF0aW9uIj5jb21wdXRlQ29udGV4dEluZm9ybWF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb250ZXh0SW5mb3JtYXRpb25bXSA8c3Ryb25nPmNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb248L3N0cm9uZz4oSVRleHRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklDb250ZXh0SW5mb3JtYXRpb25bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzIj5nZXRDb250ZXh0SW5mb3JtYXRpb25BdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgY2hhcltdIDxzdHJvbmc+Z2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Y2hhcltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IiPmdldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJQ29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yIDxzdHJvbmc+Z2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TWF4aW11bVZlcnNpb24iPmdldE1heGltdW1WZXJzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRNYXhpbXVtVmVyc2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1pbmltdW1WZXJzaW9uIj5nZXRNaW5pbXVtVmVyc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TWluaW11bVZlcnNpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lc3BhY2VzIj5nZXROYW1lc3BhY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXROYW1lc3BhY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWwuWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmNvbnRlbnRtb2RlbC5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU4MTQ5NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmNvbnRlbnRtb2RlbC5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmNvbnRlbnRtb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTENvbnRlbnRNb2RlbEdlbmVyYXRvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdENvbnRlbnRNb2RlbEdlbmVyYXRvcjwvcHJlPlRoaXMgcHJvdmlkZXMgdGhlIENvbnRlbnRNb2RlbCBiYXNlZCBvZmYgdGhlIFhTTCB4bWwgc2NoZW1hIGdyYW1tYXJzIGFuZCBvdGhlcgotIGdyYW1tYXJzIHByb3ZpZGVkIGJ5IHRoZSB4bWwgZWRpdG9yLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yIj5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dlbmVyYXRlQXR0cmlidXRlIj5nZW5lcmF0ZUF0dHJpYnV0ZTwvYT4oQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBidWZmZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dlbmVyYXRlRW5kVGFnIj5nZW5lcmF0ZUVuZFRhZzwvYT4oamF2YS5sYW5nLlN0cmluZyB0YWdOYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIHBhcmVudE5vZGUKLSAgICAgICAgICwKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZW5lcmF0ZVJlcXVpcmVkQXR0cmlidXRlIj5nZW5lcmF0ZVJlcXVpcmVkQXR0cmlidXRlPC9hPihvcmcudzNjLmRvbS5Ob2RlIG93bmVyTm9kZQotICAgICAgICAgLAotICAgICAgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBidWZmZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2VuZXJhdGVTdGFydFRhZyI+Z2VuZXJhdGVTdGFydFRhZzwvYT4oamF2YS5sYW5nLlN0cmluZyB0YWdOYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIHBhcmVudE5vZGUKLSAgICAgICAgICwKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1pbmltYWxTdGFydFRhZ0xlbmd0aCI+Z2V0TWluaW1hbFN0YXJ0VGFnTGVuZ3RoPC9hPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRPdGhlckNsb3NlIj5nZXRPdGhlckNsb3NlPC9hPihvcmcudzNjLmRvbS5Ob2RlIG5vdEFUYWdOb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0YXJ0VGFnQ2xvc2UiPmdldFN0YXJ0VGFnQ2xvc2U8L2E+KG9yZy53M2MuZG9tLk5vZGUgcGFyZW50Tm9kZQotICAgICAgICAgLAotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTENvbnRlbnRNb2RlbEdlbmVyYXRvciI+WFNMQ29udGVudE1vZGVsR2VuZXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMQ29udGVudE1vZGVsR2VuZXJhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvciBjb25zdHJ1Y3RvciBjb21tZW50LjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dlbmVyYXRlQXR0cmlidXRlIj5nZW5lcmF0ZUF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Z2VuZXJhdGVBdHRyaWJ1dGU8L3N0cm9uZz4oQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBidWZmZXIpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdHRyRGVjbDwvY29kZT48L3A+PHA+PGNvZGU+YnVmZmVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZW5lcmF0ZUVuZFRhZyI+Z2VuZXJhdGVFbmRUYWc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmdlbmVyYXRlRW5kVGFnPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdGFnTmFtZQotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBwYXJlbnROb2RlCi0gICAgICAgICAsCi0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBidWZmZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRhZ05hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPnBhcmVudE5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmVsZW1lbnREZWNsPC9jb2RlPjwvcD48cD48Y29kZT5idWZmZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dlbmVyYXRlUmVxdWlyZWRBdHRyaWJ1dGUiPmdlbmVyYXRlUmVxdWlyZWRBdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmdlbmVyYXRlUmVxdWlyZWRBdHRyaWJ1dGU8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBvd25lck5vZGUKLSAgICAgICAgICwKLSAgICAgIENNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYnVmZmVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vd25lck5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmF0dHJEZWNsPC9jb2RlPjwvcD48cD48Y29kZT5idWZmZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dlbmVyYXRlU3RhcnRUYWciPmdlbmVyYXRlU3RhcnRUYWc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmdlbmVyYXRlU3RhcnRUYWc8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0YWdOYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIHBhcmVudE5vZGUKLSAgICAgICAgICwKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGFnTmFtZTwvY29kZT48L3A+PHA+PGNvZGU+cGFyZW50Tm9kZTwvY29kZT48L3A+PHA+PGNvZGU+ZWxlbWVudERlY2w8L2NvZGU+PC9wPjxwPjxjb2RlPmJ1ZmZlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TWluaW1hbFN0YXJ0VGFnTGVuZ3RoIj5nZXRNaW5pbWFsU3RhcnRUYWdMZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0TWluaW1hbFN0YXJ0VGFnTGVuZ3RoPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48cD48Y29kZT5lbGVtZW50RGVjbDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0T3RoZXJDbG9zZSI+Z2V0T3RoZXJDbG9zZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0T3RoZXJDbG9zZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vdEFUYWdOb2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub3RBVGFnTm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0YXJ0VGFnQ2xvc2UiPmdldFN0YXJ0VGFnQ2xvc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFN0YXJ0VGFnQ2xvc2U8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBwYXJlbnROb2RlCi0gICAgICAgICAsCi0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudE5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmVsZW1lbnREZWNsPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJmNWQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZi5IcmVmQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWY8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWY8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9wcmU+PHA+VGhpcyBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgcHJvcG9zYWxzIGZvciBocmVmIGF0dHJpYnV0ZXMgd2l0aCBhIG1vZGUgYXR0cmlidXRlLjwvcD4KLSA8cD5Db250ZW50IGFzc2lzdGFuY2UgaXMgcmVzdHJpY3RlZCB0byBmaWxlcyB3aXRoIHRoZSBYU0wgY29udGVudCB0eXBlIHRoYXQgYXJlIGluIHRoZSBzYW1lIHByb2plY3QgYXMgdGhlIGZpbGUgY3VycmVudGx5IAotIGJlaW5nIGVkaXRlZC4gVGhpcyBpcyBiZWNhdXNlIHByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2UgY2FuIGhhdmUgY29tcGxldGVseSBkaWZmZXJlbnQgcGh5c2ljYWwgZmlsZSBsb2NhdGlvbnMsIGxlYWRpbmcgdG8gCi0gY29uZnVzaW9uIGluIHJlbGF0aXZlIGZpbGUgcGF0aHMgYWNyb3NzIHByb2plY3RzLiBTaW1pbGFybHksIG5vIGNvbnRlbnQgYXNzaXN0YW5jZSBpcyBnaXZlbiBmb3IgZmlsZXMgZXh0ZXJuYWwgdG8gdGhlIHdvcmtzcGFjZS4gCi0gU3VjaCBmaWxlcyBzaG91bGQgYmUgYXNzaWduZWQgYW4gYWJzb2x1dGUgJ2ZpbGU6Ly8vJyBVUkwuPC9wPjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0hyZWZDb250ZW50QXNzaXN0UmVxdWVzdCI+SHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIG1haW4gbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wb3NhbHMuIFJldHVybnMgcmVsYXRpdmUgcGF0aHMgdG8gZmlsZXMgaW4gdGhlIGN1cnJlbnQgcHJvamVjdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc29ydFByb3Bvc2FscyI+c29ydFByb3Bvc2FsczwvYT4oamF2YS51dGlsLkxpc3QgcHJvcG9zYWxzSW4pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRG8gbm90IHdpc2ggdG8gc29ydCB0aGUgcHJvcG9zYWxzIC0gdGhleSBhcmUgYWxyZWFkeSBzb3J0ZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9IcmVmQ29udGVudEFzc2lzdFJlcXVlc3QiPkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgdGhlIEhyZWZDb250ZW50QXNzaXN0UmVxdWVzdCBjbGFzcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSBtYWluIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcG9zYWxzLiBSZXR1cm5zIHJlbGF0aXZlIHBhdGhzIHRvIGZpbGVzIGluIHRoZSBjdXJyZW50IHByb2plY3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPiAtIElDb21wbGV0aW9uUHJvcG9zYWxbXTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zb3J0UHJvcG9zYWxzIj5zb3J0UHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+c29ydFByb3Bvc2Fsczwvc3Ryb25nPihqYXZhLnV0aWwuTGlzdCBwcm9wb3NhbHNJbik8L2NvZGU+PC9wPjxwPkRvIG5vdCB3aXNoIHRvIHNvcnQgdGhlIHByb3Bvc2FscyAtIHRoZXkgYXJlIGFscmVhZHkgc29ydGVkPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcm9wb3NhbHNJbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBzYW1lIGxpc3QsIGluIHRoZSBzYW1lIG9yZGVyPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZi5QYXRoQ29tcGFyYXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLlBhdGhDb21wYXJhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MThkMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLlBhdGhDb21wYXJhdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFBhdGhDb21wYXJhdG9yPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+UGF0aENvbXBhcmF0b3I8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9QYXRoQ29tcGFyYXRvciI+UGF0aENvbXBhcmF0b3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcGFyZSI+Y29tcGFyZTwvYT4oSVBhdGggbzEKLSAgICAgICAgICwKLSAgICAgIElQYXRoIG8yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1BhdGhDb21wYXJhdG9yIj5QYXRoQ29tcGFyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlBhdGhDb21wYXJhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXBhcmUiPmNvbXBhcmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Y29tcGFyZTwvc3Ryb25nPihJUGF0aCBvMQotICAgICAgICAgLAotICAgICAgSVBhdGggbzIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm8xPC9jb2RlPjwvcD48cD48Y29kZT5vMjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YjJjZDUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVMYWJlbFByb3ZpZGVyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0FUVFJfSUQiPkFUVFJfSUQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0FUVFJfTkFNRSI+QVRUUl9OQU1FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZlNob3dBdHRyaWJ1dGVzIj5mU2hvd0F0dHJpYnV0ZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0F0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyIj5BdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlcjwvYT48L3N0cm9uZz4oYm9vbGVhbiBzaG93QXR0cmlidXRlcyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUb29sVGlwVGV4dCI+Z2V0VG9vbFRpcFRleHQ8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0xhYmVsUHJvcGVydHkiPmlzTGFiZWxQcm9wZXJ0eTwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByb3BlcnR5KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFNob3dBdHRyaWJ1dGVzIj5zZXRTaG93QXR0cmlidXRlczwvYT4oYm9vbGVhbiBmU2hvd0F0dHJpYnV0ZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9BVFRSX0lEIj5BVFRSX0lEPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkFUVFJfSUQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQVRUUl9OQU1FIj5BVFRSX05BTUU8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+QVRUUl9OQU1FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ZTaG93QXR0cmlidXRlcyI+ZlNob3dBdHRyaWJ1dGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW4gPHN0cm9uZz5mU2hvd0F0dHJpYnV0ZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0F0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyIj5BdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyPC9zdHJvbmc+KGJvb2xlYW4gc2hvd0F0dHJpYnV0ZXMpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZXh0Ij5nZXRUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUZXh0PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRvb2xUaXBUZXh0Ij5nZXRUb29sVGlwVGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VG9vbFRpcFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNMYWJlbFByb3BlcnR5Ij5pc0xhYmVsUHJvcGVydHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzTGFiZWxQcm9wZXJ0eTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJvcGVydHkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPnByb3BlcnR5PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0U2hvd0F0dHJpYnV0ZXMiPnNldFNob3dBdHRyaWJ1dGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRTaG93QXR0cmlidXRlczwvc3Ryb25nPihib29sZWFuIGZTaG93QXR0cmlidXRlcyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZlNob3dBdHRyaWJ1dGVzPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOThhNGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSkZhY2VOb2RlQWRhcHRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkpGYWNlTm9kZUFkYXB0ZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkFkYXB0cyBhIERPTSBub2RlIHRvIGEgSkZhY2Ugdmlld2VyLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5DbGFzczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0FEQVBURVJfS0VZIj5BREFQVEVSX0tFWTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2ZBZGFwdGVyRmFjdG9yeSI+ZkFkYXB0ZXJGYWN0b3J5PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlJlZnJlc2hTdHJ1Y3R1cmVKb2I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9mUmVmcmVzaEpvYiI+ZlJlZnJlc2hKb2I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0pGYWNlTm9kZUFkYXB0ZXIiPkpGYWNlTm9kZUFkYXB0ZXI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSW1hZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlSW1hZ2UiPmNyZWF0ZUltYWdlPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSW1hZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlWE1MSW1hZ2VEZXNjcmlwdG9yIj5jcmVhdGVYTUxJbWFnZURlc2NyaXB0b3I8L2E+KGphdmEubGFuZy5TdHJpbmcgaW1hZ2VSZXNvdXJjZU5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RWxlbWVudHMiPmdldEVsZW1lbnRzPC9hPihqYXZhLmxhbmcuT2JqZWN0IG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhbiBlbnVtZXJhdGlvbiB3aXRoIHRoZSBlbGVtZW50cyBiZWxvbmdpbmcgdG8gdGhlIHBhc3NlZAotIGVsZW1lbnQuIFRoZXNlIGFyZSB0aGUgdG9wIGxldmVsIGl0ZW1zIGluIGEgbGlzdCwgdHJlZSwgdGFibGUsIGV0Yy4uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMYWJlbEltYWdlIj5nZXRMYWJlbEltYWdlPC9hPihqYXZhLmxhbmcuT2JqZWN0IG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRmV0Y2hlcyB0aGUgbGFiZWwgaW1hZ2Ugc3BlY2lmaWMgdG8gdGhpcyBvYmplY3QgaW5zdGFuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TGFiZWxUZXh0Ij5nZXRMYWJlbFRleHQ8L2E+KGphdmEubGFuZy5PYmplY3Qgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBGZXRjaGVzIHRoZSBsYWJlbCB0ZXh0IHNwZWNpZmljIHRvIHRoaXMgb2JqZWN0IGluc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmVudCI+Z2V0UGFyZW50PC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhTTEltYWdlIj5nZXRYU0xJbWFnZTwvYT4ob3JnLnczYy5kb20uRWxlbWVudCBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhc0NoaWxkcmVuIj5oYXNDaGlsZHJlbjwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNBZGFwdGVyRm9yVHlwZSI+aXNBZGFwdGVyRm9yVHlwZTwvYT4oamF2YS5sYW5nLk9iamVjdCB0eXBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFsbG93aW5nIHRoZSBJTm9kZUFkYXB0ZXIgdG8gY29tcGFyZSBpdHNlbGYgYWdhaW5zdCB0aGUgdHlwZSBhbGxvd3MgaXQKLSB0byByZXR1cm4gdHJ1ZSBpbiBtb3JlIHRoYW4gb25lIGNhc2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfbm90aWZ5Q2hhbmdlZCI+bm90aWZ5Q2hhbmdlZDwvYT4oSU5vZGVOb3RpZmllciBub3RpZmllcgotICAgICAgICAgLAotICAgICAgaW50IGV2ZW50VHlwZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBjaGFuZ2VkRmVhdHVyZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRWYWx1ZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdWYWx1ZQotICAgICAgICAgLAotICAgICAgaW50IHBvcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDYWxsZWQgYnkgdGhlIG9iamVjdCBiZWluZyBhZGFwdGVyICh0aGUgbm90aWZpZXIpIHdoZW4gc29tZXRoaW5nIGhhcwotIGNoYW5nZWQuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9BREFQVEVSX0tFWSI+QURBUFRFUl9LRVk8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuQ2xhc3MgPHN0cm9uZz5BREFQVEVSX0tFWTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9mQWRhcHRlckZhY3RvcnkiPmZBZGFwdGVyRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5IDxzdHJvbmc+ZkFkYXB0ZXJGYWN0b3J5PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ZSZWZyZXNoSm9iIj5mUmVmcmVzaEpvYjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlJlZnJlc2hTdHJ1Y3R1cmVKb2IgPHN0cm9uZz5mUmVmcmVzaEpvYjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSkZhY2VOb2RlQWRhcHRlciI+SkZhY2VOb2RlQWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGYWNlTm9kZUFkYXB0ZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUltYWdlIj5jcmVhdGVJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJbWFnZSA8c3Ryb25nPmNyZWF0ZUltYWdlPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmplY3Q8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlWE1MSW1hZ2VEZXNjcmlwdG9yIj5jcmVhdGVYTUxJbWFnZURlc2NyaXB0b3I8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSW1hZ2UgPHN0cm9uZz5jcmVhdGVYTUxJbWFnZURlc2NyaXB0b3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBpbWFnZVJlc291cmNlTmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW1hZ2VSZXNvdXJjZU5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q2hpbGRyZW4iPmdldENoaWxkcmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXSA8c3Ryb25nPmdldENoaWxkcmVuPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmplY3Q8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRFbGVtZW50czwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG5vZGUpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGFuIGVudW1lcmF0aW9uIHdpdGggdGhlIGVsZW1lbnRzIGJlbG9uZ2luZyB0byB0aGUgcGFzc2VkCi0gZWxlbWVudC4gVGhlc2UgYXJlIHRoZSB0b3AgbGV2ZWwgaXRlbXMgaW4gYSBsaXN0LCB0cmVlLCB0YWJsZSwgZXRjLi4uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMYWJlbEltYWdlIj5nZXRMYWJlbEltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlIDxzdHJvbmc+Z2V0TGFiZWxJbWFnZTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG5vZGUpPC9jb2RlPjwvcD48cD5GZXRjaGVzIHRoZSBsYWJlbCBpbWFnZSBzcGVjaWZpYyB0byB0aGlzIG9iamVjdCBpbnN0YW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gRE9NIE5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPiAtIEltYWdlIGZvciB0aGUgbGFiZWwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldExhYmVsVGV4dCI+Z2V0TGFiZWxUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRMYWJlbFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBub2RlKTwvY29kZT48L3A+PHA+RmV0Y2hlcyB0aGUgbGFiZWwgdGV4dCBzcGVjaWZpYyB0byB0aGlzIG9iamVjdCBpbnN0YW5jZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIE5vZGUgTmFtZSBmb3IgdGhlIExhYmVsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmVudCI+Z2V0UGFyZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5nZXRQYXJlbnQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFhTTEltYWdlIj5nZXRYU0xJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJbWFnZURlc2NyaXB0b3IgPHN0cm9uZz5nZXRYU0xJbWFnZTwvc3Ryb25nPihvcmcudzNjLmRvbS5FbGVtZW50IG5vZGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZURlc2NyaXB0b3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc0NoaWxkcmVuIj5oYXNDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aGFzQ2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzQWRhcHRlckZvclR5cGUiPmlzQWRhcHRlckZvclR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzQWRhcHRlckZvclR5cGU8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCB0eXBlKTwvY29kZT48L3A+PHA+QWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnR5cGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ub3RpZnlDaGFuZ2VkIj5ub3RpZnlDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5ub3RpZnlDaGFuZ2VkPC9zdHJvbmc+KElOb2RlTm90aWZpZXIgbm90aWZpZXIKLSAgICAgICAgICwKLSAgICAgIGludCBldmVudFR5cGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgY2hhbmdlZEZlYXR1cmUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3Qgb2xkVmFsdWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgbmV3VmFsdWUKLSAgICAgICAgICwKLSAgICAgIGludCBwb3MpPC9jb2RlPjwvcD48cD5DYWxsZWQgYnkgdGhlIG9iamVjdCBiZWluZyBhZGFwdGVyICh0aGUgbm90aWZpZXIpIHdoZW4gc29tZXRoaW5nIGhhcwotIGNoYW5nZWQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub3RpZmllcjwvY29kZT48L3A+PHA+PGNvZGU+ZXZlbnRUeXBlPC9jb2RlPjwvcD48cD48Y29kZT5jaGFuZ2VkRmVhdHVyZTwvY29kZT48L3A+PHA+PGNvZGU+b2xkVmFsdWU8L2NvZGU+PC9wPjxwPjxjb2RlPm5ld1ZhbHVlPC9jb2RlPjwvcD48cD48Y29kZT5wb3M8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmVlMjI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBKRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwiPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWNoZUNsZWFyZWQiPmNhY2hlQ2xlYXJlZDwvYT4oQ01Eb2N1bWVudENhY2hlIGNhY2hlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhY2hlVXBkYXRlZCI+Y2FjaGVVcGRhdGVkPC9hPihDTURvY3VtZW50Q2FjaGUgY2FjaGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdXJpCi0gICAgICAgICAsCi0gICAgICBpbnQgb2xkU3RhdHVzCi0gICAgICAgICAsCi0gICAgICBpbnQgbmV3U3RhdHVzCi0gICAgICAgICAsCi0gICAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJvcGVydHlDaGFuZ2VkIj5wcm9wZXJ0eUNoYW5nZWQ8L2E+KENNRG9jdW1lbnRNYW5hZ2VyIGNtRG9jdW1lbnRNYW5hZ2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByb3BlcnR5TmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbCI+SkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYWNoZUNsZWFyZWQiPmNhY2hlQ2xlYXJlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2FjaGVDbGVhcmVkPC9zdHJvbmc+KENNRG9jdW1lbnRDYWNoZSBjYWNoZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2FjaGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NhY2hlVXBkYXRlZCI+Y2FjaGVVcGRhdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jYWNoZVVwZGF0ZWQ8L3N0cm9uZz4oQ01Eb2N1bWVudENhY2hlIGNhY2hlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHVyaQotICAgICAgICAgLAotICAgICAgaW50IG9sZFN0YXR1cwotICAgICAgICAgLAotICAgICAgaW50IG5ld1N0YXR1cwotICAgICAgICAgLAotICAgICAgQ01Eb2N1bWVudCBjbURvY3VtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jYWNoZTwvY29kZT48L3A+PHA+PGNvZGU+dXJpPC9jb2RlPjwvcD48cD48Y29kZT5vbGRTdGF0dXM8L2NvZGU+PC9wPjxwPjxjb2RlPm5ld1N0YXR1czwvY29kZT48L3A+PHA+PGNvZGU+Y21Eb2N1bWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJvcGVydHlDaGFuZ2VkIj5wcm9wZXJ0eUNoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnByb3BlcnR5Q2hhbmdlZDwvc3Ryb25nPihDTURvY3VtZW50TWFuYWdlciBjbURvY3VtZW50TWFuYWdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcm9wZXJ0eU5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNtRG9jdW1lbnRNYW5hZ2VyPC9jb2RlPjwvcD48cD48Y29kZT5wcm9wZXJ0eU5hbWU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDVkMjMzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBKRmFjZU5vZGVBZGFwdGVyRmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5PC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0QWRhcHRlckZhY3Rvcnk8L3ByZT5BbiBhZGFwdGVyIGZhY3RvcnkgdG8gY3JlYXRlIEpGYWNlTm9kZUFkYXB0ZXJzLiBVc2UgdGhpcyBhZGFwdGVyIGZhY3RvcnkKLSB3aXRoIGEgSkZhY2VBZGFwdGVyQ29udGVudFByb3ZpZGVyIHRvIGRpc3BsYXkgRE9NIG5vZGVzIGluIGEgdHJlZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSU5vZGVBZGFwdGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfc2luZ2xldG9uQWRhcHRlciI+c2luZ2xldG9uQWRhcHRlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkiPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSI+SkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgYWRhcHRlcktleQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiByZWdpc3RlckFkYXB0ZXJzKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwiPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRMaXN0ZW5lciI+YWRkTGlzdGVuZXI8L2E+KGphdmEubGFuZy5PYmplY3QgbGlzdGVuZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElOb2RlQWRhcHRlckZhY3Rvcnk8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29weSI+Y29weTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJTm9kZUFkYXB0ZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQWRhcHRlciI+Y3JlYXRlQWRhcHRlcjwvYT4oSU5vZGVOb3RpZmllciBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBKRmFjZSBhZGFwdGVyIGZvciB0aGUgRE9NIG5vZGUgcGFzc2VkIGluPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExpc3RlbmVycyI+Z2V0TGlzdGVuZXJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgcmV0dXJucyAiY29weSIgc28gbm8gb25lIGNhbiBtb2RpZnkgb3VyIGxpc3QuIEl0IGlzIGEgc2hhbGxvdyBjb3B5LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXRBZGFwdGVyIj5pbml0QWRhcHRlcjwvYT4oSU5vZGVBZGFwdGVyIGFkYXB0ZXIKLSAgICAgICAgICwKLSAgICAgIElOb2RlTm90aWZpZXIgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVtb3ZlTGlzdGVuZXIiPnJlbW92ZUxpc3RlbmVyPC9hPihqYXZhLmxhbmcuT2JqZWN0IGxpc3RlbmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfc2luZ2xldG9uQWRhcHRlciI+c2luZ2xldG9uQWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJTm9kZUFkYXB0ZXIgPHN0cm9uZz5zaW5nbGV0b25BZGFwdGVyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSI+SkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkiPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBhZGFwdGVyS2V5Ci0gICAgICAgICAsCi0gICAgICBib29sZWFuIHJlZ2lzdGVyQWRhcHRlcnMpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRMaXN0ZW5lciI+YWRkTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZExpc3RlbmVyPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgbGlzdGVuZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmxpc3RlbmVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb3B5Ij5jb3B5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElOb2RlQWRhcHRlckZhY3RvcnkgPHN0cm9uZz5jb3B5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SU5vZGVBZGFwdGVyRmFjdG9yeTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQWRhcHRlciI+Y3JlYXRlQWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJTm9kZUFkYXB0ZXIgPHN0cm9uZz5jcmVhdGVBZGFwdGVyPC9zdHJvbmc+KElOb2RlTm90aWZpZXIgbm9kZSk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBKRmFjZSBhZGFwdGVyIGZvciB0aGUgRE9NIG5vZGUgcGFzc2VkIGluPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SU5vZGVBZGFwdGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMaXN0ZW5lcnMiPmdldExpc3RlbmVyczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbiA8c3Ryb25nPmdldExpc3RlbmVyczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5yZXR1cm5zICJjb3B5IiBzbyBubyBvbmUgY2FuIG1vZGlmeSBvdXIgbGlzdC4gSXQgaXMgYSBzaGFsbG93IGNvcHkuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ29sbGVjdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdEFkYXB0ZXIiPmluaXRBZGFwdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5pbml0QWRhcHRlcjwvc3Ryb25nPihJTm9kZUFkYXB0ZXIgYWRhcHRlcgotICAgICAgICAgLAotICAgICAgSU5vZGVOb3RpZmllciBub2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hZGFwdGVyPC9jb2RlPjwvcD48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWxlYXNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZW1vdmVMaXN0ZW5lciI+cmVtb3ZlTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbW92ZUxpc3RlbmVyPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgbGlzdGVuZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmxpc3RlbmVyPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVDb250ZW50UHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDI4ODM2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SkZhY2VOb2RlQ29udGVudFByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5BbiBJVHJlZUNvbnRlbnRQcm92aWRlciBmb3IgYSBUcmVlVmlld2VycyB1c2VkIHRvIGRpc3BsYXkgRE9NIG5vZGVzLiBUaGlzCi0gY29udGVudCBwcm92aWRlciB0YWtlcyBhbiBhZGFwdGVyIGZhY3RvcnkgdG8gY3JlYXRlIEpGYWNlIGFkYXB0ZXJzIGZvciB0aGUKLSBub2RlcyBpbiB0aGUgdHJlZS48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyIj5KRmFjZU5vZGVDb250ZW50UHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgdmlzdWFsIHBhcnQgdGhhdCBpcyB1c2luZyB0aGlzIGNvbnRlbnQgcHJvdmlkZXIgaXMgYWJvdXQgdG8gYmUKLSBkaXNwb3NlZC4gRGVhbGxvY2F0ZSBhbGwgYWxsb2NhdGVkIFNXVCByZXNvdXJjZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElKRmFjZU5vZGVBZGFwdGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFkYXB0ZXIiPmdldEFkYXB0ZXI8L2E+KGphdmEubGFuZy5PYmplY3QgYWRhcHRhYmxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIEpGYWNlIGFkYXB0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2hpbGRyZW4iPmdldENoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhc0NoaWxkcmVuIj5oYXNDaGlsZHJlbjwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5wdXRDaGFuZ2VkIj5pbnB1dENoYW5nZWQ8L2E+KFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3Qgb2xkSW5wdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgbmV3SW5wdXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyIj5KRmFjZU5vZGVDb250ZW50UHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5KRmFjZU5vZGVDb250ZW50UHJvdmlkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgdmlzdWFsIHBhcnQgdGhhdCBpcyB1c2luZyB0aGlzIGNvbnRlbnQgcHJvdmlkZXIgaXMgYWJvdXQgdG8gYmUKLSBkaXNwb3NlZC4gRGVhbGxvY2F0ZSBhbGwgYWxsb2NhdGVkIFNXVCByZXNvdXJjZXMuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEFkYXB0ZXIiPmdldEFkYXB0ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSUpGYWNlTm9kZUFkYXB0ZXIgPHN0cm9uZz5nZXRBZGFwdGVyPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgYWRhcHRhYmxlKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgSkZhY2UgYWRhcHRlciBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hZGFwdGFibGU8L2NvZGU+IC0gamF2YS5sYW5nLk9iamVjdCBUaGUgb2JqZWN0IHRvIGdldCB0aGUgYWRhcHRlciBmb3I8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklKRmFjZU5vZGVBZGFwdGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0Q2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RWxlbWVudHMiPmdldEVsZW1lbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXSA8c3Ryb25nPmdldEVsZW1lbnRzPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmplY3Q8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmVudCI+Z2V0UGFyZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5nZXRQYXJlbnQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc0NoaWxkcmVuIj5oYXNDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aGFzQ2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbnB1dENoYW5nZWQ8L3N0cm9uZz4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5vbGRJbnB1dDwvY29kZT48L3A+PHA+PGNvZGU+bmV3SW5wdXQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUxhYmVsUHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUxhYmVsUHJvdmlkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyM2E3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVMYWJlbFByb3ZpZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBKRmFjZU5vZGVMYWJlbFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SkZhY2VOb2RlTGFiZWxQcm92aWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBDb2x1bW5MYWJlbFByb3ZpZGVyPC9wcmU+QSAoY29sdW1uKSBsYWJlbCBwcm92aWRlciBiYWNrZWQgYnkgSkZhY2VOb2RlQWRhcHRlcnMuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0pGYWNlTm9kZUxhYmVsUHJvdmlkZXIiPkpGYWNlTm9kZUxhYmVsUHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJSkZhY2VOb2RlQWRhcHRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBZGFwdGVyIj5nZXRBZGFwdGVyPC9hPihqYXZhLmxhbmcuT2JqZWN0IGFkYXB0YWJsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBKRmFjZSBhZGFwdGVyIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSW1hZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzTGFiZWxQcm9wZXJ0eSI+aXNMYWJlbFByb3BlcnR5PC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJvcGVydHkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fSkZhY2VOb2RlTGFiZWxQcm92aWRlciI+SkZhY2VOb2RlTGFiZWxQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGYWNlTm9kZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+SkZhY2VOb2RlTGFiZWxQcm92aWRlciBjb25zdHJ1Y3RvciBjb21tZW50LjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEFkYXB0ZXIiPmdldEFkYXB0ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSUpGYWNlTm9kZUFkYXB0ZXIgPHN0cm9uZz5nZXRBZGFwdGVyPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgYWRhcHRhYmxlKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgSkZhY2UgYWRhcHRlciBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hZGFwdGFibGU8L2NvZGU+IC0gamF2YS5sYW5nLk9iamVjdCBUaGUgb2JqZWN0IHRvIGdldCB0aGUgYWRhcHRlciBmb3I8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklKRmFjZU5vZGVBZGFwdGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbWFnZSI+Z2V0SW1hZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSW1hZ2UgPHN0cm9uZz5nZXRJbWFnZTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VGV4dDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0xhYmVsUHJvcGVydHkiPmlzTGFiZWxQcm9wZXJ0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNMYWJlbFByb3BlcnR5PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcm9wZXJ0eSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PHA+PGNvZGU+cHJvcGVydHk8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5SZWZyZXNoU3RydWN0dXJlSm9iLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5SZWZyZXNoU3RydWN0dXJlSm9iLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYzI1ZTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuUmVmcmVzaFN0cnVjdHVyZUpvYi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUmVmcmVzaFN0cnVjdHVyZUpvYjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlJlZnJlc2hTdHJ1Y3R1cmVKb2I8L3N0cm9uZz4KLWV4dGVuZHMgSm9iPC9wcmU+VGhpcyBqb2IgaG9sZHMgYSBxdWV1ZSBvZiB1cGRhdGVzIChhZmZlY3RlZCBub2RlcykgZm9yIG11bHRpcGxlIHN0cnVjdHVyZWQKLSB2aWV3ZXJzLiBXaGVuIGEgbmV3IHJlcXVlc3QgY29tZXMgaW4sIHRoZSBjdXJyZW50IHJ1biBpcyBjYW5jZWxsZWQsIHRoZSBuZXcKLSByZXF1ZXN0IGlzIGFkZGVkIHRvIHRoZSBxdWV1ZSwgdGhlbiB0aGUgam9iIGlzIHJlLXNjaGVkdWxlZC4gU3VwcG9ydCBmb3IKLSBtdWx0aXBsZSBzdHJ1Y3R1cmVkIHZpZXdlcnMgaXMgcmVxdWlyZWQgYmVjYXVzZSByZWZyZXNoIHVwZGF0ZXMgYXJlIHVzdWFsbHkKLSB0cmlnZ2VyZWQgYnkgbW9kZWwgY2hhbmdlcywgYW5kIHRoZSBtb2RlbCBtYXkgYmUgdmlzaWJsZSBpbiBtb3JlIHRoYW4gb25lCi0gdmlld2VyLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfREVCVUciPkRFQlVHPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGRlYnVnIGZsYWc8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLlNldDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2ZSZWZyZXNoVmlld2VycyI+ZlJlZnJlc2hWaWV3ZXJzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIHRoZSBzdHJ1Y3R1cmVkIHZpZXdlcnM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLlNldDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2ZVcGRhdGVWaWV3ZXJzIj5mVXBkYXRlVmlld2VyczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUmVmcmVzaFN0cnVjdHVyZUpvYiI+UmVmcmVzaFN0cnVjdHVyZUpvYjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FuY2VsaW5nIj5jYW5jZWxpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWZyZXNoIj5yZWZyZXNoPC9hPihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEludm9rZSBhIHJlZnJlc2ggb24gdGhlIHZpZXdlciBvbiB0aGUgZ2l2ZW4gbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVN0YXR1czwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ydW4iPnJ1bjwvYT4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZSI+dXBkYXRlPC9hPihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nW10gcHJvcGVydGllcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBJbnZva2UgYSByZWZyZXNoIG9uIHRoZSB2aWV3ZXIgb24gdGhlIGdpdmVuIG5vZGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9ERUJVRyI+REVCVUc8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBib29sZWFuIDxzdHJvbmc+REVCVUc8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPmRlYnVnIGZsYWc8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ZSZWZyZXNoVmlld2VycyI+ZlJlZnJlc2hWaWV3ZXJzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5TZXQgPHN0cm9uZz5mUmVmcmVzaFZpZXdlcnM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPnRoZSBzdHJ1Y3R1cmVkIHZpZXdlcnM8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ZVcGRhdGVWaWV3ZXJzIj5mVXBkYXRlVmlld2VyczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0IDxzdHJvbmc+ZlVwZGF0ZVZpZXdlcnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1JlZnJlc2hTdHJ1Y3R1cmVKb2IiPlJlZnJlc2hTdHJ1Y3R1cmVKb2I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5SZWZyZXNoU3RydWN0dXJlSm9iPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbmNlbGluZyI+Y2FuY2VsaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5jYW5jZWxpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlZnJlc2giPnJlZnJlc2g8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlZnJlc2g8L3N0cm9uZz4oU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PC9wPjxwPkludm9rZSBhIHJlZnJlc2ggb24gdGhlIHZpZXdlciBvbiB0aGUgZ2l2ZW4gbm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+bm9kZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcnVuIj5ydW48L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVN0YXR1cyA8c3Ryb25nPnJ1bjwvc3Ryb25nPihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1vbml0b3I8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JU3RhdHVzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91cGRhdGUiPnVwZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dXBkYXRlPC9zdHJvbmc+KFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdbXSBwcm9wZXJ0aWVzKTwvY29kZT48L3A+PHA+SW52b2tlIGEgcmVmcmVzaCBvbiB0aGUgdmlld2VyIG9uIHRoZSBnaXZlbiBub2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48cD48Y29kZT5wcm9wZXJ0aWVzPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YTUxOb2RlQWN0aW9uTWFuYWdlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuWE1MTm9kZUFjdGlvbk1hbmFnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkMjQ3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YTUxOb2RlQWN0aW9uTWFuYWdlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWE1MTm9kZUFjdGlvbk1hbmFnZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YTUxOb2RlQWN0aW9uTWFuYWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdE5vZGVBY3Rpb25NYW5hZ2VyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hNTE5vZGVBY3Rpb25NYW5hZ2VyIj5YTUxOb2RlQWN0aW9uTWFuYWdlcjwvYT48L3N0cm9uZz4oSVN0cnVjdHVyZWRNb2RlbCBtb2RlbAotICAgICAgICAgLAotICAgICAgVmlld2VyIHZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlZm9ybWF0Ij5yZWZvcm1hdDwvYT4ob3JnLnczYy5kb20uTm9kZSBuZXdFbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBib29sZWFuIGRlZXApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0TW9kZWwiPnNldE1vZGVsPC9hPihJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldE1vZGVsUXVlcnkiPnNldE1vZGVsUXVlcnk8L2E+KE1vZGVsUXVlcnkgbmV3TW9kZWxRdWVyeSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YTUxOb2RlQWN0aW9uTWFuYWdlciI+WE1MTm9kZUFjdGlvbk1hbmFnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YTUxOb2RlQWN0aW9uTWFuYWdlcjwvc3Ryb25nPihJU3RydWN0dXJlZE1vZGVsIG1vZGVsCi0gICAgICAgICAsCi0gICAgICBWaWV3ZXIgdmlld2VyKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcmVmb3JtYXQiPnJlZm9ybWF0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWZvcm1hdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5ld0VsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gZGVlcCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3RWxlbWVudDwvY29kZT48L3A+PHA+PGNvZGU+ZGVlcDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0TW9kZWwiPnNldE1vZGVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRNb2RlbDwvc3Ryb25nPihJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uZXdNb2RlbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0TW9kZWxRdWVyeSI+c2V0TW9kZWxRdWVyeTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c2V0TW9kZWxRdWVyeTwvc3Ryb25nPihNb2RlbFF1ZXJ5IG5ld01vZGVsUXVlcnkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld01vZGVsUXVlcnk8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuWFNMQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNzYzMzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuWFNMQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb248L3N0cm9uZz4KLWV4dGVuZHMgWE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uPC9wcmU+TW9yZSBhZHZhbmNlZCBPdXRsaW5lIENvbmZpZ3VyYXRpb24gZm9yIFhNTCBzdXBwb3J0LiAgRXhwZWN0cyB0aGF0IHRoZSB2aWV3ZXIncwotIGlucHV0IHdpbGwgYmUgdGhlIERPTSBNb2RlbC48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BVFRSX0lEIj5BVFRSX0lEPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BVFRSX05BTUUiPkFUVFJfTkFNRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2ZTaG93QXR0cmlidXRlcyI+ZlNob3dBdHRyaWJ1dGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24iPlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElDb250cmlidXRpb25JdGVtW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlTWVudUNvbnRyaWJ1dGlvbnMiPmNyZWF0ZU1lbnVDb250cmlidXRpb25zPC9hPihUcmVlVmlld2VyIHZpZXdlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbmFibGVTaG93QXR0cmlidXRlcyI+ZW5hYmxlU2hvd0F0dHJpYnV0ZXM8L2E+KGJvb2xlYW4gc2hvd0F0dHJpYnV0ZXMKLSAgICAgICAgICwKLSAgICAgIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBOb3RpZmllcyB0aGlzIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdAotIHRvIHNob3cgYXR0cmlidXRlIHZhbHVlcyBpbiB0aGUgdHJlZSB2aWV3ZXIgaGFzIGNoYW5nZWQuIFRoZSB0cmVlCi0gdmlld2VyIGlzIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGFmdGVyd2FyZHMgdG8gdXBkYXRlIHRoZSBsYWJlbHMuCi0gCi0gQ2xpZW50cyBzaG91bGQgbm90IGNhbGwgdGhpcyBtZXRob2QsIGJ1dCByYXRoZXIgc2hvdWxkIHJlYWN0IHRvIGl0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29udGVudFByb3ZpZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRlbnRQcm92aWRlciI+Z2V0Q29udGVudFByb3ZpZGVyPC9hPihUcmVlVmlld2VyIHZpZXdlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUxhYmVsUHJvdmlkZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TGFiZWxQcm92aWRlciI+Z2V0TGFiZWxQcm92aWRlcjwvYT4oVHJlZVZpZXdlciB2aWV3ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElTZWxlY3Rpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U2VsZWN0aW9uIj5nZXRTZWxlY3Rpb248L2E+KFRyZWVWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FUVFJfSUQiPkFUVFJfSUQ8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+QVRUUl9JRDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9BVFRSX05BTUUiPkFUVFJfTkFNRTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BVFRSX05BTUU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZlNob3dBdHRyaWJ1dGVzIj5mU2hvd0F0dHJpYnV0ZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbiA8c3Ryb25nPmZTaG93QXR0cmlidXRlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uIj5YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlIG5ldyBpbnN0YW5jZSBvZiBYTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb248L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVNZW51Q29udHJpYnV0aW9ucyI+Y3JlYXRlTWVudUNvbnRyaWJ1dGlvbnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSUNvbnRyaWJ1dGlvbkl0ZW1bXSA8c3Ryb25nPmNyZWF0ZU1lbnVDb250cmlidXRpb25zPC9zdHJvbmc+KFRyZWVWaWV3ZXIgdmlld2VyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29udHJpYnV0aW9uSXRlbVtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmFibGVTaG93QXR0cmlidXRlcyI+ZW5hYmxlU2hvd0F0dHJpYnV0ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmVuYWJsZVNob3dBdHRyaWJ1dGVzPC9zdHJvbmc+KGJvb2xlYW4gc2hvd0F0dHJpYnV0ZXMKLSAgICAgICAgICwKLSAgICAgIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcik8L2NvZGU+PC9wPjxwPk5vdGlmaWVzIHRoaXMgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90Ci0gdG8gc2hvdyBhdHRyaWJ1dGUgdmFsdWVzIGluIHRoZSB0cmVlIHZpZXdlciBoYXMgY2hhbmdlZC4gVGhlIHRyZWUKLSB2aWV3ZXIgaXMgYXV0b21hdGljYWxseSByZWZyZXNoZWQgYWZ0ZXJ3YXJkcyB0byB1cGRhdGUgdGhlIGxhYmVscy4KLSAKLSBDbGllbnRzIHNob3VsZCBub3QgY2FsbCB0aGlzIG1ldGhvZCwgYnV0IHJhdGhlciBzaG91bGQgcmVhY3QgdG8gaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zaG93QXR0cmlidXRlczwvY29kZT4gLSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gc2hvdyBhdHRyaWJ1dGUgdmFsdWVzIGluICAgICAgICAgICAgIHRoZSB0cmVlIHZpZXdlcjwvcD48cD48Y29kZT50cmVlVmlld2VyPC9jb2RlPiAtIHRoZSBUcmVlVmlld2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29udGVudFByb3ZpZGVyIj5nZXRDb250ZW50UHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUNvbnRlbnRQcm92aWRlciA8c3Ryb25nPmdldENvbnRlbnRQcm92aWRlcjwvc3Ryb25nPihUcmVlVmlld2VyIHZpZXdlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbnRlbnRQcm92aWRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGFiZWxQcm92aWRlciI+Z2V0TGFiZWxQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJTGFiZWxQcm92aWRlciA8c3Ryb25nPmdldExhYmVsUHJvdmlkZXI8L3N0cm9uZz4oVHJlZVZpZXdlciB2aWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklMYWJlbFByb3ZpZGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTZWxlY3Rpb24iPmdldFNlbGVjdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJU2VsZWN0aW9uIDxzdHJvbmc+Z2V0U2VsZWN0aW9uPC9zdHJvbmc+KFRyZWVWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5zZWxlY3Rpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JU2VsZWN0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljay5YU0xEb3VibGVDbGlja1N0cmF0ZWd5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljay5YU0xEb3VibGVDbGlja1N0cmF0ZWd5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNzhlMzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZG91YmxlY2xpY2suWFNMRG91YmxlQ2xpY2tTdHJhdGVneS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZG91YmxlY2xpY2s8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMRG91YmxlQ2xpY2tTdHJhdGVneTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTERvdWJsZUNsaWNrU3RyYXRlZ3k8L3N0cm9uZz4KLWV4dGVuZHMgWE1MRG91YmxlQ2xpY2tTdHJhdGVneTwvcHJlPlhTTERvdWJsZUNsaWNrU3RyYXRlZ3kgZXh0ZW5kcyB0aGUgWE1MRG91YmxlY2xpY2tTdHJhdGVneSB0byB0YWtlIGludG8KLSBhY2NvdW50IHRob3NlIGFyZWFzIHRoYXQgbWF5IGJlIGludm9sdmVkIGluIFhQYXRoIEV4cHJlc3Npb25zLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBjaGFyW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YTUxfREVMSU1JVEVSUyI+WE1MX0RFTElNSVRFUlM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgY2hhcltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWE1MX1BBUkVOVEhFU0lTIj5YTUxfUEFSRU5USEVTSVM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTERvdWJsZUNsaWNrU3RyYXRlZ3kiPlhTTERvdWJsZUNsaWNrU3RyYXRlZ3k8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBQb2ludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRXb3JkIj5nZXRXb3JkPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cmluZwotICAgICAgICAgLAotICAgICAgaW50IGN1cnNvcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0T2ZXb3JkIj5zdGFydE9mV29yZDwvYT4oamF2YS5sYW5nLlN0cmluZyBzdHJpbmcKLSAgICAgICAgICwKLSAgICAgIGludCBjdXJzb3IKLSAgICAgICAgICwKLSAgICAgIGludCB3b3JkU3RhcnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9YTUxfREVMSU1JVEVSUyI+WE1MX0RFTElNSVRFUlM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBjaGFyW10gPHN0cm9uZz5YTUxfREVMSU1JVEVSUzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YTUxfUEFSRU5USEVTSVMiPlhNTF9QQVJFTlRIRVNJUzwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGNoYXJbXSA8c3Ryb25nPlhNTF9QQVJFTlRIRVNJUzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMRG91YmxlQ2xpY2tTdHJhdGVneSI+WFNMRG91YmxlQ2xpY2tTdHJhdGVneTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTERvdWJsZUNsaWNrU3RyYXRlZ3k8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0V29yZCI+Z2V0V29yZDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBQb2ludCA8c3Ryb25nPmdldFdvcmQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHJpbmcKLSAgICAgICAgICwKLSAgICAgIGludCBjdXJzb3IpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cmluZzwvY29kZT48L3A+PHA+PGNvZGU+Y3Vyc29yPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UG9pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0YXJ0T2ZXb3JkIj5zdGFydE9mV29yZDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5zdGFydE9mV29yZDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cmluZwotICAgICAgICAgLAotICAgICAgaW50IGN1cnNvcgotICAgICAgICAgLAotICAgICAgaW50IHdvcmRTdGFydCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyaW5nPC9jb2RlPjwvcD48cD48Y29kZT5jdXJzb3I8L2NvZGU+PC9wPjxwPjxjb2RlPndvcmRTdGFydDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkN2EyYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgT3ZlcnJpZGVJbmRpY2F0b3I8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5PdmVycmlkZUluZGljYXRvcjwvc3Ryb25nPgotZXh0ZW5kcyBBbm5vdGF0aW9uPC9wcmU+T3ZlcndyaXRlIGFuZCBvdmVycmlkZSBpbmRpY2F0b3IgYW5ub3RhdGlvbi48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX092ZXJyaWRlSW5kaWNhdG9yIj5PdmVycmlkZUluZGljYXRvcjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0ZXh0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX29wZW4iPm9wZW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBPcGVucyBhbmQgcmV2ZWFscyB0aGUgZGVmaW5pbmcgbWV0aG9kLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX092ZXJyaWRlSW5kaWNhdG9yIj5PdmVycmlkZUluZGljYXRvcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPk92ZXJyaWRlSW5kaWNhdG9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdGV4dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgbmV3IG92ZXJyaWRlIGFubm90YXRpb24uPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2Rfb3BlbiI+b3BlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+b3Blbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5PcGVucyBhbmQgcmV2ZWFscyB0aGUgZGVmaW5pbmcgbWV0aG9kLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZjU3N2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBPdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5PdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkltYWdlIHByb3ZpZGVyIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuamR0LmludGVybmFsLnVpLmphdmFlZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyLk92ZXJyaWRlSW5kaWNhdG9yfSBhbm5vdGF0aW9ucy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX092ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlciI+T3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPihqYXZhLmxhbmcuU3RyaW5nIGltYWdlRGVzY3JpdHBvcklkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlRGVzY3JpcHRvcklkIj5nZXRJbWFnZURlc2NyaXB0b3JJZDwvYT4oQW5ub3RhdGlvbiBhbm5vdGF0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNYW5hZ2VkSW1hZ2UiPmdldE1hbmFnZWRJbWFnZTwvYT4oQW5ub3RhdGlvbiBhbm5vdGF0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCBtYW5hZ2luZyBpdHMgb3duIGltYWdlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX092ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlciI+T3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+T3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlRGVzY3JpcHRvciA8c3Ryb25nPmdldEltYWdlRGVzY3JpcHRvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGltYWdlRGVzY3JpdHBvcklkKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbWFnZURlc2NyaXRwb3JJZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlRGVzY3JpcHRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1hZ2VEZXNjcmlwdG9ySWQiPmdldEltYWdlRGVzY3JpcHRvcklkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRJbWFnZURlc2NyaXB0b3JJZDwvc3Ryb25nPihBbm5vdGF0aW9uIGFubm90YXRpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFubm90YXRpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNYW5hZ2VkSW1hZ2UiPmdldE1hbmFnZWRJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJbWFnZSA8c3Ryb25nPmdldE1hbmFnZWRJbWFnZTwvc3Ryb25nPihBbm5vdGF0aW9uIGFubm90YXRpb24pPC9jb2RlPjwvcD48cD5UaGlzIGRvZXMgbm90IHN1cHBvcnQgbWFuYWdpbmcgaXRzIG93biBpbWFnZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFubm90YXRpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT4gLSBudWxsPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmZTQxZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+TWFuYWdlcyB0aGUgb3ZlcnJpZGUgYW5kIG92ZXJ3cml0ZSBpbmRpY2F0b3JzIGZvciB0aGUgZ2l2ZW4gSmF2YSBlbGVtZW50IGFuZCBhbm5vdGF0aW9uIG1vZGVsLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQU5OT1RBVElPTl9UWVBFIj5BTk5PVEFUSU9OX1RZUEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX092ZXJyaWRlSW5kaWNhdG9yTWFuYWdlciI+T3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyPC9hPjwvc3Ryb25nPihJQW5ub3RhdGlvbk1vZGVsIGFubm90YXRpb25Nb2RlbAotICAgICAgICAgLAotICAgICAgSUZpbGUgZmlsZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbW92ZUFubm90YXRpb25zIj5yZW1vdmVBbm5vdGF0aW9uczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlbW92ZXMgYWxsIG92ZXJyaWRlIGluZGljYXRvcnMgZnJvbSB0aGlzIG1hbmFnZXIncyBhbm5vdGF0aW9uIG1vZGVsLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZUFubm90YXRpb25zIj51cGRhdGVBbm5vdGF0aW9uczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVwZGF0ZXMgdGhlIG92ZXJyaWRlIGFuZCBpbXBsZW1lbnRzIGFubm90YXRpb25zIGJhc2VkIG9uIHRoZSBnaXZlbiBBU1QuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9BTk5PVEFUSU9OX1RZUEUiPkFOTk9UQVRJT05fVFlQRTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BTk5PVEFUSU9OX1RZUEU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX092ZXJyaWRlSW5kaWNhdG9yTWFuYWdlciI+T3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+T3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyPC9zdHJvbmc+KElBbm5vdGF0aW9uTW9kZWwgYW5ub3RhdGlvbk1vZGVsCi0gICAgICAgICAsCi0gICAgICBJRmlsZSBmaWxlKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgcmVxdWlyZXMgdGhlIGVkaXRvcnMgYW5ub3RhdGlvbiBtb2RlbCBhbmQgdGhlIGZpbGUgdGhlIGVkaXRvciBpcyBsb29raW5nIGF0LjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbW92ZUFubm90YXRpb25zIj5yZW1vdmVBbm5vdGF0aW9uczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkIDxzdHJvbmc+cmVtb3ZlQW5ub3RhdGlvbnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmVtb3ZlcyBhbGwgb3ZlcnJpZGUgaW5kaWNhdG9ycyBmcm9tIHRoaXMgbWFuYWdlcidzIGFubm90YXRpb24gbW9kZWwuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VwZGF0ZUFubm90YXRpb25zIj51cGRhdGVBbm5vdGF0aW9uczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dXBkYXRlQW5ub3RhdGlvbnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VXBkYXRlcyB0aGUgb3ZlcnJpZGUgYW5kIGltcGxlbWVudHMgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGdpdmVuIEFTVC48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlNvdXJjZUZpbGVIeXBlcmxpbmsuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5Tb3VyY2VGaWxlSHlwZXJsaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZDQ0MGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlNvdXJjZUZpbGVIeXBlcmxpbmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU291cmNlRmlsZUh5cGVybGluazwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlNvdXJjZUZpbGVIeXBlcmxpbms8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU291cmNlRmlsZUh5cGVybGluayI+U291cmNlRmlsZUh5cGVybGluazwvYT48L3N0cm9uZz4oSVJlZ2lvbiBoeXBlckxpbmtSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElGaWxlIGxpbmtlZEZpbGUpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Tb3VyY2VGaWxlSHlwZXJsaW5rIj5Tb3VyY2VGaWxlSHlwZXJsaW5rPC9hPjwvc3Ryb25nPihJUmVnaW9uIGh5cGVyTGlua1JlZ2lvbgotICAgICAgICAgLAotICAgICAgSUZpbGUgbGlua2VkRmlsZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGUgbm9kZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJUmVnaW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEh5cGVybGlua1JlZ2lvbiI+Z2V0SHlwZXJsaW5rUmVnaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SHlwZXJsaW5rVGV4dCI+Z2V0SHlwZXJsaW5rVGV4dDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFR5cGVMYWJlbCI+Z2V0VHlwZUxhYmVsPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfb3BlbiI+b3BlbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1NvdXJjZUZpbGVIeXBlcmxpbmsiPlNvdXJjZUZpbGVIeXBlcmxpbms8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Tb3VyY2VGaWxlSHlwZXJsaW5rPC9zdHJvbmc+KElSZWdpb24gaHlwZXJMaW5rUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJRmlsZSBsaW5rZWRGaWxlKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1NvdXJjZUZpbGVIeXBlcmxpbmsiPlNvdXJjZUZpbGVIeXBlcmxpbms8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Tb3VyY2VGaWxlSHlwZXJsaW5rPC9zdHJvbmc+KElSZWdpb24gaHlwZXJMaW5rUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJRmlsZSBsaW5rZWRGaWxlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SHlwZXJsaW5rUmVnaW9uIj5nZXRIeXBlcmxpbmtSZWdpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSVJlZ2lvbiA8c3Ryb25nPmdldEh5cGVybGlua1JlZ2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklSZWdpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEh5cGVybGlua1RleHQiPmdldEh5cGVybGlua1RleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEh5cGVybGlua1RleHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUeXBlTGFiZWwiPmdldFR5cGVMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VHlwZUxhYmVsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfb3BlbiI+b3BlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+b3Blbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEVkaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEVkaXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ZjMzRlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xFZGl0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMRWRpdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMRWRpdG9yPC9zdHJvbmc+Ci1leHRlbmRzIFN0cnVjdHVyZWRUZXh0RWRpdG9yPC9wcmU+WFNMIHNwZWNpZmljIGV4dGVuc2lvbnMgdG8gdGhlIFNTRSBVSSB0aGF0IGhhdmVuJ3QgeWV0IGJlZW4gbWFkZQotIGF2YWlsYWJsZSB0byB0aGUgU1NFLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMRWRpdG9yIj5YU0xFZGl0b3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RvU2V0SW5wdXQiPmRvU2V0SW5wdXQ8L2E+KElFZGl0b3JJbnB1dCBpbnB1dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBZGFwdGVyIj5nZXRBZGFwdGVyPC9hPihqYXZhLmxhbmcuQ2xhc3MgcmVxdWlyZWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0T3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyIj5nZXRPdmVycmlkZUluZGljYXRvck1hbmFnZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnN0YWxsT3ZlcnJpZGVJbmRpY2F0b3IiPmluc3RhbGxPdmVycmlkZUluZGljYXRvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTEVkaXRvciI+WFNMRWRpdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMRWRpdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2RvU2V0SW5wdXQiPmRvU2V0SW5wdXQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmRvU2V0SW5wdXQ8L3N0cm9uZz4oSUVkaXRvcklucHV0IGlucHV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbnB1dDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPkNvcmVFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEFkYXB0ZXIiPmdldEFkYXB0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmdldEFkYXB0ZXI8L3N0cm9uZz4oamF2YS5sYW5nLkNsYXNzIHJlcXVpcmVkKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVxdWlyZWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRPdmVycmlkZUluZGljYXRvck1hbmFnZXIiPmdldE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXIgPHN0cm9uZz5nZXRPdmVycmlkZUluZGljYXRvck1hbmFnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luc3RhbGxPdmVycmlkZUluZGljYXRvciI+aW5zdGFsbE92ZXJyaWRlSW5kaWNhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5pbnN0YWxsT3ZlcnJpZGVJbmRpY2F0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xIeXBlcmxpbmtEZXRlY3Rvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEh5cGVybGlua0RldGVjdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NDNiMjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEh5cGVybGlua0RldGVjdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTEh5cGVybGlua0RldGVjdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMSHlwZXJsaW5rRGV0ZWN0b3I8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RIeXBlcmxpbmtEZXRlY3RvcjwvcHJlPkEgaHlwZXJsaW5rIGRldGVjdG9yIGZvciBYU0wgZmlsZXMuCi0gCi0gVGhlIGRldGVjdG9yIG1ha2VzIHVzZSBvZiB0aGUgbW9kZWwgYnVpbHQgYnkgU1NFIHZhbGlkYXRpb24gKGZvdW5kIGluIDxjb2RlPlhTTENvcmU8L2NvZGU+KS4KLSAKLSBDdXJyZW50bHkgc3VwcG9ydHMgaHlwZXJsaW5raW5nIGZvciBpbmNsdWRlcywgaW1wb3J0cyBvciBjYWxsZWQgdGVtcGxhdGVzLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMSHlwZXJsaW5rRGV0ZWN0b3IiPlhTTEh5cGVybGlua0RldGVjdG9yPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUh5cGVybGlua1tdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RldGVjdEh5cGVybGlua3MiPmRldGVjdEh5cGVybGlua3M8L2E+KElUZXh0Vmlld2VyIHRleHRWaWV3ZXIKLSAgICAgICAgICwKLSAgICAgIElSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGNhblNob3dNdWx0aXBsZUh5cGVybGlua3MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVHJ5IHRvIGNyZWF0ZSBoeXBlcmxpbmtzIGZvciB2aWV3ZXIgYW5kIHJlZ2lvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJSHlwZXJsaW5rW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGV0ZWN0SHlwZXJsaW5rcyI+ZGV0ZWN0SHlwZXJsaW5rczwvYT4oSURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBJUmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBjYW5TaG93TXVsdGlwbGVIeXBlcmxpbmtzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRyeSB0byBjcmVhdGUgaHlwZXJsaW5rcyBmb3IgZG9jdW1lbnQgYW5kIHJlZ2lvbjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTEh5cGVybGlua0RldGVjdG9yIj5YU0xIeXBlcmxpbmtEZXRlY3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTEh5cGVybGlua0RldGVjdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2RldGVjdEh5cGVybGlua3MiPmRldGVjdEh5cGVybGlua3M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUh5cGVybGlua1tdIDxzdHJvbmc+ZGV0ZWN0SHlwZXJsaW5rczwvc3Ryb25nPihJVGV4dFZpZXdlciB0ZXh0Vmlld2VyCi0gICAgICAgICAsCi0gICAgICBJUmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBjYW5TaG93TXVsdGlwbGVIeXBlcmxpbmtzKTwvY29kZT48L3A+PHA+VHJ5IHRvIGNyZWF0ZSBoeXBlcmxpbmtzIGZvciB2aWV3ZXIgYW5kIHJlZ2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGV4dFZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5jYW5TaG93TXVsdGlwbGVIeXBlcmxpbmtzPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUh5cGVybGlua1tdPC9jb2RlPiAtIGFycmF5IG9mIGh5cGVybGlua3MgZm9yIGN1cnJlbnQgcmVnaW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RldGVjdEh5cGVybGlua3MiPmRldGVjdEh5cGVybGlua3M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUh5cGVybGlua1tdIDxzdHJvbmc+ZGV0ZWN0SHlwZXJsaW5rczwvc3Ryb25nPihJRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIElSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGNhblNob3dNdWx0aXBsZUh5cGVybGlua3MpPC9jb2RlPjwvcD48cD5UcnkgdG8gY3JlYXRlIGh5cGVybGlua3MgZm9yIGRvY3VtZW50IGFuZCByZWdpb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPmNhblNob3dNdWx0aXBsZUh5cGVybGlua3M8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JSHlwZXJsaW5rW108L2NvZGU+IC0gYXJyYXkgb2YgaHlwZXJsaW5rcyBmb3IgY3VycmVudCByZWdpb248L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnMuT3BlbkRlY2xhcmF0aW9uSGFuZGxlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnMuT3BlbkRlY2xhcmF0aW9uSGFuZGxlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTcxZjJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmhhbmRsZXJzLk9wZW5EZWNsYXJhdGlvbkhhbmRsZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmhhbmRsZXJzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgT3BlbkRlY2xhcmF0aW9uSGFuZGxlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk9wZW5EZWNsYXJhdGlvbkhhbmRsZXI8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX09wZW5EZWNsYXJhdGlvbkhhbmRsZXIiPk9wZW5EZWNsYXJhdGlvbkhhbmRsZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4ZWN1dGUiPmV4ZWN1dGU8L2E+KEV4ZWN1dGlvbkV2ZW50IGV2ZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX09wZW5EZWNsYXJhdGlvbkhhbmRsZXIiPk9wZW5EZWNsYXJhdGlvbkhhbmRsZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5PcGVuRGVjbGFyYXRpb25IYW5kbGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2V4ZWN1dGUiPmV4ZWN1dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmV4ZWN1dGU8L3N0cm9uZz4oRXhlY3V0aW9uRXZlbnQgZXZlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2ZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPkV4ZWN1dGlvbkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEwNDM2Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZTwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlByb3BlcnR5UHJlZmVyZW5jZVBhZ2U8L3ByZT5CYXNlZCBvbiBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuT3B0aW9uc0NvbmZpZ3VyYXRpb25CbG9jazxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbWJvPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZENvbWJvQm94Ij5hZGRDb21ib0JveDwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBrZXkKLSAgICAgICAgICwKLSAgICAgIGludFtdIHZhbHVlcwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ1tdIHZhbHVlTGFiZWxzCi0gICAgICAgICAsCi0gICAgICBpbnQgaW5kZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZXMgYSBDb21ibyB3aWRnZXQgaW4gdGhlIGNvbXBvc2l0ZSA8Y29kZT5wYXJlbnQ8L2NvZGU+LiBUaGUgZGF0YQotIGluIHRoZSBDb21ibyBpcyBhc3NvY2lhdGVkIHdpdGggPGNvZGU+a2V5PC9jb2RlPi4gVGhlIENvbWJvIGRhdGEgaXMKLSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGludGVnZXIgPGNvZGU+dmFsdWVzPC9jb2RlPiB3aGVyZSB0aGUgaW5kZXgKLSBvZiA8Y29kZT52YWx1ZXM8L2NvZGU+IGNvcnJlc3BvbmRzIHRvIHRoZSBpbmRleCBvZiA8Y29kZT52YWx1ZUxhYmVsczwvY29kZT48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb250cm9sQ2hhbmdlZCI+Y29udHJvbENoYW5nZWQ8L2E+KFdpZGdldCB3aWRnZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIEV4cGFuZGFibGVDb21wb3NpdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVHdpc3RpZSI+Y3JlYXRlVHdpc3RpZTwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgaW50IG5Db2x1bW5zKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4cGFuZGVkU3RhdGVDaGFuZ2VkIj5leHBhbmRlZFN0YXRlQ2hhbmdlZDwvYT4oRXhwYW5kYWJsZUNvbXBvc2l0ZSBleHBhbmRhYmxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBFeHBhbmRhYmxlQ29tcG9zaXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmVudEV4cGFuZGFibGVDb21wb3NpdGUiPmdldFBhcmVudEV4cGFuZGFibGVDb21wb3NpdGU8L2E+KENvbnRyb2wgY29udHJvbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgU2Nyb2xsZWRQYWdlQ29udGVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZSI+Z2V0UGFyZW50U2Nyb2xsZWRDb21wb3NpdGU8L2E+KENvbnRyb2wgY29udHJvbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgU2VsZWN0aW9uTGlzdGVuZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U2VsZWN0aW9uTGlzdGVuZXIiPmdldFNlbGVjdGlvbkxpc3RlbmVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbWJvPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25ld0NvbWJvQ29udHJvbCI+bmV3Q29tYm9Db250cm9sPC9hPihDb21wb3NpdGUgY29tcG9zaXRlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleQotICAgICAgICAgLAotICAgICAgaW50W10gdmFsdWVzCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nW10gdmFsdWVMYWJlbHMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIGNvbWJvIGJveCBhbmQgYXNzb2NpYXRlcyB0aGUgY29tYm8gZGF0YSB3aXRoIHRoZQotIGNvbWJvIGJveC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc2V0U2V2ZXJpdGllcyI+cmVzZXRTZXZlcml0aWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXMiPnJlc3RvcmVTZWN0aW9uRXhwYW5zaW9uU3RhdGVzPC9hPihJRGlhbG9nU2V0dGluZ3Mgc2V0dGluZ3MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2hvdWxkUmV2YWxpZGF0ZU9uU2V0dGluZ3NDaGFuZ2UiPnNob3VsZFJldmFsaWRhdGVPblNldHRpbmdzQ2hhbmdlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcmVTZWN0aW9uRXhwYW5zaW9uU3RhdGVzIj5zdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXM8L2E+KElEaWFsb2dTZXR0aW5ncyBzZWN0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0b3JlVmFsdWVzIj5zdG9yZVZhbHVlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZSI+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZENvbWJvQm94Ij5hZGRDb21ib0JveDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb21ibyA8c3Ryb25nPmFkZENvbWJvQm94PC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcga2V5Ci0gICAgICAgICAsCi0gICAgICBpbnRbXSB2YWx1ZXMKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdbXSB2YWx1ZUxhYmVscwotICAgICAgICAgLAotICAgICAgaW50IGluZGVudCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBDb21ibyB3aWRnZXQgaW4gdGhlIGNvbXBvc2l0ZSA8Y29kZT5wYXJlbnQ8L2NvZGU+LiBUaGUgZGF0YQotIGluIHRoZSBDb21ibyBpcyBhc3NvY2lhdGVkIHdpdGggPGNvZGU+a2V5PC9jb2RlPi4gVGhlIENvbWJvIGRhdGEgaXMKLSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGludGVnZXIgPGNvZGU+dmFsdWVzPC9jb2RlPiB3aGVyZSB0aGUgaW5kZXgKLSBvZiA8Y29kZT52YWx1ZXM8L2NvZGU+IGNvcnJlc3BvbmRzIHRvIHRoZSBpbmRleCBvZiA8Y29kZT52YWx1ZUxhYmVsczwvY29kZT48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT4gLSB0aGUgY29tcG9zaXRlIHRvIGNyZWF0ZSB0aGUgY29tYm8gYm94IGluPC9wPjxwPjxjb2RlPmxhYmVsPC9jb2RlPiAtIHRoZSBsYWJlbCB0byBnaXZlIHRoZSBjb21ibyBib3g8L3A+PHA+PGNvZGU+a2V5PC9jb2RlPiAtIHRoZSB1bmlxdWUga2V5IHRvIGlkZW50aWZ5IHRoZSBjb21ibyBib3g8L3A+PHA+PGNvZGU+dmFsdWVzPC9jb2RlPiAtIHRoZSB2YWx1ZXMgcmVwcmVzZW50ZWQgYnkgdGhlIGNvbWJvIG9wdGlvbnM8L3A+PHA+PGNvZGU+dmFsdWVMYWJlbHM8L2NvZGU+IC0gdGhlIGNhbHVlcyBkaXNwbGF5ZWQgaW4gdGhlIGNvbWJvIGJveDwvcD48cD48Y29kZT5pbmRlbnQ8L2NvZGU+IC0gaG93IGZhciB0byBpbmRlbnQgdGhlIGNvbWJvIGJveCBsYWJlbDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29tYm88L2NvZGU+IC0gdGhlIGdlbmVyYXRlZCBjb21ibyBib3g8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29udHJvbENoYW5nZWQiPmNvbnRyb2xDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5jb250cm9sQ2hhbmdlZDwvc3Ryb25nPihXaWRnZXQgd2lkZ2V0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT53aWRnZXQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVR3aXN0aWUiPmNyZWF0ZVR3aXN0aWU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgRXhwYW5kYWJsZUNvbXBvc2l0ZSA8c3Ryb25nPmNyZWF0ZVR3aXN0aWU8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgaW50IG5Db2x1bW5zKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmxhYmVsPC9jb2RlPjwvcD48cD48Y29kZT5uQ29sdW1uczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkV4cGFuZGFibGVDb21wb3NpdGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V4cGFuZGVkU3RhdGVDaGFuZ2VkIj5leHBhbmRlZFN0YXRlQ2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZXhwYW5kZWRTdGF0ZUNoYW5nZWQ8L3N0cm9uZz4oRXhwYW5kYWJsZUNvbXBvc2l0ZSBleHBhbmRhYmxlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5leHBhbmRhYmxlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJlbnRFeHBhbmRhYmxlQ29tcG9zaXRlIj5nZXRQYXJlbnRFeHBhbmRhYmxlQ29tcG9zaXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIEV4cGFuZGFibGVDb21wb3NpdGUgPHN0cm9uZz5nZXRQYXJlbnRFeHBhbmRhYmxlQ29tcG9zaXRlPC9zdHJvbmc+KENvbnRyb2wgY29udHJvbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udHJvbDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkV4cGFuZGFibGVDb21wb3NpdGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlIj5nZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBTY3JvbGxlZFBhZ2VDb250ZW50IDxzdHJvbmc+Z2V0UGFyZW50U2Nyb2xsZWRDb21wb3NpdGU8L3N0cm9uZz4oQ29udHJvbCBjb250cm9sKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250cm9sPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+U2Nyb2xsZWRQYWdlQ29udGVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U2VsZWN0aW9uTGlzdGVuZXIiPmdldFNlbGVjdGlvbkxpc3RlbmVyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFNlbGVjdGlvbkxpc3RlbmVyIDxzdHJvbmc+Z2V0U2VsZWN0aW9uTGlzdGVuZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5TZWxlY3Rpb25MaXN0ZW5lcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV3Q29tYm9Db250cm9sIj5uZXdDb21ib0NvbnRyb2w8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29tYm8gPHN0cm9uZz5uZXdDb21ib0NvbnRyb2w8L3N0cm9uZz4oQ29tcG9zaXRlIGNvbXBvc2l0ZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBrZXkKLSAgICAgICAgICwKLSAgICAgIGludFtdIHZhbHVlcwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ1tdIHZhbHVlTGFiZWxzKTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIGNvbWJvIGJveCBhbmQgYXNzb2NpYXRlcyB0aGUgY29tYm8gZGF0YSB3aXRoIHRoZQotIGNvbWJvIGJveC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbXBvc2l0ZTwvY29kZT4gLSB0aGUgY29tcG9zaXRlIHRvIGNyZWF0ZSB0aGUgY29tYm8gYm94IGluPC9wPjxwPjxjb2RlPmtleTwvY29kZT4gLSB0aGUgdW5pcXVlIGtleSB0byBpZGVudGlmeSB0aGUgY29tYm8gYm94PC9wPjxwPjxjb2RlPnZhbHVlczwvY29kZT4gLSB0aGUgdmFsdWVzIHJlcHJlc2VudGVkIGJ5IHRoZSBjb21ibyBvcHRpb25zPC9wPjxwPjxjb2RlPnZhbHVlTGFiZWxzPC9jb2RlPiAtIHRoZSB2YWx1ZXMgZGlzcGxheWVkIGluIHRoZSBjb21ibyBib3g8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbWJvPC9jb2RlPiAtIHRoZSBnZW5lcmF0ZWQgY29tYm8gYm94PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BlcmZvcm1PayI+cGVyZm9ybU9rPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5wZXJmb3JtT2s8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZXNldFNldmVyaXRpZXMiPnJlc2V0U2V2ZXJpdGllczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cmVzZXRTZXZlcml0aWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZXN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyI+cmVzdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnJlc3RvcmVTZWN0aW9uRXhwYW5zaW9uU3RhdGVzPC9zdHJvbmc+KElEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c2V0dGluZ3M8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Nob3VsZFJldmFsaWRhdGVPblNldHRpbmdzQ2hhbmdlIj5zaG91bGRSZXZhbGlkYXRlT25TZXR0aW5nc0NoYW5nZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+c2hvdWxkUmV2YWxpZGF0ZU9uU2V0dGluZ3NDaGFuZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXMiPnN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c3RvcmVTZWN0aW9uRXhwYW5zaW9uU3RhdGVzPC9zdHJvbmc+KElEaWFsb2dTZXR0aW5ncyBzZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zZWN0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9yZVZhbHVlcyI+c3RvcmVWYWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnN0b3JlVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyODdlOGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlUGFnZTwvcHJlPkF1Z21lbnRzIHRoZSBTU0UgPGNvZGU+QWJzdHJhY3RQcmVmZXJlbmNlUGFnZTwvY29kZT4gd2l0aCBzdXBwb3J0IGZvciBleHBhbmRhYmxlIGNvbXBvc2l0ZXMgKHR3aXN0aWVzKSBhbmQgY29tYm9zLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0Fic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UiPkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb21ibzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb21ibyI+Y3JlYXRlQ29tYm88L2E+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJlZktleSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29tcG9zaXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNvbW1vbkNvbnRlbnRzIj5jcmVhdGVDb21tb25Db250ZW50czwvYT4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDYWxsZWQgYnkgY3JlYXRlQ29udGVudHMgYW5kIG11c3QgYmUgaW1wbGVtZW50ZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2w8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ29udGVudHMiPmNyZWF0ZUNvbnRlbnRzPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb21wb3NpdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVHdpc3RpZSI+Y3JlYXRlVHdpc3RpZTwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgaW50IGNvbHMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNhdmVzIHRoZSBleHBhbnNpb24gc3RhdGVzIGJlZm9yZSBjYWxsaW5nIHN1cGVyLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBQcmVmZXJlbmNlczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFByZWZlcmVuY2VzIj5nZXRNb2RlbFByZWZlcmVuY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTYXZlIHRoZSBwcmVmZXJlbmNlcy48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlIj5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb21ibyI+Y3JlYXRlQ29tYm88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29tYm8gPHN0cm9uZz5jcmVhdGVDb21ibzwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByZWZLZXkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+bGFiZWw8L2NvZGU+PC9wPjxwPjxjb2RlPnByZWZLZXk8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db21ibzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQ29tbW9uQ29udGVudHMiPmNyZWF0ZUNvbW1vbkNvbnRlbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbXBvc2l0ZSA8c3Ryb25nPmNyZWF0ZUNvbW1vbkNvbnRlbnRzPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD5DYWxsZWQgYnkgY3JlYXRlQ29udGVudHMgYW5kIG11c3QgYmUgaW1wbGVtZW50ZWQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db21wb3NpdGU8L2NvZGU+IC0gdGhlIGNvbXBvc2l0ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb250ZW50cyI+Y3JlYXRlQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbCA8c3Ryb25nPmNyZWF0ZUNvbnRlbnRzPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVR3aXN0aWUiPmNyZWF0ZVR3aXN0aWU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29tcG9zaXRlIDxzdHJvbmc+Y3JlYXRlVHdpc3RpZTwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBpbnQgY29scyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5sYWJlbDwvY29kZT48L3A+PHA+PGNvZGU+Y29sczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbXBvc2l0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TYXZlcyB0aGUgZXhwYW5zaW9uIHN0YXRlcyBiZWZvcmUgY2FsbGluZyBzdXBlci48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxQcmVmZXJlbmNlcyI+Z2V0TW9kZWxQcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBQcmVmZXJlbmNlcyA8c3Ryb25nPmdldE1vZGVsUHJlZmVyZW5jZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5QcmVmZXJlbmNlczwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1Pazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5TYXZlIHRoZSBwcmVmZXJlbmNlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkNvbWJvRGF0YS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQ29tYm9EYXRhLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMmI0MmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQ29tYm9EYXRhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDb21ib0RhdGE8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5Db21ib0RhdGE8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9vcmlnaW5hbFNldmVyaXR5Ij5vcmlnaW5hbFNldmVyaXR5PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Db21ib0RhdGEiPkNvbWJvRGF0YTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBrZXkKLSAgICAgICAgICwKLSAgICAgIGludFtdIHNldmVyaXRpZXMKLSAgICAgICAgICwKLSAgICAgIGludCBpbmRleCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5kZXgiPmdldEluZGV4PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0S2V5Ij5nZXRLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNldmVyaXR5Ij5nZXRTZXZlcml0eTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzQ2hhbmdlZCI+aXNDaGFuZ2VkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0SW5kZXgiPnNldEluZGV4PC9hPihpbnQgaW5kZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0U2V2ZXJpdHkiPnNldFNldmVyaXR5PC9hPihpbnQgc2V2ZXJpdHkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0cyB0aGUgc2V2ZXJpdHkgaW5kZXggYmFzZWQgb24gPGNvZGU+c2V2ZXJpdHk8L2NvZGU+LgotIElmIHRoZSBzZXZlcml0eSBkb2Vzbid0IGV4aXN0LCB0aGUgaW5kZXggaXMgc2V0IHRvIC0xLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfb3JpZ2luYWxTZXZlcml0eSI+b3JpZ2luYWxTZXZlcml0eTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBpbnQgPHN0cm9uZz5vcmlnaW5hbFNldmVyaXR5PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Db21ib0RhdGEiPkNvbWJvRGF0YTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkNvbWJvRGF0YTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGtleQotICAgICAgICAgLAotICAgICAgaW50W10gc2V2ZXJpdGllcwotICAgICAgICAgLAotICAgICAgaW50IGluZGV4KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5kZXgiPmdldEluZGV4PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldEluZGV4PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRLZXkiPmdldEtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0S2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U2V2ZXJpdHkiPmdldFNldmVyaXR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldFNldmVyaXR5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0NoYW5nZWQiPmlzQ2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBib29sZWFuIDxzdHJvbmc+aXNDaGFuZ2VkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0SW5kZXgiPnNldEluZGV4PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRJbmRleDwvc3Ryb25nPihpbnQgaW5kZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmluZGV4PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRTZXZlcml0eSI+c2V0U2V2ZXJpdHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFNldmVyaXR5PC9zdHJvbmc+KGludCBzZXZlcml0eSk8L2NvZGU+PC9wPjxwPlNldHMgdGhlIHNldmVyaXR5IGluZGV4IGJhc2VkIG9uIDxjb2RlPnNldmVyaXR5PC9jb2RlPi4KLSBJZiB0aGUgc2V2ZXJpdHkgZG9lc24ndCBleGlzdCwgdGhlIGluZGV4IGlzIHNldCB0byAtMS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNldmVyaXR5PC9jb2RlPiAtIHRoZSBzZXZlcml0eSBsZXZlbDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5NYWluUHJlZmVyZW5jZVBhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1haW5QcmVmZXJlbmNlUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWY0N2RhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1haW5QcmVmZXJlbmNlUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTWFpblByZWZlcmVuY2VQYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TWFpblByZWZlcmVuY2VQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIFByZWZlcmVuY2VQYWdlPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX01haW5QcmVmZXJlbmNlUGFnZSI+TWFpblByZWZlcmVuY2VQYWdlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb250ZW50cyI+Y3JlYXRlQ29udGVudHM8L2E+KENvbXBvc2l0ZSBhbmNlc3Rvcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJV29ya2JlbmNoIHdvcmtiZW5jaCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTWFpblByZWZlcmVuY2VQYWdlIj5NYWluUHJlZmVyZW5jZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5NYWluUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+TWFpblByZWZlcm5jZVBhZ2UgaXMgdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgWFNMIFByZWZlcmVuY2UgUGFnZTwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbnRlbnRzIj5jcmVhdGVDb250ZW50czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb250cm9sIDxzdHJvbmc+Y3JlYXRlQ29udGVudHM8L3N0cm9uZz4oQ29tcG9zaXRlIGFuY2VzdG9yKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hbmNlc3RvcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXQiPmluaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXQ8L3N0cm9uZz4oSVdvcmtiZW5jaCB3b3JrYmVuY2gpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT53b3JrYmVuY2g8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BlcmZvcm1PayI+cGVyZm9ybU9rPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5wZXJmb3JtT2s8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJvcGVydHlQcmVmZXJlbmNlUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJvcGVydHlQcmVmZXJlbmNlUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzVkODBiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlByb3BlcnR5UHJlZmVyZW5jZVBhZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFByb3BlcnR5UHJlZmVyZW5jZVBhZ2U8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIFByb3BlcnR5UGFnZTwvcHJlPkJhc2VkIGxvb3NlbHkgb24gb3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByZWZlcmVuY2VzLlByb3BlcnR5QW5kUHJlZmVyZW5jZVBhZ2U8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUHJvcGVydHlQcmVmZXJlbmNlUGFnZSI+UHJvcGVydHlQcmVmZXJlbmNlUGFnZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYXBwbHlEYXRhIj5hcHBseURhdGE8L2E+KGphdmEubGFuZy5PYmplY3QgZGF0YSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb21tb25Db250ZW50cyI+Y3JlYXRlQ29tbW9uQ29udGVudHM8L2E+KENvbXBvc2l0ZSBjb21wb3NpdGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIENvbnRyb2w8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ29udGVudHMiPmNyZWF0ZUNvbnRlbnRzPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJU2NvcGVDb250ZXh0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlUHJlZmVyZW5jZVNjb3BlcyI+Y3JlYXRlUHJlZmVyZW5jZVNjb3BlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VuYWJsZVByZWZlcmVuY2VDb250ZW50Ij5lbmFibGVQcmVmZXJlbmNlQ29udGVudDwvYT4oYm9vbGVhbiBlbmFibGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29udHJvbHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGNvbW1vbiBjb250ZW50IHJlZ2lvbgotIG9mIGEgcHJvcGVydHkgb3IgcHJlZmVyZW5jZSBwYWdlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIiPmdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJlZmVyZW5jZVBhZ2VJRCI+Z2V0UHJlZmVyZW5jZVBhZ2VJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJUHJvamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcm9qZWN0Ij5nZXRQcm9qZWN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJvamVjdFNldHRpbmdzS2V5Ij5nZXRQcm9qZWN0U2V0dGluZ3NLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcm9wZXJ0eVBhZ2VJRCI+Z2V0UHJvcGVydHlQYWdlSUQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0VsZW1lbnRTZXR0aW5nc0VuYWJsZWQiPmlzRWxlbWVudFNldHRpbmdzRW5hYmxlZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX29wZW5Qcm9qZWN0U2V0dGluZ3MiPm9wZW5Qcm9qZWN0U2V0dGluZ3M8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9vcGVuV29ya3NwYWNlU2V0dGluZ3MiPm9wZW5Xb3Jrc3BhY2VTZXR0aW5nczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlcmZvcm1EZWZhdWx0cyI+cGVyZm9ybURlZmF1bHRzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlIj5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UHJvcGVydHlQcmVmZXJlbmNlUGFnZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hcHBseURhdGEiPmFwcGx5RGF0YTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YXBwbHlEYXRhPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZGF0YSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZGF0YTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQ29tbW9uQ29udGVudHMiPmNyZWF0ZUNvbW1vbkNvbnRlbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2wgPHN0cm9uZz5jcmVhdGVDb21tb25Db250ZW50czwvc3Ryb25nPihDb21wb3NpdGUgY29tcG9zaXRlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb21wb3NpdGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db250cm9sPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb250ZW50cyI+Y3JlYXRlQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgQ29udHJvbCA8c3Ryb25nPmNyZWF0ZUNvbnRlbnRzPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVByZWZlcmVuY2VTY29wZXMiPmNyZWF0ZVByZWZlcmVuY2VTY29wZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVNjb3BlQ29udGV4dFtdIDxzdHJvbmc+Y3JlYXRlUHJlZmVyZW5jZVNjb3Blczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTY29wZUNvbnRleHRbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZW5hYmxlUHJlZmVyZW5jZUNvbnRlbnQiPmVuYWJsZVByZWZlcmVuY2VDb250ZW50PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5lbmFibGVQcmVmZXJlbmNlQ29udGVudDwvc3Ryb25nPihib29sZWFuIGVuYWJsZSk8L2NvZGU+PC9wPjxwPkNvbnRyb2xzIHRoZSBlbmFibGVtZW50IG9mIHRoZSBjb21tb24gY29udGVudCByZWdpb24KLSBvZiBhIHByb3BlcnR5IG9yIHByZWZlcmVuY2UgcGFnZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZW5hYmxlPC9jb2RlPiAtIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBjb21tb24gY29udGVudCAgYXJlYTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllciI+Z2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJlZmVyZW5jZVBhZ2VJRCI+Z2V0UHJlZmVyZW5jZVBhZ2VJRDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJlZmVyZW5jZVBhZ2VJRDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByb2plY3QiPmdldFByb2plY3Q8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVByb2plY3QgPHN0cm9uZz5nZXRQcm9qZWN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVByb2plY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByb2plY3RTZXR0aW5nc0tleSI+Z2V0UHJvamVjdFNldHRpbmdzS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRQcm9qZWN0U2V0dGluZ3NLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcm9wZXJ0eVBhZ2VJRCI+Z2V0UHJvcGVydHlQYWdlSUQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFByb3BlcnR5UGFnZUlEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNFbGVtZW50U2V0dGluZ3NFbmFibGVkIj5pc0VsZW1lbnRTZXR0aW5nc0VuYWJsZWQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmlzRWxlbWVudFNldHRpbmdzRW5hYmxlZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX29wZW5Qcm9qZWN0U2V0dGluZ3MiPm9wZW5Qcm9qZWN0U2V0dGluZ3M8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZCA8c3Ryb25nPm9wZW5Qcm9qZWN0U2V0dGluZ3M8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX29wZW5Xb3Jrc3BhY2VTZXR0aW5ncyI+b3BlbldvcmtzcGFjZVNldHRpbmdzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQgPHN0cm9uZz5vcGVuV29ya3NwYWNlU2V0dGluZ3M8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BlcmZvcm1EZWZhdWx0cyI+cGVyZm9ybURlZmF1bHRzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5wZXJmb3JtRGVmYXVsdHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BlcmZvcm1PayI+cGVyZm9ybU9rPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5wZXJmb3JtT2s8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGQzODMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZTwvcHJlPlByZWZlcmVuY2UgcGFnZSBmb3IgWFNMIHZhbGlkYXRvciBwcmVmZXJlbmNlcy48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UiPlZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbWJvPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNvbWJvIj5jcmVhdGVDb21ibzwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcmVmS2V5KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb21wb3NpdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ29tbW9uQ29udGVudHMiPmNyZWF0ZUNvbW1vbkNvbnRlbnRzPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXRpYWxpemVWYWx1ZXMiPmluaXRpYWxpemVWYWx1ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtRGVmYXVsdHMiPnBlcmZvcm1EZWZhdWx0czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0b3JlVmFsdWVzIj5zdG9yZVZhbHVlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlVmFsdWVzIj52YWxpZGF0ZVZhbHVlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1ZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZSI+VmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbWJvIj5jcmVhdGVDb21ibzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb21ibyA8c3Ryb25nPmNyZWF0ZUNvbWJvPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJlZktleSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5sYWJlbDwvY29kZT48L3A+PHA+PGNvZGU+cHJlZktleTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbWJvPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb21tb25Db250ZW50cyI+Y3JlYXRlQ29tbW9uQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29tcG9zaXRlIDxzdHJvbmc+Y3JlYXRlQ29tbW9uQ29udGVudHM8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29tcG9zaXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0aWFsaXplVmFsdWVzIj5pbml0aWFsaXplVmFsdWVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5pbml0aWFsaXplVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZXJmb3JtRGVmYXVsdHMiPnBlcmZvcm1EZWZhdWx0czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cGVyZm9ybURlZmF1bHRzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9yZVZhbHVlcyI+c3RvcmVWYWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnN0b3JlVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZVZhbHVlcyI+dmFsaWRhdGVWYWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnZhbGlkYXRlVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xTeW50YXhDb2xvcmluZ1BhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFN5bnRheENvbG9yaW5nUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTlhNzZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFN5bnRheENvbG9yaW5nUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMU3ludGF4Q29sb3JpbmdQYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMU3ludGF4Q29sb3JpbmdQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIFByZWZlcmVuY2VQYWdlPC9wcmU+QSBwcmVmZXJlbmNlIHBhZ2UgdG8gY29uZmlndXJlIG91ciBYU0wgc3ludGF4IGNvbG9yLiBJdCByZXNlbWJsZXMgdGhlIFhNTAotIHBhZ2VzLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMU3ludGF4Q29sb3JpbmdQYWdlIj5YU0xTeW50YXhDb2xvcmluZ1BhZ2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FwcGx5U3R5bGVzIj5hcHBseVN0eWxlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbG9yIHRoZSB0ZXh0IGluIHRoZSBzYW1wbGUgYXJlYSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcHJlZmVyZW5jZXM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgQnV0dG9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNoZWNrYm94Ij5jcmVhdGVDaGVja2JveDwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb250ZW50cyI+Y3JlYXRlQ29udGVudHM8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJUHJlZmVyZW5jZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RvR2V0UHJlZmVyZW5jZVN0b3JlIj5kb0dldFByZWZlcmVuY2VTdG9yZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2ggd29ya2JlbmNoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlcmZvcm1EZWZhdWx0cyI+cGVyZm9ybURlZmF1bHRzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xTeW50YXhDb2xvcmluZ1BhZ2UiPlhTTFN5bnRheENvbG9yaW5nUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFN5bnRheENvbG9yaW5nUGFnZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hcHBseVN0eWxlcyI+YXBwbHlTdHlsZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFwcGx5U3R5bGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbG9yIHRoZSB0ZXh0IGluIHRoZSBzYW1wbGUgYXJlYSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcHJlZmVyZW5jZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQ2hlY2tib3giPmNyZWF0ZUNoZWNrYm94PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEJ1dHRvbiA8c3Ryb25nPmNyZWF0ZUNoZWNrYm94PC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+bGFiZWw8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5CdXR0b248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbnRlbnRzIj5jcmVhdGVDb250ZW50czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb250cm9sIDxzdHJvbmc+Y3JlYXRlQ29udGVudHM8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udHJvbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZG9HZXRQcmVmZXJlbmNlU3RvcmUiPmRvR2V0UHJlZmVyZW5jZVN0b3JlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElQcmVmZXJlbmNlU3RvcmUgPHN0cm9uZz5kb0dldFByZWZlcmVuY2VTdG9yZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklQcmVmZXJlbmNlU3RvcmU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXQiPmluaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXQ8L3N0cm9uZz4oSVdvcmtiZW5jaCB3b3JrYmVuY2gpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPndvcmtiZW5jaDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybURlZmF1bHRzIj5wZXJmb3JtRGVmYXVsdHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnBlcmZvcm1EZWZhdWx0czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1Pazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5MDUyMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZTwvc3Ryb25nPgotZXh0ZW5kcyBYTUxUZW1wbGF0ZVByZWZlcmVuY2VQYWdlPC9wcmU+WFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSBzZXRzIHVwIHRoZSB0ZW1wbGF0ZSBwcmVmZXJlbmNlIHBhZ2UgdGhhdAotIGNvbnRhaW5zIHRoZSB0ZW1wbGF0ZXMgZm9yIHhwYXRoLCB4cGF0aCAyLjAsIGF4aXMsIG9wZXJhdG9ycywgYW5kIAotIGV4c2x0IGZ1bmN0aW9ucy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UiPlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlcmZvcm1PayI+cGVyZm9ybU9rPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UiPlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3BlcmZvcm1PayI+cGVyZm9ybU9rPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5wZXJmb3JtT2s8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MzExMGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjwvcHJlPlNldHMgZGVmYXVsdCB2YWx1ZXMgZm9yIFhTTCBVSSBwcmVmZXJlbmNlczxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplciI+WFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMiPmluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplciI+WFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzIj5pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjNmM2MwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZSI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29tYm88L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ29tYm8iPmNyZWF0ZUNvbWJvPC9hPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb21tb25Db250ZW50cyI+Y3JlYXRlQ29tbW9uQ29udGVudHM8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIExhYmVsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUxhYmVsIj5jcmVhdGVMYWJlbDwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB0ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBUZXh0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVRleHRGaWVsZCI+Y3JlYXRlVGV4dEZpZWxkPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBFeHBhbmRhYmxlQ29tcG9zaXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVR3aXN0aWUiPmNyZWF0ZVR3aXN0aWU8L2E+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGludCBuQ29sdW1ucyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29tcG9zaXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVZhbGlkYXRpb25TZWN0aW9uIj5jcmVhdGVWYWxpZGF0aW9uU2VjdGlvbjwvYT4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW5hYmxlVmFsdWVzIj5lbmFibGVWYWx1ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldERpYWxvZ1NldHRpbmdzIj5nZXREaWFsb2dTZXR0aW5nczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBQcmVmZXJlbmNlczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFByZWZlcmVuY2VzIj5nZXRNb2RlbFByZWZlcmVuY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXIiPmdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJlZmVyZW5jZVBhZ2VJRCI+Z2V0UHJlZmVyZW5jZVBhZ2VJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFByb2plY3RTZXR0aW5nc0tleSI+Z2V0UHJvamVjdFNldHRpbmdzS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJvcGVydHlQYWdlSUQiPmdldFByb3BlcnR5UGFnZUlEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UXVhbGlmaWVyIj5nZXRRdWFsaWZpZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJV29ya2JlbmNoIHdvcmtiZW5jaCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0aWFsaXplVmFsdWVzIj5pbml0aWFsaXplVmFsdWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9hZFByZWZlcmVuY2VzIj5sb2FkUHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tb2RpZnlUZXh0Ij5tb2RpZnlUZXh0PC9hPihNb2RpZnlFdmVudCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlcmZvcm1EZWZhdWx0cyI+cGVyZm9ybURlZmF1bHRzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcmVWYWx1ZXMiPnN0b3JlVmFsdWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGVWYWx1ZXMiPnZhbGlkYXRlVmFsdWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQ29tYm8iPmNyZWF0ZUNvbWJvPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbWJvIDxzdHJvbmc+Y3JlYXRlQ29tYm88L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+bGFiZWw8L2NvZGU+PC9wPjxwPjxjb2RlPmtleTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbWJvPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb21tb25Db250ZW50cyI+Y3JlYXRlQ29tbW9uQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbCA8c3Ryb25nPmNyZWF0ZUNvbW1vbkNvbnRlbnRzPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUxhYmVsIj5jcmVhdGVMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBMYWJlbCA8c3Ryb25nPmNyZWF0ZUxhYmVsPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT50ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+TGFiZWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRleHRGaWVsZCI+Y3JlYXRlVGV4dEZpZWxkPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFRleHQgPHN0cm9uZz5jcmVhdGVUZXh0RmllbGQ8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGV4dDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVHdpc3RpZSI+Y3JlYXRlVHdpc3RpZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBFeHBhbmRhYmxlQ29tcG9zaXRlIDxzdHJvbmc+Y3JlYXRlVHdpc3RpZTwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBpbnQgbkNvbHVtbnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+bGFiZWw8L2NvZGU+PC9wPjxwPjxjb2RlPm5Db2x1bW5zPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+RXhwYW5kYWJsZUNvbXBvc2l0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVmFsaWRhdGlvblNlY3Rpb24iPmNyZWF0ZVZhbGlkYXRpb25TZWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbXBvc2l0ZSA8c3Ryb25nPmNyZWF0ZVZhbGlkYXRpb25TZWN0aW9uPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbXBvc2l0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZW5hYmxlVmFsdWVzIj5lbmFibGVWYWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmVuYWJsZVZhbHVlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RGlhbG9nU2V0dGluZ3MiPmdldERpYWxvZ1NldHRpbmdzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElEaWFsb2dTZXR0aW5ncyA8c3Ryb25nPmdldERpYWxvZ1NldHRpbmdzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SURpYWxvZ1NldHRpbmdzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFByZWZlcmVuY2VzIj5nZXRNb2RlbFByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFByZWZlcmVuY2VzIDxzdHJvbmc+Z2V0TW9kZWxQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlByZWZlcmVuY2VzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllciI+Z2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJlZmVyZW5jZVBhZ2VJRCI+Z2V0UHJlZmVyZW5jZVBhZ2VJRDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJlZmVyZW5jZVBhZ2VJRDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByb2plY3RTZXR0aW5nc0tleSI+Z2V0UHJvamVjdFNldHRpbmdzS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRQcm9qZWN0U2V0dGluZ3NLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcm9wZXJ0eVBhZ2VJRCI+Z2V0UHJvcGVydHlQYWdlSUQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFByb3BlcnR5UGFnZUlEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UXVhbGlmaWVyIj5nZXRRdWFsaWZpZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFF1YWxpZmllcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXQiPmluaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXQ8L3N0cm9uZz4oSVdvcmtiZW5jaCB3b3JrYmVuY2gpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPndvcmtiZW5jaDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdGlhbGl6ZVZhbHVlcyI+aW5pdGlhbGl6ZVZhbHVlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+aW5pdGlhbGl6ZVZhbHVlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbG9hZFByZWZlcmVuY2VzIj5sb2FkUHJlZmVyZW5jZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmxvYWRQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX21vZGlmeVRleHQiPm1vZGlmeVRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPm1vZGlmeVRleHQ8L3N0cm9uZz4oTW9kaWZ5RXZlbnQgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybURlZmF1bHRzIj5wZXJmb3JtRGVmYXVsdHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnBlcmZvcm1EZWZhdWx0czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1Pazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9yZVZhbHVlcyI+c3RvcmVWYWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnN0b3JlVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZVZhbHVlcyI+dmFsaWRhdGVWYWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnZhbGlkYXRlVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5PdmVycmlkZVF1aWNrQXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5PdmVycmlkZVF1aWNrQXNzaXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NTBmNzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3QuT3ZlcnJpZGVRdWlja0Fzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgT3ZlcnJpZGVRdWlja0Fzc2lzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk92ZXJyaWRlUXVpY2tBc3Npc3Q8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9PdmVycmlkZVF1aWNrQXNzaXN0Ij5PdmVycmlkZVF1aWNrQXNzaXN0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYW5Bc3Npc3QiPmNhbkFzc2lzdDwvYT4oSVF1aWNrQXNzaXN0SW52b2NhdGlvbkNvbnRleHQgaW52b2NhdGlvbkNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FuRml4Ij5jYW5GaXg8L2E+KEFubm90YXRpb24gYW5ub3RhdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2FscyI+Y29tcHV0ZVF1aWNrQXNzaXN0UHJvcG9zYWxzPC9hPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFcnJvck1lc3NhZ2UiPmdldEVycm9yTWVzc2FnZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX092ZXJyaWRlUXVpY2tBc3Npc3QiPk92ZXJyaWRlUXVpY2tBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5PdmVycmlkZVF1aWNrQXNzaXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbkFzc2lzdCI+Y2FuQXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5jYW5Bc3Npc3Q8L3N0cm9uZz4oSVF1aWNrQXNzaXN0SW52b2NhdGlvbkNvbnRleHQgaW52b2NhdGlvbkNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmludm9jYXRpb25Db250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2FuRml4Ij5jYW5GaXg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmNhbkZpeDwvc3Ryb25nPihBbm5vdGF0aW9uIGFubm90YXRpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFubm90YXRpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wdXRlUXVpY2tBc3Npc3RQcm9wb3NhbHMiPmNvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW10gPHN0cm9uZz5jb21wdXRlUXVpY2tBc3Npc3RQcm9wb3NhbHM8L3N0cm9uZz4oSVF1aWNrQXNzaXN0SW52b2NhdGlvbkNvbnRleHQgaW52b2NhdGlvbkNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmludm9jYXRpb25Db250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFcnJvck1lc3NhZ2UiPmdldEVycm9yTWVzc2FnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RXJyb3JNZXNzYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3QuVmFsaWRhdGlvblF1aWNrQXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5WYWxpZGF0aW9uUXVpY2tBc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0ZGE4MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5WYWxpZGF0aW9uUXVpY2tBc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFZhbGlkYXRpb25RdWlja0Fzc2lzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlZhbGlkYXRpb25RdWlja0Fzc2lzdDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ZhbGlkYXRpb25RdWlja0Fzc2lzdCI+VmFsaWRhdGlvblF1aWNrQXNzaXN0PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYW5Bc3Npc3QiPmNhbkFzc2lzdDwvYT4oSVF1aWNrQXNzaXN0SW52b2NhdGlvbkNvbnRleHQgaW52b2NhdGlvbkNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FuRml4Ij5jYW5GaXg8L2E+KEFubm90YXRpb24gYW5ub3RhdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2FscyI+Y29tcHV0ZVF1aWNrQXNzaXN0UHJvcG9zYWxzPC9hPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFcnJvck1lc3NhZ2UiPmdldEVycm9yTWVzc2FnZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1ZhbGlkYXRpb25RdWlja0Fzc2lzdCI+VmFsaWRhdGlvblF1aWNrQXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VmFsaWRhdGlvblF1aWNrQXNzaXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhbkFzc2lzdCI+Y2FuQXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5jYW5Bc3Npc3Q8L3N0cm9uZz4oSVF1aWNrQXNzaXN0SW52b2NhdGlvbkNvbnRleHQgaW52b2NhdGlvbkNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmludm9jYXRpb25Db250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2FuRml4Ij5jYW5GaXg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmNhbkZpeDwvc3Ryb25nPihBbm5vdGF0aW9uIGFubm90YXRpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFubm90YXRpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wdXRlUXVpY2tBc3Npc3RQcm9wb3NhbHMiPmNvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW10gPHN0cm9uZz5jb21wdXRlUXVpY2tBc3Npc3RQcm9wb3NhbHM8L3N0cm9uZz4oSVF1aWNrQXNzaXN0SW52b2NhdGlvbkNvbnRleHQgaW52b2NhdGlvbkNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmludm9jYXRpb25Db250ZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFcnJvck1lc3NhZ2UiPmdldEVycm9yTWVzc2FnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RXJyb3JNZXNzYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTY4OTVjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYU0wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnJlZ2lzdHJ5PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYU0w8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMPC9zdHJvbmc+Ci1leHRlbmRzIEFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYTUw8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTCI+QWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkQWRhcHRlckZhY3RvcmllcyI+YWRkQWRhcHRlckZhY3RvcmllczwvYT4oSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkQ29udGVudEJhc2VkRmFjdG9yaWVzIj5hZGRDb250ZW50QmFzZWRGYWN0b3JpZXM8L2E+KElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzRm9yIj5pc0ZvcjwvYT4oSURvY3VtZW50VHlwZUhhbmRsZXIgY29udGVudFR5cGVEZXNjcmlwdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWluaXRpYWxpemVGYWN0b3JpZXMiPnJlaW5pdGlhbGl6ZUZhY3RvcmllczwvYT4oSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTCI+QWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYU0w8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkQWRhcHRlckZhY3RvcmllcyI+YWRkQWRhcHRlckZhY3RvcmllczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkQWRhcHRlckZhY3Rvcmllczwvc3Ryb25nPihJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RydWN0dXJlZE1vZGVsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRDb250ZW50QmFzZWRGYWN0b3JpZXMiPmFkZENvbnRlbnRCYXNlZEZhY3RvcmllczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkQ29udGVudEJhc2VkRmFjdG9yaWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJ1Y3R1cmVkTW9kZWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzRm9yIj5pc0ZvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNGb3I8L3N0cm9uZz4oSURvY3VtZW50VHlwZUhhbmRsZXIgY29udGVudFR5cGVEZXNjcmlwdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGVudFR5cGVEZXNjcmlwdGlvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlaW5pdGlhbGl6ZUZhY3RvcmllcyI+cmVpbml0aWFsaXplRmFjdG9yaWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWluaXRpYWxpemVGYWN0b3JpZXM8L3N0cm9uZz4oSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cnVjdHVyZWRNb2RlbDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjc1ZGU5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZyI+QWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFBvc2l0aW9uW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgUG9zaXRpb25bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIEluZGV4ZWRSZWdpb24gaW5kZXhlZFJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlU2VtYW50aWNQb3NpdGlvbnMiPmNyZWF0ZVNlbWFudGljUG9zaXRpb25zPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyByZWdpb25UeXBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEJvbGRQcmVmZXJlbmNlS2V5Ij5nZXRCb2xkUHJlZmVyZW5jZUtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbG9yUHJlZmVyZW5jZUtleSI+Z2V0Q29sb3JQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGlzcGxheU5hbWUiPmdldERpc3BsYXlOYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SXRhbGljUHJlZmVyZW5jZUtleSI+Z2V0SXRhbGljUHJlZmVyZW5jZUtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJUHJlZmVyZW5jZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFByZWZlcmVuY2VTdG9yZSI+Z2V0UHJlZmVyZW5jZVN0b3JlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3RyaWtldGhyb3VnaFByZWZlcmVuY2VLZXkiPmdldFN0cmlrZXRocm91Z2hQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRVbmRlcmxpbmVQcmVmZXJlbmNlS2V5Ij5nZXRVbmRlcmxpbmVQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZyI+QWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFBvc2l0aW9uW10gPHN0cm9uZz5jb25zdW1lczwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UG9zaXRpb25bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFBvc2l0aW9uW10gPHN0cm9uZz5jb25zdW1lczwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJbmRleGVkUmVnaW9uIGluZGV4ZWRSZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50UmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5pbmRleGVkUmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UG9zaXRpb25bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlU2VtYW50aWNQb3NpdGlvbnMiPmNyZWF0ZVNlbWFudGljUG9zaXRpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Y3JlYXRlU2VtYW50aWNQb3NpdGlvbnM8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcmVnaW9uVHlwZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5yZWdpb25UeXBlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEJvbGRQcmVmZXJlbmNlS2V5Ij5nZXRCb2xkUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0Qm9sZFByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb2xvclByZWZlcmVuY2VLZXkiPmdldENvbG9yUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0Q29sb3JQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RGlzcGxheU5hbWUiPmdldERpc3BsYXlOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXREaXNwbGF5TmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVuYWJsZWRQcmVmZXJlbmNlS2V5Ij5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJdGFsaWNQcmVmZXJlbmNlS2V5Ij5nZXRJdGFsaWNQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRJdGFsaWNQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJlZmVyZW5jZVN0b3JlIj5nZXRQcmVmZXJlbmNlU3RvcmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSVByZWZlcmVuY2VTdG9yZSA8c3Ryb25nPmdldFByZWZlcmVuY2VTdG9yZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklQcmVmZXJlbmNlU3RvcmU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0cmlrZXRocm91Z2hQcmVmZXJlbmNlS2V5Ij5nZXRTdHJpa2V0aHJvdWdoUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U3RyaWtldGhyb3VnaFByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZVByZWZlcmVuY2VLZXkiPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VW5kZXJsaW5lUHJlZmVyZW5jZUtleSI+Z2V0VW5kZXJsaW5lUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VW5kZXJsaW5lUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLklTdHlsZUNvbnN0YW50c1hTTC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuSVN0eWxlQ29uc3RhbnRzWFNMLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiY2I1N2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuSVN0eWxlQ29uc3RhbnRzWFNMLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBJU3R5bGVDb25zdGFudHNYU0w8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5JU3R5bGVDb25zdGFudHNYU0w8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+Q29udGFpbnMgdGhlIHN5bWJvbGljIG5hbWUgb2Ygc3R5bGVzIHVzZWQgYnkgTGluZVN0eWxlUHJvdmlkZXIsCi0gQ29sb3JNYW5hZ2VyLCBhbmQgYW55IG90aGVycyB3aG8gbWF5IGJlIGludGVyZXN0ZWQ8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQkFDS0dST1VORCI+QkFDS0dST1VORDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfREVDTF9CT1JERVIiPkRFQ0xfQk9SREVSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9GT1JFR1JPVU5EIj5GT1JFR1JPVU5EPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9UQUdfQVRUUklCVVRFX0VRVUFMUyI+VEFHX0FUVFJJQlVURV9FUVVBTFM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RBR19BVFRSSUJVVEVfTkFNRSI+VEFHX0FUVFJJQlVURV9OQU1FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9UQUdfQVRUUklCVVRFX1ZBTFVFIj5UQUdfQVRUUklCVVRFX1ZBTFVFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9UQUdfQk9SREVSIj5UQUdfQk9SREVSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9UQUdfTkFNRSI+VEFHX05BTUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfQkFDS0dST1VORCI+QkFDS0dST1VORDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5CQUNLR1JPVU5EPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0RFQ0xfQk9SREVSIj5ERUNMX0JPUkRFUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5ERUNMX0JPUkRFUjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9GT1JFR1JPVU5EIj5GT1JFR1JPVU5EPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkZPUkVHUk9VTkQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVEFHX0FUVFJJQlVURV9FUVVBTFMiPlRBR19BVFRSSUJVVEVfRVFVQUxTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlRBR19BVFRSSUJVVEVfRVFVQUxTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RBR19BVFRSSUJVVEVfTkFNRSI+VEFHX0FUVFJJQlVURV9OQU1FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlRBR19BVFRSSUJVVEVfTkFNRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9UQUdfQVRUUklCVVRFX1ZBTFVFIj5UQUdfQVRUUklCVVRFX1ZBTFVFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlRBR19BVFRSSUJVVEVfVkFMVUU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVEFHX0JPUkRFUiI+VEFHX0JPUkRFUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5UQUdfQk9SREVSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RBR19OQU1FIj5UQUdfTkFNRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5UQUdfTkFNRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyRm9yWFNMLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZDZkMDguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBMaW5lU3R5bGVQcm92aWRlckZvclhTTDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkxpbmVTdHlsZVByb3ZpZGVyRm9yWFNMPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0TGluZVN0eWxlUHJvdmlkZXI8L3ByZT5UaGlzIGltcGxlbWVudHMgYSBTeW50YXggTGluZSBTdHlsZSBQcm92aWRlciBmb3IgWFNMLiBJdCBsZXZlcmFnZXMgc29tZQotIGluZm9ybWF0aW9uIGZyb20gdGhlIFhNTCBTeW50YXggQ29sb3JpbmcsIGJ1dCBhZGRzIHNwZWNpZmljIGNvbG9yaW5nIGZvciBYU0wKLSBzcGVjaWZpYyBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy48cD48L3A+PHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSGlnaGxpZ2h0ZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9oaWdobGlnaHRlciI+aGlnaGxpZ2h0ZXI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFJlY29uY2lsZXJIaWdobGlnaHRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3JlY0hpZ2hsaWdodGVyIj5yZWNIaWdobGlnaHRlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3N0cnVjdHVyZWREb2N1bWVudCI+c3RydWN0dXJlZERvY3VtZW50PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9MaW5lU3R5bGVQcm92aWRlckZvclhTTCI+TGluZVN0eWxlUHJvdmlkZXJGb3JYU0w8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFRleHRBdHRyaWJ1dGUiPmFkZFRleHRBdHRyaWJ1dGU8L2E+KGphdmEubGFuZy5TdHJpbmcgY29sb3JLZXkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTG9va3MgdXAgdGhlIGNvbG9yS2V5IGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlIGFuZCBhZGRzIHRoZSBzdHlsZQotIGluZm9ybWF0aW9uIHRvIGxpc3Qgb2YgVGV4dEF0dHJpYnV0ZXM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21tb25Jbml0Ij5jb21tb25Jbml0PC9hPihJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBIaWdobGlnaHRlciBoaWdobGlnaHRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZXh0QXR0cmlidXRlIj5jcmVhdGVUZXh0QXR0cmlidXRlPC9hPihSR0IgZm9yZWdyb3VuZAotICAgICAgICAgLAotICAgICAgUkdCIGJhY2tncm91bmQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gYm9sZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZXh0QXR0cmlidXRlIj5jcmVhdGVUZXh0QXR0cmlidXRlPC9hPihSR0IgZm9yZWdyb3VuZAotICAgICAgICAgLAotICAgICAgUkdCIGJhY2tncm91bmQKLSAgICAgICAgICwKLSAgICAgIGludCBzdHlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBdHRyaWJ1dGVGb3IiPmdldEF0dHJpYnV0ZUZvcjwvYT4oSVRleHRSZWdpb25Db2xsZWN0aW9uIGNvbGxlY3Rpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIHRleHRSZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXR0cmlidXRlRm9yIj5nZXRBdHRyaWJ1dGVGb3I8L2E+KElUZXh0UmVnaW9uIHJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVByZWZlcmVuY2VTdG9yZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb2xvclByZWZlcmVuY2VzIj5nZXRDb2xvclByZWZlcmVuY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RG9jdW1lbnQiPmdldERvY3VtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIEhpZ2hsaWdodGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEhpZ2hsaWdodGVyIj5nZXRIaWdobGlnaHRlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhbmRsZVByb3BlcnR5Q2hhbmdlIj5oYW5kbGVQcm9wZXJ0eUNoYW5nZTwvYT4oUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBIaWdobGlnaHRlciBoaWdobGlnaHRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudAotICAgICAgICAgLAotICAgICAgSVNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdCI+aW5pdDwvYT4oSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIFJlY29uY2lsZXJIaWdobGlnaHRlciBoaWdobGlnaHRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0luaXRpYWxpemVkIj5pc0luaXRpYWxpemVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9hZENvbG9ycyI+bG9hZENvbG9yczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZXBhcmVSZWdpb25zIj5wcmVwYXJlUmVnaW9uczwvYT4oSVR5cGVkUmVnaW9uIHR5cGVkUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgbGluZVJlcXVlc3RTdGFydAotICAgICAgICAgLAotICAgICAgaW50IGxpbmVSZXF1ZXN0TGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBob2xkUmVzdWx0cyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcmVwYXJlVGV4dFJlZ2lvbiI+cHJlcGFyZVRleHRSZWdpb248L2E+KElUZXh0UmVnaW9uQ29sbGVjdGlvbiBibG9ja2VkUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgcGFydGl0aW9uU3RhcnRPZmZzZXQKLSAgICAgICAgICwKLSAgICAgIGludCBwYXJ0aXRpb25MZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGhvbGRSZXN1bHRzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZXBhcmVUZXh0UmVnaW9ucyI+cHJlcGFyZVRleHRSZWdpb25zPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IHBhcnRpdGlvblN0YXJ0T2Zmc2V0Ci0gICAgICAgICAsCi0gICAgICBpbnQgcGFydGl0aW9uTGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBob2xkUmVzdWx0cyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyIj5yZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVsZWFzZSI+cmVsZWFzZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VuUmVnaXN0ZXJQcmVmZXJlbmNlTWFuYWdlciI+dW5SZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9oaWdobGlnaHRlciI+aGlnaGxpZ2h0ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSGlnaGxpZ2h0ZXIgPHN0cm9uZz5oaWdobGlnaHRlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9yZWNIaWdobGlnaHRlciI+cmVjSGlnaGxpZ2h0ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgUmVjb25jaWxlckhpZ2hsaWdodGVyIDxzdHJvbmc+cmVjSGlnaGxpZ2h0ZXI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfc3RydWN0dXJlZERvY3VtZW50Ij5zdHJ1Y3R1cmVkRG9jdW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudCA8c3Ryb25nPnN0cnVjdHVyZWREb2N1bWVudDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wiPkxpbmVTdHlsZVByb3ZpZGVyRm9yWFNMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TGluZVN0eWxlUHJvdmlkZXJGb3JYU0w8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkVGV4dEF0dHJpYnV0ZSI+YWRkVGV4dEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkVGV4dEF0dHJpYnV0ZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvbG9yS2V5KTwvY29kZT48L3A+PHA+TG9va3MgdXAgdGhlIGNvbG9yS2V5IGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlIGFuZCBhZGRzIHRoZSBzdHlsZQotIGluZm9ybWF0aW9uIHRvIGxpc3Qgb2YgVGV4dEF0dHJpYnV0ZXM8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbG9yS2V5PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21tb25Jbml0Ij5jb21tb25Jbml0PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5jb21tb25Jbml0PC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+aGlnaGxpZ2h0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRleHRBdHRyaWJ1dGUiPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZSA8c3Ryb25nPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L3N0cm9uZz4oUkdCIGZvcmVncm91bmQKLSAgICAgICAgICwKLSAgICAgIFJHQiBiYWNrZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGJvbGQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZvcmVncm91bmQ8L2NvZGU+PC9wPjxwPjxjb2RlPmJhY2tncm91bmQ8L2NvZGU+PC9wPjxwPjxjb2RlPmJvbGQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZXh0QXR0cmlidXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVUZXh0QXR0cmlidXRlIj5jcmVhdGVUZXh0QXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGUgPHN0cm9uZz5jcmVhdGVUZXh0QXR0cmlidXRlPC9zdHJvbmc+KFJHQiBmb3JlZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBSR0IgYmFja2dyb3VuZAotICAgICAgICAgLAotICAgICAgaW50IHN0eWxlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mb3JlZ3JvdW5kPC9jb2RlPjwvcD48cD48Y29kZT5iYWNrZ3JvdW5kPC9jb2RlPjwvcD48cD48Y29kZT5zdHlsZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlRleHRBdHRyaWJ1dGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEF0dHJpYnV0ZUZvciI+Z2V0QXR0cmlidXRlRm9yPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGUgPHN0cm9uZz5nZXRBdHRyaWJ1dGVGb3I8L3N0cm9uZz4oSVRleHRSZWdpb25Db2xsZWN0aW9uIGNvbGxlY3Rpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIHRleHRSZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbGxlY3Rpb248L2NvZGU+PC9wPjxwPjxjb2RlPnRleHRSZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZXh0QXR0cmlidXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBdHRyaWJ1dGVGb3IiPmdldEF0dHJpYnV0ZUZvcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBUZXh0QXR0cmlidXRlIDxzdHJvbmc+Z2V0QXR0cmlidXRlRm9yPC9zdHJvbmc+KElUZXh0UmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGV4dEF0dHJpYnV0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29sb3JQcmVmZXJlbmNlcyI+Z2V0Q29sb3JQcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJUHJlZmVyZW5jZVN0b3JlIDxzdHJvbmc+Z2V0Q29sb3JQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklQcmVmZXJlbmNlU3RvcmU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERvY3VtZW50Ij5nZXREb2N1bWVudDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IDxzdHJvbmc+Z2V0RG9jdW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JU3RydWN0dXJlZERvY3VtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRIaWdobGlnaHRlciI+Z2V0SGlnaGxpZ2h0ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSGlnaGxpZ2h0ZXIgPHN0cm9uZz5nZXRIaWdobGlnaHRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkhpZ2hsaWdodGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9oYW5kbGVQcm9wZXJ0eUNoYW5nZSI+aGFuZGxlUHJvcGVydHlDaGFuZ2U8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmhhbmRsZVByb3BlcnR5Q2hhbmdlPC9zdHJvbmc+KFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2ZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0Ij5pbml0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbml0PC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+aGlnaGxpZ2h0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXQiPmluaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXQ8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJ1Y3R1cmVkRG9jdW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPnNvdXJjZVZpZXdlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudAotICAgICAgICAgLAotICAgICAgUmVjb25jaWxlckhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJ1Y3R1cmVkRG9jdW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmhpZ2hsaWdodGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0luaXRpYWxpemVkIj5pc0luaXRpYWxpemVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0luaXRpYWxpemVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGluaXRpYWxpemVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBib29sZWFuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xvYWRDb2xvcnMiPmxvYWRDb2xvcnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmxvYWRDb2xvcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByZXBhcmVSZWdpb25zIj5wcmVwYXJlUmVnaW9uczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+cHJlcGFyZVJlZ2lvbnM8L3N0cm9uZz4oSVR5cGVkUmVnaW9uIHR5cGVkUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgbGluZVJlcXVlc3RTdGFydAotICAgICAgICAgLAotICAgICAgaW50IGxpbmVSZXF1ZXN0TGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBob2xkUmVzdWx0cyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHlwZWRSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPmxpbmVSZXF1ZXN0U3RhcnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmxpbmVSZXF1ZXN0TGVuZ3RoPC9jb2RlPjwvcD48cD48Y29kZT5ob2xkUmVzdWx0czwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByZXBhcmVUZXh0UmVnaW9uIj5wcmVwYXJlVGV4dFJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+cHJlcGFyZVRleHRSZWdpb248L3N0cm9uZz4oSVRleHRSZWdpb25Db2xsZWN0aW9uIGJsb2NrZWRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBwYXJ0aXRpb25TdGFydE9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IHBhcnRpdGlvbkxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLkNvbGxlY3Rpb24gaG9sZFJlc3VsdHMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmJsb2NrZWRSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPnBhcnRpdGlvblN0YXJ0T2Zmc2V0PC9jb2RlPjwvcD48cD48Y29kZT5wYXJ0aXRpb25MZW5ndGg8L2NvZGU+PC9wPjxwPjxjb2RlPmhvbGRSZXN1bHRzPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJlcGFyZVRleHRSZWdpb25zIj5wcmVwYXJlVGV4dFJlZ2lvbnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPnByZXBhcmVUZXh0UmVnaW9uczwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IHBhcnRpdGlvblN0YXJ0T2Zmc2V0Ci0gICAgICAgICAsCi0gICAgICBpbnQgcGFydGl0aW9uTGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBob2xkUmVzdWx0cyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RydWN0dXJlZERvY3VtZW50UmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5wYXJ0aXRpb25TdGFydE9mZnNldDwvY29kZT48L3A+PHA+PGNvZGU+cGFydGl0aW9uTGVuZ3RoPC9jb2RlPjwvcD48cD48Y29kZT5ob2xkUmVzdWx0czwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXIiPnJlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnJlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbGVhc2UiPnJlbGVhc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbGVhc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VuUmVnaXN0ZXJQcmVmZXJlbmNlTWFuYWdlciI+dW5SZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz51blJlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFJlZ2lvbk1hcC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZjg3OTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYTUxSZWdpb25NYXA8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YTUxSZWdpb25NYXA8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoZSBYTUxSZWdpb25NYXAgY2xhc3MgaGFuZGxlcyBtYXBwaW5nIGR1dGllcyBmcm9tIGFuIFhNTCBSZWdpb24gdG8KLSBhIExpbmUgU3R5bGUgQ29uc3RhbnQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFJlZ2lvbk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBYTUxSZWdpb25NYXAgQ2xhc3M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZWdpb25NYXAiPmdldFJlZ2lvbk1hcDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIFhNTCBSZWdpb25zIHRvIFN0eWxlIENvbnN0YW50czwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwIDxzdHJvbmc+Z2V0SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgWE1MUmVnaW9uTWFwIENsYXNzPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFJlZ2lvbk1hcDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVnaW9uTWFwIj5nZXRSZWdpb25NYXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcCA8c3Ryb25nPmdldFJlZ2lvbk1hcDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGEgbWFwcGluZyBvZiBYTUwgUmVnaW9ucyB0byBTdHlsZSBDb25zdGFudHM8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5NYXA8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFRleHRBdHRyaWJ1dGVNYXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFRleHRBdHRyaWJ1dGVNYXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0Zjg2Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxUZXh0QXR0cmlidXRlTWFwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYTUxUZXh0QXR0cmlidXRlTWFwPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WE1MVGV4dEF0dHJpYnV0ZU1hcDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+WE1sVGV4dEF0dHJpYnV0ZU1hcCBoYW5kbGVzIHRoZSBtYXBwaW5nIG9mIFhNTCBTdHlsZSBDb25zdGFudHMgdG8gVGV4dEF0dHJpYnV0ZXMuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGV4dEF0dHJpYnV0ZSI+Y3JlYXRlVGV4dEF0dHJpYnV0ZTwvYT4oUkdCIGZvcmVncm91bmQKLSAgICAgICAgICwKLSAgICAgIFJHQiBiYWNrZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBpbnQgc3R5bGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFRleHRBdHRyaWJ1dGVNYXA8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQW4gaW5zdGFuY2Ugb2YgWE1MVGV4dEF0dHJpYnV0ZU1hcC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZXh0QXR0cmlidXRlTWFwIj5nZXRUZXh0QXR0cmlidXRlTWFwPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhIE1hcCBvZiBTdHlsZSBDb25zdGFudHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFRleHQgQXR0cmlidXRlPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVUZXh0QXR0cmlidXRlIj5jcmVhdGVUZXh0QXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGUgPHN0cm9uZz5jcmVhdGVUZXh0QXR0cmlidXRlPC9zdHJvbmc+KFJHQiBmb3JlZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBSR0IgYmFja2dyb3VuZAotICAgICAgICAgLAotICAgICAgaW50IHN0eWxlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mb3JlZ3JvdW5kPC9jb2RlPjwvcD48cD48Y29kZT5iYWNrZ3JvdW5kPC9jb2RlPjwvcD48cD48Y29kZT5zdHlsZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlRleHRBdHRyaWJ1dGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFRleHRBdHRyaWJ1dGVNYXAgPHN0cm9uZz5nZXRJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5BbiBpbnN0YW5jZSBvZiBYTUxUZXh0QXR0cmlidXRlTWFwLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxUZXh0QXR0cmlidXRlTWFwPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZXh0QXR0cmlidXRlTWFwIj5nZXRUZXh0QXR0cmlidXRlTWFwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5NYXAgPHN0cm9uZz5nZXRUZXh0QXR0cmlidXRlTWFwPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgYSBNYXAgb2YgU3R5bGUgQ29uc3RhbnRzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBUZXh0IEF0dHJpYnV0ZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLk1hcDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGFmMWE4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZzwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nIj5YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgUG9zaXRpb25bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVuYWJsZWRQcmVmZXJlbmNlS2V5Ij5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlUHJlZmVyZW5jZUtleSI+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZyI+WFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFBvc2l0aW9uW10gPHN0cm9uZz5jb25zdW1lczwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UG9zaXRpb25bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlUHJlZmVyZW5jZUtleSI+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYzNzA5Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmc8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmciPlhTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgUG9zaXRpb25bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVuYWJsZWRQcmVmZXJlbmNlS2V5Ij5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlUHJlZmVyZW5jZUtleSI+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmciPlhTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFBvc2l0aW9uW10gPHN0cm9uZz5jb25zdW1lczwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UG9zaXRpb25bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlUHJlZmVyZW5jZUtleSI+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xSZWdpb25NYXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTBkNWJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xSZWdpb25NYXA8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xSZWdpb25NYXA8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlhTTFJlZ2lvbk1hcCBoYW5kbGVzIHRoZSBtYXBwaW5nIG9mIFhNTCBSZWdpb25zIHRvIFhTTCBTdHlsZSBDb25zdGFudHMuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFhTTFJlZ2lvbk1hcC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZWdpb25NYXAiPmdldFJlZ2lvbk1hcDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgYSBNQVAgb2YgWFNMIFJlZ2lvbnMgYW5kIFN0eWxlIENvbnN0YW50cy48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcCA8c3Ryb25nPmdldEluc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgYW4gaW5zdGFuY2Ugb2YgWFNMUmVnaW9uTWFwLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xSZWdpb25NYXA8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFJlZ2lvbk1hcCI+Z2V0UmVnaW9uTWFwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5NYXAgPHN0cm9uZz5nZXRSZWdpb25NYXA8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyBhIE1BUCBvZiBYU0wgUmVnaW9ucyBhbmQgU3R5bGUgQ29uc3RhbnRzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLk1hcDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRhZ0RlbGltc1NlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5Yzg1MmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFRhZ0RlbGltc1NlbWFudGljSGlnaGxpZ2h0aW5nPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmc8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFRhZ0RlbGltc1NlbWFudGljSGlnaGxpZ2h0aW5nIj5YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFBvc2l0aW9uW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlU2VtYW50aWNQb3NpdGlvbnMiPmNyZWF0ZVNlbWFudGljUG9zaXRpb25zPC9hPihJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyByZWdpb25UeXBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVuYWJsZWRQcmVmZXJlbmNlS2V5Ij5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlUHJlZmVyZW5jZUtleSI+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmciPlhTTFRhZ0RlbGltc1NlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFBvc2l0aW9uW10gPHN0cm9uZz5jb25zdW1lczwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UG9zaXRpb25bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlU2VtYW50aWNQb3NpdGlvbnMiPmNyZWF0ZVNlbWFudGljUG9zaXRpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Y3JlYXRlU2VtYW50aWNQb3NpdGlvbnM8L3N0cm9uZz4oSVRleHRSZWdpb24gdGV4dFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcmVnaW9uVHlwZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGV4dFJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5yZWdpb25UeXBlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVuYWJsZWRQcmVmZXJlbmNlS2V5Ij5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZVByZWZlcmVuY2VLZXkiPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcwNDBmMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmc8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nIj5YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmc8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBQb3NpdGlvbltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN1bWVzIj5jb25zdW1lczwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmciPlhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUG9zaXRpb25bXSA8c3Ryb25nPmNvbnN1bWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Qb3NpdGlvbltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbmFibGVkUHJlZmVyZW5jZUtleSI+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRleHRBdHRyaWJ1dGVNYXAuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRleHRBdHRyaWJ1dGVNYXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFhOWIwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUZXh0QXR0cmlidXRlTWFwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xUZXh0QXR0cmlidXRlTWFwPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVGV4dEF0dHJpYnV0ZU1hcDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+SGFuZGxlcyB0aGUgbWFwcGluZyBvZiB0aGUgU3R5bGUgQ29uc3RhbnRzIHRvIFRleHQgQXR0cmlidXRlcyBmb3IgWFNMLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFhTTFRleHRBdHRyaWJ1dGUiPmFkZFhTTFRleHRBdHRyaWJ1dGU8L2E+KGphdmEubGFuZy5TdHJpbmcgY29sb3JLZXkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGV4dEF0dHJpYnV0ZSI+Y3JlYXRlVGV4dEF0dHJpYnV0ZTwvYT4oUkdCIGZvcmVncm91bmQKLSAgICAgICAgICwKLSAgICAgIFJHQiBiYWNrZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBpbnQgc3R5bGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRleHRBdHRyaWJ1dGVNYXA8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBYU0xUZXh0QXR0cmlidXRlTWFwPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5NYXA8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dEF0dHJpYnV0ZU1hcCI+Z2V0VGV4dEF0dHJpYnV0ZU1hcDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCdzIGEgTWFwIG9mIFhTTCBTdHlsZSBDb25zdGFudHMgdG8gVGV4dCBBdHRyaWJ1dGVzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkWFNMVGV4dEF0dHJpYnV0ZSI+YWRkWFNMVGV4dEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkWFNMVGV4dEF0dHJpYnV0ZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvbG9yS2V5KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb2xvcktleTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGV4dEF0dHJpYnV0ZSI+Y3JlYXRlVGV4dEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBUZXh0QXR0cmlidXRlIDxzdHJvbmc+Y3JlYXRlVGV4dEF0dHJpYnV0ZTwvc3Ryb25nPihSR0IgZm9yZWdyb3VuZAotICAgICAgICAgLAotICAgICAgUkdCIGJhY2tncm91bmQKLSAgICAgICAgICwKLSAgICAgIGludCBzdHlsZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Zm9yZWdyb3VuZDwvY29kZT48L3A+PHA+PGNvZGU+YmFja2dyb3VuZDwvY29kZT48L3A+PHA+PGNvZGU+c3R5bGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZXh0QXR0cmlidXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUZXh0QXR0cmlidXRlTWFwIDxzdHJvbmc+Z2V0SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyBhbiBpbnN0YW5jZSBvZiBYU0xUZXh0QXR0cmlidXRlTWFwPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRleHRBdHRyaWJ1dGVNYXA8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHRBdHRyaWJ1dGVNYXAiPmdldFRleHRBdHRyaWJ1dGVNYXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcCA8c3Ryb25nPmdldFRleHRBdHRyaWJ1dGVNYXA8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0J3MgYSBNYXAgb2YgWFNMIFN0eWxlIENvbnN0YW50cyB0byBUZXh0IEF0dHJpYnV0ZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTWFwPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhTTC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYU0wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2NjA3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhTTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBUZW1wbGF0ZUNvbnRleHRUeXBlWFNMPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VGVtcGxhdGVDb250ZXh0VHlwZVhTTDwvc3Ryb25nPgotZXh0ZW5kcyBUZW1wbGF0ZUNvbnRleHRUeXBlPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTF9BVFRSIj5YU0xfQVRUUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMX05FVyI+WFNMX05FVzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMX1RBRyI+WFNMX1RBRzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVGVtcGxhdGVDb250ZXh0VHlwZVhTTCI+VGVtcGxhdGVDb250ZXh0VHlwZVhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xfQVRUUiI+WFNMX0FUVFI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMX0FUVFI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMX05FVyI+WFNMX05FVzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xfTkVXPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTF9UQUciPlhTTF9UQUc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMX1RBRzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVGVtcGxhdGVDb250ZXh0VHlwZVhTTCI+VGVtcGxhdGVDb250ZXh0VHlwZVhTTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlRlbXBsYXRlQ29udGV4dFR5cGVYU0w8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2M3MzM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0w8L3N0cm9uZz4KLWV4dGVuZHMgU2ltcGxlVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wiPlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0w8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmUiPnJlc29sdmU8L2E+KFRlbXBsYXRlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1ZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wiPlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0w8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc29sdmUiPnJlc29sdmU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnJlc29sdmU8L3N0cm9uZz4oVGVtcGxhdGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuWFNMVGVtcGxhdGVzUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlhTTFRlbXBsYXRlc1BhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY1ZGZmNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuWFNMVGVtcGxhdGVzUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xUZW1wbGF0ZXNQYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVGVtcGxhdGVzUGFnZTwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdFRlbXBsYXRlc1BhZ2U8L3ByZT5UaGUgWFNMIFRlbXBsYXRlcyBQYWdlIGlzIHVzZWQgYnkgdGhlIFRlbXBsYXRlc1ZpZXdlciB0byBkaXNwbGF5IGF2YWlsYWJsZQotIFhTTCBUZW1wbGF0ZXMgZm9yIHVzZSB3aXRoaW4gYSBYU0wgU3RydWN0dXJlZCBUZXh0IEVkaXRvci4gSXQgaXMgcHJvdmlkZWQgYXMKLSBhbiBleGFtcGxlIG9uIGhvdyBvdGhlciBTU0UgZWRpdG9ycyBjYW4gY29udHJpYnV0ZSB0aGVpciB0ZW1wbGF0ZXMgdG8gdGhlCi0gcGFnZS48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFRlbXBsYXRlc1BhZ2UiPlhTTFRlbXBsYXRlc1BhZ2U8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEVkaXRvciB4c2xUZXh0RWRpdG9yKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmdbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZXh0VHlwZUlkcyI+Z2V0Q29udGV4dFR5cGVJZHM8L2E+KElEb2N1bWVudCBkb2N1bWVudAotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZXh0VHlwZVJlZ2lzdHJ5Ij5nZXRDb250ZXh0VHlwZVJlZ2lzdHJ5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJlZmVyZW5jZVBhZ2VJZCI+Z2V0UHJlZmVyZW5jZVBhZ2VJZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJUHJlZmVyZW5jZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRlbXBsYXRlUHJlZmVyZW5jZVN0b3JlIj5nZXRUZW1wbGF0ZVByZWZlcmVuY2VTdG9yZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBUZW1wbGF0ZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRlbXBsYXRlU3RvcmUiPmdldFRlbXBsYXRlU3RvcmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnNlcnRUZW1wbGF0ZSI+aW5zZXJ0VGVtcGxhdGU8L2E+KFRlbXBsYXRlIHRlbXBsYXRlCi0gICAgICAgICAsCi0gICAgICBJRG9jdW1lbnQgZG9jdW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNWYWxpZFRlbXBsYXRlIj5pc1ZhbGlkVGVtcGxhdGU8L2E+KElEb2N1bWVudCBkb2N1bWVudAotICAgICAgICAgLAotICAgICAgVGVtcGxhdGUgdGVtcGxhdGUKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQKLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVGVtcGxhdGVzUGFnZSI+WFNMVGVtcGxhdGVzUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFRlbXBsYXRlc1BhZ2U8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMRWRpdG9yIHhzbFRleHRFZGl0b3IpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZXh0VHlwZUlkcyI+Z2V0Q29udGV4dFR5cGVJZHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZ1tdIDxzdHJvbmc+Z2V0Q29udGV4dFR5cGVJZHM8L3N0cm9uZz4oSURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZ1tdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZXh0VHlwZVJlZ2lzdHJ5Ij5nZXRDb250ZXh0VHlwZVJlZ2lzdHJ5PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbnRleHRUeXBlUmVnaXN0cnkgPHN0cm9uZz5nZXRDb250ZXh0VHlwZVJlZ2lzdHJ5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJlZmVyZW5jZVBhZ2VJZCI+Z2V0UHJlZmVyZW5jZVBhZ2VJZDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJlZmVyZW5jZVBhZ2VJZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRlbXBsYXRlUHJlZmVyZW5jZVN0b3JlIj5nZXRUZW1wbGF0ZVByZWZlcmVuY2VTdG9yZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJUHJlZmVyZW5jZVN0b3JlIDxzdHJvbmc+Z2V0VGVtcGxhdGVQcmVmZXJlbmNlU3RvcmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JUHJlZmVyZW5jZVN0b3JlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZW1wbGF0ZVN0b3JlIj5nZXRUZW1wbGF0ZVN0b3JlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFRlbXBsYXRlU3RvcmUgPHN0cm9uZz5nZXRUZW1wbGF0ZVN0b3JlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGVtcGxhdGVTdG9yZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5zZXJ0VGVtcGxhdGUiPmluc2VydFRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5pbnNlcnRUZW1wbGF0ZTwvc3Ryb25nPihUZW1wbGF0ZSB0ZW1wbGF0ZQotICAgICAgICAgLAotICAgICAgSURvY3VtZW50IGRvY3VtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZW1wbGF0ZTwvY29kZT48L3A+PHA+PGNvZGU+ZG9jdW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzVmFsaWRUZW1wbGF0ZSI+aXNWYWxpZFRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5pc1ZhbGlkVGVtcGxhdGU8L3N0cm9uZz4oSURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBUZW1wbGF0ZSB0ZW1wbGF0ZQotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jdW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPnRlbXBsYXRlPC9jb2RlPjwvcD48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxwPjxjb2RlPmxlbmd0aDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3MzFiOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMUGx1Z2luSW1hZ2VIZWxwZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xQbHVnaW5JbWFnZUhlbHBlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+SGVscGVyIGNsYXNzIHRvIGhhbmRsZSBpbWFnZXMgcHJvdmlkZWQgYnkgdGhpcyBwbHVnLWluLgotIAotIE5PVEU6IEZvciBpbnRlcm5hbCB1c2Ugb25seS4gRm9yIGltYWdlcyB1c2VkIGV4dGVybmFsbHksIHBsZWFzZSB1c2UgdGhlCi0gU2hhcmVkKioqSW1hZ2VIZWxwZXIgY2xhc3MgaW5zdGVhZC48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFBsdWdpbkltYWdlSGVscGVyIj5YU0xQbHVnaW5JbWFnZUhlbHBlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT4oamF2YS5sYW5nLlN0cmluZyByZXNvdXJjZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBmcm9tIHRoZSBpbWFnZSByZWdpc3RyeS4KLSBJZiB0aGUgaW1hZ2UgY2Fubm90IGJlIHJldHJpZXZlZCwgYXR0ZW1wdCB0byBmaW5kIGFuZCBsb2FkIHRoZSBpbWFnZSBhdAotIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgaW4gcmVzb3VyY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlRGVzY3JpcHRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbWFnZURlc2NyaXB0b3IiPmdldEltYWdlRGVzY3JpcHRvcjwvYT4oamF2YS5sYW5nLlN0cmluZyByZXNvdXJjZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIGZyb20gdGhlIGltYWdlCi0gZGVzY3JpcHRvciByZWdpc3RyeS4gSWYgdGhlIGltYWdlIGRlc2NyaXB0b3IgY2Fubm90IGJlIHJldHJpZXZlZCwKLSBhdHRlbXB0IHRvIGZpbmQgYW5kIGxvYWQgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZAotIGluIHJlc291cmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldHMgdGhlIGluc3RhbmNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFBsdWdpbkltYWdlSGVscGVyIj5YU0xQbHVnaW5JbWFnZUhlbHBlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFBsdWdpbkltYWdlSGVscGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJbWFnZSA8c3Ryb25nPmdldEltYWdlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVzb3VyY2UpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBmcm9tIHRoZSBpbWFnZSByZWdpc3RyeS4KLSBJZiB0aGUgaW1hZ2UgY2Fubm90IGJlIHJldHJpZXZlZCwgYXR0ZW1wdCB0byBmaW5kIGFuZCBsb2FkIHRoZSBpbWFnZSBhdAotIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgaW4gcmVzb3VyY2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXNvdXJjZTwvY29kZT4gLSB0aGUgaW1hZ2UgdG8gcmV0cmlldmU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPiAtIEltYWdlIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2Ugb3IgbnVsbCBpZiBvbmUgY291bGQgICAgICAgICAgbm90IGJlIGZvdW5kPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlRGVzY3JpcHRvciA8c3Ryb25nPmdldEltYWdlRGVzY3JpcHRvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlc291cmNlKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBmcm9tIHRoZSBpbWFnZQotIGRlc2NyaXB0b3IgcmVnaXN0cnkuIElmIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGNhbm5vdCBiZSByZXRyaWV2ZWQsCi0gYXR0ZW1wdCB0byBmaW5kIGFuZCBsb2FkIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQKLSBpbiByZXNvdXJjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlc291cmNlPC9jb2RlPiAtIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHRvIHJldHJpZXZlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZURlc2NyaXB0b3I8L2NvZGU+IC0gSW1hZ2VEZXNjcmlwdG9yIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGFzc29jYXRlZCB3aXRoIHJlc291cmNlIG9yICAgICAgICAgIHRoZSBkZWZhdWx0ICJtaXNzaW5nIiBpbWFnZSBkZXNjcmlwdG9yIGlmIG9uZSBjb3VsZCBub3QgYmUgICAgICAgICAgZm91bmQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlciA8c3Ryb25nPmdldEluc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldHMgdGhlIGluc3RhbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyPC9jb2RlPiAtIFJldHVybnMgYSBYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5M2JjYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFBsdWdpbkltYWdlczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFBsdWdpbkltYWdlczwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QnVuZGxlIG9mIG1vc3QgaW1hZ2VzIHVzZWQgYnkgdGhlIFhTTCBQbHVnaW5zPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19FTE1fRlVOQ1RJT04iPklNR19FTE1fRlVOQ1RJT048L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19FTE1fSU1QT1JUX0lOQ0xVREUiPklNR19FTE1fSU1QT1JUX0lOQ0xVREU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19FTE1fU1RZTEVTSEVUIj5JTUdfRUxNX1NUWUxFU0hFVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX0VMTV9URU1QTEFURSI+SU1HX0VMTV9URU1QTEFURTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX0VMTV9URU1QTEFURV9OQU1FIj5JTUdfRUxNX1RFTVBMQVRFX05BTUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19FTE1fVkFSSUFCTEUiPklNR19FTE1fVkFSSUFCTEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19NT0RFIj5JTUdfTU9ERTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBYU0wgbW9kZSBJbWFnZSB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfT1BFUkFUT1IiPklNR19PUEVSQVRPUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX1BSRUZJWCI+SU1HX1BSRUZJWDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBYTUwgUHJlZml4IEltYWdlIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19URU1QTEFURSI+SU1HX1RFTVBMQVRFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIHhzbCB0ZW1wbGF0ZSBpbWFnZSB1c2UgZm9yIENvbnRlbnQgQXNzaXN0YW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX1ZBUklBQkxFUyI+SU1HX1ZBUklBQkxFUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX1hQQVRIX0FYSVMiPklNR19YUEFUSF9BWElTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfWFBBVEhfRlVOQ1RJT04iPklNR19YUEFUSF9GVU5DVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX1hTTF9GSUxFIj5JTUdfWFNMX0ZJTEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGF0aCB0byB0aGUgWFNMIEZpbGUgaW1hZ2UgdXNlIGZvciBDb250ZW50IEFzc2lzdGFuY2UuPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFBsdWdpbkltYWdlcyI+WFNMUGx1Z2luSW1hZ2VzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19FTE1fRlVOQ1RJT04iPklNR19FTE1fRlVOQ1RJT048L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX0VMTV9GVU5DVElPTjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfRUxNX0lNUE9SVF9JTkNMVURFIj5JTUdfRUxNX0lNUE9SVF9JTkNMVURFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19FTE1fSU1QT1JUX0lOQ0xVREU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX0VMTV9TVFlMRVNIRVQiPklNR19FTE1fU1RZTEVTSEVUPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19FTE1fU1RZTEVTSEVUPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19FTE1fVEVNUExBVEUiPklNR19FTE1fVEVNUExBVEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX0VMTV9URU1QTEFURTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfRUxNX1RFTVBMQVRFX05BTUUiPklNR19FTE1fVEVNUExBVEVfTkFNRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfRUxNX1RFTVBMQVRFX05BTUU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX0VMTV9WQVJJQUJMRSI+SU1HX0VMTV9WQVJJQUJMRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfRUxNX1ZBUklBQkxFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19NT0RFIj5JTUdfTU9ERTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfTU9ERTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGF0aCB0byB0aGUgWFNMIG1vZGUgSW1hZ2UgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19PUEVSQVRPUiI+SU1HX09QRVJBVE9SPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19PUEVSQVRPUjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfUFJFRklYIj5JTUdfUFJFRklYPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19QUkVGSVg8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhdGggdG8gdGhlIFhNTCBQcmVmaXggSW1hZ2UgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19URU1QTEFURSI+SU1HX1RFTVBMQVRFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19URU1QTEFURTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGF0aCB0byB0aGUgeHNsIHRlbXBsYXRlIGltYWdlIHVzZSBmb3IgQ29udGVudCBBc3Npc3RhbmNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX1ZBUklBQkxFUyI+SU1HX1ZBUklBQkxFUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfVkFSSUFCTEVTPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19YUEFUSF9BWElTIj5JTUdfWFBBVEhfQVhJUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfWFBBVEhfQVhJUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfWFBBVEhfRlVOQ1RJT04iPklNR19YUEFUSF9GVU5DVElPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfWFBBVEhfRlVOQ1RJT048L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX1hTTF9GSUxFIj5JTUdfWFNMX0ZJTEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX1hTTF9GSUxFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHRoZSBYU0wgRmlsZSBpbWFnZSB1c2UgZm9yIENvbnRlbnQgQXNzaXN0YW5jZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xQbHVnaW5JbWFnZXMiPlhTTFBsdWdpbkltYWdlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFBsdWdpbkltYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjZTE0MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTDwvc3Ryb25nPgotZXh0ZW5kcyBEZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yPC9wcmU+VGhpcyBwZXJmb3JtcyB0aGUgYXMteW91LXR5cGUgdmFsaWRhdGlvbiBmb3IgeHNsIGZpbGVzPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wiPkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0w8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJVmFsaWRhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldERlbGVnYXRlVmFsaWRhdG9yIj5nZXREZWxlZ2F0ZVZhbGlkYXRvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZVZhbGlkYXRpb25NZXNzYWdlcyI+dXBkYXRlVmFsaWRhdGlvbk1lc3NhZ2VzPC9hPihqYXZhLnV0aWwuTGlzdCBtZXNzYWdlcwotICAgICAgICAgLAotICAgICAgSURPTURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTCI+RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0w8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3I8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREZWxlZ2F0ZVZhbGlkYXRvciI+Z2V0RGVsZWdhdGVWYWxpZGF0b3I8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVZhbGlkYXRvciA8c3Ryb25nPmdldERlbGVnYXRlVmFsaWRhdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVZhbGlkYXRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlVmFsaWRhdGlvbk1lc3NhZ2VzIj51cGRhdGVWYWxpZGF0aW9uTWVzc2FnZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnVwZGF0ZVZhbGlkYXRpb25NZXNzYWdlczwvc3Ryb25nPihqYXZhLnV0aWwuTGlzdCBtZXNzYWdlcwotICAgICAgICAgLAotICAgICAgSURPTURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lc3NhZ2VzPC9jb2RlPjwvcD48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+cmVwb3J0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dmFsaWRhdGU8L3N0cm9uZz4oSVZhbGlkYXRpb25Db250ZXh0IGhlbHBlcgotICAgICAgICAgLAotICAgICAgSVJlcG9ydGVyIHJlcG9ydGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5oZWxwZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnJlcG9ydGVyPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvbkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xFcnJvckxpc3RlbmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTEVycm9yTGlzdGVuZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFjMGEyNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTEVycm9yTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xFcnJvckxpc3RlbmVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMRXJyb3JMaXN0ZW5lcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+VGhpcyBjbGFzcyBsaXN0ZW5zIGZvciBFcnJvcnMgdG9zc2VkIGJ5IGEgWFNMIFByb2Nlc3Nvci48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTEVycm9yTGlzdGVuZXIiPlhTTEVycm9yTGlzdGVuZXI8L2E+PC9zdHJvbmc+KGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlciBsb2dnZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcnJvciI+ZXJyb3I8L2E+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mYXRhbEVycm9yIj5mYXRhbEVycm9yPC9hPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfd2FybmluZyI+d2FybmluZzwvYT4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTEVycm9yTGlzdGVuZXIiPlhTTEVycm9yTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xFcnJvckxpc3RlbmVyPC9zdHJvbmc+KGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlciBsb2dnZXIpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YWRvYzwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2Vycm9yIj5lcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZXJyb3I8L3N0cm9uZz4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5leGNlcHRpb248L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mYXRhbEVycm9yIj5mYXRhbEVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5mYXRhbEVycm9yPC9zdHJvbmc+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXhjZXB0aW9uPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfd2FybmluZyI+d2FybmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+d2FybmluZzwvc3Ryb25nPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xNYXJrdXBWYWxpZGF0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMTWFya3VwVmFsaWRhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYjRjZTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xNYXJrdXBWYWxpZGF0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xNYXJrdXBWYWxpZGF0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xNYXJrdXBWYWxpZGF0b3I8L3N0cm9uZz4KLWV4dGVuZHMgTWFya3VwVmFsaWRhdG9yPC9wcmU+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xNYXJrdXBWYWxpZGF0b3IiPlhTTE1hcmt1cFZhbGlkYXRvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2xlYW51cCI+Y2xlYW51cDwvYT4oSVJlcG9ydGVyIHJlcG9ydGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25uZWN0Ij5jb25uZWN0PC9hPihJRG9jdW1lbnQgZG9jdW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc2Nvbm5lY3QiPmRpc2Nvbm5lY3Q8L2E+KElEb2N1bWVudCBkb2N1bWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihJUmVnaW9uIGRpcnR5UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMTWFya3VwVmFsaWRhdG9yIj5YU0xNYXJrdXBWYWxpZGF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xNYXJrdXBWYWxpZGF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2xlYW51cCI+Y2xlYW51cDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2xlYW51cDwvc3Ryb25nPihJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXBvcnRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29ubmVjdCI+Y29ubmVjdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y29ubmVjdDwvc3Ryb25nPihJRG9jdW1lbnQgZG9jdW1lbnQpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzY29ubmVjdCI+ZGlzY29ubmVjdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzY29ubmVjdDwvc3Ryb25nPihJRG9jdW1lbnQgZG9jdW1lbnQpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz52YWxpZGF0ZTwvc3Ryb25nPihJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmhlbHBlcjwvY29kZT48L3A+PHA+PGNvZGU+cmVwb3J0ZXI8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5WYWxpZGF0aW9uRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KElSZWdpb24gZGlydHlSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRpcnR5UmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5oZWxwZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnJlcG9ydGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPnJlcG9ydGVyPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0Lkxpc3RXb3JrYmVuY2hBZGFwdGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0Lkxpc3RXb3JrYmVuY2hBZGFwdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNzA4YzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5MaXN0V29ya2JlbmNoQWRhcHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQ8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIExpc3RXb3JrYmVuY2hBZGFwdGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TGlzdFdvcmtiZW5jaEFkYXB0ZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9MaXN0V29ya2JlbmNoQWRhcHRlciI+TGlzdFdvcmtiZW5jaEFkYXB0ZXI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5MaXN0IGxpc3QKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgaW1nUGF0aCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2hpbGRyZW4iPmdldENoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlRGVzY3JpcHRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbWFnZURlc2NyaXB0b3IiPmdldEltYWdlRGVzY3JpcHRvcjwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TGFiZWwiPmdldExhYmVsPC9hPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9MaXN0V29ya2JlbmNoQWRhcHRlciI+TGlzdFdvcmtiZW5jaEFkYXB0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5MaXN0V29ya2JlbmNoQWRhcHRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuTGlzdCBsaXN0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGltZ1BhdGgpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0Q2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbWFnZURlc2NyaXB0b3IiPmdldEltYWdlRGVzY3JpcHRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJbWFnZURlc2NyaXB0b3IgPHN0cm9uZz5nZXRJbWFnZURlc2NyaXB0b3I8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlRGVzY3JpcHRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGFiZWwiPmdldExhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRMYWJlbDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm88L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Z2V0UGFyZW50PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuU3R5bGVzaGVldE1vZGVsVmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5TdHlsZXNoZWV0TW9kZWxWaWV3Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MGM0MjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5TdHlsZXNoZWV0TW9kZWxWaWV3Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQ8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3R5bGVzaGVldE1vZGVsVmlldzwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0eWxlc2hlZXRNb2RlbFZpZXc8L3N0cm9uZz4KLWV4dGVuZHMgVmlld1BhcnQ8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3R5bGVzaGVldE1vZGVsVmlldyI+U3R5bGVzaGVldE1vZGVsVmlldzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlUGFydENvbnRyb2wiPmNyZWF0ZVBhcnRDb250cm9sPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJVmlld1NpdGUgc2l0ZQotICAgICAgICAgLAotICAgICAgSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRGb2N1cyI+c2V0Rm9jdXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdHlsZXNoZWV0TW9kZWxWaWV3Ij5TdHlsZXNoZWV0TW9kZWxWaWV3PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U3R5bGVzaGVldE1vZGVsVmlldzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVQYXJ0Q29udHJvbCI+Y3JlYXRlUGFydENvbnRyb2w8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNyZWF0ZVBhcnRDb250cm9sPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJVmlld1NpdGUgc2l0ZQotICAgICAgICAgLAotICAgICAgSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c2l0ZTwvY29kZT48L3A+PHA+PGNvZGU+bWVtZW50bzwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPlBhcnRJbml0RXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRGb2N1cyI+c2V0Rm9jdXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEZvY3VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTE1vZGVsQWRhcHRlckZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuWFNMTW9kZWxBZGFwdGVyRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjYwYjQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuWFNMTW9kZWxBZGFwdGVyRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQ8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTE1vZGVsQWRhcHRlckZhY3Rvcnk8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMTW9kZWxBZGFwdGVyRmFjdG9yeSI+WFNMTW9kZWxBZGFwdGVyRmFjdG9yeTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QWRhcHRlciI+Z2V0QWRhcHRlcjwvYT4oamF2YS5sYW5nLk9iamVjdCBhZGFwdGFibGVPYmplY3QKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5DbGFzcyBhZGFwdGVyVHlwZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QWRhcHRlckxpc3QiPmdldEFkYXB0ZXJMaXN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMTW9kZWxBZGFwdGVyRmFjdG9yeSI+WFNMTW9kZWxBZGFwdGVyRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTE1vZGVsQWRhcHRlckZhY3Rvcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QWRhcHRlciI+Z2V0QWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Z2V0QWRhcHRlcjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGFkYXB0YWJsZU9iamVjdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLkNsYXNzIGFkYXB0ZXJUeXBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hZGFwdGFibGVPYmplY3Q8L2NvZGU+PC9wPjxwPjxjb2RlPmFkYXB0ZXJUeXBlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QWRhcHRlckxpc3QiPmdldEFkYXB0ZXJMaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5DbGFzc1tdIDxzdHJvbmc+Z2V0QWRhcHRlckxpc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuQ2xhc3NbXTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5YU0xXb3JrYmVuY2hBZGFwdGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTFdvcmtiZW5jaEFkYXB0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJlMDc3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTFdvcmtiZW5jaEFkYXB0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xXb3JrYmVuY2hBZGFwdGVyPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+WFNMV29ya2JlbmNoQWRhcHRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFdvcmtiZW5jaEFkYXB0ZXIiPlhTTFdvcmtiZW5jaEFkYXB0ZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2hpbGRyZW4iPmdldENoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlRGVzY3JpcHRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbWFnZURlc2NyaXB0b3IiPmdldEltYWdlRGVzY3JpcHRvcjwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TGFiZWwiPmdldExhYmVsPC9hPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xXb3JrYmVuY2hBZGFwdGVyIj5YU0xXb3JrYmVuY2hBZGFwdGVyPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+WFNMV29ya2JlbmNoQWRhcHRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0Q2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbWFnZURlc2NyaXB0b3IiPmdldEltYWdlRGVzY3JpcHRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJbWFnZURlc2NyaXB0b3IgPHN0cm9uZz5nZXRJbWFnZURlc2NyaXB0b3I8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlRGVzY3JpcHRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGFiZWwiPmdldExhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRMYWJlbDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm88L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Z2V0UGFyZW50PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QwMmQ3ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZTwvc3Ryb25nPgotZXh0ZW5kcyBXaXphcmRQYWdlPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlIj5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ29udHJvbCI+Y3JlYXRlQ29udHJvbDwvYT4oQ29tcG9zaXRlIGFuY2VzdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VuYWJsZVRlbXBsYXRlcyI+ZW5hYmxlVGVtcGxhdGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGVtcGxhdGVTdHJpbmciPmdldFRlbXBsYXRlU3RyaW5nPC9hPihpbnRbXSBvZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbGlua0NsaWNrZWQiPmxpbmtDbGlja2VkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2F2ZUxhc3RTYXZlZFByZWZlcmVuY2VzIj5zYXZlTGFzdFNhdmVkUHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91cGRhdGVWaWV3ZXJJbnB1dCI+dXBkYXRlVmlld2VySW5wdXQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZSI+TmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb250cm9sIj5jcmVhdGVDb250cm9sPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jcmVhdGVDb250cm9sPC9zdHJvbmc+KENvbXBvc2l0ZSBhbmNlc3Rvcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5jZXN0b3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VuYWJsZVRlbXBsYXRlcyI+ZW5hYmxlVGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQgPHN0cm9uZz5lbmFibGVUZW1wbGF0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRlbXBsYXRlU3RyaW5nIj5nZXRUZW1wbGF0ZVN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VGVtcGxhdGVTdHJpbmc8L3N0cm9uZz4oaW50W10gb2Zmc2V0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9saW5rQ2xpY2tlZCI+bGlua0NsaWNrZWQ8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZCA8c3Ryb25nPmxpbmtDbGlja2VkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zYXZlTGFzdFNhdmVkUHJlZmVyZW5jZXMiPnNhdmVMYXN0U2F2ZWRQcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkIDxzdHJvbmc+c2F2ZUxhc3RTYXZlZFByZWZlcmVuY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91cGRhdGVWaWV3ZXJJbnB1dCI+dXBkYXRlVmlld2VySW5wdXQ8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZCA8c3Ryb25nPnVwZGF0ZVZpZXdlcklucHV0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVXaXphcmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODI2MWE1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld1hTTEZpbGVXaXphcmQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OZXdYU0xGaWxlV2l6YXJkPC9zdHJvbmc+Ci1leHRlbmRzIFdpemFyZDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OZXdYU0xGaWxlV2l6YXJkIj5OZXdYU0xGaWxlV2l6YXJkPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRQYWdlcyI+YWRkUGFnZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJV29ya2JlbmNoIGFXb3JrYmVuY2gKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGFTZWxlY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybUZpbmlzaCI+cGVyZm9ybUZpbmlzaDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX05ld1hTTEZpbGVXaXphcmQiPk5ld1hTTEZpbGVXaXphcmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OZXdYU0xGaWxlV2l6YXJkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFBhZ2VzIj5hZGRQYWdlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkUGFnZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXQiPmluaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXQ8L3N0cm9uZz4oSVdvcmtiZW5jaCBhV29ya2JlbmNoCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBhU2VsZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hV29ya2JlbmNoPC9jb2RlPjwvcD48cD48Y29kZT5hU2VsZWN0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZXJmb3JtRmluaXNoIj5wZXJmb3JtRmluaXNoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5wZXJmb3JtRmluaXNoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWE2MmU4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZFBhZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOZXdYU0xGaWxlV2l6YXJkUGFnZTwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPk5ld1hTTEZpbGVXaXphcmRQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTmV3WFNMRmlsZVdpemFyZFBhZ2UiPk5ld1hTTEZpbGVXaXphcmRQYWdlPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHBhZ2VOYW1lCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGREZWZhdWx0RXh0ZW5zaW9uIj5hZGREZWZhdWx0RXh0ZW5zaW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIGZpbGVuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlUGFnZSI+dmFsaWRhdGVQYWdlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmV3WFNMRmlsZVdpemFyZFBhZ2UiPk5ld1hTTEZpbGVXaXphcmRQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TmV3WFNMRmlsZVdpemFyZFBhZ2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwYWdlTmFtZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkRGVmYXVsdEV4dGVuc2lvbiI+YWRkRGVmYXVsdEV4dGVuc2lvbjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+YWRkRGVmYXVsdEV4dGVuc2lvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGZpbGVuYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlbmFtZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlUGFnZSI+dmFsaWRhdGVQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz52YWxpZGF0ZVBhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLlRlbXBsYXRlQ29udGVudFByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLlRlbXBsYXRlQ29udGVudFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YzRmNTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5UZW1wbGF0ZUNvbnRlbnRQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFRlbXBsYXRlQ29udGVudFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+VGVtcGxhdGVDb250ZW50UHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9UZW1wbGF0ZUNvbnRlbnRQcm92aWRlciI+VGVtcGxhdGVDb250ZW50UHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT4oamF2YS5sYW5nLk9iamVjdCBpbnB1dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnB1dENoYW5nZWQiPmlucHV0Q2hhbmdlZDwvYT4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UZW1wbGF0ZUNvbnRlbnRQcm92aWRlciI+VGVtcGxhdGVDb250ZW50UHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5UZW1wbGF0ZUNvbnRlbnRQcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0RWxlbWVudHM8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBpbnB1dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5wdXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbnB1dENoYW5nZWQ8L3N0cm9uZz4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5vbGRJbnB1dDwvY29kZT48L3A+PHA+PGNvZGU+bmV3SW5wdXQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVMYWJlbFByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLlRlbXBsYXRlTGFiZWxQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzIwZGQ3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVMYWJlbFByb3ZpZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVGVtcGxhdGVMYWJlbFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+VGVtcGxhdGVMYWJlbFByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIExhYmVsUHJvdmlkZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVGVtcGxhdGVMYWJlbFByb3ZpZGVyIj5UZW1wbGF0ZUxhYmVsUHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb2x1bW5JbWFnZSI+Z2V0Q29sdW1uSW1hZ2U8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudAotICAgICAgICAgLAotICAgICAgaW50IGNvbHVtbkluZGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbHVtblRleHQiPmdldENvbHVtblRleHQ8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudAotICAgICAgICAgLAotICAgICAgaW50IGNvbHVtbkluZGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1RlbXBsYXRlTGFiZWxQcm92aWRlciI+VGVtcGxhdGVMYWJlbFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+VGVtcGxhdGVMYWJlbFByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbHVtbkltYWdlIj5nZXRDb2x1bW5JbWFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJbWFnZSA8c3Ryb25nPmdldENvbHVtbkltYWdlPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudAotICAgICAgICAgLAotICAgICAgaW50IGNvbHVtbkluZGV4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48cD48Y29kZT5jb2x1bW5JbmRleDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb2x1bW5UZXh0Ij5nZXRDb2x1bW5UZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRDb2x1bW5UZXh0PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudAotICAgICAgICAgLAotICAgICAgaW50IGNvbHVtbkluZGV4KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48cD48Y29kZT5jb2x1bW5JbmRleDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUyOTdkMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q8L3ByZT5BZG9wdGVycyBjYW4gZXh0ZW5kIHRoaXMgY2xhc3MgdG8gaW1wbGVtZW50IHRoZWlyIG93biBjb250ZW50IGFzc2lzdGFuY2UgZm9yIEVsZW1lbnQKLSBwcm9wb3NhbHMgdXNpbmcgdGhlIFhNTCBDb250ZW50IE1vZGVsLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWwuWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY29udGVudE1vZGVsIj5jb250ZW50TW9kZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIE1hcmt1cFRhZ0luZm9Qcm92aWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2luZm9Qcm92aWRlciI+aW5mb1Byb3ZpZGVyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9GSVJTVF9YU0xBTkNFU1RPUl9OT0RFIj5YUEFUSF9GSVJTVF9YU0xBTkNFU1RPUl9OT0RFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdCI+QWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFRhZ05hbWVQcm9wb3NhbHMiPmFkZFRhZ05hbWVQcm9wb3NhbHM8L2E+KGludCBwb3NpdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGRzIHByb3Bvc2FscyBmb3IgdGhlIFhNTF9UQUdfTkFNRSByZWdpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYmVnaW5zV2l0aCI+YmVnaW5zV2l0aDwvYT4oamF2YS5sYW5nLlN0cmluZyBhU3RyaW5nCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByZWZpeCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVQcm9wb3NhbCI+Y3JlYXRlUHJvcG9zYWw8L2E+KGphdmEubGFuZy5TdHJpbmcgcHJvcG9zZWRUZXh0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGFkZGl0aW9uYWxJbmZvCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0Ci0gICAgICAgICAsCi0gICAgICBJbWFnZSBpbWFnZQotICAgICAgICAgLAotICAgICAgaW50IHN0YXJ0TGVuZ3RoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFkZGl0aW9uYWxJbmZvIj5nZXRBZGRpdGlvbmFsSW5mbzwvYT4oQ01Ob2RlIHBhcmVudE9yT3duZXIKLSAgICAgICAgICwKLSAgICAgIENNTm9kZSBjbW5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIGNtbm9kZSdzIGRvY3VtZW50YXRpb24gdG8gZGlzcGxheSBpbiB0aGUgY29tcGxldGlvbiBwcm9wb3NhbCdzCi0gYWRkaXRpb25hbCBpbmZvLiBJZiBubyBkb2N1bWVudGF0aW9uIGV4aXN0cyBmb3IgY21ub2RlLCB0cnkgZGlzcGxheWluZwotIHBhcmVudE9yT3duZXIncyBkb2N1bWVudGF0aW9uCi0gCi0gU3RyaW5nIGFueSBkb2N1bWVudGF0aW9uIGluZm9ybWF0aW9uIHRvIGRpc3BsYXkgZm9yIGNtbm9kZS4KLSA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEF2YWlsYWJsZUNoaWxkRWxlbWVudERlY2xhcmF0aW9ucyI+Z2V0QXZhaWxhYmxlQ2hpbGRFbGVtZW50RGVjbGFyYXRpb25zPC9hPihvcmcudzNjLmRvbS5FbGVtZW50IHBhcmVudAotICAgICAgICAgLAotICAgICAgaW50IGNoaWxkUG9zaXRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgQ01Ob2RlcyB0aGF0IGFyZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgcGFyZW50IGNvbnRleHQKLSBHaXZlbiB0aGUgZ3JhbW1hciBzaG93biBiZWxvdyBhbmQgYSBzbmlwcGV0IG9mIFhNTCBjb2RlICh3aGVyZSB0aGUgJ3wnCi0gaW5kaWNhdGVkIHRoZSBjdXJzb3IgcG9zaXRpb24pCi0gdGhlIGxpc3Qgd291bGQgcmV0dXJuIGFsbCBvZiB0aGUgZWxlbWVudCBkZWNsYXJhdGlvbnMgdGhhdCBhcmUKLSBwb3RlbnRpYWwgY2hpbGQgZWxlbWVudHMgb2YgRm9vLgotCi0gZ3JhbW1hciA6IEZvbyAtPiAoQSwgQiwgQykKLSBzbmlwcGV0IDogPEZvbz48QT58Ci0gcmVzdWx0IDoge0EsIEIsIEN9PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEF2YWlsYWJsZUNoaWxkcmVuQXRJbmRleCI+Z2V0QXZhaWxhYmxlQ2hpbGRyZW5BdEluZGV4PC9hPihvcmcudzNjLmRvbS5FbGVtZW50IHBhcmVudAotICAgICAgICAgLAotICAgICAgaW50IGluZGV4Ci0gICAgICAgICAsCi0gICAgICBpbnQgdmFsaWRpdHlDaGVja2luZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkl0ZXJhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEF2YWlsYWJsZUNvbnRlbnROb2RlcyI+Z2V0QXZhaWxhYmxlQ29udGVudE5vZGVzPC9hPihJRE9NRG9jdW1lbnQgZG9tRG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgYW5jZXN0b3JOb2RlCi0gICAgICAgICAsCi0gICAgICBpbnQgaW5jbHVkZU9wdGlvbnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENNRWxlbWVudERlY2xhcmF0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENNRWxlbWVudERlY2xhcmF0aW9uIj5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbjwvYT4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDTU5vZGVJbWFnZSI+Z2V0Q01Ob2RlSW1hZ2U8L2E+KENNTm9kZSBjbU5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDdXJzb3JQb3NpdGlvbkZvclByb3Bvc2VkVGV4dCI+Z2V0Q3Vyc29yUG9zaXRpb25Gb3JQcm9wb3NlZFRleHQ8L2E+KGphdmEubGFuZy5TdHJpbmcgcHJvcG9zZWRUZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIHBvc2l0aW9uIHRoZSBjdXJzb3Igc2hvdWxkIGJlIGluIGFmdGVyIHRoZSBwcm9wb3NhbCBpcwotIGFwcGxpZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVsZW1lbnRQb3NpdGlvbiI+Z2V0RWxlbWVudFBvc2l0aW9uPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNoaWxkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBNYXJrdXBUYWdJbmZvUHJvdmlkZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5mb1Byb3ZpZGVyIj5nZXRJbmZvUHJvdmlkZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXRzIHRoZSBpbmZvUHJvdmlkZXIuCi0gCi0gZkluZm9Qcm92aWRlciBhbmQgaWYgZkluZm9Qcm92aWRlciB3YXMgPGNvZGU+bnVsbDwvY29kZT4gY3JlYXRlIGEgbmV3Ci0gaW5zdGFuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZVJlZ2lvbiI+Z2V0TmFtZVJlZ2lvbjwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmbGF0Tm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZXF1aXJlZE5hbWUiPmdldFJlcXVpcmVkTmFtZTwvYT4ob3JnLnczYy5kb20uTm9kZSBvd25lck5vZGUKLSAgICAgICAgICwKLSAgICAgIENNTm9kZSBjbW5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5BdHRyaWJ1dGVSZWdpb24iPmluQXR0cmlidXRlUmVnaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGluIGFuIEF0dHJpYnV0ZSBSZWdpb24gaWYgc28sCi0gcmV0dXJuIHRydWUgb3RoZXJ3aXNlIGZhbHNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNOYW1lUmVnaW9uIj5pc05hbWVSZWdpb248L2E+KElUZXh0UmVnaW9uIHJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVja3MgdG8gdGhlIHNlZSBpZiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgY29ycmVjdCByZWdpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9jb250ZW50TW9kZWwiPmNvbnRlbnRNb2RlbDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsLlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvciA8c3Ryb25nPmNvbnRlbnRNb2RlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9pbmZvUHJvdmlkZXIiPmluZm9Qcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBNYXJrdXBUYWdJbmZvUHJvdmlkZXIgPHN0cm9uZz5pbmZvUHJvdmlkZXI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBBVEhfRklSU1RfWFNMQU5DRVNUT1JfTk9ERSI+WFBBVEhfRklSU1RfWFNMQU5DRVNUT1JfTk9ERTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSF9GSVJTVF9YU0xBTkNFU1RPUl9OT0RFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdCI+QWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRUYWdOYW1lUHJvcG9zYWxzIj5hZGRUYWdOYW1lUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGRUYWdOYW1lUHJvcG9zYWxzPC9zdHJvbmc+KGludCBwb3NpdGlvbik8L2NvZGU+PC9wPjxwPkFkZHMgcHJvcG9zYWxzIGZvciB0aGUgWE1MX1RBR19OQU1FIHJlZ2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBvc2l0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9iZWdpbnNXaXRoIj5iZWdpbnNXaXRoPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5iZWdpbnNXaXRoPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgYVN0cmluZwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcmVmaXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFTdHJpbmc8L2NvZGU+PC9wPjxwPjxjb2RlPnByZWZpeDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVByb3Bvc2FsIj5jcmVhdGVQcm9wb3NhbDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIDxzdHJvbmc+Y3JlYXRlUHJvcG9zYWw8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcm9wb3NlZFRleHQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgYWRkaXRpb25hbEluZm8KLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQKLSAgICAgICAgICwKLSAgICAgIEltYWdlIGltYWdlCi0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnRMZW5ndGgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByb3Bvc2VkVGV4dDwvY29kZT48L3A+PHA+PGNvZGU+YWRkaXRpb25hbEluZm88L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PHA+PGNvZGU+aW1hZ2U8L2NvZGU+PC9wPjxwPjxjb2RlPnN0YXJ0TGVuZ3RoPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QWRkaXRpb25hbEluZm8iPmdldEFkZGl0aW9uYWxJbmZvPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRBZGRpdGlvbmFsSW5mbzwvc3Ryb25nPihDTU5vZGUgcGFyZW50T3JPd25lcgotICAgICAgICAgLAotICAgICAgQ01Ob2RlIGNtbm9kZSk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyBjbW5vZGUncyBkb2N1bWVudGF0aW9uIHRvIGRpc3BsYXkgaW4gdGhlIGNvbXBsZXRpb24gcHJvcG9zYWwncwotIGFkZGl0aW9uYWwgaW5mby4gSWYgbm8gZG9jdW1lbnRhdGlvbiBleGlzdHMgZm9yIGNtbm9kZSwgdHJ5IGRpc3BsYXlpbmcKLSBwYXJlbnRPck93bmVyJ3MgZG9jdW1lbnRhdGlvbgotIAotIFN0cmluZyBhbnkgZG9jdW1lbnRhdGlvbiBpbmZvcm1hdGlvbiB0byBkaXNwbGF5IGZvciBjbW5vZGUuCi0gPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlcmUgaXMgbm90aGluZyB0byBkaXNwbGF5LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50T3JPd25lcjwvY29kZT48L3A+PHA+PGNvZGU+Y21ub2RlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXZhaWxhYmxlQ2hpbGRFbGVtZW50RGVjbGFyYXRpb25zIj5nZXRBdmFpbGFibGVDaGlsZEVsZW1lbnREZWNsYXJhdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRBdmFpbGFibGVDaGlsZEVsZW1lbnREZWNsYXJhdGlvbnM8L3N0cm9uZz4ob3JnLnczYy5kb20uRWxlbWVudCBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGludCBjaGlsZFBvc2l0aW9uKTwvY29kZT48L3A+PHA+UmV0dXJucyBhIGxpc3Qgb2YgQ01Ob2RlcyB0aGF0IGFyZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgcGFyZW50IGNvbnRleHQKLSBHaXZlbiB0aGUgZ3JhbW1hciBzaG93biBiZWxvdyBhbmQgYSBzbmlwcGV0IG9mIFhNTCBjb2RlICh3aGVyZSB0aGUgJ3wnCi0gaW5kaWNhdGVkIHRoZSBjdXJzb3IgcG9zaXRpb24pCi0gdGhlIGxpc3Qgd291bGQgcmV0dXJuIGFsbCBvZiB0aGUgZWxlbWVudCBkZWNsYXJhdGlvbnMgdGhhdCBhcmUKLSBwb3RlbnRpYWwgY2hpbGQgZWxlbWVudHMgb2YgRm9vLgotCi0gZ3JhbW1hciA6IEZvbyAtPiAoQSwgQiwgQykKLSBzbmlwcGV0IDogPEZvbz48QT58Ci0gcmVzdWx0IDoge0EsIEIsIEN9PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmNoaWxkUG9zaXRpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXZhaWxhYmxlQ2hpbGRyZW5BdEluZGV4Ij5nZXRBdmFpbGFibGVDaGlsZHJlbkF0SW5kZXg8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRBdmFpbGFibGVDaGlsZHJlbkF0SW5kZXg8L3N0cm9uZz4ob3JnLnczYy5kb20uRWxlbWVudCBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGludCBpbmRleAotICAgICAgICAgLAotICAgICAgaW50IHZhbGlkaXR5Q2hlY2tpbmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+aW5kZXg8L2NvZGU+PC9wPjxwPjxjb2RlPnZhbGlkaXR5Q2hlY2tpbmc8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXZhaWxhYmxlQ29udGVudE5vZGVzIj5nZXRBdmFpbGFibGVDb250ZW50Tm9kZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkl0ZXJhdG9yIDxzdHJvbmc+Z2V0QXZhaWxhYmxlQ29udGVudE5vZGVzPC9zdHJvbmc+KElET01Eb2N1bWVudCBkb21Eb2N1bWVudAotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBhbmNlc3Rvck5vZGUKLSAgICAgICAgICwKLSAgICAgIGludCBpbmNsdWRlT3B0aW9ucyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9tRG9jdW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmFuY2VzdG9yTm9kZTwvY29kZT48L3A+PHA+PGNvZGU+aW5jbHVkZU9wdGlvbnM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuSXRlcmF0b3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENNRWxlbWVudERlY2xhcmF0aW9uIj5nZXRDTUVsZW1lbnREZWNsYXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDTUVsZW1lbnREZWNsYXJhdGlvbiA8c3Ryb25nPmdldENNRWxlbWVudERlY2xhcmF0aW9uPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNNRWxlbWVudERlY2xhcmF0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDTU5vZGVJbWFnZSI+Z2V0Q01Ob2RlSW1hZ2U8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSW1hZ2UgPHN0cm9uZz5nZXRDTU5vZGVJbWFnZTwvc3Ryb25nPihDTU5vZGUgY21Ob2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jbU5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q3Vyc29yUG9zaXRpb25Gb3JQcm9wb3NlZFRleHQiPmdldEN1cnNvclBvc2l0aW9uRm9yUHJvcG9zZWRUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmdldEN1cnNvclBvc2l0aW9uRm9yUHJvcG9zZWRUZXh0PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcHJvcG9zZWRUZXh0KTwvY29kZT48L3A+PHA+VGhpcyBpcyB0aGUgcG9zaXRpb24gdGhlIGN1cnNvciBzaG91bGQgYmUgaW4gYWZ0ZXIgdGhlIHByb3Bvc2FsIGlzCi0gYXBwbGllZDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJvcG9zZWRUZXh0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBwb3NpdGlvbiB0aGUgY3Vyc29yIHNob3VsZCBiZSBpbiBhZnRlciB0aGUgcHJvcG9zYWwgaXMgICAgICAgICAgYXBwbGllZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbGVtZW50UG9zaXRpb24iPmdldEVsZW1lbnRQb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5nZXRFbGVtZW50UG9zaXRpb248L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjaGlsZCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2hpbGQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluZm9Qcm92aWRlciI+Z2V0SW5mb1Byb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIE1hcmt1cFRhZ0luZm9Qcm92aWRlciA8c3Ryb25nPmdldEluZm9Qcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXRzIHRoZSBpbmZvUHJvdmlkZXIuCi0gCi0gZkluZm9Qcm92aWRlciBhbmQgaWYgZkluZm9Qcm92aWRlciB3YXMgPGNvZGU+bnVsbDwvY29kZT4gY3JlYXRlIGEgbmV3Ci0gaW5zdGFuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPk1hcmt1cFRhZ0luZm9Qcm92aWRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZVJlZ2lvbiI+Z2V0TmFtZVJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJVGV4dFJlZ2lvbiA8c3Ryb25nPmdldE5hbWVSZWdpb248L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmbGF0Tm9kZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmxhdE5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JVGV4dFJlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVxdWlyZWROYW1lIj5nZXRSZXF1aXJlZE5hbWU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFJlcXVpcmVkTmFtZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG93bmVyTm9kZQotICAgICAgICAgLAotICAgICAgQ01Ob2RlIGNtbm9kZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b3duZXJOb2RlPC9jb2RlPjwvcD48cD48Y29kZT5jbW5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbkF0dHJpYnV0ZVJlZ2lvbiI+aW5BdHRyaWJ1dGVSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmluQXR0cmlidXRlUmVnaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBpbiBhbiBBdHRyaWJ1dGUgUmVnaW9uIGlmIHNvLAotIHJldHVybiB0cnVlIG90aGVyd2lzZSBmYWxzZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGluIGF0dHJpYnV0ZSByZWdpb24sIGZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNOYW1lUmVnaW9uIj5pc05hbWVSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmlzTmFtZVJlZ2lvbjwvc3Ryb25nPihJVGV4dFJlZ2lvbiByZWdpb24pPC9jb2RlPjwvcD48cD5DaGVja3MgdG8gdGhlIHNlZSBpZiB0aGUgZWxlbWVudCBpcyBpbiB0aGUgY29ycmVjdCByZWdpb24uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlZDViZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+VGhpcyBpcyBhbiBBYnN0cmFjdCBjbGFzcyB0aGF0IGltcGxlbWVudG9ycyBzaG91bGQgZXh0ZW5kIGZvciBpbXBsZW1lbnRpbmcKLSBYU0wgQ29udGVudCBBc3Npc3QgUHJvY2Vzc29ycy4gICBJdCBwcm92aWRlcyBjb21tb24gY29udmllbmNlIG1ldGhvZHMgZm9yCi0gaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gY29uc3RydWN0IGEgY29udGVudCBhc3Npc3QgcHJvY2Vzc29yLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElUZXh0UmVnaW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY29tcGxldGlvblJlZ2lvbiI+Y29tcGxldGlvblJlZ2lvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY3Vyc29yUG9zaXRpb24iPmN1cnNvclBvc2l0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZXJyb3JNZXNzYWdlIj5lcnJvck1lc3NhZ2U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9tYXRjaFN0cmluZyI+bWF0Y2hTdHJpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9zZFJlZ2lvbiI+c2RSZWdpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElUZXh0Vmlld2VyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfdGV4dFZpZXdlciI+dGV4dFZpZXdlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSURPTU5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF94bWxOb2RlIj54bWxOb2RlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGNoYXJbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxBdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnMiPmdldENvbXBsZXRpb25Qcm9wb3NhbEF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGNoYXJhY3RlcnMgd2hpY2ggd2hlbiBlbnRlcmVkIGJ5IHRoZSB1c2VyIHNob3VsZAotIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciB0aGUgcHJlc2VudGF0aW9uIG9mIHBvc3NpYmxlIGNvbXBsZXRpb25zLgotIAotIHRoZSBhdXRvIGFjdGl2YXRpb24gY2hhcmFjdGVycyBmb3IgY29tcGxldGlvbiBwcm9wb3NhbCBvcgotIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vIGF1dG8gYWN0aXZhdGlvbiBpcyBkZXNpcmVkPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElUZXh0UmVnaW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25SZWdpb24iPmdldENvbXBsZXRpb25SZWdpb248L2E+KGludCBkb2N1bWVudFBvc2l0aW9uCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIGRvbW5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJuIHRoZSByZWdpb24gd2hvc2UgY29udGVudCdzIHJlcXVpcmUgY29tcGxldGlvbi4gVGhpcyBpcyBzb21ldGhpbmcKLSBvZiBhIG1pc25vbWVyIGFzIHNvbWV0aW1lcyB0aGUgdXNlciB3YW50cyB0byBiZSBwcm9tcHRlZCBmb3IgY29udGVudHMgb2YKLSBhIG5vbi1leGlzdGVudCBJVGV4dFJlZ2lvbiwgc3VjaCBhcyBmb3IgZW51bWVyYXRlZCBhdHRyaWJ1dGUgdmFsdWVzCi0gZm9sbG93aW5nIGFuICc9JyBzaWduLgotIAotIENvcGllZCBmcm9tIEFic3RyYWN0Q29udGVudEFzc2lzdCBQcm9jZXNzb3IuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElUZXh0UmVnaW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25SZWdpb24iPmdldENvbXBsZXRpb25SZWdpb248L2E+KGludCBvZmZzZXQKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2RSZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RXJyb3JNZXNzYWdlIj5nZXRFcnJvck1lc3NhZ2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdGlhbGl6ZVByb3Bvc2FsVmFyaWFibGVzIj5pbml0aWFsaXplUHJvcG9zYWxWYXJpYWJsZXM8L2E+KElUZXh0Vmlld2VyIHRleHRWaWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBkb2N1bWVudFBvc2l0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEVycm9yTWVzc2FnZSI+c2V0RXJyb3JNZXNzYWdlPC9hPihqYXZhLmxhbmcuU3RyaW5nIGVycm9yTWVzc2FnZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXRzIHRoZSBlcnJvciBtZXNzYWdlIGZvciB3aHkgY29udGVudCBhc3Npc3RhbmNlIGRpZG4ndCBjb21wbGV0ZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2NvbXBsZXRpb25SZWdpb24iPmNvbXBsZXRpb25SZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb24gPHN0cm9uZz5jb21wbGV0aW9uUmVnaW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2N1cnNvclBvc2l0aW9uIj5jdXJzb3JQb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5jdXJzb3JQb3NpdGlvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9lcnJvck1lc3NhZ2UiPmVycm9yTWVzc2FnZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+ZXJyb3JNZXNzYWdlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX21hdGNoU3RyaW5nIj5tYXRjaFN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+bWF0Y2hTdHJpbmc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfc2RSZWdpb24iPnNkUmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPHN0cm9uZz5zZFJlZ2lvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF90ZXh0Vmlld2VyIj50ZXh0Vmlld2VyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElUZXh0Vmlld2VyIDxzdHJvbmc+dGV4dFZpZXdlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF94bWxOb2RlIj54bWxOb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElET01Ob2RlIDxzdHJvbmc+eG1sTm9kZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yIj5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FsQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxBdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgY2hhcltdIDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2FsQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIGNoYXJhY3RlcnMgd2hpY2ggd2hlbiBlbnRlcmVkIGJ5IHRoZSB1c2VyIHNob3VsZAotIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciB0aGUgcHJlc2VudGF0aW9uIG9mIHBvc3NpYmxlIGNvbXBsZXRpb25zLgotIAotIHRoZSBhdXRvIGFjdGl2YXRpb24gY2hhcmFjdGVycyBmb3IgY29tcGxldGlvbiBwcm9wb3NhbCBvcgotIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vIGF1dG8gYWN0aXZhdGlvbiBpcyBkZXNpcmVkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5jaGFyW108L2NvZGU+IC0gYW4gYXJyYXkgb2YgYWN0aXZhdGlvbiBjaGFyYWN0ZXJzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25SZWdpb24iPmdldENvbXBsZXRpb25SZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb24gPHN0cm9uZz5nZXRDb21wbGV0aW9uUmVnaW9uPC9zdHJvbmc+KGludCBkb2N1bWVudFBvc2l0aW9uCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIGRvbW5vZGUpPC9jb2RlPjwvcD48cD5SZXR1cm4gdGhlIHJlZ2lvbiB3aG9zZSBjb250ZW50J3MgcmVxdWlyZSBjb21wbGV0aW9uLiBUaGlzIGlzIHNvbWV0aGluZwotIG9mIGEgbWlzbm9tZXIgYXMgc29tZXRpbWVzIHRoZSB1c2VyIHdhbnRzIHRvIGJlIHByb21wdGVkIGZvciBjb250ZW50cyBvZgotIGEgbm9uLWV4aXN0ZW50IElUZXh0UmVnaW9uLCBzdWNoIGFzIGZvciBlbnVtZXJhdGVkIGF0dHJpYnV0ZSB2YWx1ZXMKLSBmb2xsb3dpbmcgYW4gJz0nIHNpZ24uCi0gCi0gQ29waWVkIGZyb20gQWJzdHJhY3RDb250ZW50QXNzaXN0IFByb2Nlc3Nvci48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50UG9zaXRpb248L2NvZGU+PC9wPjxwPjxjb2RlPmRvbW5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JVGV4dFJlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblJlZ2lvbiI+Z2V0Q29tcGxldGlvblJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJVGV4dFJlZ2lvbiA8c3Ryb25nPmdldENvbXBsZXRpb25SZWdpb248L3N0cm9uZz4oaW50IG9mZnNldAotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzZFJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48cD48Y29kZT5zZFJlZ2lvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklUZXh0UmVnaW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFcnJvck1lc3NhZ2UiPmdldEVycm9yTWVzc2FnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RXJyb3JNZXNzYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXRpYWxpemVQcm9wb3NhbFZhcmlhYmxlcyI+aW5pdGlhbGl6ZVByb3Bvc2FsVmFyaWFibGVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5pbml0aWFsaXplUHJvcG9zYWxWYXJpYWJsZXM8L3N0cm9uZz4oSVRleHRWaWV3ZXIgdGV4dFZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IGRvY3VtZW50UG9zaXRpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRleHRWaWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPmRvY3VtZW50UG9zaXRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEVycm9yTWVzc2FnZSI+c2V0RXJyb3JNZXNzYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRFcnJvck1lc3NhZ2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBlcnJvck1lc3NhZ2UpPC9jb2RlPjwvcD48cD5TZXRzIHRoZSBlcnJvciBtZXNzYWdlIGZvciB3aHkgY29udGVudCBhc3Npc3RhbmNlIGRpZG4ndCBjb21wbGV0ZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVycm9yTWVzc2FnZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ3OGExYS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkFuIGV4dGVuc2lvbiBvZiB0aGUgWE1MIENvbnRlbnRBc3Npc3RSZXF1ZXN0IGNsYXNzLiAgVGhpcyBwcm92aWRlcwotIGEgYmFzaXMgZm9yIHRoZSBYU0wgY29udGVudCBhc3Npc3RhbmNlLiAgQ2xhc3NlcyBtYXkgc3ViY2xhc3MgdGhpcwotIGNsYXNzIGFuZCBpbXBsZW1lbnQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZG9jdW1lbnRSZWdpb24iPmRvY3VtZW50UmVnaW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfbWFjcm9zIj5tYWNyb3M8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9tYXRjaFN0cmluZyI+bWF0Y2hTdHJpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ub2RlIj5ub2RlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcHJvcG9zYWxzIj5wcm9wb3NhbHM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElUZXh0UmVnaW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcmVnaW9uIj5yZWdpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3JlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbiI+cmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9yZXBsYWNlbWVudExlbmd0aCI+cmVwbGFjZW1lbnRMZW5ndGg8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElUZXh0Vmlld2VyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfdGV4dFZpZXdlciI+dGV4dFZpZXdlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdCI+QWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkTWFjcm8iPmFkZE1hY3JvPC9hPihJQ29tcGxldGlvblByb3Bvc2FsIG5ld1Byb3Bvc2FsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFByb3Bvc2FsIj5hZGRQcm9wb3NhbDwvYT4oSUNvbXBsZXRpb25Qcm9wb3NhbCBuZXdQcm9wb3NhbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgYSBsaXN0IG9mIHByb3Bvc2Fscy4gIEltcGxlbWVudGF0aW9ucyBhcmUgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUKLSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHByb3Bvc2FscyB0aGV5IHdvdWxkIGxpa2UgdG8gcmV0dXJuLiAgIFVzZSBvZiB0aGUgZ2V0QWxsQ29tcGxldGlvblByb3Bvc2FscwotIHNob3VsZCBiZSB1c2VkIHRvIHJldHVybiB0aGUgYWN0dWFsIHByb3Bvc2FscyBmcm9tIHRoaXMgbWV0aG9kLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q3Vyc29yUG9zaXRpb24iPmdldEN1cnNvclBvc2l0aW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBjdXJzb3IgcG9zaXRpb24gd2l0aGluIHRoZSBUZXh0IFZpZXdlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldERvY3VtZW50UmVnaW9uIj5nZXREb2N1bWVudFJlZ2lvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExvY2F0aW9uIj5nZXRMb2NhdGlvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgYmFzZSBsb2NhdGlvbiBmb3IgdGhlIElET01Eb2N1bWVudCBmb3IgdGhpcyBjbGFzcy4gVGhpcyBpcwotIHVzZWQgdG8gcG9wdWxhdGUgYSBuZXcgUGF0aCBjbGFzcyBmb3IgcmV0cmlldmluZyBhbiBJRmlsZSBpbnN0YW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TWFjcm9zIj5nZXRNYWNyb3M8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNYXRjaFN0cmluZyI+Z2V0TWF0Y2hTdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkNvbGxlY3Rpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZXNwYWNlcyI+Z2V0TmFtZXNwYWNlczwvYT4oSURPTUVsZW1lbnQgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROb2RlIj5nZXROb2RlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJvcG9zYWxzIj5nZXRQcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UmVnaW9uIj5nZXRSZWdpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbiI+Z2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZXBsYWNlbWVudExlbmd0aCI+Z2V0UmVwbGFjZW1lbnRMZW5ndGg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0YXJ0T2Zmc2V0Ij5nZXRTdGFydE9mZnNldDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlc2hlZXRNb2RlbCI+Z2V0U3R5bGVzaGVldE1vZGVsPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dEVuZE9mZnNldCI+Z2V0VGV4dEVuZE9mZnNldDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhc05vZGVzIj5oYXNOb2RlczwvYT4ob3JnLnczYy5kb20uTm9kZUxpc3Qgbm9kZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBOb2RlTGlzdCBoYXMgZGF0YTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldERvY3VtZW50UmVnaW9uIj5zZXREb2N1bWVudFJlZ2lvbjwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0TWF0Y2hTdHJpbmciPnNldE1hdGNoU3RyaW5nPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5ld01hdGNoU3RyaW5nKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldE5vZGUiPnNldE5vZGU8L2E+KG9yZy53M2MuZG9tLk5vZGUgbmV3Tm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRSZWdpb24iPnNldFJlZ2lvbjwvYT4oSVRleHRSZWdpb24gbmV3UmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbiI+c2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uPC9hPihpbnQgbmV3UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFJlcGxhY2VtZW50TGVuZ3RoIj5zZXRSZXBsYWNlbWVudExlbmd0aDwvYT4oaW50IG5ld1JlcGxhY2VtZW50TGVuZ3RoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NvcnRQcm9wb3NhbHMiPnNvcnRQcm9wb3NhbHM8L2E+KGphdmEudXRpbC5BcnJheUxpc3QgcHJvcG9zYWxzSW4pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9kb2N1bWVudFJlZ2lvbiI+ZG9jdW1lbnRSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA8c3Ryb25nPmRvY3VtZW50UmVnaW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX21hY3JvcyI+bWFjcm9zPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5tYWNyb3M8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfbWF0Y2hTdHJpbmciPm1hdGNoU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5tYXRjaFN0cmluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ub2RlIj5ub2RlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5ub2RlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3Byb3Bvc2FscyI+cHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5wcm9wb3NhbHM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcmVnaW9uIj5yZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb24gPHN0cm9uZz5yZWdpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uIj5yZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+cmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3JlcGxhY2VtZW50TGVuZ3RoIj5yZXBsYWNlbWVudExlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5yZXBsYWNlbWVudExlbmd0aDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF90ZXh0Vmlld2VyIj50ZXh0Vmlld2VyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElUZXh0Vmlld2VyIDxzdHJvbmc+dGV4dFZpZXdlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdCI+QWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3A+PHA+SGFuZGxlcyBDb250ZW50IEFzc2lzdGFuY2UgcmVxdWVzdHMgZm9yIFNlbGVjdCBBdHRyaWJ1dGVzLiAgVGhpcyBpcyBjYWxsZWQgYW4gaW5zdGFudGlhdGVkCi0gdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBjb21wdXRlUHJvcG9zYWxzIG1ldGhvZCBmcm9tIHRoZSBYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLiAgSXQgd2lsbAotIGNhbGN1bGF0ZSB0aGUgYXZhaWxhYmxlIHByb3Bvc2FscyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoZSBYU0wgc2VsZWN0IGF0dHJpYnV0ZS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRNYWNybyI+YWRkTWFjcm88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmFkZE1hY3JvPC9zdHJvbmc+KElDb21wbGV0aW9uUHJvcG9zYWwgbmV3UHJvcG9zYWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1Byb3Bvc2FsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRQcm9wb3NhbCI+YWRkUHJvcG9zYWw8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmFkZFByb3Bvc2FsPC9zdHJvbmc+KElDb21wbGV0aW9uUHJvcG9zYWwgbmV3UHJvcG9zYWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1Byb3Bvc2FsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGEgbGlzdCBvZiBwcm9wb3NhbHMuICBJbXBsZW1lbnRhdGlvbnMgYXJlIHRvIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlCi0gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBwcm9wb3NhbHMgdGhleSB3b3VsZCBsaWtlIHRvIHJldHVybi4gICBVc2Ugb2YgdGhlIGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMKLSBzaG91bGQgYmUgdXNlZCB0byByZXR1cm4gdGhlIGFjdHVhbCBwcm9wb3NhbHMgZnJvbSB0aGlzIG1ldGhvZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEN1cnNvclBvc2l0aW9uIj5nZXRDdXJzb3JQb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5nZXRDdXJzb3JQb3NpdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGN1cnNvciBwb3NpdGlvbiB3aXRoaW4gdGhlIFRleHQgVmlld2VyPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gQW4gaW50IHZhbHVlIGNvbnRhaW5pbmcgdGhlIGN1cnNvciBwb3NpdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREb2N1bWVudFJlZ2lvbiI+Z2V0RG9jdW1lbnRSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA8c3Ryb25nPmdldERvY3VtZW50UmVnaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TG9jYXRpb24iPmdldExvY2F0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRMb2NhdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGJhc2UgbG9jYXRpb24gZm9yIHRoZSBJRE9NRG9jdW1lbnQgZm9yIHRoaXMgY2xhc3MuIFRoaXMgaXMKLSB1c2VkIHRvIHBvcHVsYXRlIGEgbmV3IFBhdGggY2xhc3MgZm9yIHJldHJpZXZpbmcgYW4gSUZpbGUgaW5zdGFuY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNYWNyb3MiPmdldE1hY3JvczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldE1hY3Jvczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNYXRjaFN0cmluZyI+Z2V0TWF0Y2hTdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE1hdGNoU3RyaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZXNwYWNlcyI+Z2V0TmFtZXNwYWNlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuQ29sbGVjdGlvbiA8c3Ryb25nPmdldE5hbWVzcGFjZXM8L3N0cm9uZz4oSURPTUVsZW1lbnQgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5Db2xsZWN0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROb2RlIj5nZXROb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5nZXROb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uTm9kZSA8c3Ryb25nPmdldFBhcmVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByb3Bvc2FscyI+Z2V0UHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0UHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFJlZ2lvbiI+Z2V0UmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElUZXh0UmVnaW9uIDxzdHJvbmc+Z2V0UmVnaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVRleHRSZWdpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbiI+Z2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVwbGFjZW1lbnRMZW5ndGgiPmdldFJlcGxhY2VtZW50TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmdldFJlcGxhY2VtZW50TGVuZ3RoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdGFydE9mZnNldCI+Z2V0U3RhcnRPZmZzZXQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+Z2V0U3RhcnRPZmZzZXQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlc2hlZXRNb2RlbCI+Z2V0U3R5bGVzaGVldE1vZGVsPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwgPHN0cm9uZz5nZXRTdHlsZXNoZWV0TW9kZWw8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZXh0Ij5nZXRUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUZXh0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGV4dEVuZE9mZnNldCI+Z2V0VGV4dEVuZE9mZnNldDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5nZXRUZXh0RW5kT2Zmc2V0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9oYXNOb2RlcyI+aGFzTm9kZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmhhc05vZGVzPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGVMaXN0IG5vZGVzKTwvY29kZT48L3A+PHA+Q2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBOb2RlTGlzdCBoYXMgZGF0YTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZXM8L2NvZGU+IC0gQSBOb2RlTGlzdCBvYmplY3Q8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBoYXMgZGF0YSwgZmFsc2UgaWYgZW1wdHk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0RG9jdW1lbnRSZWdpb24iPnNldERvY3VtZW50UmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5zZXREb2N1bWVudFJlZ2lvbjwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRNYXRjaFN0cmluZyI+c2V0TWF0Y2hTdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldE1hdGNoU3RyaW5nPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmV3TWF0Y2hTdHJpbmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld01hdGNoU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXROb2RlIj5zZXROb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5zZXROb2RlPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbmV3Tm9kZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3Tm9kZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0UmVnaW9uIj5zZXRSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldFJlZ2lvbjwvc3Ryb25nPihJVGV4dFJlZ2lvbiBuZXdSZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1JlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uIj5zZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbjwvc3Ryb25nPihpbnQgbmV3UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uZXdSZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFJlcGxhY2VtZW50TGVuZ3RoIj5zZXRSZXBsYWNlbWVudExlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c2V0UmVwbGFjZW1lbnRMZW5ndGg8L3N0cm9uZz4oaW50IG5ld1JlcGxhY2VtZW50TGVuZ3RoKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uZXdSZXBsYWNlbWVudExlbmd0aDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc29ydFByb3Bvc2FscyI+c29ydFByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+c29ydFByb3Bvc2Fsczwvc3Ryb25nPihqYXZhLnV0aWwuQXJyYXlMaXN0IHByb3Bvc2Fsc0luKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcm9wb3NhbHNJbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dG9TdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIGphdmEubGFuZy5TdHJpbmc8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MjQ0OTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWw8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWw8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvcHJlPkFkb3B0ZXJzIGNhbiB1c2UgdGhlIGNsYXNzIHRvIGhlbHAgYnVpbGQgYSBjdXN0b20gY29udGVudCBjb21wbGV0aW9uIHByb3Bvc2FsLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0N1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCI+Q3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVwbGFjZW1lbnRPZmZzZXQKLSAgICAgICAgICwKLSAgICAgIGludCByZXBsYWNlbWVudExlbmd0aAotICAgICAgICAgLAotICAgICAgaW50IGN1cnNvclBvc2l0aW9uCi0gICAgICAgICAsCi0gICAgICBJbWFnZSBpbWFnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBkaXNwbGF5U3RyaW5nCi0gICAgICAgICAsCi0gICAgICBJQ29udGV4dEluZm9ybWF0aW9uIGNvbnRleHRJbmZvcm1hdGlvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBhZGRpdGlvbmFsUHJvcG9zYWxJbmZvCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVsZXZhbmNlKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIj5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWw8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIGludCByZXBsYWNlbWVudE9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBpbnQgY3Vyc29yUG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIEltYWdlIGltYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGRpc3BsYXlTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIElDb250ZXh0SW5mb3JtYXRpb24gY29udGV4dEluZm9ybWF0aW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGFkZGl0aW9uYWxQcm9wb3NhbEluZm8KLSAgICAgICAgICwKLSAgICAgIGludCByZWxldmFuY2UKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gdXBkYXRlUmVwbGFjZW1lbnRMZW5ndGhPblZhbGlkYXRlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNBdXRvSW5zZXJ0YWJsZSI+aXNBdXRvSW5zZXJ0YWJsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwiPkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVwbGFjZW1lbnRPZmZzZXQKLSAgICAgICAgICwKLSAgICAgIGludCByZXBsYWNlbWVudExlbmd0aAotICAgICAgICAgLAotICAgICAgaW50IGN1cnNvclBvc2l0aW9uCi0gICAgICAgICAsCi0gICAgICBJbWFnZSBpbWFnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBkaXNwbGF5U3RyaW5nCi0gICAgICAgICAsCi0gICAgICBJQ29udGV4dEluZm9ybWF0aW9uIGNvbnRleHRJbmZvcm1hdGlvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBhZGRpdGlvbmFsUHJvcG9zYWxJbmZvCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVsZXZhbmNlKTwvY29kZT48L3A+PHA+Q29uc3RydWN0b3IgZm9yIHRoZSBDdXN0b20gQ29tcGxldGlvbiBQcm9wb3NhbDwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwiPkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVwbGFjZW1lbnRPZmZzZXQKLSAgICAgICAgICwKLSAgICAgIGludCByZXBsYWNlbWVudExlbmd0aAotICAgICAgICAgLAotICAgICAgaW50IGN1cnNvclBvc2l0aW9uCi0gICAgICAgICAsCi0gICAgICBJbWFnZSBpbWFnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBkaXNwbGF5U3RyaW5nCi0gICAgICAgICAsCi0gICAgICBJQ29udGV4dEluZm9ybWF0aW9uIGNvbnRleHRJbmZvcm1hdGlvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBhZGRpdGlvbmFsUHJvcG9zYWxJbmZvCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVsZXZhbmNlCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHVwZGF0ZVJlcGxhY2VtZW50TGVuZ3RoT25WYWxpZGF0ZSk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2lzQXV0b0luc2VydGFibGUiPmlzQXV0b0luc2VydGFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzQXV0b0luc2VydGFibGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2M3NTJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIElDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+UHJvdmlkZXMgY29udGVudCBhc3Npc3RhbmNlIElDb21wbGV0aW9uUHJvcG9zYWxzLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wbGV0aW9uIFByb3Bvc2FscyBmb3IgYSBDb250ZW50IEFzc2lzdCBSZXF1ZXN0LjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Db21wbGV0aW9uIFByb3Bvc2FscyBmb3IgYSBDb250ZW50IEFzc2lzdCBSZXF1ZXN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT4gLSBBcnJheUxsaXN0PElDb21wbGV0aW9uUHJvcG9zYWw+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSVhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSVhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNjYTdmNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSVhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5JWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvcjwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1heGltdW1WZXJzaW9uIj5nZXRNYXhpbXVtVmVyc2lvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1pbmltdW1WZXJzaW9uIj5nZXRNaW5pbXVtVmVyc2lvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWVzcGFjZXMiPmdldE5hbWVzcGFjZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBcnJheUxpc3Qgb2YgU3RyaW5ncyBmb3IgdGhlIG5hbWVzcGFjZXMgdGhpcyBwcm9jZXNzb3IgYWN0aXZhdGVzIGFnYWluc3QuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNYXhpbXVtVmVyc2lvbiI+Z2V0TWF4aW11bVZlcnNpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE1heGltdW1WZXJzaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TWluaW11bVZlcnNpb24iPmdldE1pbmltdW1WZXJzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRNaW5pbXVtVmVyc2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWVzcGFjZXMiPmdldE5hbWVzcGFjZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldE5hbWVzcGFjZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+QXJyYXlMaXN0IG9mIFN0cmluZ3MgZm9yIHRoZSBuYW1lc3BhY2VzIHRoaXMgcHJvY2Vzc29yIGFjdGl2YXRlcyBhZ2FpbnN0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZTA0MDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOdWxsQ29udGVudEFzc2lzdFJlcXVlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q8L3ByZT5BbiBlbXB0eSBjb250ZW50IGFzc2lzdCByZXF1ZXN0LjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX051bGxDb250ZW50QXNzaXN0UmVxdWVzdCI+TnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3A+PHA+QSBOVUxMIENvbnRlbnRBc3Npc3RSZXF1ZXN0IGhhcyBubyBwcm9wb3NhbHMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiMTViNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYYWxhbkRlYnVnZ2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGFsYW5EZWJ1Z2dlcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdERlYnVnZ2VyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuRGVidWdnZXIiPlhhbGFuRGVidWdnZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFRyYW5zZm9ybWVyIj5hZGRUcmFuc2Zvcm1lcjwvYT4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZWJ1Z2dlclN1c3BlbmRlZCI+ZGVidWdnZXJTdXNwZW5kZWQ8L2E+KEJyZWFrUG9pbnQgYnJlYWtwb2ludCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFyaWFibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPihpbnQgaWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0cyBhIHZhcmlhYmxlIGJ5IElEPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0Q3VycmVudFRyYWNlTGlzdGVuZXIiPnNldEN1cnJlbnRUcmFjZUxpc3RlbmVyPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lciBjdXJyZW50VHJhY2VMaXN0ZW5lcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRUcmFuc2Zvcm1lckZhY3RvcnkiPnNldFRyYW5zZm9ybWVyRmFjdG9yeTwvYT4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnkgZmFjdG9yeSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YYWxhbkRlYnVnZ2VyIj5YYWxhbkRlYnVnZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WGFsYW5EZWJ1Z2dlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRUcmFuc2Zvcm1lciI+YWRkVHJhbnNmb3JtZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZFRyYW5zZm9ybWVyPC9zdHJvbmc+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRyYW5zZm9ybWVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWJ1Z2dlclN1c3BlbmRlZCI+ZGVidWdnZXJTdXNwZW5kZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmRlYnVnZ2VyU3VzcGVuZGVkPC9zdHJvbmc+KEJyZWFrUG9pbnQgYnJlYWtwb2ludCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YnJlYWtwb2ludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFZhcmlhYmxlIDxzdHJvbmc+Z2V0VmFyaWFibGU8L3N0cm9uZz4oaW50IGlkKTwvY29kZT48L3A+PHA+R2V0cyBhIHZhcmlhYmxlIGJ5IElEPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlZhcmlhYmxlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRDdXJyZW50VHJhY2VMaXN0ZW5lciI+c2V0Q3VycmVudFRyYWNlTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZCA8c3Ryb25nPnNldEN1cnJlbnRUcmFjZUxpc3RlbmVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyIGN1cnJlbnRUcmFjZUxpc3RlbmVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jdXJyZW50VHJhY2VMaXN0ZW5lcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0VHJhbnNmb3JtZXJGYWN0b3J5Ij5zZXRUcmFuc2Zvcm1lckZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFRyYW5zZm9ybWVyRmFjdG9yeTwvc3Ryb25nPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeSBmYWN0b3J5KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mYWN0b3J5PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblByaW50VHJhY2VMaXN0ZW5lci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5QcmludFRyYWNlTGlzdGVuZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBmMTczOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblByaW50VHJhY2VMaXN0ZW5lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWGFsYW5QcmludFRyYWNlTGlzdGVuZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YYWxhblByaW50VHJhY2VMaXN0ZW5lcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlByaW50VHJhY2VMaXN0ZW5lcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YYWxhblByaW50VHJhY2VMaXN0ZW5lciI+WGFsYW5QcmludFRyYWNlTGlzdGVuZXI8L2E+PC9zdHJvbmc+KGphdmEuaW8uUHJpbnRXcml0ZXIgcHcpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9fdHJhY2UiPl90cmFjZTwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3RlZCI+c2VsZWN0ZWQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0RW5kIj5zZWxlY3RFbmQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHJhY2UiPnRyYWNlPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RyYWNlRW5kIj50cmFjZUVuZDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YYWxhblByaW50VHJhY2VMaXN0ZW5lciI+WGFsYW5QcmludFRyYWNlTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YYWxhblByaW50VHJhY2VMaXN0ZW5lcjwvc3Ryb25nPihqYXZhLmlvLlByaW50V3JpdGVyIHB3KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfX3RyYWNlIj5fdHJhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPl90cmFjZTwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0ZWQiPnNlbGVjdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZWxlY3RlZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdEVuZCI+c2VsZWN0RW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZWxlY3RFbmQ8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5FbmRTZWxlY3Rpb25FdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90cmFjZSI+dHJhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnRyYWNlPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90cmFjZUVuZCI+dHJhY2VFbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnRyYWNlRW5kPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblJvb3RTdHlsZUZyYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblJvb3RTdHlsZUZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NDM4M2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5Sb290U3R5bGVGcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWGFsYW5Sb290U3R5bGVGcmFtZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhhbGFuUm9vdFN0eWxlRnJhbWU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGFsYW5Sb290U3R5bGVGcmFtZSI+WGFsYW5Sb290U3R5bGVGcmFtZTwvYT48L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldmVudCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFZhcmlhYmxlIj5hZGRWYXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlIHh2YXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEdsb2JhbHMiPmdldEdsb2JhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFyaWFibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPihpbnQgaWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0cyBhIFZhcmlhYmxlIGJ5IElEPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5Sb290U3R5bGVGcmFtZSI+WGFsYW5Sb290U3R5bGVGcmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhhbGFuUm9vdFN0eWxlRnJhbWU8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFZhcmlhYmxlIj5hZGRWYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkVmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlIHh2YXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnh2YXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEdsb2JhbHMiPmdldEdsb2JhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRHbG9iYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhcmlhYmxlIj5nZXRWYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYXJpYWJsZSA8c3Ryb25nPmdldFZhcmlhYmxlPC9zdHJvbmc+KGludCBpZCk8L2NvZGU+PC9wPjxwPkdldHMgYSBWYXJpYWJsZSBieSBJRDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYXJpYWJsZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5TdHlsZUZyYW1lLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAyMzAzOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhhbGFuU3R5bGVGcmFtZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhhbGFuU3R5bGVGcmFtZTwvc3Ryb25nPgotZXh0ZW5kcyBTdHlsZUZyYW1lPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ldmVudCI+ZXZlbnQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuU3R5bGVGcmFtZSI+WGFsYW5TdHlsZUZyYW1lPC9hPjwvc3Ryb25nPihTdHlsZUZyYW1lIHBhcmVudAotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldmVudCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q3VycmVudExpbmUiPmdldEN1cnJlbnRMaW5lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RmlsZW5hbWUiPmdldEZpbGVuYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEdsb2JhbHMiPmdldEdsb2JhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTb3VyY2VDdXJyZW50TGluZSI+Z2V0U291cmNlQ3VycmVudExpbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTb3VyY2VGaWxlbmFtZSI+Z2V0U291cmNlRmlsZW5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFyaWFibGVTdGFjayI+Z2V0VmFyaWFibGVTdGFjazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlZWtFbGVtZW50Ij5wZWVrRWxlbWVudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BvcEVsZW1lbnQiPnBvcEVsZW1lbnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wdXNoRWxlbWVudCI+cHVzaEVsZW1lbnQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2V2ZW50Ij5ldmVudDwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IDxzdHJvbmc+ZXZlbnQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hhbGFuU3R5bGVGcmFtZSI+WGFsYW5TdHlsZUZyYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WGFsYW5TdHlsZUZyYW1lPC9zdHJvbmc+KFN0eWxlRnJhbWUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2ZW50KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q3VycmVudExpbmUiPmdldEN1cnJlbnRMaW5lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldEN1cnJlbnRMaW5lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRGaWxlbmFtZSI+Z2V0RmlsZW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEZpbGVuYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0R2xvYmFscyI+Z2V0R2xvYmFsczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEdsb2JhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFNvdXJjZUN1cnJlbnRMaW5lIj5nZXRTb3VyY2VDdXJyZW50TGluZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRTb3VyY2VDdXJyZW50TGluZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U291cmNlRmlsZW5hbWUiPmdldFNvdXJjZUZpbGVuYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTb3VyY2VGaWxlbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhcmlhYmxlU3RhY2siPmdldFZhcmlhYmxlU3RhY2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRWYXJpYWJsZVN0YWNrPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BlZWtFbGVtZW50Ij5wZWVrRWxlbWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IDxzdHJvbmc+cGVla0VsZW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wb3BFbGVtZW50Ij5wb3BFbGVtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgPHN0cm9uZz5wb3BFbGVtZW50PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHVzaEVsZW1lbnQiPnB1c2hFbGVtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wdXNoRWxlbWVudDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MmU3ZTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYYWxhblRyYWNlTGlzdGVuZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YYWxhblRyYWNlTGlzdGVuZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YYWxhblRyYWNlTGlzdGVuZXIiPlhhbGFuVHJhY2VMaXN0ZW5lcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyIGRlYnVnZ2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXh0ZW5zaW9uIj5leHRlbnNpb248L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRXh0ZW5zaW9uRXZlbnQgZWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXh0ZW5zaW9uRW5kIj5leHRlbnNpb25FbmQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRXh0ZW5zaW9uRXZlbnQgZWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2VuZXJhdGVkIj5nZW5lcmF0ZWQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuR2VuZXJhdGVFdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFyaWFibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPihpbnQgaWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0ZWQiPnNlbGVjdGVkPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdEVuZCI+c2VsZWN0RW5kPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkVuZFNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RyYWNlIj50cmFjZTwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90cmFjZUVuZCI+dHJhY2VFbmQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5UcmFjZUxpc3RlbmVyIj5YYWxhblRyYWNlTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YYWxhblRyYWNlTGlzdGVuZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyIGRlYnVnZ2VyKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXh0ZW5zaW9uIj5leHRlbnNpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmV4dGVuc2lvbjwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkV4dGVuc2lvbkV2ZW50IGVlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXh0ZW5zaW9uRW5kIj5leHRlbnNpb25FbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmV4dGVuc2lvbkVuZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkV4dGVuc2lvbkV2ZW50IGVlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2VuZXJhdGVkIj5nZW5lcmF0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmdlbmVyYXRlZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkdlbmVyYXRlRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYXJpYWJsZSI+Z2V0VmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFyaWFibGUgPHN0cm9uZz5nZXRWYXJpYWJsZTwvc3Ryb25nPihpbnQgaWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlkPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFyaWFibGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdGVkIj5zZWxlY3RlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2VsZWN0ZWQ8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3RFbmQiPnNlbGVjdEVuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2VsZWN0RW5kPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHJhY2UiPnRyYWNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz50cmFjZTwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHJhY2VFbmQiPnRyYWNlRW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz50cmFjZUVuZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzc1M2FkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhhbGFuVmFyaWFibGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YYWxhblZhcmlhYmxlPC9zdHJvbmc+Ci1leHRlbmRzIFZhcmlhYmxlPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuVmFyaWFibGUiPlhhbGFuVmFyaWFibGU8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5TdHlsZUZyYW1lIHhhbGFuU3R5bGVGcmFtZQotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54cGF0aC5WYXJpYWJsZVN0YWNrIHZhclN0YWNrCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHNjb3BlCi0gICAgICAgICAsCi0gICAgICBpbnQgc2xvdE51bWJlcgotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVZhcmlhYmxlIGVsZW1WYXJpYWJsZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcGFyZVRvIj5jb21wYXJlVG88L2E+KGphdmEubGFuZy5PYmplY3QgYXJnMCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUeXBlIj5nZXRUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5WYXJpYWJsZSI+WGFsYW5WYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhhbGFuVmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUgeGFsYW5TdHlsZUZyYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhwYXRoLlZhcmlhYmxlU3RhY2sgdmFyU3RhY2sKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc2NvcGUKLSAgICAgICAgICwKLSAgICAgIGludCBzbG90TnVtYmVyCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcGFyZVRvIj5jb21wYXJlVG88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Y29tcGFyZVRvPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgYXJnMCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnMDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VHlwZSI+Z2V0VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhbHVlIj5nZXRWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvdG9jLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvdG9jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNmYwYTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL3RvYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+VGFibGUgb2YgQ29udGVudHM8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keT4KLTxoMT5UYWJsZSBvZiBDb250ZW50czwvaDE+Ci1QbGVhc2UgZW50ZXIgeW91ciB0ZXh0IGhlcmUuCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9qZWx0b2h0bWwueHNsIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9qZWx0b2h0bWwueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGFmMDBmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvamVsdG9odG1sLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjMxNDcyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotIC0tPgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKLSAgICAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB4bWxuczpyZWRpcmVjdD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuL3JlZGlyZWN0IgotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzPSJyZWRpcmVjdCI+Ci0gICAgPHhzbDpvdXRwdXQgZW5jb2Rpbmc9IlVURi04IiBtZXRob2Q9Imh0bWwiIGluZGVudD0ibm8iIG9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiLz4KLSAgICAKLSAgICA8IS0tIENyZWF0ZSB0aGUgSFRNTCBzdHJ1Y3R1cmUgLS0+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0gICAJCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLy9qZWxjbGFzcyIvPgotCTwveHNsOnRlbXBsYXRlPgotICAgCi0gICAgPCEtLSBUaGlzIGlzIHRoZSBtYWluIHdvcmsgaG9yc2UgdGhhdCBkb2VzIHRoZSBnZW5lcmFsIGxheW91dCBmb3IgdGhlIGNsYXNzIHBhZ2UgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iamVsY2xhc3MiPgotICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJvdXRwdXRGaWxlIj4KLSAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICA8eHNsOnRleHQ+Lmh0bWw8L3hzbDp0ZXh0PgotICAgICAgPC94c2w6dmFyaWFibGU+Ci0gICAgICA8eHNsOm1lc3NhZ2UgdGVybWluYXRlPSJubyI+Ci0gICAgICAgICA8eHNsOnRleHQ+R2VuZXJhdGluZyBKYXZhRG9jIGZvciA8L3hzbDp0ZXh0PgotICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgPHhzbDp0ZXh0Pi48L3hzbDp0ZXh0PgotICAgICAgPC94c2w6bWVzc2FnZT4KLSAgICAgIDxyZWRpcmVjdDp3cml0ZSBzZWxlY3Q9IiRvdXRwdXRGaWxlIj4KLSAgICAgICA8aHRtbD4KLSAgICAgICAgIDxib2R5PgotICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICA8Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPjwvc3Ryb25nPjwvZm9udD4KLSAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICA8Zm9udCBzaXplPSItMSI+PHN0cm9uZz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHBhY2thZ2UiLz48L3N0cm9uZz48L2ZvbnQ+PGJyLz4KLSAgICAgICAgICAgICAgIENsYXNzIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdHlwZSIvPgotICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICA8aHIvPgotICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImZvcm1hdC1oZWFkZXIiLz4KLSAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2F0dHJpYnV0ZSIvPgotICAgICAgICAgICAgPGhyLz4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZGVzY2VuZGFudDo6ZmllbGRzIj4KLSAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIiBjb2xzPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJmaWVsZHMvZmllbGQiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICA8YnIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImRlc2NlbmRhbnQ6OmNvbnN0cnVjdG9yIj4KLSAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj4KLSAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJkZXNjZW5kYW50Ojpjb25zdHJ1Y3RvciIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZGVzY2VuZGFudDo6bWV0aG9kcyI+Ci0gICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgICAgICAgICAgICA8dHIgYmdjb2xvcj0iI0NDQ0NGRiIgY29scz0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGNvbHNwYW49IjIiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Im1ldGhvZHMvbWV0aG9kIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8aHIvPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJmaWVsZHMiPgotICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImZpZWxkRGV0YWlsIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0ibWV0aG9kcy9jb25zdHJ1Y3RvciI+Ci0gICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29uc3RydWN0b3JEZXRhaWwiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJtZXRob2RzL21ldGhvZCI+Ci0gICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibWV0aG9kc0RldGFpbCIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgIDwvaHRtbD4KLSAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBPdXRwdXQgYW55IGRlc2NyaXB0aW9uIHRoYXQgbWF5IGJlIHRoZXJlIGZvciBjb21tZW50cy4gLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29tbWVudC9kZXNjcmlwdGlvbiI+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDwhLS0gT3V0cHV0IHRoZSB2YXJpb3VzIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNsYXNzIC0tPgotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvbW1lbnQvYXR0cmlidXRlIj4KLSAgICAgICAgIDxwPgotICAgICAgICAgICAgPHhzbDpjaG9vc2U+Ci0gICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGF1dGhvciI+Ci0gICAgICAgICAgICAgICAgICA8c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz48YnIvPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRlc2NyaXB0aW9uIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+IAotICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KLSAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAc2VlIj4KLSAgICAgICAgICAgICAgICAgIDxzdHJvbmc+U2VlIEFsc286PC9zdHJvbmc+PGJyLz4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXNjcmlwdGlvbiIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KLSAgICAgICAgICAgIDwveHNsOmNob29zZT4KLSAgICAgICAgIDwvcD4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLQotCi0gICAgICAgIDwhLS0gQ3JlYXRlIHRoZSBmaWVsZCBzdW1tYXJ5IHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZmllbGQiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgPHRyIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiIHdpZHRoPSIyMCUiPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4KLSAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQHN0YXRpYyA9ICd0cnVlJyI+Ci0gICAgICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IHN0YXRpYyA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iODAlIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpZWxkX3tAbmFtZX0iPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICAgICA8YnIvPgotICAgICAgICAgICAgICAgJiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgCi0gICAgPCEtLSBDcmVhdGUgdGhlIGNvbnN0cnVjdG9ycyByb3dzIC0tPgotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvbnN0cnVjdG9yIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2Nvbl97QG5hbWV9Ij4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3N0cm9uZz4gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4oPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icGFyYW1zIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyYW1zL3BhcmFtIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhcmFtIj4KLSAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZnVsbHR5cGUiLz48eHNsOnRleHQ+IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgIT0gbGFzdCgpIj4KLSAgICAgICAgICwKLSAgICAgIDwveHNsOmlmPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDwhLS0gQ3JlYXRlIHRoZSBtZXRob2Qgc3VtbWFyeSByb3dzIC0tPgotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1ldGhvZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCIgd2lkdGg9IjIwJSI+Ci0gICAgICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAc3RhdGljID0gJ3RydWUnIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gc3RhdGljPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgd2lkdGg9IiI+Ci0gICAgICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNtZXRob2Rfe0BuYW1lfSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4oPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icGFyYW1zIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyYW1zL3BhcmFtIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICAgICAmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsKLSAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXQtaGVhZGVyIj4KLSAgICAgICAgIDxwcmU+Ci08eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4gY2xhc3MgPHN0cm9uZz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHR5cGUiLz48L3N0cm9uZz4KLWV4dGVuZHMgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBzdXBlcmNsYXNzZnVsbHR5cGUiLz4KLSAgICAgICAgIDwvcHJlPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZmllbGREZXRhaWwiPgotICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNvbHM9IjIiPgotICAgICAgICAgPHRyIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjQ0NDQ0ZGIiB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImZpZWxkcy9maWVsZCIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZmllbGRzL2ZpZWxkIiBtb2RlPSJkZXRhaWwiPgotICAgICAgPGgyPgotICAgICAgICAgPGEgbmFtZT0iZmllbGRfe0BuYW1lfSI+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgIDwvYT4KLSAgICAgIDwvaDI+Ci0gICAgICA8cD4KLSAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBzdGF0aWMgPSAndHJ1ZSciPgotICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiBzdGF0aWMgPC94c2w6dGV4dD4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9zdHJvbmc+ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgPC9jb2RlPgotICAgICAgPC9wPgotICAgICAgPHhzbDppZiB0ZXN0PSJjb21tZW50Ij4KLSAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgPC90YWJsZT4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29uc3RydWN0b3JEZXRhaWwiPgotICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNvbHM9IjIiPgotICAgICAgICAgPHRyIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjQ0NDQ0ZGIiB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Im1ldGhvZHMvY29uc3RydWN0b3IiIG1vZGU9ImRldGFpbCI+Ci0gICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1ldGhvZHMvY29uc3RydWN0b3IiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJjb25fe0BuYW1lfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPgotICAgICAgPC9oMj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KLSAgICAgICAgICAgIDxzdHJvbmc+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgIDwvc3Ryb25nPgotICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgPC9jb2RlPgotICAgICAgPC9wPgotICAgICAgPHA+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvcD4KLSAgICAgIDxoci8+Ci0gICAgICAKLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG5hbWU9Im1ldGhvZHNEZXRhaWwiPgotICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNvbHM9IjIiPgotICAgICAgICAgPHRyIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjQ0NDQ0ZGIiB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9ImRldGFpbCI+Ci0gICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1ldGhvZHMvbWV0aG9kIiBtb2RlPSJkZXRhaWwiPgotICAgICAgPGgyPgotICAgICAgICAgPGEgbmFtZT0ibWV0aG9kX3tAbmFtZX0iPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICA8L2E+Ci0gICAgICA8L2gyPgotICAgICAgPHA+Ci0gICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9zdHJvbmc+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KTwveHNsOnRleHQ+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8cD4KLSAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgPC9wPgotICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgotICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iIG1vZGU9ImRldGFpbCIvPgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8eHNsOmlmIHRlc3Q9IkB0eXBlICE9ICd2b2lkJyI+Ci0gICAgICAgICA8aDM+UmV0dXJuczwvaDM+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEByZXR1cm5jb21tZW50KSA+IDAiPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiAtIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJldHVybmNvbW1lbnQiIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4KLSAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPC9wPgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8eHNsOmlmIHRlc3Q9ImV4Y2VwdGlvbnMiPgotICAgICAgICAgPGgzPlRocm93czo8L2gzPgotICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJleGNlcHRpb25zL2V4Y2VwdGlvbiIgbW9kZT0iZGV0YWlsIi8+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDxoci8+Ci0gICAgICAKLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwYXJhbSIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDxwPgotICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aChAY29tbWVudCkgPiAwIj4KLSAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gLSA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBjb21tZW50IiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgIDwvcD4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJleGNlcHRpb24iIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8cD4KLSAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEBjb21tZW50KSA+IDAiPgotICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiAtIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvbW1lbnQiIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgPC9jb2RlPgotICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgICAgIAotPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2plbHRvdG9jLnhzbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvamVsdG90b2MueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGY1MDgyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvamVsdG90b2MueHNsCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDIzMTQ3MiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgIHhtbG5zOnNldD0iaHR0cDovL2V4c2x0Lm9yZy9zZXRzIgotICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbiIKLSAgICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0ic2V0IHhhbGFuIgotPgotICAgPHhzbDpwYXJhbSBuYW1lPSJzZGtuYW1lIj5Tb21lIE5hbWU8L3hzbDpwYXJhbT4KLSAgIDx4c2w6cGFyYW0gbmFtZT0iZGlyIj5kb2MvaHRtbDwveHNsOnBhcmFtPiAgIAotICAgPHhzbDpvdXRwdXQgaW5kZW50PSJ5ZXMiIGVuY29kaW5nPSJVVEYtOCIgeGFsYW46aW5kZW50LWFtb3VudD0iMyIvPgotICAgPHhzbDprZXkgbmFtZT0iYWxsUGFja2FnZXMiIG1hdGNoPSJqZWxjbGFzcyIgdXNlPSJAcGFja2FnZSIvPgotICAgICAKLSAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9qZWwiPgotICAgICAgPHRvYyBsYWJlbD0ieyRzZGtuYW1lfSI+Ci0gICAgICAgICA8dG9waWMgbGFiZWw9IlJlZmVyZW5jZSI+Ci0gICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0ic2V0OmRpc3RpbmN0KGplbGNsYXNzL0BwYWNrYWdlKSI+Ci0gICAgICAgICAgICAgICA8dG9waWMgbGFiZWw9InsufSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImtleSgnYWxsUGFja2FnZXMnLCAuKSIvPgotICAgICAgICAgICAgICAgPC90b3BpYz4KLSAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgotICAgICAgICAgPC90b3BpYz4KLSAgICAgIDwvdG9jPgotICAgPC94c2w6dGVtcGxhdGU+Ci0gICAKLSAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImplbGNsYXNzIj4KLSAgICAgIDx0b3BpYyBsYWJlbD0ie0BmdWxsdHlwZX0iIGhyZWY9InskZGlyfS97QGZ1bGx0eXBlfS5odG1sIi8+Ci0gICA8L3hzbDp0ZW1wbGF0ZT4KLSAgIAotPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL3NjaGVtYS5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL3NjaGVtYS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMjAyOGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9zY2hlbWEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotSDYuU2NoZW1hSGVhZGVyIHsKLQlmb250LXNpemU6MTZweDsgCi0JZGlzcGxheTppbmxpbmUKLX0KLQotUC5TY2hlbWFDb3B5cmlnaHQgewotCWZvbnQtc2l6ZTogc21hbGxlcjsgCi0JZm9udC1zdHlsZTogbm9ybWFsOwotCWNvbG9yOiAjMzM2Njk5OyAKLQlkaXNwbGF5OmlubGluZTsKLQltYXJnaW4tdG9wOiAzLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDExLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMC4wMDAwMDBwdDsKLX0KLQotUC5TY2hlbWFEdGQgewotCWNvbG9yOiAjODAwMDAwOyAKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAxMC4wMDAwMDBwdDsKLX0KLQotUC5TY2hlbWFEdGRBdHRsaXN0IHsKLQljb2xvcjogIzgwMDAwMDsgCi0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMjAuMDAwMDAwcHQ7Ci19Ci0KLXNwYW4uU2NoZW1hVGFnIHsKLQljb2xvcjogIzAwMDA4MDsKLX0KLQotc3Bhbi5TY2hlbWFDc3RyaW5nIHsKLQljb2xvcjogIzAwODAwMDsKLX0KLQotcHJlLkV4YW1wbGUgewotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci19Ci0KLS5Db25maWdNYXJrdXBFbGVtZW50RGVzYyB7Ci0JY29sb3I6IGJsYWNrOwotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDEwLjAwMDAwMHB0OwotfQotCi0uQ29uZmlnTWFya3VwQXR0bGlzdERlc2MgewotCWNvbG9yOiBibGFjazsKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAzMi4wMDAwMDBwdDsKLX0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2xpYi8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzhmNWRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotamVsZG9jbGV0LmphcgotZG9jY2hlY2suamFyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMmU1MjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMTAgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTUxMjYsIDIxMzg1MwotIyAgICAgCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotcGx1Z2luTmFtZT1YU0wgU0RLIERvY3VtZW50YXRpb24KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Mjc5MTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgIDx0b2MKLSAgICAgICAgICAgIGZpbGU9InRvYy54bWwiCi0gICAgICAgICAgICBwcmltYXJ5PSJ0cnVlIj4KLSAgICAgIDwvdG9jPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3Nkay9kb2N1bWVudGF0aW9uL0FjdGl2YXRvci5qYXZhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3Nkay9kb2N1bWVudGF0aW9uL0FjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODRlNDExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9zZGsvZG9jdW1lbnRhdGlvbi9BY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbiI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ODA2YWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0b2MgbGFiZWw9IlhTTCBUb29scyBTREsgRG9jdW1lbnRhdGlvbiI+Ci0JPHRvcGljIGxhYmVsPSJSZWZlcmVuY2UiPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZSI+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbCI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5Ob2RlTGlzdEltcGwuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuTm9kZUxpc3RJbXBsIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGgyMEhlbHBlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aDIwSGVscGVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGhDb3JlSGVscGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoQ29yZUhlbHBlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlIj4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXMiIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsIj4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuTWVzc2FnZXMuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLk1lc3NhZ2VzIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4uaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4iIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudCI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50LlhJbmNsdWRlVGFzay5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50LlhJbmNsdWRlVGFzayIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRCdWlsZGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0QnVpbGRlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyRGF0YSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xFbGVtZW50RmFjdG9yeS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMRWxlbWVudEZhY3RvcnkiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMTW9kZWxPYmplY3RGYWN0b3J5Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xNb2RlbE9iamVjdEZhY3RvcnkiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbCI+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRGVidWcuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRGVidWciIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5GaWxlVXRpbC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5GaWxlVXRpbCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlN0cnVjdHVyZWREb2N1bWVudFV0aWwuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuU3RydWN0dXJlZERvY3VtZW50VXRpbCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlhNTENvbnRlbnRUeXBlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlhNTENvbnRlbnRUeXBlIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLk1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLk1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvbk1lc3NhZ2UuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvbk1lc3NhZ2UiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uUmVwb3J0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25SZXBvcnQiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcjIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0xWYWxpZGF0aW9uUmVwb3J0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNMVmFsaWRhdGlvblJlcG9ydCIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGUiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlLlhJbmNsdWRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGUuWEluY2x1ZGVyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbCI+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkNhbGxUZW1wbGF0ZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuQ2FsbFRlbXBsYXRlIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuRnVuY3Rpb24iIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkltcG9ydC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW1wb3J0IiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlciIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwiIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVmFyaWFibGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZSIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlJlc29sdmVyRXh0ZW5zaW9uLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbiIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5TdG9wUGFyc2luZ0V4Y2VwdGlvbi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuU3RvcFBhcnNpbmdFeGNlcHRpb24iIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuWFNMVmVyc2lvbkhhbmRsZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlhTTFZlcnNpb25IYW5kbGVyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZyI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWFNMRG9jdW1lbnRMb2FkZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhTTERvY3VtZW50TG9hZGVyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYU0wiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLlhTTE1vZGVsTG9hZGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWFNMTW9kZWxMb2FkZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlciI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhTTFNvdXJjZVBhcnNlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhTTFNvdXJjZVBhcnNlciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnMiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zLlhQYXRoU2VwYXJhdG9yUmVnaW9uLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9ucy5YUGF0aFNlcGFyYXRvclJlZ2lvbiIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucyI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YUGF0aFJlZ2lvbkNvbnRleHQuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFBhdGhSZWdpb25Db250ZXh0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFNMUGFyc2VyUmVnaW9uRmFjdG9yeS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YU0xQYXJzZXJSZWdpb25GYWN0b3J5IiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0Ij4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LklYU0xQYXJ0aXRpb25zLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LklYU0xQYXJ0aXRpb25zIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsIj4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLk1lc3NhZ2VzLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXMiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlByZWZlcmVuY2VJbml0aWFsaXplciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlDb25zdGFudHMuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50cyIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW4iIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdEVERGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dpemFyZEFjdGlvbi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V2l6YXJkQWN0aW9uIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WE1MRmlsZVdpemFyZERlbGVnYXRlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNERmlsZVdpemFyZERlbGVnYXRlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNMRmlsZVdpemFyZERlbGVnYXRlIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdCI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQXR0cmlidXRlQ29udGVudEFzc2lzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFByb2Nlc3NvckZhY3RvcnkuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3NvciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWwuWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWwuWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZi5IcmVmQ29udGVudEFzc2lzdFJlcXVlc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZi5QYXRoQ29tcGFyYXRvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZi5QYXRoQ29tcGFyYXRvciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5BdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlTGFiZWxQcm92aWRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUxhYmVsUHJvdmlkZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlJlZnJlc2hTdHJ1Y3R1cmVKb2IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5SZWZyZXNoU3RydWN0dXJlSm9iIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YTUxOb2RlQWN0aW9uTWFuYWdlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhNTE5vZGVBY3Rpb25NYW5hZ2VyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24iIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljayI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrLlhTTERvdWJsZUNsaWNrU3RyYXRlZ3kuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljay5YU0xEb3VibGVDbGlja1N0cmF0ZWd5IiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5Tb3VyY2VGaWxlSHlwZXJsaW5rLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlNvdXJjZUZpbGVIeXBlcmxpbmsiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xFZGl0b3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMRWRpdG9yIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMSHlwZXJsaW5rRGV0ZWN0b3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMSHlwZXJsaW5rRGV0ZWN0b3IiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5oYW5kbGVycyI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmhhbmRsZXJzLk9wZW5EZWNsYXJhdGlvbkhhbmRsZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5oYW5kbGVycy5PcGVuRGVjbGFyYXRpb25IYW5kbGVyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Db21ib0RhdGEuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Db21ib0RhdGEiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1haW5QcmVmZXJlbmNlUGFnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1haW5QcmVmZXJlbmNlUGFnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJvcGVydHlQcmVmZXJlbmNlUGFnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlByb3BlcnR5UHJlZmVyZW5jZVBhZ2UiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMU3ludGF4Q29sb3JpbmdQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMU3ludGF4Q29sb3JpbmdQYWdlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3QiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5PdmVycmlkZVF1aWNrQXNzaXN0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3QuT3ZlcnJpZGVRdWlja0Fzc2lzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3QuVmFsaWRhdGlvblF1aWNrQXNzaXN0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3QuVmFsaWRhdGlvblF1aWNrQXNzaXN0IiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucmVnaXN0cnkiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTCIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmciIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLklTdHlsZUNvbnN0YW50c1hTTC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLklTdHlsZUNvbnN0YW50c1hTTCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlckZvclhTTCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxUZXh0QXR0cmlidXRlTWFwLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MVGV4dEF0dHJpYnV0ZU1hcCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmciIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmciIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZyIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUZXh0QXR0cmlidXRlTWFwLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGV4dEF0dHJpYnV0ZU1hcCIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcyI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYU0wiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5YU0xUZW1wbGF0ZXNQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlhTTFRlbXBsYXRlc1BhZ2UiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZXMiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTEVycm9yTGlzdGVuZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTEVycm9yTGlzdGVuZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMTWFya3VwVmFsaWRhdG9yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xNYXJrdXBWYWxpZGF0b3IiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0Ij4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5MaXN0V29ya2JlbmNoQWRhcHRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuTGlzdFdvcmtiZW5jaEFkYXB0ZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuU3R5bGVzaGVldE1vZGVsVmlldy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuU3R5bGVzaGVldE1vZGVsVmlldyIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTFdvcmtiZW5jaEFkYXB0ZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTFdvcmtiZW5jaEFkYXB0ZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkUGFnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZFBhZ2UiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVDb250ZW50UHJvdmlkZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLlRlbXBsYXRlQ29udGVudFByb3ZpZGVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLlRlbXBsYXRlTGFiZWxQcm92aWRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVMYWJlbFByb3ZpZGVyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdCI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Lk51bGxDb250ZW50QXNzaXN0UmVxdWVzdCIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5QcmludFRyYWNlTGlzdGVuZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUm9vdFN0eWxlRnJhbWUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblJvb3RTdHlsZUZyYW1lIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUiIC8+Ci0JCTwvdG9waWM+Ci0JPC90b3BpYz4KLQk8dG9waWMgbGFiZWw9IkV4dGVuc2lvbiBQb2ludHMiPgotCQk8dG9waWMgbGFiZWw9IkpBWFAgRGVidWdnZXIiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfZGVidWdnZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5kZWJ1Z2dlciI+Ci0JCQk8L3RvcGljPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9IkpBWFAgTGF1bmNoaW5nIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX2ludm9rZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludm9rZSI+Ci0JCQk8L3RvcGljPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfcHJvY2Vzc29yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcucHJvY2Vzc29yIj4KLQkJCTwvdG9waWM+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3JUeXBlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5wcm9jZXNzb3JUeXBlIj4KLQkJCTwvdG9waWM+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0iWFNMVCBFZGl0b3IiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfdWlfY29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmNvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPgotCQkJPC90b3BpYz4KLQkJPC90b3BpYz4KLQk8L3RvcGljPgotPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vdG9jRXh0ZW5zaW9uLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi90b2NFeHRlbnNpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTg3NDUyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi90b2NFeHRlbnNpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0b2MgbGFiZWw9IkV4dGVuc2lvbiBQb2ludHMuIj4KLSAgIDx0b3BpYyBsYWJlbD0iSkFYUCBEZWJ1Z2dlciI+Ci0gICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfZGVidWdnZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuZGVidWdnZXIiPgotICAgICAgPC90b3BpYz4KLSAgIDwvdG9waWM+Ci0gICA8dG9waWMgbGFiZWw9IkpBWFAgTGF1bmNoaW5nIj4KLSAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19pbnZva2UuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW52b2tlIj4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfcHJvY2Vzc29yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvciI+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX3Byb2Nlc3NvclR5cGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5wcm9jZXNzb3JUeXBlIj4KLSAgICAgIDwvdG9waWM+Ci0gICA8L3RvcGljPgotICAgPHRvcGljIGxhYmVsPSJYU0xUIEVkaXRvciI+Ci0gICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfdWlfY29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5jb250ZW50QXNzaXN0UHJvY2Vzc29yIj4KLSAgICAgIDwvdG9waWM+Ci0gICA8L3RvcGljPgotPC90b2M+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NTRlNC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NTBkZjEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gRGVjIDE2IDE2OjU3OjU3IEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkODU2OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jRnJpIEphbiAwNCAwOTowNDo0MyBFU1QgMjAwOAotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctYnVuZGxlLWNsYXNzcGF0aC1lbnRyaWVzPTAKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MQotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MQotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwM2NiNzYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCi0KLWdlbmVyYXRlLmZlYXR1cmVAb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLnNvdXJjZT1vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMGZkOWMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVhTTCBUb29scyBTREsKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1YU0xUIEVkaXRvciwgdmFsaWRhdG9yLCBsYXVuY2hpbmcgYW5kIGRlYnVnZ2luZyBzdXBwb3J0Ci0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwOCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLFxuXAotRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwpIGFuZCBvdGhlcnMgMjAwOC5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51aylcblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBKZXNwZXIgTW9sbGVyIChOaW5lQ29uc3VsdCAtIGh0dHA6Ly93d3cubmluZWNvbnN1bHQuZGspXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCi1BcHJpbCAxNCwgMjAxMFxuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKLUVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCi10aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAotcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCi0gICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLVByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKLVVwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAotdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAotZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLVxuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAotXG5cCi1UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCi1idXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAotdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCi1vdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKLXRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAotSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKLVxuXAotWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAotWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCi1JbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAotaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAotbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKLWFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKLVxuXAotICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgiUHJvdmlzaW9uaW5nIFByb2Nlc3MiKSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGVcblwKLSAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgiVGFyZ2V0IE1hY2hpbmUiKSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZyxcblwKLSAgICAgICAgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAotICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHlcblwKLSAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS5cblwKLSAgICAgICAzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAotICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoIkluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCIpIGFuZCBzdWNoXG5cCi0gICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lIGluIGFjY29yZGFuY2VcblwKLSAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKLSAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5XG5cCi0gICAgICAgICAgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoXG5cCi0gICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAotICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZFxuXAotcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZmRiZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjEuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgICAgIDxkaXNjb3ZlcnkgbGFiZWw9IldlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBVcGRhdGVzIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLnNvdXJjZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODRjYTMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyI+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkFwcmlsIDE0LCAyMDEwPC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLQotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgotCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQotICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0KLTx1bD4KLSAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLSAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4KLQotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLSAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLSAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLSAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0KLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0gICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLSAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0gICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLSAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotPC91bD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi0KLTxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQotICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCi0gICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bwotICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQotICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+Ci0gICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgotCi08cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCi0gICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKLSAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCi0gICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+Ci0KLTxvbD4KLSAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5Ci0gICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCi0gICAgICAgcHJvZHVjdC48L2xpPgotICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCi0gICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KLSAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCi0gICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAotICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KLSAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAotICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Ci08L29sPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLQotPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Ci08L2JvZHk+Ci08L2h0bWw+Cg==