ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTBiNWQwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmNfc3NlIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0iKm9yZy9lY2xpcHNlL3dzdC94c2wvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94bWwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC92YWxpZGF0aW9uLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3Qvc3NlLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ij4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2FwYWNoZS94ZXJjZXMvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9hcGFjaGUveGFsYW4vKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9hcGFjaGUveG1sLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvYXBhY2hlL3hwYXRoLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNjZjOWMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotc3JjX3hwYXRoCi14cGF0aGdyYW1tYXIKLS5ieWVjeWNsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjMjUyNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvbmFtZT4KLQk8Y29tbWVudD5KYXZhQ0MgTmF0dXJlPC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5zZi5lY2xpcHNlLmphdmFjYy5qYXZhY2NidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+c2YuZWNsaXBzZS5qYXZhY2MuamF2YWNjbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2NiNGVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLSNUdWUgRmViIDEwIDA1OjM3OjUzIEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXByb3RlY3RlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByb3RlY3RlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uSW5jbHVkZVVuY2hlY2tlZEV4Y2VwdGlvbnM9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2NDVmNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIE1hciAxOCAxMTozODowNSBHTVQgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YTliMGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMS4xMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUueGFsYW47YnVuZGxlLXZlcnNpb249IlsyLjcuMSwyLjguMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDEsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDAsMi4wLjApIiwKLSBvcmcuYXBhY2hlLmFudDtidW5kbGUtdmVyc2lvbj0iWzEuNy4wLDIuMC4wKSI7cmVzb2x1dGlvbjo9b3B0aW9uYWwsCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb247YnVuZGxlLXZlcnNpb249IlsxLjEuMTAzLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5vc2dpLnV0aWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtQ2xhc3NQYXRoOiAuCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmU7dXNlczo9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbCxvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyxvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQ7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2Rpbmc7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlcjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9uczt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQ7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlczt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLioiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC4qIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuKiIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjsKLSAgdXNlczo9Im9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwsCi0gICBvcmcueG1sLnNheCwKLSAgIG9yZy54bWwuc2F4LmV4dCwKLSAgIG9yZy54bWwuc2F4LmhlbHBlcnMsCi0gICBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTFkNzE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIAotaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSAKLWF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIAotYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIAotcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi48L3A+Ci0KLQkJCi08aDM+VGhpcmQgUGFydHkgQ29udGVudDwvaDM+Ci08cD5UaGUgQ29udGVudCBpbmNsdWRlcyBpdGVtcyB0aGF0IGhhdmUgYmVlbiBzb3VyY2VkIGZyb20gdGhpcmQgcGFydGllcyBhcyBzZXQgb3V0IGJlbG93LiBJZiB5b3UgCi1kaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIGZvbGxvd2luZyBpcyBwcm92aWRlZCAKLWZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHksIGFuZCB5b3Ugc2hvdWxkIGxvb2sgdG8gdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIGZvciAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZS48L3A+Ci08cD4KLTxzdHJvbmc+WFNMVCBhbmQgWEluY2x1ZGUgU2NoZW1hPC9zdHJvbmc+IDxici8+PGJyLz4KLQotVGhlIGZvbGxvd2luZyBYTUwgU2NoZW1hIGluIHRoZSBwbHVnLWluIGFyZSBiYXNlZCBvbiBXM0MgY29kZSBhdmFpbGFibGUgb24gdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gd2Vic2l0ZQotYW5kIHNoYWxsIGJlIGRlZmluZWQgYXMgdGhlICJXM0MtRGVyaXZlZCBXb3JrIjo8YnIvPjxici8+Ci0KLXhzbHQtc2NoZW1hcy94c2x0LTEuMC54c2QgKGRlcml2ZWQgZnJvbSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMjAwMC8wNHNjaGVtYS1oYWNraW5nL3hzbHQueHNkIj5XM0MgWFNMVCAxLjAgU2NoZW1hPC9hPik8YnIvPgoteHNsdC1zY2hlbWFzL3hzbHQtMi4wLnhzZCAoZGVyaXZlZCBmcm9tIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDIvc2NoZW1hLWZvci14c2x0MjAueHNkIj5XM0MgWFNMVCAyLjAgU2NoZW1hPC9hPik8YnIvPgoteHNsdC1zY2hlbWFzL3hpbmNsdWRlLnhzZCAoY29waWVkIGZyb20gPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveGluY2x1ZGUvIj5YSW5jbHVkZSBTY2hlbWE8L2E+KTxici8+PGJyLz4KLQotWW91ciB1c2Ugb2YgdGhlIFczQy1EZXJpdmVkIFdvcmsgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIFczQyBTb2Z0d2FyZSBMaWNlbnNlLjxici8+IAotQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGNvbnRhaW5lZCBpbiB0aGUgZmlsZSA8YSBocmVmPSJhYm91dF9maWxlcy9XM0NTb2Z0d2FyZUxpY2Vuc2UuaHRtbCI+VzNDU29mdHdhcmVMaWNlbnNlLmh0bWw8L2E+IGFuZCBpcyAKLWFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEiPmh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzE8L2E+LiAKLTwvcD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvYWJvdXRfZmlsZXMvVzNDU29mdHdhcmVMaWNlbnNlLmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9hYm91dF9maWxlcy9XM0NTb2Z0d2FyZUxpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRmZmU1Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9hYm91dF9maWxlcy9XM0NTb2Z0d2FyZUxpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci0gIDx0aXRsZT5XM0MgU29mdHdhcmUgTGljZW5zZTwvdGl0bGU+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii9TdHlsZVNoZWV0cy9iYXNlLmNzcyIgLz4KLSAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLSA8IS0tCi1oMyN2ZXJzaW9uIHsgbWFyZ2luLXRvcDogLTAuOGVtO30gIAotLS0+Ci0KLQotCi0KLQotCi0KLQotCi0gIDwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IHRleHQ9IiMwMDAwMDAiIGJnY29sb3I9IiNGRkZGRkYiPgotPGgxPlczQzxzdXA+rjwvc3VwPiBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0U8L2gxPgotCi08aDMgaWQ9InZlcnNpb24iPjxhCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxIj5odHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxPC9hPjwvaDM+Ci0KLTxwPlRoaXMgd29yayAoYW5kIGluY2x1ZGVkIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgUkVBRE1Fcywgb3Igb3RoZXIKLXJlbGF0ZWQgaXRlbXMpIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nCi1saWNlbnNlLiBCeSBvYnRhaW5pbmcsIHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpCi1hZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcKLXRlcm1zIGFuZCBjb25kaXRpb25zLjwvcD4KLQotPHA+UGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwmbmJzcDtmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKLWZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24KLUFMTCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZwotbW9kaWZpY2F0aW9uczo8L3A+Ci08b2w+Ci0gIDxsaT5UaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlCi0gICAgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuPC9saT4KLSAgPGxpPkFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcwotICAgIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCB0aGUgPGEKLSAgICBocmVmPSJjb3B5cmlnaHQtc29mdHdhcmUtc2hvcnQtbm90aWNlLTIwMDIxMjMxLmh0bWwiPlczQyBTb2Z0d2FyZSBTaG9ydAotICAgIE5vdGljZTwvYT4gc2hvdWxkIGJlIGluY2x1ZGVkIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkKLSAgICB3aXRoaW4gdGhlIGJvZHkgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlLjwvbGk+Ci0gIDxsaT5Ob3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZQotICAgIGNoYW5nZXMgd2VyZSBtYWRlLiAoV2UgcmVjb21tZW5kIHlvdSBwcm92aWRlIFVSSXMgdG8gdGhlIGxvY2F0aW9uIGZyb20KLSAgICB3aGljaCB0aGUgY29kZSBpcyBkZXJpdmVkLik8L2xpPgotPC9vbD4KLQotPHA+VEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMKLU1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QKLUxJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSCi1QVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTiBXSUxMIE5PVCBJTkZSSU5HRQotQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLjwvcD4KLQotPHA+Q09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SCi1ET0NVTUVOVEFUSU9OLjwvcD4KLQotPHA+VGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluCi1hZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbgotcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkCi1kb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLjwvcD4KLQotPHA+PC9wPgotCi08cD5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188L3A+Ci0KLTxwPlRoaXMgZm9ybXVsYXRpb24gb2YgVzNDJ3Mgbm90aWNlIGFuZCBsaWNlbnNlIGJlY2FtZSBhY3RpdmUgb24gRGVjZW1iZXIgMzEKLTIwMDIuIFRoaXMgdmVyc2lvbiByZW1vdmVzIHRoZSBjb3B5cmlnaHQgb3duZXJzaGlwIG5vdGljZSBzdWNoIHRoYXQgdGhpcwotbGljZW5zZSBjYW4gYmUgdXNlZCB3aXRoIG1hdGVyaWFscyBvdGhlciB0aGFuIHRob3NlIG93bmVkIGJ5IHRoZSBXM0MsCi1yZWZsZWN0cyB0aGF0IEVSQ0lNIGlzIG5vdyBhIGhvc3Qgb2YgdGhlIFczQywgaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGlzCi1zcGVjaWZpYyBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlLCBhbmQgcmVtb3ZlcyB0aGUgYW1iaWd1b3VzIGdyYW50IG9mCi0idXNlIi4gT3RoZXJ3aXNlLCB0aGlzIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIDxhCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMCI+cHJldmlvdXMKLXZlcnNpb248L2E+IGFuZCBpcyB3cml0dGVuIHNvIGFzIHRvIHByZXNlcnZlIHRoZSA8YQotaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvbGljZW5zZS1saXN0Lmh0bWwjR1BMQ29tcGF0aWJsZUxpY2Vuc2VzIj5GcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uJ3MgYXNzZXNzbWVudCBvZiBHUEwgY29tcGF0aWJpbGl0eTwvYT4gYW5kIDxhCi1ocmVmPSJodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL1czQy5waHAiPk9TSSdzIGNlcnRpZmljYXRpb248L2E+Ci11bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9kb2NzL2RlZmluaXRpb24ucGhwIj5PcGVuIFNvdXJjZQotRGVmaW5pdGlvbjwvYT4uIFBsZWFzZSBzZWUgb3VyIDxhCi1ocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL0lQUi1GQVEiPkNvcHlyaWdodCBGQVE8L2E+IGZvcgotY29tbW9uIHF1ZXN0aW9ucyBhYm91dCB1c2luZyBtYXRlcmlhbHMgZnJvbSBvdXIgc2l0ZSwgaW5jbHVkaW5nIHNwZWNpZmljCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgcGFja2FnZXMgbGlrZSBsaWJ3d3csIEFtYXlhLCBhbmQgSmlnc2F3LiBPdGhlcgotcXVlc3Rpb25zIGFib3V0IHRoaXMgbm90aWNlIGNhbiBiZSBkaXJlY3RlZCB0byA8YQotaHJlZj0ibWFpbHRvOnNpdGUtcG9saWN5QHczLm9yZyI+c2l0ZS1wb2xpY3lAdzMub3JnPC9hPi48YnIgLz4KLSZuYnNwOzwvcD4KLTxhZGRyZXNzPgotICBKb3NlcGggUmVhZ2xlICZsdDs8YQotICBocmVmPSJtYWlsdG86c2l0ZS1wb2xpY3lAdzMub3JnIj5zaXRlLXBvbGljeUB3My5vcmcmZ3Q7PC9hPgotPC9hZGRyZXNzPgotCi08cD5MYXN0IHJldmlzZWQgJElkOiBXM0NTb2Z0d2FyZUxpY2Vuc2UuaHRtbCx2IDEuMSAyMDA4LzA4LzAyIDEzOjAzOjExIGRzYXRjaHdlbCBFeHAgJDwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzNiNDJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8sXAotICAgICAgICAgICBzcmNfc3NlLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHhzbHQtc2NoZW1hcy8sXAotICAgICAgICAgICAgICAgbGliLyxcCi0gICAgICAgICAgICAgICBiaW4vLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgYWJvdXRfZmlsZXMvCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9saWIvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGM2ZGY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1hbnRsci1ydW50aW1lLTMuMC4xLmphcgotY29tbW9ucy1qeHBhdGgtMS4yLmphcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvbGliL3hpbmNsdWRlLmphciBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL2xpYi94aW5jbHVkZS5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjMzIwM2EuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvbGliL3hpbmNsdWRlLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwN2EyNGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUKLUJ1bmRsZS1OYW1lLjAgPSBYU0wgQ29yZQotQnVuZGxlLVZlbmRvci4wID1FY2xpcHNlLm9yZwotWFNMLkNvbnRlbnRUeXBlLk5hbWU9WFNMIFRlbXBsYXRlCi1ESVRBX0NvbnRlbnRfVHlwZV9FeHRlbnNpb25fRWxlbWVudC5uYW1lPURJVEEKLURvY2Jvb2tfQ29udGVudF9UeXBlX0V4dGVuc2lvbl9FbGVtZW50Lm5hbWU9RG9jYm9vawotWFNMLlZhbGlkYXRvci5OYW1lPVhTTCBWYWxpZGF0b3IKLVhTTC5WYWxpZGF0b3JEZWxlZ2F0ZS5OYW1lPVhTTCBWYWxpZGF0b3IgZGVsCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1wbHVnaW5OYW1lID0gWFNMIENvcmUKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KLVhTTFByb2JsZW0gPSBYU0wgUHJvYmxlbQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYTMwOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQotCTwhLS0gVGVhbSBwcm92aWRlciBpbmZvIC0tPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudGVhbS5jb3JlLmZpbGVUeXBlcyI+Ci0JCTxmaWxlVHlwZXMgdHlwZT0idGV4dCIgZXh0ZW5zaW9uPSJ4c2wiIC8+Ci0JCTxmaWxlVHlwZXMgdHlwZT0idGV4dCIgZXh0ZW5zaW9uPSJ4c2x0IiAvPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZS5jb250ZW50VHlwZXMiPgotCSAgPGNvbnRlbnQtdHlwZQotCSAgICAgICAgYmFzZS10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCSAgICAgICAgZmlsZS1leHRlbnNpb25zPSJkaXRhLGRpdGFtYXAiCi0JICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmNvbnRlbnQtdHlwZS5kaXRhc291cmNlIgotCSAgICAgICAgbmFtZT0iJURJVEFfQ29udGVudF9UeXBlX0V4dGVuc2lvbl9FbGVtZW50Lm5hbWUiCi0JICAgICAgICBwcmlvcml0eT0iaGlnaCI+Ci0JICA8L2NvbnRlbnQtdHlwZT4KLQkgIDxjb250ZW50LXR5cGUKLQkgICAgICAgIGJhc2UtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIKLQkgICAgICAgIGZpbGUtZXh0ZW5zaW9ucz0iZGJrIgotCSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5jb250ZW50LXR5cGUuZG9jYm9va3NvdXJjZSIKLQkgICAgICAgIG5hbWU9IiVEb2Nib29rX0NvbnRlbnRfVHlwZV9FeHRlbnNpb25fRWxlbWVudC5uYW1lIgotCSAgICAgICAgcHJpb3JpdHk9ImhpZ2giPgotCSAgPC9jb250ZW50LXR5cGU+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPCEtLSBUaGUgbWFnaWMgd2hpY2ggZGV0ZWN0cyBYU0xUIDEuMCBvciAyLjAgc3R5bGVzaGVldHMgYW5kIHN1cHBsaWVzIHRoZSBjb3JyZWN0IFhTRCAtLT4JCi0gCTxleHRlbnNpb24KLSAgICAgICAJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIucmVzb2x2ZXJFeHRlbnNpb25zIj4KLSAgICAJPHJlc29sdmVyRXh0ZW5zaW9uCi0gICAgICAgICAgCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuUmVzb2x2ZXJFeHRlbnNpb24iCi0gICAgICAgIAkgIHN0YWdlPSJwcmVub3JtYWxpemF0aW9uIj4KLSAgICAJPC9yZXNvbHZlckV4dGVuc2lvbj4KLQk8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9InByb2JsZW0iCi0gICAgICAgICBuYW1lPSIlWFNMUHJvYmxlbSIKLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5tYXJrZXJzIj4KLQkJPHN1cGVyIHR5cGU9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS52YWxpZGF0aW9uTWFya2VyIi8+Ci0JCTxwZXJzaXN0ZW50IHZhbHVlPSJ0cnVlIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmFudC5jb3JlLmFudFRhc2tzIj4KLSAgICAgIDxhbnRUYXNrCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudC5YSW5jbHVkZVRhc2siCi0gICAgICAgICAgICBoZWFkbGVzcz0idHJ1ZSIKLSAgICAgICAgICAgIGxpYnJhcnk9ImxpYi94aW5jbHVkZS5qYXIiCi0gICAgICAgICAgICBuYW1lPSJ4c2wueGluY2x1ZGUiPgotICAgICAgPC9hbnRUYXNrPgotICAgPC9leHRlbnNpb24+Ci0gICA8IS0tIEV4dHJhIENsYXNzcGF0aCAtLT4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5hbnQuY29yZS5leHRyYUNsYXNzcGF0aEVudHJpZXMiPgotICAgICAgPGV4dHJhQ2xhc3NwYXRoRW50cnkKLSAgICAgICAgICAgIGxpYnJhcnk9ImxpYi94aW5jbHVkZS5qYXIiPgotICAgICAgPC9leHRyYUNsYXNzcGF0aEVudHJ5PgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24gaWQ9InhzbCIgbmFtZT0iJVhTTC5WYWxpZGF0b3IuTmFtZSIgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRvclYyIj4KLSAgICAgIDx2YWxpZGF0b3IKLSAgICAgICAgICAgIGJ1aWxkPSJ0cnVlIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yIgotICAgICAgICAgICAgc291cmNlaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMIgotICAgICAgICAgICAgbWFudWFsPSJ0cnVlIgotICAgICAgICAgICAgbWFya2VySWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5wcm9ibGVtIgotICAgICAgICAgICAgdmVyc2lvbj0iMiI+Ci0gICAgICAgICA8aW5jbHVkZT4KLSAgICAgICAgICAgIDxydWxlcz4KLSAgICAgICAgICAgICAgIDxmaWxlZXh0IGNhc2VTZW5zaXRpdmU9ImZhbHNlIiBleHQ9InhzbCIvPgotIAkJCQk8Y29udGVudFR5cGUgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiLz4KLSAgICAgICAgICAgIDwvcnVsZXM+Ci0gICAgICAgICA8L2luY2x1ZGU+Ci0gICAgICA8L3ZhbGlkYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICAKLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLmRvY3VtZW50Q3JlYXRpb24iCi0JCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuZG9jdW1lbnRmYWN0b3JpZXMiCi0JCW5hbWU9IiVTdHJ1Y3R1cmVkX1hNTF9Eb2N1bWVudF9GYWN0b3J5X0V4dGVuc2lvbi5uYW1lIj4KLQkJPGZhY3RvcnkKLQkJCWNvbnRlbnRUeXBlSWQ9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZpbGVidWZmZXJzLkJhc2ljU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeSIgLz4KLQk8L2V4dGVuc2lvbj4KLSAJPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5tb2RlbEhhbmRsZXIiPgotICAgICAgPG1vZGVsSGFuZGxlcgotICAgICAgICAgICAgZGVmYXVsdD0idHJ1ZSIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvclhTTCIKLSAgICAgICAgICAgIGFzc29jaWF0ZWRDb250ZW50VHlwZUlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5oYW5kbGVyIj4KLSAgICAgIDwvbW9kZWxIYW5kbGVyPgotICAgIDwvZXh0ZW5zaW9uPgotICA8ZXh0ZW5zaW9uCi0gICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuY2F0YWxvZ0NvbnRyaWJ1dGlvbnMiPgotICAgICA8Y2F0YWxvZ0NvbnRyaWJ1dGlvbj4KLSAgICAgICAgPHVyaQotICAgICAgICAgICAgICBpZD0ib3JnLnczYy54aW5jbHVkZSIKLSAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIKLSAgICAgICAgICAgICAgdXJpPSJ4c2x0LXNjaGVtYXMveGluY2x1ZGUueHNkIj4KLSAgICAgICAgPC91cmk+Ci0gICAgIDwvY2F0YWxvZ0NvbnRyaWJ1dGlvbj4KLSAgPC9leHRlbnNpb24+Ci0gIDxleHRlbnNpb24KLSAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcyI+Ci0gICAgIDxpbml0aWFsaXplcgotICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciI+Ci0gICAgIDwvaW5pdGlhbGl6ZXI+Ci0gIDwvZXh0ZW5zaW9uPgkKLSAgIAotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BvbS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGI1ZTgxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhzbDwvZ3JvdXBJZD4KLSAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvYXJ0aWZhY3RJZD4KLSAgIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KLSAgIDx2ZXJzaW9uPjEuMS4xMDAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICA8bmFtZT5YU0xUIENvcmUgUGx1Z2luPC9uYW1lPgotCi0gICA8cGFyZW50PgotICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhzbDwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54c2wtcGFyZW50PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2RldmVsb3BtZW50L2F0aGVuYS9vcmcuZWNsaXBzZS53c3QueHNsLnJlbGVuZzwvcmVsYXRpdmVQYXRoPgotICAgPC9wYXJlbnQ+Ci0KLSAgIDxidWlsZD4KLSAgICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+Ci0gICAgICA8cGx1Z2lucz4KLSAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNzwvdmVyc2lvbj4KLSAgICAgICAgIDwvcGx1Z2luPgotICAgICAgPC9wbHVnaW5zPgotICAgPC9idWlsZD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL1ZhbGlkYXRpb25QcmVmZXJlbmNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9WYWxpZGF0aW9uUHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2ZmJkMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL1ZhbGlkYXRpb25QcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZTsKLQotLyoqCi0gKiBQcmVmZXJlbmNlIGNvbnN0YW50cyBzcGVjaWZpYyB0byB0aGUgWFNMIHZhbGlkYXRvci4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uUHJlZmVyZW5jZXMKLXsKLQkKLQkvKioKLQkgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgcGVyIFhTTCBmaWxlLgotCSAqIDxwPgotCSAqIFZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+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+IGdldEZ1bmN0aW9ucygpIHsKLQkJcmV0dXJuIGZ1bmN0aW9uczsKLQl9Ci0KLQlwdWJsaWMgWFNMRWxlbWVudCBnZXRQYXJlbnRFbCgpIHsKLQkJcmV0dXJuIHBhcmVudEVsOwotCX0KLQotCXB1YmxpYyBTdHlsZXNoZWV0IGdldFN0eWxlc2hlZXQoKSB7Ci0JCXJldHVybiBzdHlsZXNoZWV0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhbGxUZW1wbGF0ZXMoU3RhY2s8Q2FsbFRlbXBsYXRlPiBjYWxsVGVtcGxhdGVzKSB7Ci0JCXRoaXMuY2FsbFRlbXBsYXRlcyA9IGNhbGxUZW1wbGF0ZXM7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRUZW1wbGF0ZShUZW1wbGF0ZSBjdXJyZW50VGVtcGxhdGUpIHsKLQkJdGhpcy5jdXJyZW50VGVtcGxhdGUgPSBjdXJyZW50VGVtcGxhdGU7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEVsZW1lbnRTdGFjayhTdGFjazxFbGVtZW50PiBlbGVtZW50U3RhY2spIHsKLQkJdGhpcy5lbGVtZW50U3RhY2sgPSBlbGVtZW50U3RhY2s7Ci0JfQotCXB1YmxpYyB2b2lkIHNldEZ1bmN0aW9ucyhTdGFjazxGdW5jdGlvbj4gZnVuY3Rpb25zKSB7Ci0JCXRoaXMuZnVuY3Rpb25zID0gZnVuY3Rpb25zOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRQYXJlbnRFbChYU0xFbGVtZW50IHBhcmVudEVsKSB7Ci0JCXRoaXMucGFyZW50RWwgPSBwYXJlbnRFbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdHlsZXNoZWV0KFN0eWxlc2hlZXQgc2YpIHsKLQkJdGhpcy5zdHlsZXNoZWV0ID0gc2Y7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMRWxlbWVudEZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMRWxlbWVudEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5ZmNkZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1hTTEVsZW1lbnRGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuQ2FsbFRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW1wb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0vKioKLSAqIEEgRmFjdG9yeSB0aGF0IGNyZWF0ZXMgWFNMIEVsZW1lbnRzIG9mIHRoZSByZXF1ZXN0ZWQgdHlwZS4KLSAqIEBzaW5jZSAxLjEKLSAqLwotcHVibGljIGNsYXNzIFhTTEVsZW1lbnRGYWN0b3J5IHsKLQotCXByaXZhdGUgU3R5bGVzaGVldFBhcnNlckRhdGEgc3R5bGVzaGVldFBhcnNlckRhdGE7Ci0JcHJpdmF0ZSBFbGVtZW50IGVsZW1lbnQ7Ci0JCi0JcHVibGljIFhTTEVsZW1lbnRGYWN0b3J5KFN0eWxlc2hlZXRQYXJzZXJEYXRhIGRhdGEsIEVsZW1lbnQgZWxlbWVudCkgewotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YSA9IGRhdGE7Ci0JCXRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7Ci0JfQotCQkKLQlwdWJsaWMgWFNMRWxlbWVudCBjcmVhdGVTdHlsZVNoZWV0KCkgewotCQlTdHJpbmcgdmVyc2lvbiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ2ZXJzaW9uIik7IC8vJE5PTi1OTFMtMSQKLQkJc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpLnNldFZlcnNpb24odmVyc2lvbik7Ci0JCXJldHVybiBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCk7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZUluY2x1ZGUoKSB7Ci0JCUluY2x1ZGUgaW5jbHVkZSA9IG5ldyBJbmNsdWRlKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSk7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKS5hZGRJbmNsdWRlKGluY2x1ZGUpOwotCQlyZXR1cm4gaW5jbHVkZTsKLQl9Ci0JCi0JcHVibGljIFhTTEVsZW1lbnQgY3JlYXRlSW1wb3J0KCkgewotCQlJbXBvcnQgaW5jbHVkZSA9IG5ldyBJbXBvcnQoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpLmFkZEltcG9ydChpbmNsdWRlKTsKLQkJcmV0dXJuIGluY2x1ZGU7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVRlbXBsYXRlKCkgewotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5zZXRDdXJyZW50VGVtcGxhdGUobmV3IFRlbXBsYXRlKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSkpOwotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkuYWRkVGVtcGxhdGUoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0Q3VycmVudFRlbXBsYXRlKCkpOwotCQlyZXR1cm4gc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0Q3VycmVudFRlbXBsYXRlKCk7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVBhcmFtYXRlcigpIHsKLQkJUGFyYW1ldGVyIHBhcmFtID0gbmV3IFBhcmFtZXRlcihzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkpOwotCQkvLyBkZXRlcm1pbmUgd2hldGhlciBwYXJhbSBoYXMgYSB2YWx1ZQotCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gZWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlOb2RlIGNoaWxkTm9kZSA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLQkJCWlmIChjaGlsZE5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkFUVFJJQlVURV9OT0RFKSB7Ci0JCQkJcGFyYW0uc2V0VmFsdWUodHJ1ZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCkgIT0gbnVsbCkgewotCQkJaWYgKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCkuZ2V0TW9kZWxUeXBlKCkgPT0gWFNMTW9kZWxPYmplY3QuVHlwZS5GVU5DVElPTikgewotCQkJCUZ1bmN0aW9uIGZ1bmN0aW9uID0gKEZ1bmN0aW9uKSBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRQYXJlbnRFbCgpOwotCQkJCWZ1bmN0aW9uLmFkZFBhcmFtZXRlcihwYXJhbSk7Ci0JCQl9IGVsc2UgaWYgKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCkuZ2V0TW9kZWxUeXBlKCkgPT0gWFNMTW9kZWxPYmplY3QuVHlwZS5URU1QTEFURQotCQkJCQkmJiBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRFbGVtZW50U3RhY2soKS5zaXplKCkgPT0gMiAmJiBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRDdXJyZW50VGVtcGxhdGUoKSAhPSBudWxsKSB7Ci0JCQkJVGVtcGxhdGUgdGVtcGxhdGUgPSAoVGVtcGxhdGUpIHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCk7Ci0JCQkJdGVtcGxhdGUuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcGFyYW07Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZUNhbGxUZW1wbGF0ZSgpIHsKLQkJQ2FsbFRlbXBsYXRlIGN1cnJlbnRDYWxsVGVtcGxhdGUgPSBuZXcgQ2FsbFRlbXBsYXRlKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSk7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldENhbGxUZW1wbGF0ZXMoKS5wdXNoKGN1cnJlbnRDYWxsVGVtcGxhdGUpOwotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkuYWRkQ2FsbGVkVGVtcGxhdGUoY3VycmVudENhbGxUZW1wbGF0ZSk7Ci0JCXJldHVybiBjdXJyZW50Q2FsbFRlbXBsYXRlOwotCX0KLQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVdpdGhQYXJhbVBhcm0oKSB7Ci0JCVBhcmFtZXRlciBwYXJhbSA9IG5ldyBQYXJhbWV0ZXIoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJLy8gZGV0ZXJtaW5lIHdoZXRoZXIgcGFyYW0gaGFzIGEgdmFsdWUKLQkJTm9kZUxpc3QgY2hpbGROb2RlcyA9IGVsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJTm9kZSBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0JCQlpZiAoY2hpbGROb2RlLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5BVFRSSUJVVEVfTk9ERSkgewotCQkJCXBhcmFtLnNldFZhbHVlKHRydWUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8vIGdldCB0aGUgcHJldmlvdXMgY2FsbC10ZW1wbGF0ZQotCQlDYWxsVGVtcGxhdGUgY3VycmVudENhbGxUZW1wbGF0ZSA9IHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldENhbGxUZW1wbGF0ZXMoKS5wZWVrKCk7Ci0JCWN1cnJlbnRDYWxsVGVtcGxhdGUuYWRkUGFyYW1ldGVyKHBhcmFtKTsKLQkJcmV0dXJuIHBhcmFtOwotCX0KLQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVZhcmlhYmxlKFhTTEVsZW1lbnQgeHNsRWwpIHsKLQkJaWYgKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEVsZW1lbnRTdGFjaygpLnNpemUoKSA9PSAxKSB7Ly8gZ2xvYmFsIHZhcmlhYmxlCi0JCQlWYXJpYWJsZSB2YXIgPSBuZXcgVmFyaWFibGUoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKS5hZGRHbG9iYWxWYXJpYWJsZSh2YXIpOwotCQkJeHNsRWwgPSB2YXI7Ci0JCX0gZWxzZSBpZiAoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0RWxlbWVudFN0YWNrKCkuc2l6ZSgpID4gMSAmJiBzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRDdXJyZW50VGVtcGxhdGUoKSAhPSBudWxsKSB7Ly8gbG9jYWwKLQkJCQkJCQkJCQkJCQkJCQkJCS8vIHZhcmlhYmxlCi0JCQlWYXJpYWJsZSB2YXIgPSBuZXcgVmFyaWFibGUoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0U3R5bGVzaGVldCgpKTsKLQkJCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEN1cnJlbnRUZW1wbGF0ZSgpLmFkZFZhcmlhYmxlKHZhcik7Ci0JCQl4c2xFbCA9IHZhcjsKLQkJfQotCQlyZXR1cm4geHNsRWw7Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZUZ1bmN0aW9uKCkgewotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5zZXRDdXJyZW50VGVtcGxhdGUobnVsbCk7Ci0JCUZ1bmN0aW9uIGZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFN0eWxlc2hlZXQoKSk7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldEZ1bmN0aW9ucygpLnB1c2goZnVuY3Rpb24pOwotCQlzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkuYWRkRnVuY3Rpb24oZnVuY3Rpb24pOwotCQlyZXR1cm4gZnVuY3Rpb247Ci0JfQotCQotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVhTTEVsZW1lbnQoKSB7Ci0JCXJldHVybiBuZXcgWFNMRWxlbWVudChzdHlsZXNoZWV0UGFyc2VyRGF0YS5nZXRTdHlsZXNoZWV0KCkpOwotCX0KLQkKLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMTW9kZWxPYmplY3RGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL21vZGVsL1hTTE1vZGVsT2JqZWN0RmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDA2NzkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWwvWFNMTW9kZWxPYmplY3RGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIFhTTE1vZGVsT2JqZWN0RmFjdG9yeSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBUklBQkxFID0gInZhcmlhYmxlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGVU5DVElPTiA9ICJmdW5jdGlvbiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0lUSF9QQVJBTSA9ICJ3aXRoLXBhcmFtIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQUxMX1RFTVBMQVRFID0gImNhbGwtdGVtcGxhdGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkFNID0gInBhcmFtIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURU1QTEFURSA9ICJ0ZW1wbGF0ZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1QT1JUID0gImltcG9ydCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5DTFVERSA9ICJpbmNsdWRlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFlMRVNIRUVUID0gInN0eWxlc2hlZXQiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIEVsZW1lbnQgZWxlbWVudDsKLQlwcml2YXRlIFhTTEVsZW1lbnQgeHNsRWw7Ci0JcHJpdmF0ZSBTdHlsZXNoZWV0UGFyc2VyRGF0YSBzdHlsZXNoZWV0UGFyc2VyRGF0YTsKLQotCXB1YmxpYyBYU0xNb2RlbE9iamVjdEZhY3RvcnkoRWxlbWVudCBlbGVtZW50LCBYU0xFbGVtZW50IHhzbEVsLAotCQkJU3R5bGVzaGVldFBhcnNlckRhdGEgZGF0YSkgewotCQl0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotCQl0aGlzLnhzbEVsID0geHNsRWw7Ci0JCXN0eWxlc2hlZXRQYXJzZXJEYXRhID0gZGF0YTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIFhTTCBNb2RlbCBPYmplY3Qgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBYU0xFbGVtZW50IGNyZWF0ZVhTTE1vZGVsT2JqZWN0KCkgewotCQlTdHJpbmcgZWxOYW1lID0gZWxlbWVudC5nZXRMb2NhbE5hbWUoKTsKLQkJaW50IGVsZW1lbnRTaXplID0gc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0RWxlbWVudFN0YWNrKCkuc2l6ZSgpOwotCQlYU0xFbGVtZW50RmFjdG9yeSBmYWN0b3J5ID0gbmV3IFhTTEVsZW1lbnRGYWN0b3J5KHN0eWxlc2hlZXRQYXJzZXJEYXRhLAotCQkJCWVsZW1lbnQpOwotCQlpZiAoZWxlbWVudFNpemUgPT0gMCkgewotCQkJaWYgKFNUWUxFU0hFRVQuZXF1YWxzKGVsTmFtZSkpIHsKLQkJCQl4c2xFbCA9IGZhY3RvcnkuY3JlYXRlU3R5bGVTaGVldCgpOwotCQkJfQotCQl9IGVsc2UgaWYgKElOQ0xVREUuZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPT0gMSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUluY2x1ZGUoKTsKLQkJfSBlbHNlIGlmIChJTVBPUlQuZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPT0gMSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUltcG9ydCgpOwotCQl9IGVsc2UgaWYgKFRFTVBMQVRFLmVxdWFscyhlbE5hbWUpICYmIGVsZW1lbnRTaXplID09IDEpIHsKLQkJCXhzbEVsID0gZmFjdG9yeS5jcmVhdGVUZW1wbGF0ZSgpOwotCQl9IGVsc2UgaWYgKFBBUkFNLmVxdWFscyhlbE5hbWUpICYmIG5vdFBhcmVudFN0eWxlc2hlZXQoKSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZVBhcmFtYXRlcigpOwotCQl9IGVsc2UgaWYgKENBTExfVEVNUExBVEUuZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPj0gMikgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUNhbGxUZW1wbGF0ZSgpOwotCQl9IGVsc2UgaWYgKFdJVEhfUEFSQU0uZXF1YWxzKGVsTmFtZSkgJiYgZWxlbWVudFNpemUgPj0gMwotCQkJCSYmIHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldENhbGxUZW1wbGF0ZXMoKS5zaXplKCkgPiAwKSB7Ci0JCQl4c2xFbCA9IGZhY3RvcnkuY3JlYXRlV2l0aFBhcmFtUGFybSgpOwotCQl9IGVsc2UgaWYgKGlzVmFyaWFibGUoZWxOYW1lKSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZVZhcmlhYmxlKHhzbEVsKTsKLQkJfSBlbHNlIGlmIChGVU5DVElPTi5lcXVhbHMoZWxOYW1lKSkgewotCQkJeHNsRWwgPSBmYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uKCk7Ci0JCX0gZWxzZSB7Ci0JCQl4c2xFbCA9IGZhY3RvcnkuY3JlYXRlWFNMRWxlbWVudCgpOwotCQl9Ci0JCWlmICh4c2xFbCAhPSBudWxsKQotCQkJY29uZmlndXJlKChJRE9NTm9kZSkgZWxlbWVudCwgeHNsRWwpOwotCQlyZXR1cm4geHNsRWw7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzVmFyaWFibGUoU3RyaW5nIGVsTmFtZSkgewotCQlyZXR1cm4gVkFSSUFCTEUuZXF1YWxzKGVsTmFtZSkgfHwgUEFSQU0uZXF1YWxzKGVsTmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIG5vdFBhcmVudFN0eWxlc2hlZXQoKSB7Ci0JCVhTTEVsZW1lbnQgcGFyZW50RWxlbWVudCA9IHN0eWxlc2hlZXRQYXJzZXJEYXRhLmdldFBhcmVudEVsKCk7Ci0JCWlmIChwYXJlbnRFbGVtZW50ID09IG51bGwpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCQotCQlyZXR1cm4gcGFyZW50RWxlbWVudC5nZXRNb2RlbFR5cGUoKSAhPSBYU0xNb2RlbE9iamVjdC5UeXBlLlNUWUxFU0hFRVQ7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNvbmZpZ3VyZShJRE9NTm9kZSBub2RlLCBYU0xFbGVtZW50IGVsZW1lbnQpIHsKLQkJc2V0UG9zaXRpb25JbmZvKG5vZGUsIGVsZW1lbnQpOwotCQlJRE9NRWxlbWVudCBkb21FbGVtID0gKElET01FbGVtZW50KSBub2RlOwotCQllbGVtZW50LnNldE5hbWUoZG9tRWxlbS5nZXRMb2NhbE5hbWUoKSk7Ci0JCU5hbWVkTm9kZU1hcCBtYXAgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXAuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJSURPTUF0dHIgYXR0ciA9IChJRE9NQXR0cikgbWFwLml0ZW0oaSk7Ci0JCQlYU0xBdHRyaWJ1dGUgeHNsYXR0ID0gbmV3IFhTTEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyLmdldE5hbWUoKSwKLQkJCQkJYXR0ci5nZXRWYWx1ZSgpKTsKLQkJCXNldFBvc2l0aW9uSW5mbyhhdHRyLCB4c2xhdHQpOwotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoeHNsYXR0KTsKLQkJfQotCQlzZXRQYXJlbnRFbGVtZW50KG5vZGUsIGVsZW1lbnQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRQYXJlbnRFbGVtZW50KElET01Ob2RlIG5vZGUsIFhTTEVsZW1lbnQgZWxlbWVudCkgewotCQlpZiAoc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0UGFyZW50RWwoKSAhPSBudWxsKQotCQkJc3R5bGVzaGVldFBhcnNlckRhdGEuZ2V0UGFyZW50RWwoKS5hZGRDaGlsZChlbGVtZW50KTsKLQkJaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7Ci0JCQlOb2RlTGlzdCBub2RlTGlzdCA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBsbm9kZSA9IG5vZGVMaXN0Lml0ZW0oaSk7Ci0JCQkJaWYgKGxub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQkJc3R5bGVzaGVldFBhcnNlckRhdGEuc2V0UGFyZW50RWwoZWxlbWVudCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0UG9zaXRpb25JbmZvKElET01Ob2RlIG5vZGUsIFhTTE5vZGUgaW5jKSB7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG5vZGUKLQkJCQkJLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJaW50IGxpbmUgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJCQkJLmdldExpbmVPZk9mZnNldChub2RlLmdldFN0YXJ0T2Zmc2V0KCkpOwotCQkJaW50IGxpbmVPZmZzZXQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGluZU9mZnNldChsaW5lKTsKLQkJCWludCBjb2wgPSBub2RlLmdldFN0YXJ0T2Zmc2V0KCkgLSBsaW5lT2Zmc2V0OwotCQkJaW5jLnNldE9mZnNldChub2RlLmdldFN0YXJ0T2Zmc2V0KCkpOwotCQkJaW5jLnNldExpbmVOdW1iZXIobGluZSk7Ci0JCQlpbmMuc2V0Q29sdW1uTnVtYmVyKGNvbCk7Ci0JCQlpbmMuc2V0TGVuZ3RoKG5vZGUuZ2V0TGVuZ3RoKCkpOwotCQl9IGNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMDBiODAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbjsKLQotLyoqCi0gKiBQcmVmZXJlbmNlcyBpbml0aWFsaXplciBmb3IgWFNMIGNvcmUgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyCi17Ci0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCi0JewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgRGVmYXVsdFNjb3BlKCkuZ2V0Tm9kZShYU0xDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NQVhfRVJST1JTLCAxMDApOwotCQlub2RlLnB1dEludChWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19QQVJBTSwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLlhQQVRIUywgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5DQUxMX1RFTVBMQVRFUywgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5FTVBUWV9QQVJBTSwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKTsKLQkJbm9kZS5wdXRJbnQoVmFsaWRhdGlvblByZWZlcmVuY2VzLk1JU1NJTkdfSU5DTFVERSwgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5DSVJDVUxBUl9SRUYsIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOwotCQlub2RlLnB1dEludChWYWxpZGF0aW9uUHJlZmVyZW5jZXMuVEVNUExBVEVfQ09ORkxJQ1QsIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOwotCQlub2RlLnB1dEludChWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTkFNRV9BVFRSSUJVVEVfTUlTU0lORywgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5OQU1FX0FUVFJJQlVURV9FTVBUWSwgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCW5vZGUucHV0SW50KFZhbGlkYXRpb25QcmVmZXJlbmNlcy5EVVBMSUNBVEVfUEFSQU1FVEVSLCBJTWFya2VyLlNFVkVSSVRZX0VSUk9SKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3V0aWwvRGVidWcuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9EZWJ1Zy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1NjlkNzdiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9EZWJ1Zy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBXVFAgU1NFIERlYnVnIGNsYXNzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWw7Ci0KLQotCi1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci0KLQotLyoqCi0gKiBEZWJ1ZyBDbGFzcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGVuIERlYnVnZ2luZyBvdXRwdXQgdG8gc3lzdGVtIG91dC4KLSAqIEBhdXRob3IgZGNhcnZlcgotICoKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIERlYnVnIHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gY2hlY2tGb3JNZW1vcnlMZWFrcyA9IGZhbHNlOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGNvbGxlY3RTdGF0cyA9IGZhbHNlOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVCVUcgPSAwOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1RIUkVBRExPQ0FMID0gZmFsc2U7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdCcmVha3BvaW50cyA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z0NhcmV0TWVkaWF0b3IgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdEaXNwbGF5VHJlZVBvc2l0aW9ucyA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnTWVkaWF0b3IgPSBmYWxzZTsKLQkvLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z05vdGlmaWNhdGlvbiA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z05vdGlmaWNhdGlvbkFuZEV2ZW50cyA9IGZhbHNlOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnTm90aWZ5RGVmZXJyZWQgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGVidWdSZWNvbmNpbGluZyA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnUnRmRm9ybWF0UHJvdmlkZXIgPSBmYWxzZTsKLQkvLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z1N0cnVjdHVyZWREb2N1bWVudCA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z1RhZ2xpYnMgPSBmYWxzZTsKLQkvLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z1Rva2VuaXplciA9IGZhbHNlOwotCQotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnTGF1bmNoZXIgPSBmYWxzZTsKLQkKLQkvKioKLQkgKiBPdXRwdXQgTW9kZWxpbmcgTWVzc2FnZXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRlYnVnWFNMTW9kZWwgPSBmYWxzZTsKLQkvLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z1RyZWVNb2RlbCA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBkZWJ1Z1VwZGF0ZVRyZWVQb3NpdGlvbnMgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGlzcGxheUluZm8gPSBmYWxzZTsKLQotCS8qKiBlZmZlY3RzIG91dHB1dCBvZiBMb2dnZXIgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gZGlzcGxheVRvQ29uc29sZSA9IHRydWU7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGRpc3BsYXlXYXJuaW5ncyA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGhlYWRQYXJzaW5nID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGpzRGVidWdDb250ZXh0QXNzaXN0ID0gZmFsc2U7Ci0JLy8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4ganNEZWJ1Z1N5bnRheENvbG9yaW5nID0gZmFsc2U7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gTE9DS1MgPSBmYWxzZTsKLQkvLyAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gcGVyZlRlc3QgPSBmYWxzZTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gcGVyZlRlc3RBZGFwdGVyQ2xhc3NMb2FkaW5nID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHBlcmZUZXN0Rm9ybWF0ID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHBlcmZUZXN0UmF3U3RydWN0dXJlZERvY3VtZW50T25seSA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBwZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudEV2ZW50T25seSA9IGZhbHNlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBwZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudE9ubHkgPSBmYWxzZTsKLQotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHN5bnRheEhpZ2hsaWdodGluZyA9IGZhbHNlOwotCS8vCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHVzZVN0YW5kYXJkRW9sSW5XaWRnZXQgPSBmYWxzZTsKLQotCS8qKgotCSAqIEZvciB0ZXN0cyBhbmQgZGVidWcgb25seQotCSAqIEBwYXJhbSBzdHJ1Y3R1cmVkRG9jdW1lbnQgCi0JICovCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgZHVtcChJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCkgewotCQlkdW1wKHN0cnVjdHVyZWREb2N1bWVudCwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCBkdW1wKElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50LCBib29sZWFuIHZlcmJvc2UpIHsKLQkJSVRleHRSZWdpb25Db2xsZWN0aW9uIGZsYXROb2RlID0gbnVsbDsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEdW1wIG9mIHN0cnVjdHVyZWREb2N1bWVudDoiKTsgLy8kTk9OLU5MUy0xJAotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBmbGF0Tm9kZXMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVnaW9uTGlzdCgpOwotCQlFbnVtZXJhdGlvbjw/PiBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zID0gZmxhdE5vZGVzLmVsZW1lbnRzKCk7Ci0JCXdoaWxlIChzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlmbGF0Tm9kZSA9IChJVGV4dFJlZ2lvbkNvbGxlY3Rpb24pIHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMubmV4dEVsZW1lbnQoKTsKLQkJCWlmICghdmVyYm9zZSkgewotCQkJCVN0cmluZyBvdXRTdHJpbmcgPSBmbGF0Tm9kZS50b1N0cmluZygpOwotCQkJCW91dFN0cmluZyA9IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlscy5lc2NhcGUob3V0U3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ob3V0U3RyaW5nKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZHVtcChmbGF0Tm9kZSwgdmVyYm9zZSk7Ci0JCQl9Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiPSA9ID0gPSA9ID0iKTsgLy8kTk9OLU5MUy0xJAotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcmVnaW9uIAotCSAqIEBwYXJhbSBmbGF0Tm9kZQotCSAqIEBwYXJhbSB2ZXJib3NlCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGR1bXAoSVRleHRSZWdpb25Db2xsZWN0aW9uIHJlZ2lvbiwgYm9vbGVhbiB2ZXJib3NlKSB7Ci0JCWlmIChyZWdpb24gPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJaWYgKHZlcmJvc2UpIHsKLQkJCXByaW50UGFyZW50KHJlZ2lvbik7Ci0JCX0KLQkJcHJpbnRDaGlsZFJlZ2lvbnMocmVnaW9uLCAwKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50Q2hpbGRSZWdpb25zKElUZXh0UmVnaW9uQ29sbGVjdGlvbiByZWdpb24sIGludCBkZXB0aCkgewotCQlpZiAocmVnaW9uICE9IG51bGwpIHsKLQkJCS8vID09PiAvLyBJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gcmVnaW9uQ29sbGVjdGlvbiA9IHJlZ2lvbjsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihyZWdpb24pOwotCQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbkxpc3QgPSByZWdpb24uZ2V0UmVnaW9ucygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdpb25MaXN0LnNpemUoKTsgaSsrKSB7Ci0JCQkJSVRleHRSZWdpb24gciA9IHJlZ2lvbkxpc3QuZ2V0KGkpOwotCQkJCWlmIChyIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db2xsZWN0aW9uKSB7Ci0JCQkJCUlUZXh0UmVnaW9uQ29sbGVjdGlvbiByYyA9IChJVGV4dFJlZ2lvbkNvbGxlY3Rpb24pIHI7Ci0JCQkJCXByaW50Q2hpbGRSZWdpb25zKHJjLCBkZXB0aCsrKTsKLQkJCQl9IGVsc2UgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oc3BhY2UoZGVwdGgpICsgcik7Ci0JCQkJCWRlcHRoLS07Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogU2ltcGxlIHV0aWxpdHkgdG8gbWFrZSBzdXJlIHByaW50bG4ncyBhcmUgc29tZSB3aGF0IGluIG9yZGVyCi0JICogQHBhcmFtIG1zZyAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIHN5bmNocm9uaXplZCB2b2lkIHByaW50bG4oU3RyaW5nIG1zZykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAiXHQiICsgbXNnKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRQYXJlbnQoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgW3BhcmVudCBkb2N1bWVudDogIiArIHRvU3RyaW5nVXRpbChyZWdpb24uZ2V0UGFyZW50RG9jdW1lbnQoKSkgKyAiXSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50UGFyZW50KElUZXh0UmVnaW9uQ29sbGVjdGlvbiByZWdpb24pIHsKLQkJaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIHsKLQkJCXByaW50UGFyZW50KChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKSByZWdpb24pOwotCQl9IGVsc2UgaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQlwcmludFBhcmVudCgoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbik7Ci0JCX0gZWxzZQotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgW3BhcmVudCBkb2N1bWVudDogIiArICIobmEpIiArICJdIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFBhcmVudChJVGV4dFJlZ2lvbkNvbnRhaW5lciByZWdpb24pIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgW3BhcmVudCBkb2N1bWVudDogIiArIHRvU3RyaW5nVXRpbChyZWdpb24uZ2V0UGFyZW50KCkpICsgIl0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIGRlcHRoCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBzcGFjZShpbnQgZGVwdGgpIHsKLQkJU3RyaW5nIHJlc3VsdCA9ICIgICI7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIocmVzdWx0KTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7Ci0JCQlidWYuYXBwZW5kKCIgICIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmVzdWx0ID0gYnVmLnRvU3RyaW5nKCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdG9TdHJpbmdVdGlsKElTdHJ1Y3R1cmVkRG9jdW1lbnQgb2JqZWN0KSB7Ci0JCVN0cmluZyBjbGFzc05hbWUgPSBvYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCVN0cmluZyBzaG9ydENsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHJpbmcoY2xhc3NOYW1lLmxhc3RJbmRleE9mKCIuIikgKyAxKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgcmVzdWx0ID0gc2hvcnRDbGFzc05hbWU7Ci0JCS8vIE5PVEU6IGlmIHRoZSBkb2N1bWVudCBoZWxkIGJ5IGFueSByZWdpb24gaGFzIGJlZW4gdXBkYXRlZCBhbmQgdGhlCi0JCS8vIHJlZ2lvbiBvZmZzZXRzIGhhdmUgbm90Ci0JCS8vIHlldCBiZWVuIHVwZGF0ZWQsIHRoZSBvdXRwdXQgZnJvbSB0aGlzIG1ldGhvZCBpbnZhbGlkLgotCQlyZXR1cm4gcmVzdWx0OwotCi0JfQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdG9TdHJpbmdVdGlsKElUZXh0UmVnaW9uQ29sbGVjdGlvbiBvYmplY3QpIHsKLQkJU3RyaW5nIGNsYXNzTmFtZSA9IG9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJU3RyaW5nIHNob3J0Q2xhc3NOYW1lID0gY2xhc3NOYW1lLnN1YnN0cmluZyhjbGFzc05hbWUubGFzdEluZGV4T2YoIi4iKSArIDEpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyByZXN1bHQgPSBzaG9ydENsYXNzTmFtZTsKLQkJLy8gTk9URTogaWYgdGhlIGRvY3VtZW50IGhlbGQgYnkgYW55IHJlZ2lvbiBoYXMgYmVlbiB1cGRhdGVkIGFuZCB0aGUKLQkJLy8gcmVnaW9uIG9mZnNldHMgaGF2ZSBub3QKLQkJLy8geWV0IGJlZW4gdXBkYXRlZCwgdGhlIG91dHB1dCBmcm9tIHRoaXMgbWV0aG9kIGludmFsaWQuCi0JCXJldHVybiByZXN1bHQ7Ci0KLQl9Ci0KLQkvKioKLQkgKiBEZWJ1ZyBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBEZWJ1ZygpIHsKLQkJc3VwZXIoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3V0aWwvRmlsZVV0aWwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWY5NDA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLQotLyoqCi0gKiBUaGlzIGlzIGEgZ2VuZXJhbCBmaWxlIHV0aWxpdHkgY2xhc3MuCi0gKiAKLSAqIEBhdXRob3IgZGNhcnZlcgotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgYSBmaWxlIGlzIG9uZSBvZiB0aGUgdmFsaWQgWE1MIGNvbnRlbnQgdHlwZXMuCi0JICogQHBhcmFtIGZpbGUgVGhlIGlucHV0IElGaWxlIHRvIGNoZWNrCi0JICogQHJldHVybiBUcnVlIGlmIGl0IGlzIGEgWE1MIGZpbGUsIGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNYTUxGaWxlKElGaWxlIGZpbGUpCi0JewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIGNvbnRlbnRUeXBlTWFuYWdlciA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpOwotCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IGNvbnRlbnRUeXBlTWFuYWdlci5maW5kQ29udGVudFR5cGVzRm9yKGZpbGUuZ2V0TmFtZSgpKTsKLQkJZm9yIChJQ29udGVudFR5cGUgY29udGVudFR5cGUgOiB0eXBlcykKLQkJewotCQkJaWYgKGNvbnRlbnRUeXBlLmlzS2luZE9mKGNvbnRlbnRUeXBlTWFuYWdlci5nZXRDb250ZW50VHlwZSgib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCIpKSB8fCBjb250ZW50VHlwZS5pc0tpbmRPZihjb250ZW50VHlwZU1hbmFnZXIuZ2V0Q29udGVudFR5cGUoIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UiKSkpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGEgZmlsZSBpcyBhIFhTTFQgRmlsZS4KLQkgKiBAcGFyYW0gZmlsZSBUaGUgaW5wdXQgSUZpbGUgdG8gY2hlY2suCi0JICogQHJldHVybiBUcnVlIGlmIGl0IGlzIGEgWFNMVCBmaWxlLCBmYWxzZSBvdGhlcndpc2UuCi0JICogCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzWFNMRmlsZShJRmlsZSBmaWxlKQotCXsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciBjb250ZW50VHlwZU1hbmFnZXIgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKTsKLQkJSUNvbnRlbnRUeXBlW10gdHlwZXMgPSBjb250ZW50VHlwZU1hbmFnZXIuZmluZENvbnRlbnRUeXBlc0ZvcihmaWxlLmdldE5hbWUoKSk7Ci0JCWZvciAoSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlIDogdHlwZXMpCi0JCXsKLQkJCWlmIChjb250ZW50VHlwZS5lcXVhbHMoY29udGVudFR5cGVNYW5hZ2VyLmdldENvbnRlbnRUeXBlKFhTTENvcmUuWFNMX0NPTlRFTlRfVFlQRSkpKQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3V0aWwvU3RydWN0dXJlZERvY3VtZW50VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODI3ZDMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdXRpbC9TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotCi0vKioKLSAqIEdlbmVyYWwgUHVycG9zZSB1dGlsaXR5IGNsYXNzZXMgdG8gY29udmVydCBmcm9tIFN0cnVjdHVyZWREb2N1bWVudCB0byBET00uCi0gKiAKLSAqIEBhdXRob3IgZGNhcnZlcgotICoKLSAqLwotcHVibGljIGNsYXNzIFN0cnVjdHVyZWREb2N1bWVudFV0aWwgewotCQotCS8qKgotCSAqIEdpdmVuIGEgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBhIFRleHRSZWdpb24sIHJldHVybiBhCi0JICogSURPTU5vZGUgZm9yIHRoYXQgcGFydGljdWxhciBwb3NpdGlvbiBpbiB0aGUgU3RydWN0dXJlZERvY3VtZW50Ci0JICogCi0JICogQHBhcmFtIGRvY3VtZW50UmVnaW9uCi0JICogQHBhcmFtIHRleHRSZWdpb24KLQkgKiBAcmV0dXJuIElET01Ob2RlCi0JICovCi0JcHVibGljIHN0YXRpYyBJRE9NTm9kZSBnZXROb2RlKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24sIElUZXh0UmVnaW9uIHRleHRSZWdpb24pIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JSZWFkKGRvY3VtZW50UmVnaW9uLmdldFBhcmVudERvY3VtZW50KCkpOwotCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnROb2RlID0gKChJRE9NTW9kZWwpIHNNb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQotCQlyZXR1cm4gKElET01Ob2RlKWRvY3VtZW50Tm9kZS5nZXRNb2RlbCgpLmdldEluZGV4ZWRSZWdpb24oZG9jdW1lbnRSZWdpb24uZ2V0U3RhcnRPZmZzZXQodGV4dFJlZ2lvbikpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC91dGlsL1hNTENvbnRlbnRUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3V0aWwvWE1MQ29udGVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZlNDEzOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3V0aWwvWE1MQ29udGVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5ICBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKGJ1ZyAyNjQ3ODgpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50Lio7Ci0KLS8qKgotICogWE1MQ29udGV0VHlwZSBoYW5kbGVzIHRoZSBnYXRoZXJpbmcgb2YgWE1MIGNvbnRlbnQgdHlwZSByZWxhdGVkIGluZm9ybWF0aW9uCi0gKiBiZXR3ZWVuIHRoZSBwbGF0Zm9ybXMgeG1sIGNvbnRlbnQgdHlwZSBhbmQgV1RQJ3Mgc3BlY2lmaWMgdmVyc2lvbi4KLSAqICAKLSAqIEBhdXRob3IgRGF2aWQgQ2FydmVyCi0gKiBAc2luY2UgMS4wCi0gKgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29udGVudFR5cGUgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxTT1VSQ0VfQ09OVEVOVFRZUEUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk1fWE1MU09VUkNFX0NPTlRFTlRUWVBFID0gIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIElDb250ZW50VHlwZU1hbmFnZXIgY29udGVudFR5cGVNYW5hZ2VyID0gbnVsbDsKLQotCXB1YmxpYyBYTUxDb250ZW50VHlwZSgpIHsKLQkJY29udGVudFR5cGVNYW5hZ2VyID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCk7Ci0JCUlDb250ZW50VHlwZSBjb250ZW50VHlwZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBhbGwgdGhlIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIGFuIFhNTCBDb250ZW50IFR5cGUuIAotCSAqIEByZXR1cm4gVGhlIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9ucwotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgU3RyaW5nW10gZ2V0RmlsZUV4dGVuc2lvbnMoKSB7Ci0JCUlDb250ZW50VHlwZVtdIGNvbnRlbnRUeXBlcyA9IGdldEFsbFhNTENvbnRlbnRUeXBlcygpOwotCQlBcnJheUxpc3Q8U3RyaW5nPiB4bWxGaWxlRXh0ZW5zaW9ucyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQlpZiAoY29udGVudFR5cGVzLmxlbmd0aCA+IDApIHsKLQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJU3RyaW5nW10gZXh0cyA9IGdldEZpbGVTcGVjcyhjb250ZW50VHlwZXNbY250XSk7Ci0JCQkJaWYgKGV4dHMgIT0gbnVsbCkgewotCQkJCQlmb3IgKGludCBzdWIgPSAwOyBzdWIgPCBleHRzLmxlbmd0aDsgc3ViKyspIHsKLQkJCQkJCWlmICgheG1sRmlsZUV4dGVuc2lvbnMuY29udGFpbnMoZXh0c1tzdWJdKSkgewotCQkJCQkJCXhtbEZpbGVFeHRlbnNpb25zLmFkZChleHRzW3N1Yl0pOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCQotCQlTdHJpbmdbXSBmaWxlRXh0ZW5zaW9ucyA9IG5ldyBTdHJpbmdbeG1sRmlsZUV4dGVuc2lvbnMuc2l6ZSgpXTsKLQkJeG1sRmlsZUV4dGVuc2lvbnMudG9BcnJheShmaWxlRXh0ZW5zaW9ucyk7Ci0JCXJldHVybiBmaWxlRXh0ZW5zaW9uczsKLQl9CQotCQotCXByaXZhdGUgSUNvbnRlbnRUeXBlW10gZ2V0QWxsWE1MQ29udGVudFR5cGVzKCkgewotCQlBcnJheUxpc3Q8SUNvbnRlbnRUeXBlPiBhcnJheUxpc3QgPSBuZXcgQXJyYXlMaXN0PElDb250ZW50VHlwZT4oQXJyYXlzLmFzTGlzdChjb250ZW50VHlwZU1hbmFnZXIuZ2V0QWxsQ29udGVudFR5cGVzKCkpKTsKLQkJQXJyYXlMaXN0PElDb250ZW50VHlwZT4gY29weUNvbnRlbnRzID0gKEFycmF5TGlzdDxJQ29udGVudFR5cGU+KWFycmF5TGlzdC5jbG9uZSgpOwotCQotCQlmb3IoSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlIDogYXJyYXlMaXN0KSB7Ci0JCQlpZiAoIWlzWE1MQ29udGVudFR5cGUoY29udGVudFR5cGUpKSB7Ci0JCQkJCWNvcHlDb250ZW50cy5yZW1vdmUoY29udGVudFR5cGUpOwotCQkJfQotCQl9Ci0JCUlDb250ZW50VHlwZVtdIGNvbnRlbnRUeXBlcyA9IG5ldyBJQ29udGVudFR5cGVbY29weUNvbnRlbnRzLnNpemUoKV07Ci0JCWNvcHlDb250ZW50cy50b0FycmF5KGNvbnRlbnRUeXBlcyk7Ci0JCXJldHVybiBjb250ZW50VHlwZXM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzWE1MQ29udGVudFR5cGUoSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKSB7Ci0JCXJldHVybiBjb250ZW50VHlwZS5nZXRJZCgpLmVxdWFscyhQTEFURk9STV9YTUxTT1VSQ0VfQ09OVEVOVFRZUEUpIHx8Ci0JCQkgIGNvbnRlbnRUeXBlLmdldElkKCkuZXF1YWxzKFhNTFNPVVJDRV9DT05URU5UVFlQRSkgfHwKLQkJCSAgaXNLaW5kT2ZXVFBYTUwoY29udGVudFR5cGUpIHx8Ci0JCQkgIGlzS2luZE9mWE1MU291cmNlKGNvbnRlbnRUeXBlKTsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzS2luZE9mWE1MU291cmNlKElDb250ZW50VHlwZSBjb250ZW50VHlwZSkgewotCQlJQ29udGVudFR5cGUgcGxhdGZvcm1Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlTWFuYWdlci5nZXRDb250ZW50VHlwZShQTEFURk9STV9YTUxTT1VSQ0VfQ09OVEVOVFRZUEUpOwotCQlib29sZWFuIHJldHVyblZhbHVlID0gZmFsc2U7Ci0JCWlmIChwbGF0Zm9ybUNvbnRlbnRUeXBlICE9IG51bGwpIHsKLQkJCXJldHVyblZhbHVlID0gY29udGVudFR5cGUuaXNLaW5kT2YocGxhdGZvcm1Db250ZW50VHlwZSk7Ci0JCX0KLQkJcmV0dXJuIHJldHVyblZhbHVlOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNLaW5kT2ZXVFBYTUwoSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKSB7Ci0JCUlDb250ZW50VHlwZSB3dHBDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlTWFuYWdlci5nZXRDb250ZW50VHlwZShYTUxTT1VSQ0VfQ09OVEVOVFRZUEUpOwotCQlib29sZWFuIHJldHVyblZhbHVlID0gZmFsc2U7Ci0JCWlmICh3dHBDb250ZW50VHlwZSAhPSBudWxsKSB7Ci0JCQlyZXR1cm5WYWx1ZSA9IGNvbnRlbnRUeXBlLmlzS2luZE9mKHd0cENvbnRlbnRUeXBlKTsKLQkJfQotCQlyZXR1cm4gcmV0dXJuVmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdbXSBnZXRGaWxlU3BlY3MoSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlKSB7Ci0JCXJldHVybiBjb250ZW50VHlwZS5nZXRGaWxlU3BlY3MoSUNvbnRlbnRUeXBlLkZJTEVfRVhURU5TSU9OX1NQRUMpOwotCX0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjBiYzhiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247Ci0KLS8qKgotICogQW4gZXhjZXB0aW9uIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGhhcyBiZWVuIHJlYWNoZWQgCi0gKiBmb3IgYSBnaXZlbiBTdHlsZXNoZWV0IHZhbGlkYXRpb24uCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTFZhbGlkYXRpb25NZXNzYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMVmFsaWRhdGlvbk1lc3NhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVhZDg0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNMVmFsaWRhdGlvbk1lc3NhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZTsKLQotLyoqCi0gKiBBIHZhbGlkYXRpb24gbWVzc2FnZSBzcGVjaWZpYyB0byB0aGUgWFNMIHZhbGlkYXRvciB3aGljaCBhZGRzIHRoZSBhYmlsaXR5IAotICogdG8gc3BlY2lmeSB0aGUgWFNMIG5vZGUuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZQotICovCi1wdWJsaWMgY2xhc3MgWFNMVmFsaWRhdGlvbk1lc3NhZ2UgZXh0ZW5kcyBWYWxpZGF0aW9uTWVzc2FnZQotewotCXByaXZhdGUgWFNMTm9kZSBub2RlOwotCXByaXZhdGUgaW50IHJlYWxTZXZlcml0eTsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlCi0JICogICAgICAgICAgICBUaGUgbWVzc2FnZSBmb3IgdGhlIHZhbGlkYXRpb24gbWVzc2FnZS4KLQkgKiBAcGFyYW0gbGluZU51bWJlcgotCSAqICAgICAgICAgICAgVGhlIGxpbmUgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UuCi0JICogQHBhcmFtIGNvbHVtbk51bWJlcgotCSAqICAgICAgICAgICAgVGhlIGNvbHVtbiBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZS4KLQkgKiBAcGFyYW0gdXJpCi0JICogICAgICAgICAgICBUaGUgdXJpIG9mIHRoZSBmaWxlIHRoZSBtZXNzYWdlIGlzIGZvci4KLQkgKi8KLQlwdWJsaWMgWFNMVmFsaWRhdGlvbk1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBTdHJpbmcgdXJpKQotCXsKLQkJc3VwZXIobWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCB1cmkpOwotCX0KLQkKLQkvKioKLQkgKiBTZXQgdGhlIG5vZGUgdGhhdCB0aGlzIG1lc3NhZ2UgYXBwbGllcyB0by4KLQkgKiAKLQkgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5vZGUoWFNMTm9kZSBub2RlKQotCXsKLQkJdGhpcy5ub2RlID0gbm9kZTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5vZGUgdGhhdCB0aGlzIG1lc3NhZ2UgYXBwbGllcyB0by4KLQkgKiBAcmV0dXJuIHRoZSBub2RlCi0JICovCi0JcHVibGljIFhTTE5vZGUgZ2V0Tm9kZSgpCi0JewotCQlyZXR1cm4gbm9kZTsKLQl9Ci0JCi0JLyoqCi0JICogVGhlIHNldmVyaXR5IHNldCBoZXJlIHNob3VsZCBiZSB0aGUgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZSBzZXZlcml0eS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRTZXZlcml0eShpbnQgc2V2KQotCXsKLQkJdGhpcy5yZWFsU2V2ZXJpdHkgPSBzZXY7Ci0JCS8vIHRoZSBzdXBlcmNsYXNzIG9ubHkgdW5kZXJzdGFuZHMgaGlnaCBhbmQgbG93LgotCQlpbnQgc2V2ZXJpdHk7Ci0JCXN3aXRjaChzZXYpCi0JCXsKLQkJCWNhc2UgSU1lc3NhZ2UuSElHSF9TRVZFUklUWToKLQkJCQlzZXZlcml0eSA9IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9ISUdIOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlzZXZlcml0eSA9IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1c7Ci0JCX0KLQkJc3VwZXIuc2V0U2V2ZXJpdHkoc2V2ZXJpdHkpOwotCX0KLQkKLQkvKioKLQkgKiBXb3JrYXJvdW5kIGZvciBzdXBlcmNsYXNzJ3MgYml6YXJyZSBoYW5kbGluZyBvZiBzZXZlcml0eQotCSAqIAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgaW50IGdldFJlYWxTZXZlcml0eSgpCi0JewotCQlyZXR1cm4gcmVhbFNldmVyaXR5OwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCXJldHVybiBub2RlLnRvU3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTFZhbGlkYXRpb25SZXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0xWYWxpZGF0aW9uUmVwb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZTA2N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTFZhbGlkYXRpb25SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlOwotCi0KLS8qKgotICogQSB2YWxpZGF0aW9uIHJlcG9ydCBmb3IgdGhlIFhTTCB2YWxpZGF0b3IuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0Ci0gKi8KLXB1YmxpYyBjbGFzcyBYU0xWYWxpZGF0aW9uUmVwb3J0IGltcGxlbWVudHMgVmFsaWRhdGlvblJlcG9ydAotewotCXByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJpbmcgdXJpOwotCXByaXZhdGUgTGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4gZXJyb3JzID0gbmV3IEFycmF5TGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4oKTsKLQlwcml2YXRlIExpc3Q8WFNMVmFsaWRhdGlvbk1lc3NhZ2U+IHdhcm5pbmdzID0gbmV3IEFycmF5TGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4oKTsKLQlwcml2YXRlIExpc3Q8WFNMVmFsaWRhdGlvbk1lc3NhZ2U+IGluZm9zID0gbmV3IEFycmF5TGlzdDxYU0xWYWxpZGF0aW9uTWVzc2FnZT4oKTsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSB1cmkKLQkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIGVudGl0eSB0aGF0IHRoaXMgcmVwb3J0IGFwcGxpZXMgdG8KLQkgKi8KLQlwdWJsaWMgWFNMVmFsaWRhdGlvblJlcG9ydChTdHJpbmcgdXJpKQotCXsKLQkJdGhpcy51cmkgPSB1cmk7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotCSAqIAotCSAqIEByZXR1cm4gdmFsaWRhdGlvbiBtZXNzYWdlcwotCSAqLwotCXB1YmxpYyBMaXN0PFhTTFZhbGlkYXRpb25NZXNzYWdlPiBnZXRFcnJvcnMoKQotCXsKLQkJcmV0dXJuIGVycm9yczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0JICogCi0JICogQHJldHVybiB2YWxpZGF0aW9uIG1lc3NhZ2VzCi0JICovCi0JcHVibGljIExpc3Q8WFNMVmFsaWRhdGlvbk1lc3NhZ2U+IGdldFdhcm5pbmdzKCkKLQl7Ci0JCXJldHVybiB3YXJuaW5nczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0JICogCi0JICogQHJldHVybiB2YWxpZGF0aW9uIG1lc3NhZ2VzCi0JICovCi0JcHVibGljIExpc3Q8WFNMVmFsaWRhdGlvbk1lc3NhZ2U+IGdldEluZm9zKCkKLQl7Ci0JCXJldHVybiBpbmZvczsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICB0aGUgbm9kZSB0aGUgd2FybmluZyBhcHBsaWVzIHRvCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBub2RlCi0JICogQHJldHVybiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNyZWF0ZWQKLQkgKi8KLQlwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2UgYWRkRXJyb3IoWFNMTm9kZSBub2RlLCBTdHJpbmcgbWVzc2FnZSkKLQl7Ci0JCXZhbGlkID0gZmFsc2U7Ci0JCVhTTFZhbGlkYXRpb25NZXNzYWdlIG1zZyA9IG5ldyBYU0xWYWxpZGF0aW9uTWVzc2FnZShtZXNzYWdlLCBub2RlLmdldExpbmVOdW1iZXIoKSArIDEsIG5vZGUuZ2V0Q29sdW1uTnVtYmVyKCkgKyAxLCBnZXRGaWxlVVJJKCkpOwotCQltc2cuc2V0U2V2ZXJpdHkoSU1lc3NhZ2UuSElHSF9TRVZFUklUWSk7Ci0JCW1zZy5zZXROb2RlKG5vZGUpOwotCQllcnJvcnMuYWRkKG1zZyk7Ci0JCXJldHVybiBtc2c7Ci0JfQotCi0JLyoqCi0JICogQWRkIGFuIHdhcm5pbmcgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICB0aGUgbm9kZSB0aGUgd2FybmluZyBhcHBsaWVzIHRvCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBub2RlCi0JICogQHJldHVybiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNyZWF0ZWQKLQkgKi8KLQlwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2UgYWRkV2FybmluZyhYU0xOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKQotCXsKLQkJWFNMVmFsaWRhdGlvbk1lc3NhZ2UgbXNnID0gbmV3IFhTTFZhbGlkYXRpb25NZXNzYWdlKG1lc3NhZ2UsIG5vZGUuZ2V0TGluZU51bWJlcigpICsgMSwgbm9kZS5nZXRDb2x1bW5OdW1iZXIoKSArIDEsIGdldEZpbGVVUkkoKSk7Ci0JCW1zZy5zZXRTZXZlcml0eShJTWVzc2FnZS5OT1JNQUxfU0VWRVJJVFkpOwotCQltc2cuc2V0Tm9kZShub2RlKTsKLQkJd2FybmluZ3MuYWRkKG1zZyk7Ci0JCXJldHVybiBtc2c7Ci0JfQotCi0JLyoqCi0JICogQWRkIGFuIGluZm8gbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLgotCSAqIAotCSAqIEBwYXJhbSBub2RlCi0JICogICAgICAgICAgICB0aGUgbm9kZSB0aGUgd2FybmluZyBhcHBsaWVzIHRvCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBub2RlCi0JICogQHJldHVybiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNyZWF0ZWQKLQkgKi8KLQlwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2UgYWRkSW5mbyhYU0xOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKQotCXsKLQkJWFNMVmFsaWRhdGlvbk1lc3NhZ2UgbXNnID0gbmV3IFhTTFZhbGlkYXRpb25NZXNzYWdlKG1lc3NhZ2UsIG5vZGUuZ2V0TGluZU51bWJlcigpICsgMSwgbm9kZS5nZXRDb2x1bW5OdW1iZXIoKSArIDEsIGdldEZpbGVVUkkoKSk7Ci0JCW1zZy5zZXRTZXZlcml0eShJTWVzc2FnZS5MT1dfU0VWRVJJVFkpOwotCQltc2cuc2V0Tm9kZShub2RlKTsKLQkJaW5mb3MuYWRkKG1zZyk7Ci0JCXJldHVybiBtc2c7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBVUkkgdGhhdCB0aGlzIHJlcG9ydCBhcHBsaWVzIHRvLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIFVSSQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RmlsZVVSSSgpCi0JewotCQlyZXR1cm4gdXJpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5nZXROZXN0ZWRNZXNzYWdlcwotCSAqIAotCSAqIEByZXR1cm4gbnVsbAotCSAqLwotCXB1YmxpYyBIYXNoTWFwPD8sID8+IGdldE5lc3RlZE1lc3NhZ2VzKCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKiAKLQkgKiBAcmV0dXJuIEFuIGFycmF5IG9mIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0JICovCi0JcHVibGljIFZhbGlkYXRpb25NZXNzYWdlW10gZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkKLQl7Ci0JCUxpc3Q8VmFsaWRhdGlvbk1lc3NhZ2U+IG1lc3NhZ2VzID0gbmV3IEFycmF5TGlzdDxWYWxpZGF0aW9uTWVzc2FnZT4oKTsKLQkJbWVzc2FnZXMuYWRkQWxsKGVycm9ycyk7Ci0JCW1lc3NhZ2VzLmFkZEFsbCh3YXJuaW5ncyk7Ci0JCW1lc3NhZ2VzLmFkZEFsbChpbmZvcyk7Ci0JCXJldHVybiBtZXNzYWdlcy50b0FycmF5KG5ldyBWYWxpZGF0aW9uTWVzc2FnZVswXSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIGlzIHZhbGlkLiBUaGUgZmlsZSBtYXkgaGF2ZSB3YXJuaW5ncyBhc3NvY2lhdGVkIHdpdGggaXQuCi0JICogCi0JICogQHJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0JewotCQlyZXR1cm4gdmFsaWQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTFZhbGlkYXRvci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hTTFZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzlmYmEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0xWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIzMDA3MiAtIFByb2plY3QgbGV2ZWwgc3BlY2lmaWMgdmFsaWRhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgICAgLSBidWcgMjI2MjQ1IC0gWFBhdGggMi4wIHZhbGlkYXRpb24gZm9yIFhTTFQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gYnVnIDI1ODkzNyAtIFhNTCBDYXRhbG9nIHN1cHBvcnQgZm9yIGluY2x1ZGVzL2ltcG9ydHMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gYnVnIDI5MDI4NiAtIE1vZGVsIGxvYWRpbmcgb2YgcGFyYW1ldGVycyBub3QgcmVzcGVjdGluZyBmdW5jdGlvbnMuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAtIGJ1ZyAzMDc5MjYgLSBGaXggZm9yIE5QRSBpbiBWYWxpZGF0aW9uLiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjsKLQotaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5Qcm9qZWN0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlclBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudmFsaWRhdGUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoMjBIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFNMVFhQYXRoSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5YU0xDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkZ1bmN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZTsKLQotLyoqCi0gKiBUaGUgWFNMIHZhbGlkYXRvciBmb3Igd29ya3NwYWNlIFhTTCBmaWxlcy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgWFNMVmFsaWRhdG9yIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVDJfVmVyc2lvbiA9ICIyLjAiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgWFNMVmFsaWRhdG9yIGluc3RhbmNlOwotCXByaXZhdGUgSVByb2plY3QgcHJvamVjdDsKLQotCXByaXZhdGUgWFNMVmFsaWRhdG9yKCkgewotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIHRoZSBnaXZlbiBYU0wgZmlsZS4gU2FtZSBhcwotCSAqIDxjb2RlPnZhbGlkYXRlKHhzbEZpbGUscmVwb3J0LGZvcmNlQnVpbGQpPC9jb2RlPiBleGNlcHQgYSBuZXcgcmVwb3J0IGlzCi0JICogY3JlYXRlZCBhbmQgcmV0dXJuZWQuCi0JICogCi0JICogQHBhcmFtIHhzbEZpbGUKLQkgKiAgICAgICAgICAgIHRoZSBYU0wgZmlsZQotCSAqIEBwYXJhbSBmb3JjZUJ1aWxkCi0JICogICAgICAgICAgICB0cnVlIGlmIGJ1aWxkIHNob3VsZCBhbHdheXMgYmUgZm9yY2VkCi0JICogQHJldHVybiB0aGUgdmFsaWRhdGlvbiByZXBvcnQKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBpZiBhbnkgZXhjZXB0aW9uIG9jY3VycyB3aGlsZSB2YWxpZGF0aW5nCi0JICovCi0JcHVibGljIFZhbGlkYXRpb25SZXBvcnQgdmFsaWRhdGUoSUZpbGUgeHNsRmlsZSwgYm9vbGVhbiBmb3JjZUJ1aWxkKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCA9IG5ldyBYU0xWYWxpZGF0aW9uUmVwb3J0KHhzbEZpbGUKLQkJCQkuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsKLQkJcHJvamVjdCA9IHhzbEZpbGUuZ2V0UHJvamVjdCgpOwotCQl2YWxpZGF0ZSh4c2xGaWxlLCByZXBvcnQsIGZvcmNlQnVpbGQpOwotCQlyZXR1cm4gcmVwb3J0OwotCX0KLQotCS8qKgotCSAqIFZhbGlkYXRlIHRoZSBnaXZlbiBYU0wgZmlsZSB1c2luZyB0aGUgc3BlY2lmaWVkIHJlcG9ydC4KLQkgKiAKLQkgKiBAcGFyYW0geHNsRmlsZQotCSAqICAgICAgICAgICAgdGhlIFhTTCBmaWxlCi0JICogQHBhcmFtIHJlcG9ydAotCSAqICAgICAgICAgICAgdGhlIHJlcG9ydCB0byB1c2UgZm9yIHJlcG9ydGluZyB2YWxpZGF0aW9uIGVycm9ycwotCSAqIEBwYXJhbSBmb3JjZUJ1aWxkCi0JICogICAgICAgICAgICB0cnVlIGlmIGJ1aWxkIHNob3VsZCBhbHdheXMgYmUgZm9yY2VkCi0JICogQHJldHVybiB0aGUgdmFsaWRhdGlvbiByZXBvcnQKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiAgICAgICAgICAgICBpZiBhbnkgZXhjZXB0aW9uIG9jY3VycyB3aGlsZSB2YWxpZGF0aW5nCi0JICovCi0JcHVibGljIHZvaWQgdmFsaWRhdGUoSUZpbGUgeHNsRmlsZSwgWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQsCi0JCQlib29sZWFuIGZvcmNlQnVpbGQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXQ7Ci0JCWlmIChmb3JjZUJ1aWxkKQotCQkJc3R5bGVzaGVldCA9IFhTTENvcmUuZ2V0SW5zdGFuY2UoKS5idWlsZFN0eWxlc2hlZXQoeHNsRmlsZSk7Ci0JCWVsc2UKLQkJCXN0eWxlc2hlZXQgPSBYU0xDb3JlLmdldEluc3RhbmNlKCkuZ2V0U3R5bGVzaGVldCh4c2xGaWxlKTsKLQotCQlwcm9qZWN0ID0geHNsRmlsZS5nZXRQcm9qZWN0KCk7Ci0KLQkJbG9uZyBzdGFydDsKLQkJaWYgKERlYnVnLmRlYnVnWFNMTW9kZWwpIHsKLQkJCXN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJaWYgKHN0eWxlc2hlZXQgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQljYWxjdWxhdGVQcm9ibGVtcyhzdHlsZXNoZWV0LCByZXBvcnQpOwotCQkJfSBjYXRjaCAoTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gZSkgewotCQkJCS8vIGRvIG5vdGhpbmcKLQkJCX0KLQkJfQotCQlpZiAoRGVidWcuZGVidWdYU0xNb2RlbCkgewotCQkJbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQKLQkJCQkJLnByaW50bG4oIlZBTElEQVRFICIgKyB4c2xGaWxlICsgIiBpbiAiICsgKGVuZCAtIHN0YXJ0KSArICJtcyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNhbGN1bGF0ZVByb2JsZW1zKFN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0Q29tcG9zZWQsCi0JCQlYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkgdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJLy8gY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCi0JCWNoZWNrQ2lyY3VsYXJSZWYoc3R5bGVzaGVldENvbXBvc2VkLCByZXBvcnQpOwotCQkvLyBpbmNsdWRlIGNoZWNrcwotCQljaGVja0luY2x1ZGVzSW1wb3J0cyhzdHlsZXNoZWV0Q29tcG9zZWQsIHJlcG9ydCk7Ci0JCS8vIHRlbXBsYXRlIGNoZWNrcwotCQljaGVja1RlbXBsYXRlcyhzdHlsZXNoZWV0Q29tcG9zZWQsIHJlcG9ydCk7Ci0JCVN0eWxlc2hlZXQgc3R5bGVzaGVldCA9IHN0eWxlc2hlZXRDb21wb3NlZC5nZXRTdHlsZXNoZWV0KCk7Ci0JCQotCQlpZiAoWFNMVDJfVmVyc2lvbi5lcXVhbHMoc3R5bGVzaGVldC5nZXRWZXJzaW9uKCkpKSB7IAotCQkJY2hlY2tGdW5jdGlvbnMoc3R5bGVzaGVldENvbXBvc2VkLCByZXBvcnQpOwotCQl9Ci0JCS8vIGNhbGwtdGVtcGxhdGUgY2hlY2tzCi0JCWNoZWNrQ2FsbFRlbXBsYXRlcyhzdHlsZXNoZWV0Q29tcG9zZWQsIHJlcG9ydCk7Ci0JCS8vIGNhbGwtdGVtcGxhdGUgY2hlY2tzCi0JCWlmIChnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5YUEFUSFMpID4gSU1hcmtlci5TRVZFUklUWV9JTkZPKQotCQkJY2hlY2tYUGF0aHMoc3R5bGVzaGVldENvbXBvc2VkLmdldFN0eWxlc2hlZXQoKSwgcmVwb3J0KTsKLQotCQkvLyBUT0RPIGEpIGNoZWNrIGdsb2JhbHMgYW5kIGIpIGFwcGx5LXRlbXBsYXRlcyB3aGVyZSBtb2RlIGRvZXMgbm90Ci0JCS8vIGV4aXN0Ci0JfQotCi0JcHJpdmF0ZSBpbnQgZ2V0UHJlZmVyZW5jZShTdHJpbmcga2V5KSB7Ci0JCWlmIChwcm9qZWN0ID09IG51bGwpIHsKLQkJCXJldHVybiBYU0xDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpCi0JCQkJCS5nZXRJbnQoa2V5KTsKLQkJfQotCi0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgUHJvamVjdFNjb3BlKHByb2plY3QpCi0JCQkJLmdldE5vZGUoWFNMQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkKLQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0JCWJvb2xlYW4gdXNlUHJvamVjdCA9IHByZWZzLmdldEJvb2xlYW4oCi0JCQkJWFNMQ29yZVBsdWdpbi5VU0VfUFJPSkVDVF9TRVRUSU5HUywgZmFsc2UpOwotCi0JCWludCB2YWxQcmVmOwotCQlpZiAodXNlUHJvamVjdCkgewotCQkJdmFsUHJlZiA9IHByZWZzLmdldEludChrZXksIFZhbGlkYXRpb25NZXNzYWdlLldBUk5JTkcpOwotCQl9IGVsc2UgewotCQkJdmFsUHJlZiA9IFhTTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0SW50KAotCQkJCQlrZXkpOwotCQl9Ci0JCXJldHVybiB2YWxQcmVmOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1hQYXRocyhYU0xFbGVtZW50IHhzbEVsLCBYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkKLQkJCXRocm93cyBNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiB7Ci0JCXZhbGlkYXRlWFBhdGgoeHNsRWwsIHJlcG9ydCwgInNlbGVjdCIpOyAvLyROT04tTkxTLTEkCi0JCXZhbGlkYXRlWFBhdGgoeHNsRWwsIHJlcG9ydCwgInRlc3QiKTsgLy8kTk9OLU5MUy0xJAotCQl2YWxpZGF0ZVhQYXRoKHhzbEVsLCByZXBvcnQsICJtYXRjaCIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoWFNMRWxlbWVudCBjaGlsZEVsIDogeHNsRWwuZ2V0Q2hpbGRFbGVtZW50cygpKSB7Ci0JCQljaGVja1hQYXRocyhjaGlsZEVsLCByZXBvcnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZhbGlkYXRlWFBhdGgoWFNMRWxlbWVudCB4c2xFbCwgWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQsCi0JCQlTdHJpbmcgYXR0TmFtZSkgdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJWFNMQXR0cmlidXRlIGF0dCA9IHhzbEVsLmdldEF0dHJpYnV0ZShhdHROYW1lKTsKLQkJaWYgKGF0dCAhPSBudWxsICYmIGF0dC5nZXRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJU3RyaW5nIHhzbFZlcnNpb24gPSB4c2xFbC5nZXRTdHlsZXNoZWV0KCkuZ2V0VmVyc2lvbigpOwotCQkJCVN0cmluZyB4cGF0aEV4cCA9IGF0dC5nZXRWYWx1ZSgpOwotCQkJCWlmICh4c2xWZXJzaW9uLmVxdWFscyhYU0xUMl9WZXJzaW9uKSkgewotCQkJCQlYUGF0aDIwSGVscGVyLmNvbXBpbGUoeHBhdGhFeHApOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVhTTFRYUGF0aEhlbHBlci5jb21waWxlKGF0dC5nZXRWYWx1ZSgpKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChYUGF0aEV4cHJlc3Npb25FeGNlcHRpb24gZSkgewotCQkJCWNyZWF0ZU1hcmtlcihyZXBvcnQsIGF0dCwKLQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLlhQQVRIUyksCi0JCQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMSk7Ci0JCQl9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gbm90IHN1cmUgd2h5IE5QRSBpcyBiZWluZyB0aHJvd24gaGVyZQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrQ2lyY3VsYXJSZWYoU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCwKLQkJCVhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlpZiAoc3R5bGVzaGVldENvbXBvc2VkLmhhc0NpcmN1bGFyUmVmZXJlbmNlKCkpCi0JCQljcmVhdGVNYXJrZXIocmVwb3J0LCBzdHlsZXNoZWV0Q29tcG9zZWQuZ2V0U3R5bGVzaGVldCgpLAotCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5DSVJDVUxBUl9SRUYpLAotCQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrSW5jbHVkZXNJbXBvcnRzKFN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0Q29tcG9zZWQsCi0JCQlYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkgdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJLy8gaW5jbHVkZXMKLQkJY2hlY2tJbmNsdWRlcyhzdHlsZXNoZWV0Q29tcG9zZWQsIHJlcG9ydCk7Ci0JCS8vIGltcG9ydHMKLQkJY2hlY2tJbXBvcnRzKHN0eWxlc2hlZXRDb21wb3NlZCwgcmVwb3J0KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tJbXBvcnRzKFN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0Q29tcG9zZWQsCi0JCQlYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkgdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJZm9yIChJbmNsdWRlIGluY2x1ZGUgOiBzdHlsZXNoZWV0Q29tcG9zZWQuZ2V0U3R5bGVzaGVldCgpLmdldEltcG9ydHMoKSkgewotCQkJSUZpbGUgaW5jbHVkZWRGaWxlID0gaW5jbHVkZS5nZXRIcmVmQXNGaWxlKCk7Ci0JCQlpZiAoaW5jbHVkZWRGaWxlID09IG51bGwgfHwgIWluY2x1ZGVkRmlsZS5leGlzdHMoKSkgeyAvLyBpbmNsdWRlZAotCQkJCQkJCQkJCQkJCQkJCQkvLyBmaWxlIGRvZXMKLQkJCQkJCQkJCQkJCQkJCQkJLy8gbm90IGV4aXN0Ci0JCQkJWFNMQXR0cmlidXRlIGF0dCA9IGluY2x1ZGUuZ2V0QXR0cmlidXRlKCJocmVmIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAoYXR0ICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIGJhc2VVUkkgPSBpbmNsdWRlLmdldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCkuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCQkKLQkJCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKS5yZXNvbHZlKGJhc2VVUkksICIiLCBhdHQuZ2V0VmFsdWUoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJaWYgKHJlc29sdmVkVVJJID09IG51bGwpIHsKLQkJCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCQkJcmVwb3J0LAotCQkJCQkJCQlhdHQsCi0JCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLk1JU1NJTkdfSU5DTFVERSksCi0JCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl80ICsgaW5jbHVkZS5nZXRIcmVmKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChpbmNsdWRlZEZpbGUuZXF1YWxzKGluY2x1ZGUuZ2V0U3R5bGVzaGVldCgpLmdldEZpbGUoKSkpIHsgLy8gc3R5bGVzaGVldAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gaW5jbHVkaW5nCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBpdHNlbGYhCi0JCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJcmVwb3J0LAotCQkJCQkJaW5jbHVkZS5nZXRBdHRyaWJ1dGUoImhyZWYiKSwgZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuQ0lSQ1VMQVJfUkVGKSwgTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzEwKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrSW5jbHVkZXMoU3R5bGVzaGVldE1vZGVsIHN0eWxlc2hlZXRDb21wb3NlZCwKLQkJCVhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0KSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlmb3IgKEluY2x1ZGUgaW5jbHVkZSA6IHN0eWxlc2hlZXRDb21wb3NlZC5nZXRTdHlsZXNoZWV0KCkuZ2V0SW5jbHVkZXMoKSkgewotCQkJSUZpbGUgaW5jbHVkZWRGaWxlID0gaW5jbHVkZS5nZXRIcmVmQXNGaWxlKCk7Ci0JCQlpZiAoaW5jbHVkZWRGaWxlID09IG51bGwgfHwgIWluY2x1ZGVkRmlsZS5leGlzdHMoKSkgeyAvLyBpbmNsdWRlZAotCQkJCQkJCQkJCQkJCQkJCQkvLyBmaWxlIGRvZXMKLQkJCQkJCQkJCQkJCQkJCQkJLy8gbm90IGV4aXN0Ci0JCQkJWFNMQXR0cmlidXRlIGF0dCA9IGluY2x1ZGUuZ2V0QXR0cmlidXRlKCJocmVmIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlpZiAoYXR0ICE9IG51bGwpIHsKLQkJCQkJU3RyaW5nIGJhc2VVUkkgPSBpbmNsdWRlLmdldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCkuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpOwotCQkJCQkKLQkJCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gVVJJUmVzb2x2ZXJQbHVnaW4uY3JlYXRlUmVzb2x2ZXIoKS5yZXNvbHZlKGJhc2VVUkksICIiLCBhdHQuZ2V0VmFsdWUoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJaWYgKHJlc29sdmVkVVJJID09IG51bGwpIHsKLQkJCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCQkJcmVwb3J0LAotCQkJCQkJCQlhdHQsCi0JCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLk1JU1NJTkdfSU5DTFVERSksCi0JCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl80ICsgaW5jbHVkZS5nZXRIcmVmKCkpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQlpbmNsdWRlLAotCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLk5BTUVfQVRUUklCVVRFX0VNUFRZKSwKLQkJCQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMjMpOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAoaW5jbHVkZWRGaWxlLmVxdWFscyhpbmNsdWRlLmdldFN0eWxlc2hlZXQoKS5nZXRGaWxlKCkpKSB7IC8vIHN0eWxlc2hlZXQKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIGluY2x1ZGluZwotCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gaXRzZWxmIQotCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCXJlcG9ydCwKLQkJCQkJCWluY2x1ZGUuZ2V0QXR0cmlidXRlKCJocmVmIiksIGdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLkNJUkNVTEFSX1JFRiksIE1lc3NhZ2VzLlhTTFZhbGlkYXRvcl82KTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBjaGVja0Z1bmN0aW9ucyhTdHlsZXNoZWV0TW9kZWwgc3R5bGVzaGVldENvbXBvc2VkLCBYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkgdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJZm9yIChGdW5jdGlvbiBmdW5jdGlvbiA6IHN0eWxlc2hlZXRDb21wb3NlZC5nZXRTdHlsZXNoZWV0KCkuZ2V0RnVuY3Rpb25zKCkpIHsKLQkJCWlmIChmdW5jdGlvbi5nZXROYW1lKCkgIT0gbnVsbCkgewotCQkJCWNoZWNrUGFyYW1ldGVycyhyZXBvcnQsIGZ1bmN0aW9uKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1RlbXBsYXRlcyhTdHlsZXNoZWV0TW9kZWwgc3R5bGVzaGVldENvbXBvc2VkLAotCQkJWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQpIHRocm93cyBNYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbiB7Ci0JCWZvciAoVGVtcGxhdGUgdGVtcGxhdGUgOiBzdHlsZXNoZWV0Q29tcG9zZWQuZ2V0U3R5bGVzaGVldCgpCi0JCQkJLmdldFRlbXBsYXRlcygpKSB7Ci0JCQkvLyBjaGVjayBhdHRyaWJ1dGVzIGFyZSBjb3JyZWN0Ci0JCQlpZiAodGVtcGxhdGUuZ2V0TmFtZSgpICE9IG51bGwpIHsKLQkJCQljaGVja1BhcmFtZXRlcnMocmVwb3J0LCB0ZW1wbGF0ZSk7Ci0JCQl9Ci0KLQkJCWZvciAoVGVtcGxhdGUgY2hlY2tUZW1wbGF0ZSA6IHN0eWxlc2hlZXRDb21wb3NlZC5nZXRUZW1wbGF0ZXMoKSkgewotCQkJCWlmIChjaGVja1RlbXBsYXRlICE9IHRlbXBsYXRlICYmIGNoZWNrVGVtcGxhdGUuZXF1YWxzKHRlbXBsYXRlKSkgewotCQkJCQlpZiAodGVtcGxhdGUuZ2V0U3R5bGVzaGVldCgpID09IHN0eWxlc2hlZXRDb21wb3NlZAotCQkJCQkJCS5nZXRTdHlsZXNoZWV0KCkKLQkJCQkJCQkmJiBjaGVja1RlbXBsYXRlLmdldFN0eWxlc2hlZXQoKSA9PSBzdHlsZXNoZWV0Q29tcG9zZWQKLQkJCQkJCQkJCS5nZXRTdHlsZXNoZWV0KCkpIHsvLyB0ZW1wbGF0ZXMgaW4gdGhpcwotCQkJCQkJCQkJCQkJCQkvLyBzdHlsZXNoZWV0IGNvbmZsaWN0Ci0JCQkJCQkJCQkJCQkJCS8vIHdpdGggZWFjaCBvdGhlcgotCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCXRlbXBsYXRlLAotCQkJCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5URU1QTEFURV9DT05GTElDVCksCi0JCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xMSk7Ci0JCQkJCX0gZWxzZSBpZiAodGVtcGxhdGUuZ2V0U3R5bGVzaGVldCgpID09IHN0eWxlc2hlZXRDb21wb3NlZAotCQkJCQkJCS5nZXRTdHlsZXNoZWV0KCkpIHsvLyB0ZW1wbGF0ZSBpbiBpbmNsdWRlZAotCQkJCQkJCQkJCQkJLy8gc3R5bGVzaGVldCBjb25mbGljdHMgd2l0aAotCQkJCQkJCQkJCQkJLy8gdGhpcwotCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCXRlbXBsYXRlLAotCQkJCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5URU1QTEFURV9DT05GTElDVCksCi0JCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xMik7Ci0JCQkJCX0gZWxzZSB7Ly8gdGVtcGxhdGVzIGluIGluY2x1ZGVkIHN0eWxlc2hlZXRzIGNvbmZsaWN0IHdpdGgKLQkJCQkJCQkvLyBlYWNoIG90aGVyCi0JCQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQkJdGVtcGxhdGUuZ2V0U3R5bGVzaGVldCgpLAotCQkJCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5URU1QTEFURV9DT05GTElDVCksCi0JCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xMyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1BhcmFtZXRlcnMoWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQsIFRlbXBsYXRlIHRlbXBsYXRlKQotCQkJdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJTGlzdDxQYXJhbWV0ZXI+IHBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0PFBhcmFtZXRlcj4odGVtcGxhdGUKLQkJCQkuZ2V0UGFyYW1ldGVycygpKTsKLQkJLy8gcmV2ZXJzZSB0aGUgcGFyYW1ldGVycyBvcmRlciBmb3IgY2hlY2tpbmcgLSBmb3IgZHVwbGljYXRlIHBhcmFtZXRlcnMKLQkJLy8gdGhlIGZpcnN0IG9uZSBpcyB2YWxpZAotCQlDb2xsZWN0aW9ucy5yZXZlcnNlKHBhcmFtZXRlcnMpOwotCQlTZXQ8UGFyYW1ldGVyPiBkdXBsaWNhdGVQYXJhbWV0ZXJzID0gbmV3IEhhc2hTZXQ8UGFyYW1ldGVyPigpOwotCQkvLyBjaGVjayBwYXJhbWV0ZXJzCi0JCWZvciAoUGFyYW1ldGVyIHBhcmFtIDogcGFyYW1ldGVycykgewotCQkJaWYgKHBhcmFtLmdldE5hbWUoKSA9PSBudWxsKSB7Ly8gbmFtZSBpcyByZXF1aXJlZAotCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCXJlcG9ydCwKLQkJCQkJCXBhcmFtLAotCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTkFNRV9BVFRSSUJVVEVfTUlTU0lORyksCi0JCQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMTQpOwotCQkJfSBlbHNlIGlmIChwYXJhbS5nZXROYW1lKCkudHJpbSgpLmxlbmd0aCgpID09IDApIHsvLyBuYW1lIHZhbHVlIGlzCi0JCQkJCQkJCQkJCQkJCQkJLy8gcmVxdWlyZWQKLQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQlyZXBvcnQsCi0JCQkJCQlwYXJhbSwKLQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLk5BTUVfQVRUUklCVVRFX0VNUFRZKSwKLQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xNSk7Ci0JCQl9IGVsc2UgaWYgKGR1cGxpY2F0ZVBhcmFtZXRlcnMuY29udGFpbnMocGFyYW0pKSB7Ly8gZG9uJ3QgcmVjaGVjawotCQkJCQkJCQkJCQkJCQkJCS8vIHRoZSBwYXJhbWV0ZXIKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ly8gY2hlY2sgYSBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGRvZXMgbm90IGV4aXN0Ci0JCQkJZm9yIChQYXJhbWV0ZXIgY2hlY2tQYXJhbSA6IHBhcmFtZXRlcnMpIHsKLQkJCQkJaWYgKHBhcmFtICE9IGNoZWNrUGFyYW0pIHsKLQkJCQkJCWlmIChwYXJhbS5nZXROYW1lKCkuZXF1YWxzKGNoZWNrUGFyYW0uZ2V0TmFtZSgpKSkgewotCQkJCQkJCWR1cGxpY2F0ZVBhcmFtZXRlcnMuYWRkKGNoZWNrUGFyYW0pOwotCQkJCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCQkJCXJlcG9ydCwKLQkJCQkJCQkJCXBhcmFtLAotCQkJCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuRFVQTElDQVRFX1BBUkFNRVRFUiksCi0JCQkJCQkJCQlNZXNzYWdlcy5YU0xWYWxpZGF0b3JfMTYpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrUGFyYW1ldGVycyhYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCwgRnVuY3Rpb24gZnVuY3Rpb24pCi0JCQl0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlMaXN0PFBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3Q8UGFyYW1ldGVyPihmdW5jdGlvbgotCQkJCS5nZXRQYXJhbWV0ZXJzKCkpOwotCQkvLyByZXZlcnNlIHRoZSBwYXJhbWV0ZXJzIG9yZGVyIGZvciBjaGVja2luZyAtIGZvciBkdXBsaWNhdGUgcGFyYW1ldGVycwotCQkvLyB0aGUgZmlyc3Qgb25lIGlzIHZhbGlkCi0JCUNvbGxlY3Rpb25zLnJldmVyc2UocGFyYW1ldGVycyk7Ci0JCVNldDxQYXJhbWV0ZXI+IGR1cGxpY2F0ZVBhcmFtZXRlcnMgPSBuZXcgSGFzaFNldDxQYXJhbWV0ZXI+KCk7Ci0JCS8vIGNoZWNrIHBhcmFtZXRlcnMKLQkJZm9yIChQYXJhbWV0ZXIgcGFyYW0gOiBwYXJhbWV0ZXJzKSB7Ci0JCQlpZiAocGFyYW0uZ2V0TmFtZSgpID09IG51bGwpIHsvLyBuYW1lIGlzIHJlcXVpcmVkCi0JCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJcmVwb3J0LAotCQkJCQkJcGFyYW0sCi0JCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5OQU1FX0FUVFJJQlVURV9NSVNTSU5HKSwKLQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xNCk7Ci0JCQl9IGVsc2UgaWYgKHBhcmFtLmdldE5hbWUoKS50cmltKCkubGVuZ3RoKCkgPT0gMCkgey8vIG5hbWUgdmFsdWUgaXMKLQkJCQkJCQkJCQkJCQkJCQkvLyByZXF1aXJlZAotCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCXJlcG9ydCwKLQkJCQkJCXBhcmFtLAotCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTkFNRV9BVFRSSUJVVEVfRU1QVFkpLAotCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzE1KTsKLQkJCX0gZWxzZSBpZiAoZHVwbGljYXRlUGFyYW1ldGVycy5jb250YWlucyhwYXJhbSkpIHsvLyBkb24ndCByZWNoZWNrCi0JCQkJCQkJCQkJCQkJCQkJLy8gdGhlIHBhcmFtZXRlcgotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsvLyBjaGVjayBhIHBhcmFtZXRlciB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lcyBub3QgZXhpc3QKLQkJCQlmb3IgKFBhcmFtZXRlciBjaGVja1BhcmFtIDogcGFyYW1ldGVycykgewotCQkJCQlpZiAocGFyYW0gIT0gY2hlY2tQYXJhbSkgewotCQkJCQkJaWYgKHBhcmFtLmdldE5hbWUoKS5lcXVhbHMoY2hlY2tQYXJhbS5nZXROYW1lKCkpKSB7Ci0JCQkJCQkJZHVwbGljYXRlUGFyYW1ldGVycy5hZGQoY2hlY2tQYXJhbSk7Ci0JCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQkJcmVwb3J0LAotCQkJCQkJCQkJcGFyYW0sCi0JCQkJCQkJCQlnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5EVVBMSUNBVEVfUEFSQU1FVEVSKSwKLQkJCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8xNik7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tDYWxsVGVtcGxhdGVzKFN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0Q29tcG9zZWQsCi0JCQlYU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydCkgdGhyb3dzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIHsKLQkJZm9yIChDYWxsVGVtcGxhdGUgY2FsbGVkVGVtcGxhdGUgOiBzdHlsZXNoZWV0Q29tcG9zZWQuZ2V0U3R5bGVzaGVldCgpCi0JCQkJLmdldENhbGxlZFRlbXBsYXRlcygpKSB7Ci0JCQlpZiAoY2FsbGVkVGVtcGxhdGUuZ2V0TmFtZSgpICE9IG51bGwpIHsKLQkJCQkvLyBnZXQgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIHRoYXQgbWlnaHQgYmUgYmVpbmcgY2FsbGVkIGJ5IHRoaXMKLQkJCQkvLyB0ZW1wbGF0ZSBjYWxsCi0JCQkJTGlzdDxUZW1wbGF0ZT4gdGVtcGxhdGVMaXN0ID0gc3R5bGVzaGVldENvbXBvc2VkCi0JCQkJCQkuZ2V0VGVtcGxhdGVzQnlOYW1lKGNhbGxlZFRlbXBsYXRlLmdldE5hbWUoKSk7Ci0JCQkJaWYgKHRlbXBsYXRlTGlzdC5zaXplKCkgPT0gMCkgewotCQkJCQlPYmplY3RbXSBtZXNzYWdlQXJncyA9IHsgY2FsbGVkVGVtcGxhdGUuZ2V0TmFtZSgpIH07Ci0JCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJY2FsbGVkVGVtcGxhdGUuZ2V0QXR0cmlidXRlKCJuYW1lIiksIGdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLkNBTExfVEVNUExBVEVTKSwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzE4LCBtZXNzYWdlQXJncykpOyAvLyROT04tTkxTLTEkCi0JCQkJfSBlbHNlIHsKLQkJCQkJVGVtcGxhdGUgbmFtZWRUZW1wbGF0ZSA9IHRlbXBsYXRlTGlzdC5nZXQoMCk7Ci0JCQkJCWZvciAoUGFyYW1ldGVyIGNhbGxlZFRlbXBsYXRlUGFyYW0gOiBjYWxsZWRUZW1wbGF0ZQotCQkJCQkJCS5nZXRQYXJhbWV0ZXJzKCkpIHsKLQkJCQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJCQkJCWZvciAoUGFyYW1ldGVyIG5hbWVkVGVtcGxhdGVQYXJhbSA6IG5hbWVkVGVtcGxhdGUKLQkJCQkJCQkJLmdldFBhcmFtZXRlcnMoKSkgewotCQkJCQkJCWlmIChjYWxsZWRUZW1wbGF0ZVBhcmFtLmdldE5hbWUoKS5lcXVhbHMoCi0JCQkJCQkJCQluYW1lZFRlbXBsYXRlUGFyYW0uZ2V0TmFtZSgpKSkgewotCQkJCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCQkJCWlmICghbmFtZWRUZW1wbGF0ZVBhcmFtLmlzVmFsdWUoKQotCQkJCQkJCQkJCSYmICFjYWxsZWRUZW1wbGF0ZVBhcmFtLmlzVmFsdWUoKSkgewotCQkJCQkJCQkJT2JqZWN0W10gbWVzc2FnZUFyZ3MgPSB7IGNhbGxlZFRlbXBsYXRlUGFyYW0KLQkJCQkJCQkJCQkJLmdldE5hbWUoKSB9OwotCQkJCQkJCQkJY3JlYXRlTWFya2VyKAotCQkJCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCQkJCWNhbGxlZFRlbXBsYXRlUGFyYW0sCi0JCQkJCQkJCQkJCWdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLkVNUFRZX1BBUkFNKSwKLQkJCQkJCQkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQkJCQkJCQkJTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzIwLAotCQkJCQkJCQkJCQkJCW1lc3NhZ2VBcmdzKSk7Ci0JCQkJCQkJCX0KLQkJCQkJCQkJYnJlYWs7Ci0KLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoIWZvdW5kKSB7Ci0JCQkJCQkJT2JqZWN0W10gbWVzc2FnZUFyZ3MgPSB7IGNhbGxlZFRlbXBsYXRlUGFyYW0KLQkJCQkJCQkJCS5nZXROYW1lKCkgfTsKLQkJCQkJCQljcmVhdGVNYXJrZXIoCi0JCQkJCQkJCQlyZXBvcnQsCi0JCQkJCQkJCQljYWxsZWRUZW1wbGF0ZVBhcmFtLmdldEF0dHJpYnV0ZSgibmFtZSIpLCBnZXRQcmVmZXJlbmNlKFZhbGlkYXRpb25QcmVmZXJlbmNlcy5NSVNTSU5HX1BBUkFNKSwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMuWFNMVmFsaWRhdG9yXzIyLCBtZXNzYWdlQXJncykpOyAvLyROT04tTkxTLTEkCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJaWYgKGdldFByZWZlcmVuY2UoVmFsaWRhdGlvblByZWZlcmVuY2VzLk1JU1NJTkdfUEFSQU0pID4gSU1hcmtlci5TRVZFUklUWV9JTkZPKSB7Ci0JCQkJCQlmb3IgKFBhcmFtZXRlciBuYW1lZFRlbXBsYXRlUGFyYW0gOiBuYW1lZFRlbXBsYXRlCi0JCQkJCQkJCS5nZXRQYXJhbWV0ZXJzKCkpIHsKLQkJCQkJCQlpZiAoIW5hbWVkVGVtcGxhdGVQYXJhbS5pc1ZhbHVlKCkpIHsKLQkJCQkJCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQkJCQkJCQlmb3IgKFBhcmFtZXRlciBjYWxsZWRUZW1wbGF0ZVBhcmFtIDogY2FsbGVkVGVtcGxhdGUKLQkJCQkJCQkJCQkuZ2V0UGFyYW1ldGVycygpKSB7Ci0JCQkJCQkJCQlpZiAoY2FsbGVkVGVtcGxhdGVQYXJhbS5nZXROYW1lKCkuZXF1YWxzKAotCQkJCQkJCQkJCQluYW1lZFRlbXBsYXRlUGFyYW0uZ2V0TmFtZSgpKSkgewotCQkJCQkJCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCQkJCQkJCQlicmVhazsKLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCQlpZiAoIWZvdW5kKSB7Ci0JCQkJCQkJCQlPYmplY3RbXSBtZXNzYWdlQXJncyA9IHsgbmFtZWRUZW1wbGF0ZVBhcmFtCi0JCQkJCQkJCQkJCS5nZXROYW1lKCkgfTsKLQkJCQkJCQkJCWNyZWF0ZU1hcmtlcigKLQkJCQkJCQkJCQkJcmVwb3J0LAotCQkJCQkJCQkJCQljYWxsZWRUZW1wbGF0ZSwKLQkJCQkJCQkJCQkJZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUlTU0lOR19QQVJBTSksCi0JCQkJCQkJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQkJCQkJCQkJCU1lc3NhZ2VzLlhTTFZhbGlkYXRvcl8zLAotCQkJCQkJCQkJCQkJCW1lc3NhZ2VBcmdzKSk7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlTWFya2VyKFhTTFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0LCBYU0xOb2RlIHhzbE5vZGUsCi0JCQlpbnQgc2V2ZXJpdHksIFN0cmluZyBtZXNzYWdlKSB0aHJvd3MgTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24gewotCQlpZiAoc2V2ZXJpdHkgPiBJTWFya2VyLlNFVkVSSVRZX0lORk8pIHsKLQkJCWlmIChyZXBvcnQuZ2V0RXJyb3JzKCkuc2l6ZSgpICsgcmVwb3J0LmdldFdhcm5pbmdzKCkuc2l6ZSgpID4gZ2V0UHJlZmVyZW5jZShWYWxpZGF0aW9uUHJlZmVyZW5jZXMuTUFYX0VSUk9SUykpCi0JCQkJdGhyb3cgbmV3IE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uKCk7Ci0JCQlzd2l0Y2ggKHNldmVyaXR5KSB7Ci0JCQljYXNlIElNYXJrZXIuU0VWRVJJVFlfRVJST1I6Ci0JCQkJcmVwb3J0LmFkZEVycm9yKHhzbE5vZGUsIG1lc3NhZ2UpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkc6Ci0JCQkJcmVwb3J0LmFkZFdhcm5pbmcoeHNsTm9kZSwgbWVzc2FnZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHNpbmdsZXRvbiBYU0xWYWxpZGF0b3IgaW5zdGFuY2UuCi0JICogCi0JICogQHJldHVybiB0aGUgc2luZ2xldG9uIFhTTFZhbGlkYXRvciBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgWFNMVmFsaWRhdG9yIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkKLQkJCWluc3RhbmNlID0gbmV3IFhTTFZhbGlkYXRvcigpOwotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhOTI4MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDIyNDc3NyAtIGZpeCBzcGFjZXMgaW4gcGF0aCBuYW1lcyBpbiBVUklzLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICBidWcgMjI2NTc4IC0gcmVtb3ZlIGV4dHJhbmVvdXMgQG92ZXJyaWRlIHN0YXRlbWVudHMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd2FzIGNhdXNpbmcgY29tcGlsYXRpb24gcHJvYmxlbXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJRW5jb2RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25TdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLlZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLkFic3RyYWN0TmVzdGVkVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlOwotCi0vKioKLSAqIFRoZSBYU0wgdmFsaWRhdG9yIGV4dGVuZHMgdGhlIFhNTCA8Y29kZT5BYnN0cmFjdE5lc3RlZFZhbGlkYXRvcjwvY29kZT4uCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvciBleHRlbmRzIEFic3RyYWN0TmVzdGVkVmFsaWRhdG9yCi17Ci0JLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gQlVJTEQgVkFMSURBVElPTiBNRVRIT0RTCi0JLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQlwcml2YXRlIGJvb2xlYW4gYXNZb3VUeXBlVmFsaWRhdGlvbjsKLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNsZWFuKElQcm9qZWN0IHByb2plY3QsIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJc3VwZXIuY2xlYW4ocHJvamVjdCwgc3RhdGUsIG1vbml0b3IpOwotCQlYU0xDb3JlLmdldEluc3RhbmNlKCkuY2xlYW4ocHJvamVjdCxtb25pdG9yKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFZhbGlkYXRpb25SZXN1bHQgdmFsaWRhdGUoSVJlc291cmNlIHJlc291cmNlLCBpbnQga2luZCwgVmFsaWRhdGlvblN0YXRlIHN0YXRlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlWYWxpZGF0aW9uUmVzdWx0IHJlcyA9IHN1cGVyLnZhbGlkYXRlKHJlc291cmNlLCBraW5kLCBzdGF0ZSwgbW9uaXRvcik7Ci0JCWlmIChyZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpCi0JCXsKLQkJCVN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0ID0gWFNMQ29yZS5nZXRJbnN0YW5jZSgpLmdldFN0eWxlc2hlZXQoKElGaWxlKSByZXNvdXJjZSk7Ci0JCQlJRmlsZVtdIGRlcGVuZGVuY2llcyA9IHN0eWxlc2hlZXQuZ2V0RmlsZURlcGVuZGVuY2llcygpLnRvQXJyYXkobmV3IElGaWxlWzBdKTsKLQkJCXJlcy5zZXREZXBlbmRzT24oZGVwZW5kZW5jaWVzKTsKLQkJfQotCQlyZXR1cm4gcmVzOwotCX0gCi0KLQkKLQkvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkvLyBBUyBZT1UgVFlQRSBWQUxJREFUSU9OIE1FVEhPRFMKLQkvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlSW5Kb2IoSVZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQsIElSZXBvcnRlciByZXBvcnRlcikgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLQl7Ci0JCWFzWW91VHlwZVZhbGlkYXRpb24gPSB0cnVlOwotCQlyZXR1cm4gc3VwZXIudmFsaWRhdGVJbkpvYihjb250ZXh0LCByZXBvcnRlcik7Ci0JfQotCi0JLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gQ09NTU9OIE1FVEhPRFMKLQkvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCUBPdmVycmlkZQotCXB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0IHZhbGlkYXRlKGZpbmFsIFN0cmluZyB1cmksIElucHV0U3RyZWFtIGlucHV0c3RyZWFtLCBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpCi0JewotCQlWYWxpZGF0aW9uUmVwb3J0IHZhbHJlcG9ydCA9IG5ldyBYU0xWYWxpZGF0aW9uUmVwb3J0KHVyaSk7Ci0JCQotCQl0cnkKLQkJewotCQkJU3RyaW5nIGVuY1VyaSA9IFVSSUVuY29kZXIuZW5jb2RlKHVyaSk7Ci0JCQlJRmlsZVtdIGZpbGVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kRmlsZXNGb3JMb2NhdGlvblVSSShuZXcgVVJJKGVuY1VyaSkpOwotCQkJaWYgKGZpbGVzLmxlbmd0aCA+IDApCi0JCQl7Ci0JCQkJSUZpbGUgeHNsRmlsZSA9IGZpbGVzWzBdOwotCQkJCXZhbHJlcG9ydCA9IFhTTFZhbGlkYXRvci5nZXRJbnN0YW5jZSgpLnZhbGlkYXRlKHhzbEZpbGUsYXNZb3VUeXBlVmFsaWRhdGlvbik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhlKTsKLQkJfQotCQlyZXR1cm4gdmFscmVwb3J0OwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGFkZEluZm9Ub01lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UsIElNZXNzYWdlIG1lc3NhZ2UpCi0JewotCQlYU0xWYWxpZGF0aW9uTWVzc2FnZSBtc2cgPSAoWFNMVmFsaWRhdGlvbk1lc3NhZ2UpIHZhbGlkYXRpb25NZXNzYWdlOwotCQlYU0xOb2RlIG5vZGUgPSBtc2cuZ2V0Tm9kZSgpOwotCQkvLyBzZXQgdGhpcyBoZXJlIGFzIGl0IGdldHMgc2V0IHRvIHRoZSB3cm9uZyB2YWx1ZSBieSB0aGUgc3VwZXJjbGFzcwotCQltZXNzYWdlLnNldFNldmVyaXR5KG1zZy5nZXRSZWFsU2V2ZXJpdHkoKSk7Ci0JCS8vIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvcgotCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IFhTTE5vZGUuQVRUUklCVVRFX05PREUpCi0JCXsKLQkJCW1lc3NhZ2Uuc2V0QXR0cmlidXRlKCJFUlJPUl9TSURFIiwgIkVSUk9SX1NJREVfUklHSFQiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0JCQltZXNzYWdlLnNldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSwgSW50ZWdlci52YWx1ZU9mKHZhbGlkYXRpb25NZXNzYWdlLmdldENvbHVtbk51bWJlcigpKSk7Ci0JCQltZXNzYWdlLnNldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFLCAiQVRUUklCVVRFX1ZBTFVFIik7IC8vIHdoZXRoZXIgdG8gc3F1aWdnbGUgdGhlIGVsZW1lbnQsIGF0dHJpYnV0ZSBvciB0ZXh0IC8vJE5PTi1OTFMtMSQKLQkJCW1lc3NhZ2Uuc2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFLCAoKFhTTEF0dHJpYnV0ZSkgbm9kZSkuZ2V0TmFtZSgpKTsKLQkJfQotCQllbHNlIGlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gWFNMTm9kZS5FTEVNRU5UX05PREUpCi0JCXsKLQkJCW1lc3NhZ2Uuc2V0QXR0cmlidXRlKCJFUlJPUl9TSURFIiwgIkVSUk9SX1NJREVfUklHSFQiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0JCQltZXNzYWdlLnNldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSwgSW50ZWdlci52YWx1ZU9mKHZhbGlkYXRpb25NZXNzYWdlLmdldENvbHVtbk51bWJlcigpKSk7Ci0JCQltZXNzYWdlLnNldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFLCAiU1RBUlRfVEFHIik7IC8vIHdoZXRoZXIgdG8gc3F1aWdnbGUgdGhlIGVsZW1lbnQsIGF0dHJpYnV0ZSBvciB0ZXh0IC8vJE5PTi1OTFMtMSQKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcjIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3Zjg0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3IyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLklTY2hlZHVsaW5nUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5BYnN0cmFjdFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0aW9uUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25TdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0b3JNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuVmFsaWRhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3JKb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw7Ci0KLS8qKgotICogVmFsaWRhdG9yIGZvciBib3RoIGJ1aWxkIHZhbGlkYXRpb24gKEFic3RyYWN0VmFsaWRhdG9yKSBhbmQgYXMteW91LXR5cGUgdmFsaWRhdGlvbiAoSVZhbGlkYXRvckpvYikuCi0gKiAKLSAqIEBhdXRob3IgRG91ZwotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yMiBleHRlbmRzIEFic3RyYWN0VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRvckpvYgotewotCS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCS8vIEJVSUxEIFZBTElEQVRJT04gTUVUSE9EUwotCS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgY2xlYW4oSVByb2plY3QgcHJvamVjdCwgVmFsaWRhdGlvblN0YXRlIHN0YXRlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCi0JewotCQlYU0xDb3JlLmdldEluc3RhbmNlKCkuY2xlYW4ocHJvamVjdCwgbW9uaXRvcik7Ci0JCXN1cGVyLmNsZWFuKHByb2plY3QsIHN0YXRlLCBtb25pdG9yKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVmFsaWRhdGlvblJlc3VsdCB2YWxpZGF0ZShJUmVzb3VyY2UgcmVzb3VyY2UsIGludCBraW5kLCBWYWxpZGF0aW9uU3RhdGUgc3RhdGUsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQl7Ci0JCS8qCi0JCSAqIFN0cmluZyBzOyBzd2l0Y2goa2luZCkgeyBjYXNlIElSZXNvdXJjZURlbHRhLkFEREVEOiBzID0gImFkZGVkIjsgYnJlYWs7IGNhc2UgSVJlc291cmNlRGVsdGEuQ0hBTkdFRDogcyA9ICJDSEFOR0VEIjsgYnJlYWs7IGNhc2UgSVJlc291cmNlRGVsdGEuQ09OVEVOVDogcyA9ICJDT05URU5UIjsgYnJlYWs7IGNhc2UKLQkJICogSVJlc291cmNlRGVsdGEuUkVNT1ZFRDogcyA9ICJSRU1PVkVEIjsgYnJlYWs7IGRlZmF1bHQ6IHMgPSAib3RoZXIiOyB9IFN5c3RlbS5vdXQucHJpbnRsbihzKTsKLQkJICovCi0JCVZhbGlkYXRpb25SZXN1bHQgcmVzdWx0ID0gbmV3IFZhbGlkYXRpb25SZXN1bHQoKTsKLQkJaWYgKHJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJewotCQkJSUZpbGUgZmlsZSA9IChJRmlsZSlyZXNvdXJjZTsKLQkJCVZhbGlkYXRpb25SZXBvcnQgcmVwb3J0ID0gZG9WYWxpZGF0aW9uKGZpbGUsIGtpbmQsIHN0YXRlLCBtb25pdG9yKTsKLQkJCVN0eWxlc2hlZXRNb2RlbCBzdHlsZXNoZWV0ID0gWFNMQ29yZS5nZXRJbnN0YW5jZSgpLmdldFN0eWxlc2hlZXQoZmlsZSk7Ci0JCQlJRmlsZVtdIGRlcGVuZGVuY2llcyA9IHN0eWxlc2hlZXQuZ2V0RmlsZURlcGVuZGVuY2llcygpLnRvQXJyYXkobmV3IElGaWxlWzBdKTsKLQkJCXJlc3VsdC5zZXREZXBlbmRzT24oZGVwZW5kZW5jaWVzKTsKLQkJCQotCQkJZm9yIChWYWxpZGF0aW9uTWVzc2FnZSBtZXNzYWdlIDogcmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpKQotCQkJewotCQkJCVhTTFZhbGlkYXRpb25NZXNzYWdlIHhzbE1zZyA9IChYU0xWYWxpZGF0aW9uTWVzc2FnZSltZXNzYWdlOwotCQkJCVZhbGlkYXRvck1lc3NhZ2UgbXNnID0gVmFsaWRhdG9yTWVzc2FnZS5jcmVhdGUobWVzc2FnZS5nZXRNZXNzYWdlKCksIHJlc291cmNlKTsKLQkJCQltc2cuc2V0QXR0cmlidXRlKCJsaW5lTnVtYmVyIiwgeHNsTXNnLmdldExpbmVOdW1iZXIoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQltc2cuc2V0QXR0cmlidXRlKCJzZXZlcml0eSIsIHhzbE1zZy5nZXRTZXZlcml0eSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJCXJlc3VsdC5hZGQobXNnKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgVmFsaWRhdGlvblJlcG9ydCBkb1ZhbGlkYXRpb24oSUZpbGUgZmlsZSwgaW50IGtpbmQsIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZSwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQotCXsKLQkJVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSBudWxsOwotCQl0cnkKLQkJewotCQkJdmFscmVwb3J0ID0gWFNMVmFsaWRhdG9yLmdldEluc3RhbmNlKCkudmFsaWRhdGUoZmlsZSx0cnVlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhlKTsKLQkJfQotCQlyZXR1cm4gdmFscmVwb3J0OwotCX0KLQotCS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCS8vIEFTIFlPVSBUWVBFIFZBTElEQVRJT04gTUVUSE9EUwotCS8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0JcHVibGljIElTY2hlZHVsaW5nUnVsZSBnZXRTY2hlZHVsaW5nUnVsZShJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyKQotCXsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZUluSm9iKElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIsIElSZXBvcnRlciByZXBvcnRlcikgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLQl7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgY2xlYW51cChJUmVwb3J0ZXIgcmVwb3J0ZXIpCi0JewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZShJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyLCBJUmVwb3J0ZXIgcmVwb3J0ZXIpIHRocm93cyBWYWxpZGF0aW9uRXhjZXB0aW9uCi0JewotCQl2YWxpZGF0ZUluSm9iKGhlbHBlcixyZXBvcnRlcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNMVmFsaWRhdGlvblJlcG9ydC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNMVmFsaWRhdGlvblJlcG9ydC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTQ1MTE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTTFZhbGlkYXRpb25SZXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIHJlZmFjdG9yZWQgdG8gaXQncyBvd24gY2xhc3MgaW5zdGVhZCBvZiBhbiBpbmxpbmUgb3ZlcnJpZGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0xWYWxpZGF0aW9uUmVwb3J0IGltcGxlbWVudHMgVmFsaWRhdGlvblJlcG9ydCB7Ci0JcHJpdmF0ZSBTdHJpbmcgdXJpOwotCi0JcHVibGljIFhTTFZhbGlkYXRpb25SZXBvcnQoU3RyaW5nIHVyaSkgewotCQl0aGlzLnVyaSA9IHVyaTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEZpbGVVUkkoKSB7Ci0JCXJldHVybiB1cmk7Ci0JfQotCi0JcHVibGljIEhhc2hNYXA8PywgPz4gZ2V0TmVzdGVkTWVzc2FnZXMoKSB7Ci0JCXJldHVybiBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKLQl9Ci0KLQlwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXSBnZXRWYWxpZGF0aW9uTWVzc2FnZXMoKSB7Ci0JCXJldHVybiBuZXcgVmFsaWRhdGlvbk1lc3NhZ2VbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC94aW5jbHVkZS9YSW5jbHVkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwveGluY2x1ZGUvWEluY2x1ZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZDgzY2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC94aW5jbHVkZS9YSW5jbHVkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qIENvcHlyaWdodCAoYykgMjAwOCBMYXJzIFZvZ2VsIA0KLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGx2MTAuaHRtbA0KLSoNCi0qIENvbnRyaWJ1dG9yczoNCi0qIExhcnMgVm9nZWwgLSBMYXJzLlZvZ2VsQGdtYWlsLmNvbSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSogRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMTc5MTkgLSByZW5hbWVkIHRvIFhJbmNsdWRlciBmcm9tIE15WEluY2x1ZGVyDQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZlYXR1cmUgY2FsbCB0byBtYWtlIHN1cmUgd2UgZ2V0DQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFhJbmNsdWRlIGF3YXJlIGNvbmZpZ3VyYXRpb24uICBBbHNvDQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgRG9jYm9vayBEVEQgaGFyZCBjb2RpbmcuDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54aW5jbHVkZTsNCi0NCi1pbXBvcnQgamF2YS5pby5GaWxlOw0KLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07DQotDQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsNCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsNCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsNCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7DQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsNCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0Ow0KLQ0KLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsNCi0NCi0vKioNCi0gKiBYSW5jbHVkZXIgd2lsbCByZWFkIGFuIFhNTCBmaWxlLCB0aGF0IGhhcyBlbGVtZW50cyBmcm9tIHRoZSBYSW5jbHVkZQ0KLSAqIG5hbWVzcGFjZSBhbmQgZm9sbG93cyB0aGUgVzNDIFhJbmNsdWRlIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSL3hpbmNsdWRlLykuDQotICogSXQgd2lsbCBvdXRwdXQgYSBtZXJnZWQgZmlsZS4NCi0gKiBAYXV0aG9yIExhcnMgVm9nZWwNCi0gKg0KLSAqLw0KLXB1YmxpYyBjbGFzcyBYSW5jbHVkZXIgew0KLQ0KLQkvKioNCi0JICogZXh0cmFjWE1MRmlsZSBtZXJnZXMgdGhlIGZpbGVzIHJlZmVyZW5jZWQgYnkgeGluY2x1ZGUgaW5jbHVkZSBlbGVtZW50cy4NCi0JICogQHBhcmFtIGluICBUaGUgZnVsbCBwYXRoIHRvIHRoZSBpbnB1dCBYTUwgZmlsZQ0KLQkgKiBAcGFyYW0gb3V0IFRoZSBmdWxsIHBhdGggdG8gdGhlIG1lcmdlZCBYTUwgZmlsZQ0KLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbg0KLQkgKi8NCi0JcHVibGljIHZvaWQgZXh0cmFjdFhNTEZpbGUoU3RyaW5nIGluLCBTdHJpbmcgb3V0KSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0JCURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsNCi0JCUZpbGUgZmlsZTsNCi0NCi0JCWZpbGUgPSBuZXcgRmlsZShpbik7DQotCQlmaWxlLmdldEFic29sdXRlUGF0aCgpOw0KLQkJZmlsZS5sYXN0TW9kaWZpZWQoKTsNCi0JCQ0KLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkYmYgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7DQotCQkNCi0JCS8vIE1ha2Ugc3VyZSB3ZSBhcmUgZ2V0dGluZyBhIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBYSW5jbHVkZSBBd2FyZQ0KLQkJZGJmLnNldEF0dHJpYnV0ZSgiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3hpbmNsdWRlIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQNCi0JCWRiZi5zZXRYSW5jbHVkZUF3YXJlKHRydWUpOw0KLQkJZGJmLnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOw0KLQ0KLQkJDQotCQlEb2N1bWVudEJ1aWxkZXIgZG9tID0gZGJmLm5ld0RvY3VtZW50QnVpbGRlcigpOw0KLQkJZG9jdW1lbnQgPSBkb20ucGFyc2UoZmlsZSk7DQotCQkNCi0JCS8vIC0tLS0gVXNlIGEgWFNMVCB0cmFuc2Zvcm1lciBmb3Igd3JpdGluZyB0aGUgbmV3IFhNTCBmaWxlIC0tLS0NCi0JCVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkNCi0JCQkJLm5ld1RyYW5zZm9ybWVyKCk7DQotCQkNCi0JCURPTVNvdXJjZSBzb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvY3VtZW50KTsNCi0JCUZpbGVPdXRwdXRTdHJlYW0gb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShuZXcgRmlsZShvdXQpKTsNCi0JCVN0cmVhbVJlc3VsdCByZXN1bHQgPSBuZXcgU3RyZWFtUmVzdWx0KG9zKTsNCi0JCXRyYW5zZm9ybWVyLnRyYW5zZm9ybShzb3VyY2UsIHJlc3VsdCk7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9DYWxsVGVtcGxhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvQ2FsbFRlbXBsYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNzUwOTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9DYWxsVGVtcGxhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogVGhlIDxjb2RlPnhzbDpjYWxsLXRlbXBsYXRlPC9jb2RlPiBtb2RlbCBlbGVtZW50LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBDYWxsVGVtcGxhdGUgZXh0ZW5kcyBYU0xFbGVtZW50Ci17Ci0JZmluYWwgTGlzdDxQYXJhbWV0ZXI+IHBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0PFBhcmFtZXRlcj4oKTsKLQkKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVzaGVldCB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0bwotCSAqLwotCXB1YmxpYyBDYWxsVGVtcGxhdGUoU3R5bGVzaGVldCBzdHlsZXNoZWV0KQotCXsKLQkJc3VwZXIoc3R5bGVzaGVldCk7Ci0JfQotCQotCS8qKgotCSAqIEFkZCBhIHBhcmFtZXRlciB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBwYXJhbWV0ZXIgdGhlIHBhcmFtZXRlciB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKLQl7Ci0JCXBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgdGVtcGxhdGUgbmFtZSwgb3IgbnVsbAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIGEgbGlzdCBvZiBwYXJhbWV0ZXJzCi0JICovCi0JcHVibGljIExpc3Q8UGFyYW1ldGVyPiBnZXRQYXJhbWV0ZXJzKCkKLQl7Ci0JCXJldHVybiBwYXJhbWV0ZXJzOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKQotCXsKLQkJcmV0dXJuIFR5cGUuQ0FMTF9URU1QTEFURTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvRnVuY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvRnVuY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMxMmFiZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0Z1bmN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBAc2luY2UgMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBGdW5jdGlvbiBleHRlbmRzIFhTTEVsZW1lbnQgewotCi0JZmluYWwgTGlzdDxWYXJpYWJsZT4gdmFyaWFibGVzID0gbmV3IEFycmF5TGlzdDxWYXJpYWJsZT4oKTsKLQlmaW5hbCBMaXN0PFBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3Q8UGFyYW1ldGVyPigpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGlzIGZ1bmN0aW9uLgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgTGlzdDxWYXJpYWJsZT4gZ2V0VmFyaWFibGVzKCkgewotCQlyZXR1cm4gdmFyaWFibGVzOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB0aGUgcGFyYW1ldGVycyBkZWZpbmVkIGluIHRoaXMgZnVuY3Rpb24uCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBMaXN0PFBhcmFtZXRlcj4gZ2V0UGFyYW1ldGVycygpIHsKLQkJcmV0dXJuIHBhcmFtZXRlcnM7Ci0JfQotCi0JcHVibGljIEZ1bmN0aW9uKFN0eWxlc2hlZXQgc3R5bGVzaGVldCkgewotCQlzdXBlcihzdHlsZXNoZWV0KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKSB7Ci0JCXJldHVybiBUeXBlLkZVTkNUSU9OOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGZ1bmN0aW9uIG5hbWUsIG9yIG51bGwKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogQWRkIGEgcGFyYW1ldGVyIHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHBhcmFtZXRlcgotCSAqICAgICAgICAgICAgdGhlIHBhcmFtZXRlciB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikgewotCQlwYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIHZhcmlhYmxlIHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZhcgotCSAqICAgICAgICAgICAgdGhlIHZhcmlhYmxlIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFZhcmlhYmxlKFZhcmlhYmxlIHZhcikgewotCQl2YXJpYWJsZXMuYWRkKHZhcik7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0T3ZlclJpZGVWYWx1ZSgpIHsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJvdmVycmlkZSIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0QXNWYWx1ZSgpIHsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJhcyIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9JbXBvcnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvSW1wb3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNjlkZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9JbXBvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+eHNsOmltcG9ydDwvY29kZT4gbW9kZWwgZWxlbWVudC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgSW1wb3J0IGV4dGVuZHMgSW5jbHVkZQotewotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIEltcG9ydChTdHlsZXNoZWV0IHN0eWxlc2hlZXQpCi0JewotCQlzdXBlcihzdHlsZXNoZWV0LElNUE9SVCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9JbmNsdWRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0luY2x1ZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkMGM4ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL0luY2x1ZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotCi0vKioKLSAqIFRoZSA8Y29kZT54c2w6aW5jbHVkZTwvY29kZT4gbW9kZWwgZWxlbWVudC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgSW5jbHVkZSBleHRlbmRzIFhTTEVsZW1lbnQKLXsKLQkvKioKLQkgKiBDb25zdGFudCBpbmRpY2F0aW5nIHRoYXQgdGhpcyBpcyBhbiA8Y29kZT5JbmNsdWRlPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNMVURFID0gMTsKLQkKLQkvKioKLQkgKiBDb25zdGFudCBpbmRpY2F0aW5nIHRoYXQgdGhpcyBpcyBhbiA8Y29kZT5JbXBvcnQ8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVCA9IDI7Ci0JCi0JcHJpdmF0ZSBmaW5hbCBpbnQgdHlwZTsKLQkKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVzaGVldCB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0bwotCSAqLwotCXB1YmxpYyBJbmNsdWRlKFN0eWxlc2hlZXQgc3R5bGVzaGVldCkKLQl7Ci0JCXRoaXMoc3R5bGVzaGVldCxJTkNMVURFKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcywgc3BlY2lmeWluZyB3aGV0aGVyIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+IG9yIGFuIDxjb2RlPkltcG9ydDwvY29kZT4uCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGJlbG9uZ3MgdG8KLQkgKiBAcGFyYW0gdHlwZSBvbmUgb2YgdGhlIGNvbnN0YW50cyA8Y29kZT5JTkNMVURFPC9jb2RlPiBvciA8Y29kZT5JTVBPUlQ8L2NvZGU+Ci0JICovCi0JcHJvdGVjdGVkIEluY2x1ZGUoU3R5bGVzaGVldCBzdHlsZXNoZWV0LCBpbnQgdHlwZSkKLQl7Ci0JCXN1cGVyKHN0eWxlc2hlZXQpOwotCQl0aGlzLnR5cGUgPSB0eXBlOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHR5cGUgb2YgaW5jbHVkZSwgd2hldGhlciBhbiA8Y29kZT5JbmNsdWRlPC9jb2RlPiBvciBhbiA8Y29kZT5JbXBvcnQ8L2NvZGU+LgotCSAqIAotCSAqIEByZXR1cm4gb25lIG9mIHRoZSBjb25zdGFudHMgPGNvZGU+SU5DTFVERTwvY29kZT4gb3IgPGNvZGU+SU1QT1JUPC9jb2RlPgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SW5jbHVkZVR5cGUoKQotCXsKLQkJcmV0dXJuIHR5cGU7Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPmhyZWY8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIDxjb2RlPmhyZWY8L2NvZGU+IHZhbHVlLCBvciBudWxsCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRIcmVmKCkgewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoImhyZWYiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQotCS8qKgotCSAqIEdldHMgdGhlIGluY2x1ZGVkIGZpbGUgYXMgYSBzb3VyY2UgZmlsZSwgaWYgcG9zc2libGUgKHJldHVybmVkIGZpbGUgbWF5IGJlIG51bGwgYW5kIG5lZWQgbm90IGV4aXN0KS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBpbmNsdWRlZCBmaWxlLCBvciBudWxsCi0JICovCi0JcHVibGljIElGaWxlIGdldEhyZWZBc0ZpbGUoKQotCXsKLQkJcmV0dXJuIFhTTENvcmUucmVzb2x2ZUZpbGUoZ2V0U3R5bGVzaGVldCgpLmdldEZpbGUoKSwgZ2V0SHJlZigpKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKQotCXsKLQkJcmV0dXJuIFR5cGUuSU5DTFVERTsKLQl9IAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9QYXJhbWV0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NjgzNWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9QYXJhbWV0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ2NTAwIC0gQWRkIFBhcmFtdGVycyB0byBnbG9iYWwgdmFyaWFibGVzIHR5cGUuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi0vKioKLSAqIFRoZSA8Y29kZT54c2w6cGFyYW1ldGVyPC9jb2RlPiBvciA8Y29kZT54c2w6d2l0aC1wYXJhbTwvY29kZT4gbW9kZWwgZWxlbWVudC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyIGV4dGVuZHMgVmFyaWFibGUKLXsKLQlwcml2YXRlIGJvb2xlYW4gdmFsdWVTZXQ7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVzaGVldCB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0bwotCSAqLwotCXB1YmxpYyBQYXJhbWV0ZXIoU3R5bGVzaGVldCBzdHlsZXNoZWV0KQotCXsKLQkJc3VwZXIoc3R5bGVzaGVldCk7Ci0JfQotCQotCS8qKgotCSAqIFNldCB3aGV0aGVyIHRoaXMgaGFzIGEgdmFsdWUuCi0JICogCi0JICogQHBhcmFtIHZhbHVlU2V0IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaGFzIGEgdmFsdWUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShib29sZWFuIHZhbHVlU2V0KQotCXsKLQkJdGhpcy52YWx1ZVNldCA9IHZhbHVlU2V0OwotCX0KLQotCS8qKgotCSAqIEdldCB3aGV0aGVyIHRoaXMgaGFzIGEgdmFsdWUuCi0JICogCi0JICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGhhcyBhIHZhbHVlCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWYWx1ZSgpCi0JewotCQlpZiAodmFsdWVTZXQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKGdldEF0dHJpYnV0ZVZhbHVlKCJzZWxlY3QiKSAhPSBudWxsKSAvLyROT04tTkxTLTEkCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOyAKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFR5cGUgZ2V0TW9kZWxUeXBlKCkgewotCQlyZXR1cm4gVHlwZS5QQVJBTTsKLQl9Ci0JCi0JLyoqCi0JICogQHNpbmNlIDEuMQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0QXMoKSB7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgiYXMiKTsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvU3R5bGVzaGVldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9TdHlsZXNoZWV0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MzZhY2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9TdHlsZXNoZWV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDY1MDAgLSBhZGRlZCBhYmlsaXR5IHRvIGdldCBwYXJhbWV0ZXJzIGluIGdsb2JhbCB2YXJpYWJsZXMuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotCi0vKioKLSAqIFRoZSA8Y29kZT54c2w6c3R5bGVzaGVldDwvY29kZT4gbW9kZWwgZWxlbWVudC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgU3R5bGVzaGVldCBleHRlbmRzIFhTTEVsZW1lbnQgewotCWZpbmFsIElGaWxlIGZpbGU7Ci0JZmluYWwgTGlzdDxJbmNsdWRlPiBpbmNsdWRlcyA9IG5ldyBBcnJheUxpc3Q8SW5jbHVkZT4oKTsKLQlmaW5hbCBMaXN0PEltcG9ydD4gaW1wb3J0cyA9IG5ldyBBcnJheUxpc3Q8SW1wb3J0PigpOwotCWZpbmFsIExpc3Q8VGVtcGxhdGU+IHRlbXBsYXRlcyA9IG5ldyBBcnJheUxpc3Q8VGVtcGxhdGU+KCk7Ci0JZmluYWwgTGlzdDxDYWxsVGVtcGxhdGU+IGNhbGxlZFRlbXBsYXRlcyA9IG5ldyBBcnJheUxpc3Q8Q2FsbFRlbXBsYXRlPigpOwotCWZpbmFsIExpc3Q8VmFyaWFibGU+IGdsb2JhbFZhcmlhYmxlcyA9IG5ldyBBcnJheUxpc3Q8VmFyaWFibGU+KCk7Ci0JZmluYWwgTGlzdDxYU0xFbGVtZW50PiBlbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8WFNMRWxlbWVudD4oKTsKLQlmaW5hbCBMaXN0PEZ1bmN0aW9uPiBmdW5jdGlvbnMgPSBuZXcgQXJyYXlMaXN0PEZ1bmN0aW9uPigpOwotCi0JU3RyaW5nIHZlcnNpb247Ci0KLQkvKioKLQkgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZQotCSAqICAgICAgICAgICAgdGhlIGZpbGUgdGhhdCB0aGlzIHJlcHJlc2VudHMKLQkgKi8KLQlwdWJsaWMgU3R5bGVzaGVldChJRmlsZSBmaWxlKSB7Ci0JCXN1cGVyKG51bGwpOwotCQl0aGlzLmZpbGUgPSBmaWxlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHlsZXNoZWV0IGdldFN0eWxlc2hlZXQoKSB7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCS8qKgotCSAqIEFkZCBhbiA8Y29kZT5JbmNsdWRlPC9jb2RlPiB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBpbmNsdWRlCi0JICogICAgICAgICAgICB0aGUgaW5jbHVkZSB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRJbmNsdWRlKEluY2x1ZGUgaW5jbHVkZSkgewotCQlpbmNsdWRlcy5hZGQoaW5jbHVkZSk7Ci0JfQotCi0JLyoqCi0JICogQWRkIGFuIDxjb2RlPkltcG9ydDwvY29kZT4gdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gaW5jbHVkZQotCSAqICAgICAgICAgICAgdGhlIGltcG9ydCB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRJbXBvcnQoSW1wb3J0IGluY2x1ZGUpIHsKLQkJaW1wb3J0cy5hZGQoaW5jbHVkZSk7Ci0JfQotCi0JCi0JLyoqCi0JICogQWRkIGEgPGNvZGU+VGVtcGxhdGU8L2NvZGU+IHRvIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHRlbXBsYXRlCi0JICogICAgICAgICAgICB0aGUgdGVtcGxhdGUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkVGVtcGxhdGUoVGVtcGxhdGUgdGVtcGxhdGUpIHsKLQkJdGVtcGxhdGVzLmFkZCh0ZW1wbGF0ZSk7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgPGNvZGU+Q2FsbFRlbXBsYXRlPC9jb2RlPiB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSB0ZW1wbGF0ZQotCSAqICAgICAgICAgICAgdGhlIHRlbXBsYXRlIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZENhbGxlZFRlbXBsYXRlKENhbGxUZW1wbGF0ZSB0ZW1wbGF0ZSkgewotCQljYWxsZWRUZW1wbGF0ZXMuYWRkKHRlbXBsYXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGZpbGUgdGhhdCB0aGlzIHJlcHJlc2VudHMuCi0JICogCi0JICogQHJldHVybiB0aGUgZmlsZSB0aGF0IHRoaXMgcmVwcmVzZW50cwotCSAqLwotCXB1YmxpYyBJRmlsZSBnZXRGaWxlKCkgewotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgaW5jbHVkZXMgZm9yIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgbGlzdCBvZiBpbmNsdWRlcwotCSAqLwotCXB1YmxpYyBMaXN0PEluY2x1ZGU+IGdldEluY2x1ZGVzKCkgewotCQlyZXR1cm4gaW5jbHVkZXM7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBsaXN0IG9mIGltcG9ydHMgZm9yIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgbGlzdCBvZiBpbXBvcnRzCi0JICovCi0JcHVibGljIExpc3Q8SW1wb3J0PiBnZXRJbXBvcnRzKCkgewotCQlyZXR1cm4gaW1wb3J0czsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIGZvciB0aGlzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgdGVtcGxhdGVzCi0JICovCi0JcHVibGljIExpc3Q8VGVtcGxhdGU+IGdldFRlbXBsYXRlcygpIHsKLQkJcmV0dXJuIHRlbXBsYXRlczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgY2FsbGVkIHRlbXBsYXRlcyBmb3IgdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGNhbGxlZCB0ZW1wbGF0ZXMKLQkgKi8KLQlwdWJsaWMgTGlzdDxDYWxsVGVtcGxhdGU+IGdldENhbGxlZFRlbXBsYXRlcygpIHsKLQkJcmV0dXJuIGNhbGxlZFRlbXBsYXRlczsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYSBnbG9iYWwgdmFyaWFibGUgdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdmFyCi0JICogICAgICAgICAgICB0aGUgdmFyaWFibGUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkR2xvYmFsVmFyaWFibGUoVmFyaWFibGUgdmFyKSB7Ci0JCWdsb2JhbFZhcmlhYmxlcy5hZGQodmFyKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgVHlwZSBnZXRNb2RlbFR5cGUoKSB7Ci0JCXJldHVybiBUeXBlLlNUWUxFU0hFRVQ7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBzdHlsZXNoZWV0IHZlcnNpb24uCi0JICogCi0JICogQHBhcmFtIHZlcnNpb24KLQkgKiAgICAgICAgICAgIHRoZSB2ZXJzaW9uIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZlcnNpb24oU3RyaW5nIHZlcnNpb24pIHsKLQkJdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHN0eWxlc2hlZXQgdmVyc2lvbi4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCkgewotCQlyZXR1cm4gdmVyc2lvbjsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxWYXJpYWJsZT4gZ2V0R2xvYmFsVmFyaWFibGVzKCkgewotCQlyZXR1cm4gZ2xvYmFsVmFyaWFibGVzOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgZm9yIHRoaXMgc3R5bGVzaGVldC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGNhbGxlZCB0ZW1wbGF0ZXMKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JcHVibGljIExpc3Q8RnVuY3Rpb24+IGdldEZ1bmN0aW9ucygpIHsKLQkJcmV0dXJuIGZ1bmN0aW9uczsKLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIGZ1bmN0aW9uIAotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRGdW5jdGlvbihGdW5jdGlvbiBmdW5jdGlvbikgewotCQlmdW5jdGlvbnMuYWRkKGZ1bmN0aW9uKTsKLQl9Ci0JCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvU3R5bGVzaGVldE1vZGVsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1N0eWxlc2hlZXRNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzkzMDFlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvU3R5bGVzaGVldE1vZGVsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtICBidWcgMjQzNTc3IC0gQWRkZWQgcmV0cmlldmluZyBhbGwgY2FsbGVkLXRlbXBsYXRlcy4KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gIGJ1ZyAyNDY1MDMgLSBIYW5kbGVkIG5lc3RlZCBjaXJjdWxhciBpbmNsdWRlcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZzsKLQotLyoqCi0gKiBUaGUgY29tcG9zZWQgc3R5bGVzaGVldCwgY29uc2lzdGluZyBvZiBhbGwgdGVtcGxhdGVzIGFuZCB2YXJpYWJsZXMgYXZhaWxhYmxlCi0gKiB2aWEgaW1wb3J0cyBhbmQgaW5jbHVkZXMuCi0gKiAKLSAqIDxwPgotICogVGhlIDxjb2RlPmZpeCgpPC9jb2RlPiBtZXRob2QgZG9lcyB0aGUgYWN0dWFsIHdvcmsgb2YgcG9wdWxhdGluZyB0aGUgZmllbGRzCi0gKiBvZiB0aGlzLCBzbyBpdCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBhbnkgb2YgdGhlIG90aGVyIG1ldGhvZHMuCi0gKiA8L3A+Ci0gKiAKLSAqIDxwPgotICogTm90ZSB0aGF0IHRoaXMgbW9kZWwgbWF5IG5vdCBiZSB2YWxpZCAtIGZvciBpbnN0YW5jZSB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuCi0gKiBvbmUgbmFtZWQgdGVtcGxhdGUgZm9yIGEgZ2l2ZW4gbmFtZSBvciBtb3JlIHRoYW4gb25lIGdsb2JhbCB2YXJpYWJsZSB3aXRoIGEKLSAqIGdpdmVuIG5hbWUuCi0gKiA8L3A+Ci0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFN0eWxlc2hlZXRNb2RlbCBleHRlbmRzIFhTTE1vZGVsT2JqZWN0IHsKLQlwcml2YXRlIGZpbmFsIFN0eWxlc2hlZXQgc3R5bGVzaGVldDsKLQlib29sZWFuIGNpcmN1bGFyUmVmZXJlbmNlOwotCWZpbmFsIFNldDxJRmlsZT4gZmlsZXMgPSBuZXcgSGFzaFNldDxJRmlsZT4oKTsKLQlmaW5hbCBTZXQ8U3R5bGVzaGVldD4gc3R5bGVzaGVldHMgPSBuZXcgSGFzaFNldDxTdHlsZXNoZWV0PigpOwotCWZpbmFsIExpc3Q8SW5jbHVkZT4gaW5jbHVkZU1vZGVsID0gbmV3IEFycmF5TGlzdDxJbmNsdWRlPigpOwotCWZpbmFsIExpc3Q8SW1wb3J0PiBpbXBvcnRNb2RlbCA9IG5ldyBBcnJheUxpc3Q8SW1wb3J0PigpOwotCWZpbmFsIFNldDxUZW1wbGF0ZT4gdGVtcGxhdGVTZXQgPSBuZXcgSGFzaFNldDxUZW1wbGF0ZT4oKTsKLQlmaW5hbCBMaXN0PFRlbXBsYXRlPiB0ZW1wbGF0ZXMgPSBuZXcgQXJyYXlMaXN0PFRlbXBsYXRlPigpOwotCWZpbmFsIExpc3Q8VmFyaWFibGU+IGdsb2JhbFZhcmlhYmxlcyA9IG5ldyBBcnJheUxpc3Q8VmFyaWFibGU+KCk7Ci0JZmluYWwgTGlzdDxDYWxsVGVtcGxhdGU+IGNhbGxUZW1wbGF0ZXMgPSBuZXcgQXJyYXlMaXN0PENhbGxUZW1wbGF0ZT4oKTsKLQlmaW5hbCBMaXN0PEZ1bmN0aW9uPiBmdW5jdGlvbnMgPSBuZXcgQXJyYXlMaXN0PEZ1bmN0aW9uPigpOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQKLQkgKiAgICAgICAgICAgIHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBpcyB0aGUgbW9kZWwgZm9yCi0JICovCi0JcHVibGljIFN0eWxlc2hlZXRNb2RlbChTdHlsZXNoZWV0IHN0eWxlc2hlZXQpIHsKLQkJdGhpcy5zdHlsZXNoZWV0ID0gc3R5bGVzaGVldDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYWxsIHN0eWxlc2hlZXRzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbiB0aGUKLQkgKiBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZXQgb2Ygc3R5bGVzaGVldHMgaW4gdGhlIGVudGlyZSBoaWVyYXJjaHkKLQkgKi8KLQlwdWJsaWMgTGlzdDxJbmNsdWRlPiBnZXRJbmNsdWRlcygpIHsKLQkJcmV0dXJuIGluY2x1ZGVNb2RlbDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYWxsIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbiB0aGUKLQkgKiBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZXQgb2YgZmlsZXMgaW4gdGhlIGVudGlyZSBoaWVyYXJjaHkKLQkgKi8KLQlwdWJsaWMgU2V0PElGaWxlPiBnZXRGaWxlRGVwZW5kZW5jaWVzKCkgewotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBpcyB0aGUgbW9kZWwgZm9yLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGlzIHRoZSBtb2RlbCBmb3IKLQkgKi8KLQlwdWJsaWMgU3R5bGVzaGVldCBnZXRTdHlsZXNoZWV0KCkgewotCQlyZXR1cm4gdGhpcy5zdHlsZXNoZWV0OwotCX0KLQotCS8qKgotCSAqIEdldCBhbGwgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4KLQkgKiB0aGUgaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUuCi0JICogCi0JICogQHJldHVybiB0aGUgc2V0IG9mIGZpbGVzIGluIHRoZSBlbnRpcmUgaGllcmFyY2h5Ci0JICovCi0JcHVibGljIExpc3Q8VmFyaWFibGU+IGdldEdsb2JhbFZhcmlhYmxlcygpIHsKLQkJcmV0dXJuIGdsb2JhbFZhcmlhYmxlczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgYWxsIHRlbXBsYXRlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4gdGhlCi0JICogaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUuCi0JICogCi0JICogQHJldHVybiB0aGUgc2V0IG9mIHRlbXBsYXRlcyBpbiB0aGUgZW50aXJlIGhpZXJhcmNoeQotCSAqLwotCXB1YmxpYyBMaXN0PFRlbXBsYXRlPiBnZXRUZW1wbGF0ZXMoKSB7Ci0JCXJldHVybiB0ZW1wbGF0ZXM7Ci0JfQotCi0JLyoqCi0JICogQSB1dGlsaXR5IG1ldGhvZCB0aGF0IHRyYXZlcnNlcyBhbGwgc3R5bGVzaGVldCBpbiB0aGUgaGllcmFyY2h5IG9mCi0JICogc3R5bGVzaGVldHMgKG5vdCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgc3R5bGVzaGVldCksIGFuZCBhZGRzIGFsbCB0aGVpcgotCSAqIHRlbXBsYXRlcyB0byB0aGUgcmV0dXJuZWQgbGlzdC4gVGhlcmVmb3JlIHRoZSByZXR1cm5lZCBsaXN0IGhhcyBubyByZWdhcmQKLQkgKiBmb3Igd2hldGhlciBhIHRlbXBsYXRlIGlzICd2aXNpYmxlJyAoaS5lLiB3aGV0aGVyIGl0IG1pZ2h0IGJlIG92ZXJyaWRkZW4KLQkgKiBzaW5jZSBpdCB3YXMgaW5jbHVkZWQgdmlhIGFuIGltcG9ydCkuIFRoZSBvcmRlciBvZiB0aGUgdGVtcGxhdGVzIGluIHRoZQotCSAqIGxpc3QgaXMgYXJiaXRyYXJ5LgotCSAqIAotCSAqIEByZXR1cm4gYW4gdW5vcmRlcmVkIGxpc3Qgb2YgYWxsIHRlbXBsYXRlcyBmcm9tIGFsbCBzdHlsZXNoZWV0cy4KLQkgKi8KLQlwdWJsaWMgTGlzdDxUZW1wbGF0ZT4gZmluZEFsbE5lc3RlZFRlbXBsYXRlcygpIHsKLQkJTGlzdDxUZW1wbGF0ZT4gYWxsVGVtcGxhdGVzID0gbmV3IEFycmF5TGlzdDxUZW1wbGF0ZT4oKTsKLQkJZm9yIChTdHlsZXNoZWV0IHN0eWxlc2hlZXQgOiBzdHlsZXNoZWV0cykgewotCQkJYWxsVGVtcGxhdGVzLmFkZEFsbChzdHlsZXNoZWV0LmdldFRlbXBsYXRlcygpKTsKLQkJfQotCQlyZXR1cm4gYWxsVGVtcGxhdGVzOwotCX0KLQotCS8qKgotCSAqIEdldCBhbGwgbmFtZWQgdGVtcGxhdGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbgotCSAqIHRoZSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZSB3aGljaCBoYXZlIHRoZSBnaXZlbiBuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICB0aGUgdGVtcGxhdGUgbmFtZQotCSAqIEByZXR1cm4gdGhlIHNldCBvZiBuYW1lZCB0ZW1wbGF0ZXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZQotCSAqLwotCXB1YmxpYyBMaXN0PFRlbXBsYXRlPiBnZXRUZW1wbGF0ZXNCeU5hbWUoU3RyaW5nIG5hbWUpIHsKLQkJTGlzdDxUZW1wbGF0ZT4gbWF0Y2hpbmcgPSBuZXcgQXJyYXlMaXN0PFRlbXBsYXRlPih0ZW1wbGF0ZXMuc2l6ZSgpKTsKLQkJZm9yIChUZW1wbGF0ZSB0ZW1wbGF0ZSA6IHRlbXBsYXRlcykgewotCQkJaWYgKG5hbWUuZXF1YWxzKHRlbXBsYXRlLmdldE5hbWUoKSkpCi0JCQkJbWF0Y2hpbmcuYWRkKHRlbXBsYXRlKTsKLQkJfQotCQlyZXR1cm4gbWF0Y2hpbmc7Ci0JfQotCi0JLyoqCi0JICogR2V0IGFsbCB0ZW1wbGF0ZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gdGVtcGxhdGUgKGRldGVybWluZWQgZnJvbQotCSAqIDxjb2RlPlRlbXBsYXRlLmVxdWFscygpPC9jb2RlPikuCi0JICogCi0JICogQHBhcmFtIHRvTWF0Y2gKLQkgKiAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSB0byBtYXRjaAotCSAqIEByZXR1cm4gdGhlIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdCBtYXRjaAotCSAqLwotCXB1YmxpYyBMaXN0PFRlbXBsYXRlPiBmaW5kTWF0Y2hpbmcoVGVtcGxhdGUgdG9NYXRjaCkgewotCQlMaXN0PFRlbXBsYXRlPiBtYXRjaGluZyA9IG5ldyBBcnJheUxpc3Q8VGVtcGxhdGU+KHRlbXBsYXRlcy5zaXplKCkpOwotCQlmb3IgKFRlbXBsYXRlIHRlbXBsYXRlIDogdGVtcGxhdGVzKSB7Ci0JCQlpZiAodGVtcGxhdGUuZXF1YWxzKHRvTWF0Y2gpKQotCQkJCW1hdGNoaW5nLmFkZCh0ZW1wbGF0ZSk7Ci0JCX0KLQkJcmV0dXJuIG1hdGNoaW5nOwotCX0KLQotCS8qKgotCSAqIEdldCB3aGV0aGVyIHRoaXMgaGFzIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGFueXdoZXJlIGluIGl0cyBpbXBvcnQvaW5jbHVkZWQKLQkgKiBoaWVyYXJjaHkuCi0JICogCi0JICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGhhcyBhIGNpcmN1bGFyIHJlZmVyZW5jZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGhhc0NpcmN1bGFyUmVmZXJlbmNlKCkgewotCQlyZXR1cm4gY2lyY3VsYXJSZWZlcmVuY2U7Ci0JfQotCi0JLyoqCi0JICogUGVyZm9ybSB0aGUgcHJvY2VzcyBvZiB0cmF2ZXJzaW5nIHRoZSBoaWVyYXJjaHkgdG8gZGV0ZXJtaW5lIGFsbCBvZiB0aGUKLQkgKiBwcm9wZXJ0aWVzIG9mIHRoaXMuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBtYXkgZm9yY2Ugb3RoZXIKLQkgKiA8Y29kZT5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+J3MgdG8gYmUgYnVpbHQgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGZpeGluZy4KLQkgKi8KLQlwdWJsaWMgdm9pZCBmaXgoKSB7Ci0JCWxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQotCQlpZiAoRGVidWcuZGVidWdYU0xNb2RlbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGaXhpbmcgIiArIHN0eWxlc2hlZXQuZ2V0RmlsZSgpICsgIi4uLiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfQotCQl0ZW1wbGF0ZXMuYWRkQWxsKHN0eWxlc2hlZXQuZ2V0VGVtcGxhdGVzKCkpOwotCQl0ZW1wbGF0ZVNldC5hZGRBbGwoc3R5bGVzaGVldC5nZXRUZW1wbGF0ZXMoKSk7Ci0JCWdsb2JhbFZhcmlhYmxlcy5hZGRBbGwoc3R5bGVzaGVldC5nbG9iYWxWYXJpYWJsZXMpOwotCQljYWxsVGVtcGxhdGVzLmFkZEFsbChzdHlsZXNoZWV0LmdldENhbGxlZFRlbXBsYXRlcygpKTsKLQkJZnVuY3Rpb25zLmFkZEFsbChzdHlsZXNoZWV0LmdldEZ1bmN0aW9ucygpKTsKLQkJZm9yIChJbmNsdWRlIGluYyA6IHN0eWxlc2hlZXQuZ2V0SW5jbHVkZXMoKSkgewotCQkJaGFuZGxlSW5jbHVkZShpbmMpOwotCQl9Ci0JCWZvciAoSW1wb3J0IGluYyA6IHN0eWxlc2hlZXQuZ2V0SW1wb3J0cygpKSB7Ci0JCQloYW5kbGVJbmNsdWRlKGluYyk7Ci0JCX0KLQkJaWYgKERlYnVnLmRlYnVnWFNMTW9kZWwpIHsKLQkJCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlTeXN0ZW0ub3V0Ci0JCQkJCS5wcmludGxuKCJGSVggIiArIHN0eWxlc2hlZXQuZ2V0RmlsZSgpICsgIiBpbiAiICsgKGVuZCAtIHN0YXJ0KSArICJtcyIpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgaGFuZGxlSW5jbHVkZShJbmNsdWRlIGluY2x1ZGUpIHsKLQkJSUZpbGUgZmlsZSA9IGluY2x1ZGUuZ2V0SHJlZkFzRmlsZSgpOwotCi0JCWlmIChmaWxlID09IG51bGwgfHwgIWZpbGUuZXhpc3RzKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCWlmIChzdHlsZXNoZWV0LmdldEZpbGUoKS5lcXVhbHMoZmlsZSkgfHwgZmlsZXMuY29udGFpbnMoZmlsZSkpIHsKLQkJCWNpcmN1bGFyUmVmZXJlbmNlID0gdHJ1ZTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIGlmIChpc05lc3RlZEluY2x1ZGUoaW5jbHVkZSwgc3R5bGVzaGVldC5nZXRGaWxlKCkpKSB7Ci0JCQljaXJjdWxhclJlZmVyZW5jZSA9IHRydWU7Ci0JCX0KLQkJZmlsZXMuYWRkKGZpbGUpOwotCi0JCVN0eWxlc2hlZXRNb2RlbCBpbmNsdWRlZE1vZGVsID0gWFNMQ29yZS5nZXRJbnN0YW5jZSgpLmdldFN0eWxlc2hlZXQoCi0JCQkJZmlsZSk7Ci0JCWlmIChpbmNsdWRlZE1vZGVsID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCXN0eWxlc2hlZXRzLmFkZChpbmNsdWRlZE1vZGVsLmdldFN0eWxlc2hlZXQoKSk7Ci0JCWdsb2JhbFZhcmlhYmxlcy5hZGRBbGwoaW5jbHVkZWRNb2RlbC5nbG9iYWxWYXJpYWJsZXMpOwotCQljYWxsVGVtcGxhdGVzLmFkZEFsbChpbmNsdWRlZE1vZGVsLmdldENhbGxUZW1wbGF0ZXMoKSk7Ci0JCWlmIChpbmNsdWRlLmdldEluY2x1ZGVUeXBlKCkgPT0gSW5jbHVkZS5JTkNMVURFKSB7Ci0JCQlpbmNsdWRlTW9kZWwuYWRkKGluY2x1ZGUpOwotCQkJdGVtcGxhdGVzLmFkZEFsbChpbmNsdWRlZE1vZGVsLmdldFRlbXBsYXRlcygpKTsKLQkJCXRlbXBsYXRlU2V0LmFkZEFsbChpbmNsdWRlZE1vZGVsLmdldFRlbXBsYXRlcygpKTsKLQkJfSBlbHNlIHsKLQkJCWltcG9ydE1vZGVsLmFkZCgoSW1wb3J0KSBpbmNsdWRlKTsKLQkJCWZvciAoVGVtcGxhdGUgaW5jbHVkZWRUZW1wbGF0ZSA6IGluY2x1ZGVkTW9kZWwuZ2V0VGVtcGxhdGVzKCkpIHsKLQkJCQlpZiAoIXRlbXBsYXRlU2V0LmNvbnRhaW5zKGluY2x1ZGVkVGVtcGxhdGUpKSB7Ci0JCQkJCXRlbXBsYXRlcy5hZGQoaW5jbHVkZWRUZW1wbGF0ZSk7Ci0JCQkJCXRlbXBsYXRlU2V0LmFkZChpbmNsdWRlZFRlbXBsYXRlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBJcyB0aGUgY3VycmVudCBzdHlsZXNoZWV0IG5lc3RlZCBpbiBvbmUgb2YgdGhlIGluY2x1ZGVkIHN0eWxlc2hlZXRzCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBpc05lc3RlZEluY2x1ZGUoSW5jbHVkZSBpbmNsdWRlLCBJRmlsZSBjb21wYXJlVG8pIHsKLQkJU3R5bGVzaGVldE1vZGVsIGluY2x1ZGVkTW9kZWwgPSBYU0xDb3JlLmdldEluc3RhbmNlKCkuZ2V0U3R5bGVzaGVldCgKLQkJCQlpbmNsdWRlLmdldEhyZWZBc0ZpbGUoKSk7Ci0KLQkJZm9yIChJbmNsdWRlIGluYyA6IGluY2x1ZGVkTW9kZWwuZ2V0SW5jbHVkZXMoKSkgewotCQkJaWYgKGluYy5nZXRIcmVmQXNGaWxlKCkuZXF1YWxzKGNvbXBhcmVUbykKLQkJCQkJfHwgaXNOZXN0ZWRJbmNsdWRlKGluYywgY29tcGFyZVRvKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGZhbHNlOwotCi0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFR5cGUgZ2V0TW9kZWxUeXBlKCkgewotCQlyZXR1cm4gVHlwZS5TVFlMRVNIRUVUX01PREVMOwotCX0KLQotCXB1YmxpYyBMaXN0PENhbGxUZW1wbGF0ZT4gZ2V0Q2FsbFRlbXBsYXRlcygpIHsKLQkJcmV0dXJuIGNhbGxUZW1wbGF0ZXM7Ci0JfQotCi0JLyoqCi0JICogR2V0IGEgTGlzdCBvZiBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGtub3duLgotCSAqIEByZXR1cm4gCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBMaXN0PEZ1bmN0aW9uPiBnZXRGdW5jdGlvbnMoKSB7Ci0JCXJldHVybiBmdW5jdGlvbnM7Ci0JfQotCi0JLyoqCi0JICogR2V0IGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotCSAqIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlIHdoaWNoIGhhdmUgdGhlIGdpdmVuIG5hbWUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKiAgICAgICAgICAgIHRoZSB0ZW1wbGF0ZSBuYW1lCi0JICogQHJldHVybiB0aGUgc2V0IG9mIG5hbWVkIHRlbXBsYXRlcyB3aXRoIHRoZSBnaXZlbiBuYW1lCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBMaXN0PEZ1bmN0aW9uPiBnZXRGdW5jdGlvbkJ5TmFtZShTdHJpbmcgbmFtZSkgewotCQlMaXN0PEZ1bmN0aW9uPiBtYXRjaGluZyA9IG5ldyBBcnJheUxpc3Q8RnVuY3Rpb24+KGZ1bmN0aW9ucy5zaXplKCkpOwotCQlmb3IgKEZ1bmN0aW9uIGZ1bmN0aW9uIDogZnVuY3Rpb25zKSB7Ci0JCQlpZiAobmFtZS5lcXVhbHMoZnVuY3Rpb24uZ2V0TmFtZSgpKSkKLQkJCQltYXRjaGluZy5hZGQoZnVuY3Rpb24pOwotCQl9Ci0JCXJldHVybiBtYXRjaGluZzsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1RlbXBsYXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1RlbXBsYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYWI1ZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9UZW1wbGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogVGhlIDxjb2RlPnhzbDp0ZW1wbGF0ZTwvY29kZT4gbW9kZWwgZWxlbWVudC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBYU0xFbGVtZW50Ci17Ci0JZmluYWwgTGlzdDxWYXJpYWJsZT4gdmFyaWFibGVzID0gbmV3IEFycmF5TGlzdDxWYXJpYWJsZT4oKTsKLQlmaW5hbCBMaXN0PFBhcmFtZXRlcj4gcGFyYW1ldGVycyA9IG5ldyBBcnJheUxpc3Q8UGFyYW1ldGVyPigpOwotCQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBzdHlsZXNoZWV0IHRoYXQgdGhpcyBiZWxvbmdzIHRvCi0JICovCi0JcHVibGljIFRlbXBsYXRlKFN0eWxlc2hlZXQgc3R5bGVzaGVldCkKLQl7Ci0JCXN1cGVyKHN0eWxlc2hlZXQpOwotCX0KLQkKLQkvKioKLQkgKiBBZGQgYSBwYXJhbWV0ZXIgdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gcGFyYW1ldGVyIHRoZSBwYXJhbWV0ZXIgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCi0JewotCQlwYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwotCX0KLQkKLQkvKioKLQkgKiBBZGQgYSB2YXJpYWJsZSB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSB2YXIgdGhlIHZhcmlhYmxlIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFZhcmlhYmxlKFZhcmlhYmxlIHZhcikKLQl7Ci0JCXZhcmlhYmxlcy5hZGQodmFyKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB0ZW1wbGF0ZSBuYW1lLCBvciBudWxsCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm1hdGNoPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtYXRjaCB2YWx1ZSwgb3IgbnVsbAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TWF0Y2goKQotCXsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJtYXRjaCIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm1vZGU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIG1vZGUgdmFsdWUsIG9yIG51bGwKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE1vZGUoKQotCXsKLQkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJtb2RlIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+cHJpb3JpdHk8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHByaW9yaXR5IHZhbHVlLCBvciBudWxsCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcmlvcml0eSgpCi0JewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoInByaW9yaXR5Iik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBvZiB0aGlzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgcGFyYW1ldGVycwotCSAqLwotCXB1YmxpYyBMaXN0PFBhcmFtZXRlcj4gZ2V0UGFyYW1ldGVycygpCi0JewotCQlyZXR1cm4gcGFyYW1ldGVyczsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBoYXNoQ29kZSgpCi0JewotCQlTdHJpbmcgbmFtZSA9IGdldE5hbWUoKTsKLQkJaWYgKG5hbWUgIT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIDMgKyBuYW1lLmhhc2hDb2RlKCk7Ci0JCX0KLQkJU3RyaW5nIG1hdGNoID0gZ2V0TWF0Y2goKTsKLQkJU3RyaW5nIG1vZGUgPSBnZXRNb2RlKCk7Ci0JCVN0cmluZyBwcmlvcml0eSA9IGdldFByaW9yaXR5KCk7Ci0JCWlmIChtYXRjaCAhPSBudWxsKQotCQl7Ci0JCQlpbnQgaGFzaCA9IDMqbWF0Y2guaGFzaENvZGUoKTsKLQkJCWlmIChwcmlvcml0eSAhPSBudWxsKQotCQkJCWhhc2ggKz0gNSpwcmlvcml0eS5oYXNoQ29kZSgpOwotCQkJaWYgKG1vZGUgIT0gbnVsbCkKLQkJCQloYXNoICs9IDcqbW9kZS5oYXNoQ29kZSgpOwotCQkJcmV0dXJuIDUgKyBoYXNoOwotCQl9Ci0JCXJldHVybiBzdXBlci5oYXNoQ29kZSgpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLQl7Ci0JCWlmIChvYmogPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKG9iaiA9PSB0aGlzKQotCQkJcmV0dXJuIHRydWU7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBUZW1wbGF0ZSkKLQkJewotCQkJVGVtcGxhdGUgaW5jbHVkZWRUZW1wbGF0ZSA9IChUZW1wbGF0ZSlvYmo7Ci0JCQlpZiAoIW1hdGNoZXNCeU1hdGNoT3JOYW1lKGluY2x1ZGVkVGVtcGxhdGUpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCS8vIG9ubHkgcG9zc2liaWxpdHkgaXMgdGhhdCBwcmlvcml0eSBpcyBkaWZmZXJlbnQKLQkJCVN0cmluZyBwcmlvcml0eTEgPSBnZXRQcmlvcml0eSgpOwotCQkJU3RyaW5nIHByaW9yaXR5MiA9IGluY2x1ZGVkVGVtcGxhdGUuZ2V0UHJpb3JpdHkoKTsKLQkJCWlmIChwcmlvcml0eTEgPT0gbnVsbCAmJiBwcmlvcml0eTIgPT0gbnVsbCB8fCBwcmlvcml0eTEgIT0gbnVsbCAmJiBwcmlvcml0eTEuZXF1YWxzKHByaW9yaXR5MikpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBtYXRjaGVzQnlNYXRjaE9yTmFtZShUZW1wbGF0ZSBpbmNsdWRlZFRlbXBsYXRlKQotCXsKLQkJU3RyaW5nIG5hbWUxID0gZ2V0TmFtZSgpOwotCQlTdHJpbmcgbWF0Y2gxID0gZ2V0TWF0Y2goKTsKLQkJU3RyaW5nIG1vZGUxID0gZ2V0TW9kZSgpOwotCQlTdHJpbmcgbmFtZTIgPSBpbmNsdWRlZFRlbXBsYXRlLmdldE5hbWUoKTsKLQkJU3RyaW5nIG1hdGNoMiA9IGluY2x1ZGVkVGVtcGxhdGUuZ2V0TWF0Y2goKTsKLQkJU3RyaW5nIG1vZGUyID0gaW5jbHVkZWRUZW1wbGF0ZS5nZXRNb2RlKCk7Ci0JCWlmIChuYW1lMSAhPSBudWxsICYmIG5hbWUxLmVxdWFscyhuYW1lMikpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKG1hdGNoMSAhPSBudWxsICYmIG1hdGNoMS5lcXVhbHMobWF0Y2gyKSAmJiAobW9kZTEgPT0gbnVsbCAmJiBtb2RlMiA9PSBudWxsIHx8IG1vZGUxICE9IG51bGwgJiYgbW9kZTEuZXF1YWxzKG1vZGUyKSkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkKLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCVN0cmluZyBuYW1lID0gZ2V0TmFtZSgpOwotCQlTdHJpbmcgbWF0Y2ggPSBnZXRNYXRjaCgpOwotCQlyZXR1cm4gImZpbGU9IitnZXRTdHlsZXNoZWV0KCkuZ2V0RmlsZSgpKyIsIG5hbWU9IituYW1lKyIsIG1hdGNoPSIrbWF0Y2g7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBUeXBlIGdldE1vZGVsVHlwZSgpCi0JewotCQlyZXR1cm4gVHlwZS5URU1QTEFURTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvVmFyaWFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvVmFyaWFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRjYjU2Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1ZhcmlhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLS8qKgotICogVGhlIDxjb2RlPnhzbDp2YXJpYWJsZTwvY29kZT4gbW9kZWwgZWxlbWVudC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgVmFyaWFibGUgZXh0ZW5kcyBYU0xFbGVtZW50Ci17Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHN0eWxlc2hlZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGJlbG9uZ3MgdG8KLQkgKi8KLQlwdWJsaWMgVmFyaWFibGUoU3R5bGVzaGVldCBzdHlsZXNoZWV0KQotCXsKLQkJc3VwZXIoc3R5bGVzaGVldCk7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuCi0JICogCi0JICogQHJldHVybiB0aGUgdmFyaWFibGUgbmFtZSwgb3IgbnVsbAotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5zZWxlY3Q8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNlbGVjdCB2YWx1ZSwgb3IgbnVsbAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VsZWN0KCkKLQl7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgic2VsZWN0Iik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFR5cGUgZ2V0TW9kZWxUeXBlKCkKLQl7Ci0JCXJldHVybiBUeXBlLlZBUklBQkxFOwotCX0KLQkKLQkvKioKLQkgKiBJZiBhbiBYU0xUIDIuMCwgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+YXM8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGFzIHZhbHVlLCBvciBudWxsCi0JICogQHNpbmNlIDEuMQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0QXMoKSB7Ci0JCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgiYXMiKTsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMQXR0cmlidXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTEF0dHJpYnV0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2U0YzI0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMQXR0cmlidXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLS8qKgotICogQW4gYXR0cmlidXRlIG9mIGFuIGVsZW1lbnQgaW4gdGhlIFhTTCBuYW1lc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTEF0dHJpYnV0ZSBleHRlbmRzIFhTTE5vZGUKLXsKLQlmaW5hbCBTdHJpbmcgbmFtZTsKLQlmaW5hbCBTdHJpbmcgdmFsdWU7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudCB0aGlzIGJlbG9uZ3MgdG8KLQkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlCi0JICovCi0JcHVibGljIFhTTEF0dHJpYnV0ZShYU0xFbGVtZW50IGVsZW1lbnQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpCi0JewotCQlzdXBlcihlbGVtZW50LmdldFN0eWxlc2hlZXQoKSwgWFNMTm9kZS5BVFRSSUJVVEVfTk9ERSk7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JCXRoaXMudmFsdWUgPSB2YWx1ZTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBuYW1lIG9mIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlJ3MgbmFtZQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB2YWx1ZSBvZiB0aGlzLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSdzIHZhbHVlCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpCi0JewotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBUeXBlIGdldE1vZGVsVHlwZSgpCi0JewotCQlyZXR1cm4gVHlwZS5BVFRSSUJVVEU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9YU0xFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTEVsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdhOGMyZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTEVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogQW4gZWxlbWVudCBpbiB0aGUgWFNMIG5hbWVzcGFjZS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWFNMRWxlbWVudCBleHRlbmRzIFhTTE5vZGUgewotCWZpbmFsIE1hcDxTdHJpbmcsIFhTTEF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgWFNMQXR0cmlidXRlPigpOwotCWZpbmFsIExpc3Q8WFNMRWxlbWVudD4gY2hpbGRFbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8WFNMRWxlbWVudD4oKTsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0Ci0JICogICAgICAgICAgICB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0bwotCSAqLwotCXB1YmxpYyBYU0xFbGVtZW50KFN0eWxlc2hlZXQgc3R5bGVzaGVldCkgewotCQlzdXBlcihzdHlsZXNoZWV0LCBYU0xOb2RlLkVMRU1FTlRfTk9ERSk7Ci0JfQotCi0JLyoqCi0JICogQWRkIGFuIGF0dHJpYnV0ZSBvZiB0aGlzCi0JICogCi0JICogQHBhcmFtIGF0dHJpYnV0ZQotCSAqICAgICAgICAgICAgdGhlIGF0dHJpYnV0ZSB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoWFNMQXR0cmlidXRlIGF0dHJpYnV0ZSkgewotCQlhdHRyaWJ1dGVzLnB1dChhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlCi0JICovCi0JcHVibGljIFhTTEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgYXR0cmlidXRlcyBrZXllZCBieSB0aGVpciBuYW1lcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBtYXAgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCBpbnN0YW5jZXMKLQkgKi8KLQlwdWJsaWMgTWFwPFN0cmluZywgWFNMQXR0cmlidXRlPiBnZXRBdHRyaWJ1dGVzKCkgewotCQlyZXR1cm4gYXR0cmlidXRlczsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSB2YWx1ZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUoU3RyaW5nIG5hbWUpIHsKLQkJWFNMQXR0cmlidXRlIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZ2V0KG5hbWUpOwotCQlyZXR1cm4gYXR0cmlidXRlID09IG51bGwgPyBudWxsIDogYXR0cmlidXRlLmdldFZhbHVlKCk7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgY2hpbGQgZWxlbWVudCBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBlbGVtZW50Ci0JICogICAgICAgICAgICB0aGUgY2hvbGQgZWxlbWVudAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZENoaWxkKFhTTEVsZW1lbnQgZWxlbWVudCkgewotCQljaGlsZEVsZW1lbnRzLmFkZChlbGVtZW50KTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgY2hpbGQgZWxlbWVudHMKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIGNoaWxkcmVuCi0JICovCi0JcHVibGljIExpc3Q8WFNMRWxlbWVudD4gZ2V0Q2hpbGRFbGVtZW50cygpIHsKLQkJcmV0dXJuIGNoaWxkRWxlbWVudHM7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFR5cGUgZ2V0TW9kZWxUeXBlKCkgewotCQlyZXR1cm4gVHlwZS5PVEhFUl9FTEVNRU5UOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMTW9kZWxPYmplY3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvbW9kZWwvWFNMTW9kZWxPYmplY3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU5NDM4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTE1vZGVsT2JqZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IENoYXNlIFRlY2hub2xvZ2llcyBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbCAoQ2hhc2UgVGVjaG5vbG9naWVzKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybU9iamVjdDsKLQotLyoqCi0gKiAKLSAqIEBzaW5jZSAxLjAKLSAqCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYU0xNb2RlbE9iamVjdCBleHRlbmRzIFBsYXRmb3JtT2JqZWN0Ci17Ci0JcHVibGljIGVudW0gVHlwZSB7U1RZTEVTSEVFVF9NT0RFTCxJTVBPUlQsSU5DTFVERSxURU1QTEFURSxWQVJJQUJMRSwgQ0FMTF9URU1QTEFURSwgU1RZTEVTSEVFVCwgQVRUUklCVVRFLCBPVEhFUl9FTEVNRU5ULAotCS8qKgotCSAqIEBzaW5jZSAxLjEKLQkgKi8KLQlQQVJBTSwKLQkvKioKLQkgKiBAc2luY2UgMS4xCi0JICovCi0JRlVOQ1RJT059OwotCQotCXB1YmxpYyBhYnN0cmFjdCBUeXBlIGdldE1vZGVsVHlwZSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9tb2RlbC9YU0xOb2RlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTE5vZGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhlM2ViZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL21vZGVsL1hTTE5vZGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEEgbm9kZSBpbiB0aGUgWFNMIG5hbWVzcGFjZS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWFNMTm9kZSBleHRlbmRzIFhTTE1vZGVsT2JqZWN0Ci17Ci0JLyoqCi0JICogQSBjb25zdGFudCBmb3IgdGhlIGVsZW1lbnQgbm9kZSAoPSA8Y29kZT5vcmcudzNjLmRvbS5Ob2RlLkVMRU1FTlRfTk9ERTwvY29kZT4pCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBFTEVNRU5UX05PREUgPSBOb2RlLkVMRU1FTlRfTk9ERTsKLQkKLQkvKioKLQkgKiBBIGNvbnN0YW50IGZvciB0aGUgYXR0cmlidXRlIG5vZGUgKD0gPGNvZGU+b3JnLnczYy5kb20uTm9kZS5BVFRSSUJVVEVfTk9ERTwvY29kZT4pCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBBVFRSSUJVVEVfTk9ERSA9IE5vZGUuQVRUUklCVVRFX05PREU7Ci0JCi0JCi0JcHJpdmF0ZSBmaW5hbCBTdHlsZXNoZWV0IHN0eWxlc2hlZXQ7Ci0JaW50IGxpbmVOdW1iZXI7Ci0JaW50IGNvbHVtbk51bWJlcjsKLQlwcml2YXRlIGludCBvZmZzZXQ7Ci0JcHJpdmF0ZSBpbnQgbGVuZ3RoOwotCXByaXZhdGUgc2hvcnQgdHlwZTsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotCQl0aGlzLm5hbWUgPSBuYW1lOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBzdHlsZXNoZWV0IHRoaXMgYmVsb25ncyB0bwotCSAqIEBwYXJhbSB0eXBlIG9uZSBvZiA8Y29kZT5FTEVNRU5UX05PREU8L2NvZGU+IG9yIDxjb2RlPkFUVFJJQlVURV9OT0RFPC9jb2RlPgotCSAqLwotCXB1YmxpYyBYU0xOb2RlKFN0eWxlc2hlZXQgc3R5bGVzaGVldCwgc2hvcnQgdHlwZSkKLQl7Ci0JCXRoaXMuc3R5bGVzaGVldCA9IHN0eWxlc2hlZXQ7Ci0JCXRoaXMudHlwZSA9IHR5cGU7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS4KLQkgKiAKLQkgKiBAcGFyYW0gbGluZU51bWJlciB0aGUgbGluZSBudW1iZXIKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lTnVtYmVyKQotCXsKLQkJdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIGNvbHVtbnMgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLgotCSAqIAotCSAqIEBwYXJhbSBjb2x1bW5OdW1iZXIgdGhlIGNvbHVtbiBudW1iZXIKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRDb2x1bW5OdW1iZXIoaW50IGNvbHVtbk51bWJlcikKLQl7Ci0JCXRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0by4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzdHlsZXNoZWV0Ci0JICovCi0JcHVibGljIFN0eWxlc2hlZXQgZ2V0U3R5bGVzaGVldCgpCi0JewotCQlyZXR1cm4gc3R5bGVzaGVldDsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLgotCSAqIEByZXR1cm4gdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TGluZU51bWJlcigpCi0JewotCQlyZXR1cm4gbGluZU51bWJlcjsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIGNvbHVtbiBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuCi0JICogQHJldHVybiB0aGUgY29sdW1uIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS4KLQkgKi8KLQlwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpCi0JewotCQlyZXR1cm4gY29sdW1uTnVtYmVyOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgZG9jdW1lbnQgb2Zmc2V0IHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMuCi0JICogQHBhcmFtIG9mZnNldCB0aGUgZG9jdW1lbnQgb2Zmc2V0Ci0JICovCi0JcHVibGljIHZvaWQgc2V0T2Zmc2V0KGludCBvZmZzZXQpCi0JewotCQl0aGlzLm9mZnNldCA9IG9mZnNldDsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IHRoZSBkb2N1bWVudCBvZmZzZXQgd2hlcmUgdGhpcyBub2RlIG9jY3Vycy4KLQkgKiBAcmV0dXJuIHRoZSBkb2N1bWVudCBvZmZzZXQKLQkgKi8KLQlwdWJsaWMgaW50IGdldE9mZnNldCgpCi0JewotCQlyZXR1cm4gb2Zmc2V0OwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgbGVuZ3RoIG9mIHRoaXMgbm9kZS4KLQkgKiBAcGFyYW0gbGVuZ3RoIHRoZSBub2RlIGxlbmd0aAotCSAqLwotCXB1YmxpYyB2b2lkIHNldExlbmd0aChpbnQgbGVuZ3RoKQotCXsKLQkJdGhpcy5sZW5ndGggPSBsZW5ndGg7Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgbGVuZ3RoIG9mIHRoaXMgbm9kZS4KLQkgKiBAcmV0dXJuIHRoZSBub2RlIGxlbmd0aAotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkKLQl7Ci0JCXJldHVybiBsZW5ndGg7Ci0JfQotCQotCS8qKgotCSAqIEdldCB0aGUgdHlwZSBvZiBub2RlLgotCSAqIAotCSAqIEByZXR1cm4gb25lIG9mIDxjb2RlPkVMRU1FTlRfTk9ERTwvY29kZT4gb3IgPGNvZGU+QVRUUklCVVRFX05PREU8L2NvZGU+Ci0JICovCi0JcHVibGljIHNob3J0IGdldE5vZGVUeXBlKCkKLQl7Ci0JCXJldHVybiB0eXBlOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlyZXR1cm4gImZpbGU9IitzdHlsZXNoZWV0KyIsIGxpbmU9IitsaW5lTnVtYmVyKyIsIGNvbD0iK2NvbHVtbk51bWJlcjsgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJC8vJE5PTi1OTFMtMyQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL3Jlc29sdmVyL1Jlc29sdmVyRXh0ZW5zaW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL3Jlc29sdmVyL1Jlc29sdmVyRXh0ZW5zaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MGMwMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9yZXNvbHZlci9SZXNvbHZlckV4dGVuc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSmVzcGVyIFN0ZWVuIE1vZWxsZXIgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIFhTTCBjb3JlIHBsdWdpbgotICogRG91ZyBTYXRjaHdlbGwgLSBidWcgMjI1MzA0Ci0gKiBEYXZpZCBDYXJ2ZXIgLSBidWcgMjg0MjAwIC0gbWFrZSBzdXJlIHdlIGdldCBhIG5vbiBYTUwgSW5jbHVkZSBwYXJzZXIgY29uZmlndXJhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlckV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUT0RPOiBKYXZhZG9jCi0gKiAKLSAqIEBhdXRob3IgSmVzcGVyIFN0ZWVuIE1vZWxsZXIKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgUmVzb2x2ZXJFeHRlbnNpb24gaW1wbGVtZW50cyBVUklSZXNvbHZlckV4dGVuc2lvbgotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIERvdWJsZSBERUZBVUxUX1hTTFRfVkVSU0lPTiA9IDEuMDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVF9TVFlMRVNIRUVUID0gInN0eWxlc2hlZXQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTFRfVFJBTlNGT1JNID0gInRyYW5zZm9ybSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVF9WRVJTSU9OID0gInZlcnNpb24iOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGJvb2xlYW4gaW5pdGlhbGlzZWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgeHNsdF8xXzBfZmlsZVVSTDsKLQlwcml2YXRlIFN0cmluZyB4c2x0XzJfMF9maWxlVVJMOwotCi0JcHVibGljIFN0cmluZyByZXNvbHZlKElGaWxlIGZpbGUsIFN0cmluZyBiYXNlTG9jYXRpb24sIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKQotCXsKLQotCQkvLyBJcyBzb21lb25lIGxvb2tpbmcgZm9yICJvdXIiIHNjaGVtYT8KLQkJaWYgKCFYU0xDb3JlLlhTTF9OQU1FU1BBQ0VfVVJJLmVxdWFscyhwdWJsaWNJZCkpCi0JCXsKLQkJCS8vIE5vdCB0aGlzIHRpbWUsIHJldHVybiByaWdodCBhd2F5Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCVN0cmluZyB2ZXJzaW9uID0gbnVsbDsKLQotCQlpZiAoZmlsZSAhPSBudWxsKQotCQkJdmVyc2lvbiA9IHBlZWtWZXJzaW9uQXR0cmlidXRlRnJvbVNTRShmaWxlKTsKLQkJaWYgKHZlcnNpb24gPT0gbnVsbCkKLQkJCXZlcnNpb24gPSBwZWVrVmVyc2lvbkZyb21GaWxlKGZpbGUsIGJhc2VMb2NhdGlvbik7Ci0KLQkJaWYgKHZlcnNpb24gPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCURvdWJsZSB2ZXJzaW9uTnVtYmVyID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCXZlcnNpb25OdW1iZXIgPSBEb3VibGUudmFsdWVPZih2ZXJzaW9uKTsKLQkJfQotCQljYXRjaCAoVGhyb3dhYmxlIHQpCi0JCXsKLQkJCS8vIE5vdCBpbnRlcmVzdGVkCi0JCX0KLQotCQlpZiAodmVyc2lvbk51bWJlciA9PSBudWxsKQotCQl7Ci0JCQl2ZXJzaW9uTnVtYmVyID0gREVGQVVMVF9YU0xUX1ZFUlNJT047Ci0JCX0KLQotCQkvLyBXZSBjYXJlbGVzc2x5IGRpdGNoIHRoZSBmcmFjdGlvbiBwYXJ0Ci0JCWludCBpbnRWZXJzaW9uID0gdmVyc2lvbk51bWJlci5pbnRWYWx1ZSgpOwotCQljaGVja0luaXRpYWxpc2VkKCk7Ci0JCWlmIChpbnRWZXJzaW9uID09IDEpCi0JCXsKLQkJCXJldHVybiB4c2x0XzFfMF9maWxlVVJMOwotCQl9Ci0JCWVsc2UgaWYgKGludFZlcnNpb24gPT0gMikKLQkJewotCQkJcmV0dXJuIHhzbHRfMl8wX2ZpbGVVUkw7Ci0JCX0KLQkJZWxzZQotCQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrSW5pdGlhbGlzZWQoKQotCXsKLQkJaWYgKCFpbml0aWFsaXNlZCkKLQkJewotCQkJaW5pdGlhbGlzZWQgPSB0cnVlOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJVVJMIHBsdWdpblVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoWFNMQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIveHNsdC1zY2hlbWFzL3hzbHQtMS4wLnhzZCIpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCXhzbHRfMV8wX2ZpbGVVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwocGx1Z2luVVJMKS50b0V4dGVybmFsRm9ybSgpOwotCQkJCXBsdWdpblVSTCA9IEZpbGVMb2NhdG9yLmZpbmQoWFNMQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCksIG5ldyBQYXRoKCIveHNsdC1zY2hlbWFzL3hzbHQtMi4wLnhzZCIpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCXhzbHRfMl8wX2ZpbGVVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwocGx1Z2luVVJMKS50b0V4dGVybmFsRm9ybSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJWFNMQ29yZVBsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBwZWVrVmVyc2lvbkZyb21GaWxlKElGaWxlIGZpbGUsIFN0cmluZyBiYXNlTG9jYXRpb24pCi0JewotCQlYU0xWZXJzaW9uSGFuZGxlciBoYW5kbGVyID0gbmV3IFhTTFZlcnNpb25IYW5kbGVyKCk7Ci0JCXRyeQotCQl7Ci0JCQloYW5kbGVyLnBhcnNlQ29udGVudHMoZmlsZSAhPSBudWxsID8gY3JlYXRlSW5wdXRTb3VyY2UoZmlsZSkgOiBjcmVhdGVJbnB1dFNvdXJjZShiYXNlTG9jYXRpb24pKTsKLQkJfQotCQljYXRjaCAoU0FYRXhjZXB0aW9uIHNlKQotCQl7Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhzZSk7Ci0JCQkvLyBkcm9wIHRocm91Z2gsIHNpbmNlIHRoaXMgaXMgYWxtb3N0IHRvIGJlIGV4cGVjdGVkCi0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkKLQkJewotCQkJWFNMQ29yZVBsdWdpbi5sb2cobmV3IENvcmVFeGNlcHRpb24oWFNMQ29yZVBsdWdpbi5uZXdFcnJvclN0YXR1cygiQ2FuJ3QgcGFyc2UgWFNMIGRvY3VtZW50IiwgaW9lKSkpOyAvLyROT04tTkxTLTEkCi0JCQkvLyBkcm9wIHRocm91Z2gsIHNpbmNlIHRoaXMgaXMgbm90IHJlYWxseSBhIHNob3ctc3RvcHBlcgotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHBjZSkKLQkJewotCQkJLy8gc29tZSBiYWQgdGhpbmcgaGFwcGVuZWQgLSBmb3JjZSB0aGlzIGRlc2NyaWJlciB0byBiZSBkaXNhYmxlZAotCQkJU3RyaW5nIG1lc3NhZ2UgPSBNZXNzYWdlcy5YU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb247Ci0JCQlYU0xDb3JlUGx1Z2luLmxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFhTTENvcmVQbHVnaW4uUExVR0lOX0lELCAwLCBtZXNzYWdlLCBwY2UpKTsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKG1lc3NhZ2UpOwotCQkJLy8gZHJvcCB0aHJvdWdoLCBzaW5jZSB0aGlzIGlzIG5vdCByZWFsbHkgYSBzaG93LXN0b3BwZXIKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkKLQkJewotCQkJWFNMQ29yZVBsdWdpbi5sb2coY2UpOwotCQkJLy8gZHJvcCB0aHJvdWdoLCBzaW5jZSB0aGlzIGlzIG5vdCByZWFsbHkgYSBzaG93LXN0b3BwZXIKLQkJfQotCi0JCVN0cmluZyB2ZXJzaW9uWCA9IGhhbmRsZXIuZ2V0VmVyc2lvbkF0dHJpYnV0ZSgpOwotCQlyZXR1cm4gdmVyc2lvblg7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcGVla1ZlcnNpb25BdHRyaWJ1dGVGcm9tU1NFKElGaWxlIGZpbGUpCi0JewotCQlJTW9kZWxNYW5hZ2VyIG1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCWlmIChtYW5hZ2VyICE9IG51bGwpCi0JCXsKLQkJCVN0cmluZyBpZCA9IG1hbmFnZXIuY2FsY3VsYXRlSWQoZmlsZSk7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbWFuYWdlci5nZXRFeGlzdGluZ01vZGVsRm9yUmVhZChpZCk7Ci0JCQl0cnkKLQkJCXsKLQkJCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJRE9NTW9kZWwpCi0JCQkJewotCQkJCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQkJCWlmIChkb2MgIT0gbnVsbCAmJiBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCkgIT0gbnVsbCkKLQkJCQkJewotCQkJCQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCQkJCQlpZiAoWFNMVF9TVFlMRVNIRUVULmVxdWFscyhkb2N1bWVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpIHx8IFhTTFRfVFJBTlNGT1JNLmVxdWFscyhkb2N1bWVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpKQotCQkJCQkJewotCQkJCQkJCXJldHVybiBkb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKFhTTFRfVkVSU0lPTik7Ci0JCQkJCQl9Ci0JCQkJCQllbHNlCi0JCQkJCQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5Ci0JCQl7Ci0JCQkJLy8gYnVnIDIyNTMwNAotCQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIElucHV0U291cmNlIGNyZWF0ZUlucHV0U291cmNlKFN0cmluZyBzeXN0ZW1JZCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBuZXcgSW5wdXRTb3VyY2Uoc3lzdGVtSWQpOwotCX0KLQotCXByaXZhdGUgSW5wdXRTb3VyY2UgY3JlYXRlSW5wdXRTb3VyY2UoSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUlucHV0U291cmNlIHNyYyA9IG5ldyBJbnB1dFNvdXJjZShmaWxlLmdldENvbnRlbnRzKCkpOwotCQlzcmMuc2V0U3lzdGVtSWQoZmlsZS5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOwotCQlyZXR1cm4gc3JjOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvcmVzb2x2ZXIvU3RvcFBhcnNpbmdFeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvcmVzb2x2ZXIvU3RvcFBhcnNpbmdFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNkMDdlZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL3Jlc29sdmVyL1N0b3BQYXJzaW5nRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjsKLQotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBbiBleGNlcHRpb24gaW5kaWNhdGluZyB0aGF0IHRoZSBwYXJzaW5nIHNob3VsZCBzdG9wLiBUaGlzIGlzIHVzdWFsbHkKLSAqIHRyaWdnZXJlZCB3aGVuIHRoZSB0b3AtbGV2ZWwgZWxlbWVudCBoYXMgYmVlbiBmb3VuZC4KLSAqIAotICogQHNpbmNlIDEuMAotICovCi0KLWNsYXNzIFN0b3BQYXJzaW5nRXhjZXB0aW9uIGV4dGVuZHMgU0FYRXhjZXB0aW9uIHsKLQkvKioKLQkgKiBBbGwgc2VyaWFsaXphYmxlIG9iamVjdHMgc2hvdWxkIGhhdmUgYSBzdGFibGUgc2VyaWFsVmVyc2lvblVJRAotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhbiBpbnN0YW5jZSBvZiA8Y29kZT5TdG9wUGFyc2luZ0V4Y2VwdGlvbjwvY29kZT4gd2l0aCBhCi0JICogPGNvZGU+bnVsbDwvY29kZT4gZGV0YWlsIG1lc3NhZ2UuCi0JICovCi0JcHVibGljIFN0b3BQYXJzaW5nRXhjZXB0aW9uKCkgewotCQlzdXBlcigoU3RyaW5nKSBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9yZXNvbHZlci9YU0xWZXJzaW9uSGFuZGxlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9yZXNvbHZlci9YU0xWZXJzaW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njg0NGIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvcmVzb2x2ZXIvWFNMVmVyc2lvbkhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKLSAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcwotICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogCi0gKiBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqIEplc3BlciBTdGVlbiBN77+9bGxlciAtIGFkYXB0ZWQgZnJvbSBvcmcuZWNsaXBzZS5jb3JlLmludGVybmFsLmNvbnRlbnQKLSAqIERhdmlkIENhcnZlciAtIGJ1ZyAyODQyMDAgLSBtYWtlIHN1cmUgd2UgZ2V0IGEgbm9uIFhNTCBJbmNsdWRlIHBhcnNlciBjb25maWd1cmF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLio7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5qYXhwLlNBWFBhcnNlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLnhtbC5zYXguKjsKLWltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjsKLQotLyoqCi0gKiBBIHNpbXBsZSBYTUwgcGFyc2VyIHRvIGZpbmQgdGhlIFhTTCB2ZXJzaW9uIG9mIGEgZ2l2ZW4gWE1MIGZpbGUsIGV4cGVjdGVkbHkgYSBYU0xUIHN0eWxlc2hlZXQuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBYU0xWZXJzaW9uSGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIGltcGxlbWVudHMgTGV4aWNhbEhhbmRsZXIsIEVycm9ySGFuZGxlciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVF9TVFlMRVNIRUVUID0gInN0eWxlc2hlZXQiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMVF9UUkFOU0ZPUk0gPSAidHJhbnNmb3JtIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhTTFRfVkVSU0lPTiA9ICJ2ZXJzaW9uIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogVGhpcyBpcyB0aGUgdmFsdWUgb2YgdGhlIHZlcnNpb24gYXR0cmlidXRlIGluIHRoZSBYU0xUIGZpbGUuCi0JICogVGhpcyBtZW1iZXIgdmFyaWFibGUgaXMgPGNvZGU+bnVsbDwvY29kZT4gdW5sZXNzIHRoZSBmaWxlIGhhcyBiZWVuCi0JICogcGFyc2VkIHN1Y2Nlc3NmdWwgdG8gdGhlIHBvaW50IG9mIGZpbmRpbmcgdGhlIHRvcC1sZXZlbCBlbGVtZW50LAotCSAqIGFuZCBsb2NhdGluZyB0aGUgJ3ZlcnNpb24nIGF0dHJpYnV0ZSB0aGVyZS4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyB2ZXJzaW9uQXR0cmlidXRlID0gbnVsbDsKLQotCS8qKgotCSAqIFRPRE86IEFkZCBKYXZhZG9jCi0JICovCi0JcHVibGljIFhTTFZlcnNpb25IYW5kbGVyKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2NvbW1lbnQoY2hhcltdLCBpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBjb21tZW50KGZpbmFsIGNoYXJbXSBjaCwgZmluYWwgaW50IHN0YXJ0LCBmaW5hbCBpbnQgbGVuZ3RoKSB7Ci0JCS8vIE5vdCBpbnRlcmVzdGVkLgotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBuZXcgU0FYIHBhcnNlciBmb3IgdXNlIHdpdGhpbiB0aGlzIGluc3RhbmNlLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgcGFyc2VyLgotCSAqIAotCSAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIElmIGEgcGFyc2VyIG9mIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSBjcmVhdGVkLgotCSAqIEB0aHJvd3MgU0FYRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgSWYgc29tZXRoaW5nIGluIGdlbmVyYWwgZ29lcyB3cm9uZyB3aGVuIGNyZWF0aW5nIHRoZSBwYXJzZXIuCi0JICogQHRocm93cyBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgSWYgdGhlIDxjb2RlPlhNTFJlYWRlcjwvY29kZT4gZG9lcyBub3QgcmVjb2duaXplIHRoZQotCSAqICAgICAgICAgICAgIGxleGljYWwgaGFuZGxlciBjb25maWd1cmF0aW9uIG9wdGlvbi4KLQkgKiBAdGhyb3dzIFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIElmIHRoZSA8Y29kZT5YTUxSZWFkZXI8L2NvZGU+IGRvZXMgbm90IHN1cHBvcnQgdGhlIGxleGljYWwKLQkgKiAgICAgICAgICAgICBoYW5kbGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgotCSAqLwotCXByaXZhdGUgZmluYWwgc3luY2hyb25pemVkIFNBWFBhcnNlciBjcmVhdGVQYXJzZXIoU0FYUGFyc2VyRmFjdG9yeSBwYXJzZXJGYWN0b3J5KSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBTQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uLCBTQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewotCQkvLyBJbml0aWFsaXplIHRoZSBwYXJzZXIuCi0JCWZpbmFsIFNBWFBhcnNlckltcGwgcGFyc2VyID0gKFNBWFBhcnNlckltcGwpcGFyc2VyRmFjdG9yeS5uZXdTQVhQYXJzZXIoKTsKLQkJZmluYWwgWE1MUmVhZGVyIHJlYWRlciA9IHBhcnNlci5nZXRYTUxSZWFkZXIoKTsKLQkJcmVhZGVyLnNldFByb3BlcnR5KCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9sZXhpY2FsLWhhbmRsZXIiLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJcmVhZGVyLnNldEVycm9ySGFuZGxlcih0aGlzKTsgLy8gVGhpcyBoZWxwcyB0byBpZ25vcmUgZXJyb3JzCi0JCS8vIGRpc2FibGUgRFREIHZhbGlkYXRpb24KLQkJdHJ5IHsKLQkJCS8vCWJlIHN1cmUgdmFsaWRhdGlvbiBpcyAib2ZmIiBvciB0aGUgZmVhdHVyZSB0byBpZ25vcmUgRFREJ3Mgd2lsbCBub3QgYXBwbHkKLQkJCXJlYWRlci5zZXRGZWF0dXJlKCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVhZGVyLnNldEZlYXR1cmUoImh0dHA6Ly9hcGFjaGUub3JnL3htbC9mZWF0dXJlcy9ub252YWxpZGF0aW5nL2xvYWQtZXh0ZXJuYWwtZHRkIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0JCX0gY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZSkgewotCQkJLy8gbm90IGEgYmlnIGRlYWwgaWYgdGhlIHBhcnNlciBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGZlYXR1cmVzCi0JCX0gY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBub3QgYSBiaWcgZGVhbCBpZiB0aGUgcGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZlYXR1cmVzCi0JCX0KLQkJcmV0dXJuIHBhcnNlcjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNlbmRDREFUQSgpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgZW5kQ0RBVEEoKSB7Ci0JCS8vIE5vdCBpbnRlcmVzdGVkLgotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyI2VuZERURCgpCi0JICovCi0JcHVibGljIGZpbmFsIHZvaWQgZW5kRFREKCkgewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNlbmRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBlbmRFbnRpdHkoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJLy8gTm90IGludGVyZXN0ZWQuCi0JfQotCi0JLyoqCi0JICogVE9ETzogQWRkIEphdmFkb2MKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRWZXJzaW9uQXR0cmlidXRlKCkgewotCQlyZXR1cm4gdmVyc2lvbkF0dHJpYnV0ZTsKLQl9Ci0KLQkvKioKLQkgKiBUT0RPOiBBZGQgSmF2YWRvYwotCSAqIEBwYXJhbSBjb250ZW50cwotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JICogQHRocm93cyBTQVhFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwYXJzZUNvbnRlbnRzKElucHV0U291cmNlIGNvbnRlbnRzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIFNBWEV4Y2VwdGlvbiB7Ci0JCS8vIFBhcnNlIHRoZSBmaWxlIGludG8gd2UgaGF2ZSB3aGF0IHdlIG5lZWQgKG9yIGFuIGVycm9yIG9jY3VycykuCi0JCXRyeSB7Ci0JCQlTQVhQYXJzZXJGYWN0b3J5IGZhY3RvcnkgPSBYU0xDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRGYWN0b3J5KCk7Ci0JCQlpZiAoZmFjdG9yeSA9PSBudWxsKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWlmIChmYWN0b3J5LmlzWEluY2x1ZGVBd2FyZSgpKSB7Ci0JCQkJZmFjdG9yeS5zZXRYSW5jbHVkZUF3YXJlKGZhbHNlKTsKLQkJCX0KLQkJCWZpbmFsIFNBWFBhcnNlciBwYXJzZXIgPSBjcmVhdGVQYXJzZXIoZmFjdG9yeSk7Ci0JCQkvLyB0byBzdXBwb3J0IGV4dGVybmFsIGVudGl0aWVzIHNwZWNpZmllZCBhcyByZWxhdGl2ZSBVUklzIChzZWUgYnVnIDYzMjk4KQotCQkJcGFyc2VyLnBhcnNlKGNvbnRlbnRzLCB0aGlzKTsKLQkJfSBjYXRjaCAoU3RvcFBhcnNpbmdFeGNlcHRpb24gZSkgewotCQkJLy8gQWJvcnQgdGhlIHBhcnNpbmcgbm9ybWFsbHkuIEZhbGwgdGhyb3VnaC4uLgotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogUmVzb2x2ZSBleHRlcm5hbCBlbnRpdHkgZGVmaW5pdGlvbnMgdG8gYW4gZW1wdHkgc3RyaW5nLiAgVGhpcyBpcyB0byBzcGVlZAotCSAqIHVwIHByb2Nlc3Npbmcgb2YgZmlsZXMgd2l0aCBleHRlcm5hbCBEVERzLiAgTm90IHJlc29sdmluZyB0aGUgY29udGVudHMgCi0JICogb2YgdGhlIERURCBpcyBvaywgYXMgb25seSB0aGUgU3lzdGVtIElEIG9mIHRoZSBEVEQgZGVjbGFyYXRpb24gaXMgdXNlZC4KLQkgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjcmVzb2x2ZUVudGl0eShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBJbnB1dFNvdXJjZSByZXNvbHZlRW50aXR5KFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG5ldyBJbnB1dFNvdXJjZShuZXcgU3RyaW5nUmVhZGVyKCIiKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNzdGFydENEQVRBKCkKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBzdGFydENEQVRBKCkgewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciNzdGFydERURChqYXZhLmxhbmcuU3RyaW5nLAotCSAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBzdGFydERURChmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIHB1YmxpY0lkLCBmaW5hbCBTdHJpbmcgc3lzdGVtSWQpIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyI3N0YXJ0RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAotCSAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgb3JnLnhtbC5zYXguQXR0cmlidXRlcykKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgZmluYWwgdm9pZCBzdGFydEVsZW1lbnQoZmluYWwgU3RyaW5nIHVyaSwgZmluYWwgU3RyaW5nIGVsZW1lbnROYW1lLCBmaW5hbCBTdHJpbmcgcXVhbGlmaWVkTmFtZSwgZmluYWwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJaWYgKHVyaS5lcXVhbHMoWFNMQ29yZS5YU0xfTkFNRVNQQUNFX1VSSSkgJiYgKFhTTFRfVFJBTlNGT1JNLmVxdWFscyhlbGVtZW50TmFtZSkgfHwgWFNMVF9TVFlMRVNIRUVULmVxdWFscyhlbGVtZW50TmFtZSkpKSB7Ci0JCQl2ZXJzaW9uQXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXRWYWx1ZShYU0xUX1ZFUlNJT04pOwotCQl9IGVsc2UgewotCQkJdmVyc2lvbkF0dHJpYnV0ZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJdGhyb3cgbmV3IFN0b3BQYXJzaW5nRXhjZXB0aW9uKCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIjc3RhcnRFbnRpdHkoamF2YS5sYW5nLlN0cmluZykKLQkgKi8KLQlwdWJsaWMgZmluYWwgdm9pZCBzdGFydEVudGl0eShmaW5hbCBTdHJpbmcgbmFtZSkgewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJLy8gTm90IGludGVyZXN0ZWQuCi0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGVycm9yKFNBWFBhcnNlRXhjZXB0aW9uIGUpIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkvLyBOb3QgaW50ZXJlc3RlZC4KLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBlKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsKLQkJLy8gTm90IGludGVyZXN0ZWQuCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvZW5jb2RpbmcvWFNMRG9jdW1lbnRMb2FkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL2VuY29kaW5nL1hTTERvY3VtZW50TG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGViOGRhNzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvZW5jb2RpbmcvWFNMRG9jdW1lbnRMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2Rpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5BYnN0cmFjdERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5SZWdpb25QYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklFbmNvZGVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWE1MRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnBhcnNlci5YTUxTdHJ1Y3R1cmVkRG9jdW1lbnRSZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhTTFNvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyByZWFkcyBhbiBYU0wgZmlsZSBhbmQgY3JlYXRlcyBhbiBYTUwgU3RydWN0dXJlZCBNb2RlbC4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgWFNMRG9jdW1lbnRMb2FkZXIgZXh0ZW5kcyBBYnN0cmFjdERvY3VtZW50TG9hZGVyIHsKLQotCXB1YmxpYyBYU0xEb2N1bWVudExvYWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSURvY3VtZW50UGFydGl0aW9uZXIgZ2V0RGVmYXVsdERvY3VtZW50UGFydGl0aW9uZXIoKSB7Ci0JCXJldHVybiBuZXcgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCgpOwotCX0KLQotCXB1YmxpYyBJRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3IgZ2V0RG9jdW1lbnRFbmNvZGluZ0RldGVjdG9yKCkgewotCQlpZiAoZkRvY3VtZW50RW5jb2RpbmdEZXRlY3RvciA9PSBudWxsKSB7Ci0JCQlmRG9jdW1lbnRFbmNvZGluZ0RldGVjdG9yID0gbmV3IFhNTERvY3VtZW50Q2hhcnNldERldGVjdG9yKCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudEVuY29kaW5nRGV0ZWN0b3I7Ci0JfQotCi0JcHVibGljIFJlZ2lvblBhcnNlciBnZXRQYXJzZXIoKSB7Ci0JCXJldHVybiBuZXcgWFNMU291cmNlUGFyc2VyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRTcGVjRGVmYXVsdEVuY29kaW5nKCkgewotCQkvLyBieSBkZWZhdWx0LCBVVEYtOCBhcyBwZXIgWE1MIHNwZWMKLQkJZmluYWwgU3RyaW5nIGVuYyA9ICJVVEYtOCI7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGVuYzsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSUVuY29kZWREb2N1bWVudCBuZXdFbmNvZGVkRG9jdW1lbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShnZXRQYXJzZXIoKSk7Ci0JCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnQgaW5zdGFuY2VvZiBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgewotCQkJKChCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgc3RydWN0dXJlZERvY3VtZW50KS5zZXRSZVBhcnNlcihuZXcgWE1MU3RydWN0dXJlZERvY3VtZW50UmVQYXJzZXIoKSk7Ci0JCX0KLQkJcmV0dXJuIHN0cnVjdHVyZWREb2N1bWVudDsKLQl9Ci0KLQlwdWJsaWMgSURvY3VtZW50TG9hZGVyIG5ld0luc3RhbmNlKCkgewotCQlyZXR1cm4gbmV3IFhTTERvY3VtZW50TG9hZGVyKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9tb2RlbGhhbmRsZXIvTW9kZWxIYW5kbGVyRm9yWFNMLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9tb2RlbGhhbmRsZXIvTW9kZWxIYW5kbGVyRm9yWFNMLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE0ZDRiOTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWxoYW5kbGVyL01vZGVsSGFuZGxlckZvclhTTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhNTERvY3VtZW50Q2hhcnNldERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YU0xEb2N1bWVudExvYWRlcjsKLQotCi0vKioKLSAqIFByb3ZpZGVzIGdlbmVyaWMgWE1MIG1vZGVsIGhhbmRsaW5nLiBJdCBpcyBhbHNvIG1hcmtlZCBhcyB0aGUgZGVmYXVsdAotICogY29udGVudCB0eXBlIGhhbmRsZXIuIFRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLSAqIGRlZmF1bHQuCi0gKi8KLXB1YmxpYyBjbGFzcyBNb2RlbEhhbmRsZXJGb3JYU0wgZXh0ZW5kcyBNb2RlbEhhbmRsZXJGb3JYTUwgaW1wbGVtZW50cyBJTW9kZWxIYW5kbGVyIHsKLQkvKioKLQkgKiBOZWVkcyB0byBtYXRjaCB3aGF0J3MgaW4gcGx1Z2luIHJlZ2lzdHJ5LiBJbiBmYWN0LCBjYW4gYmUgb3ZlcndyaXR0ZW4KLQkgKiBhdCBydW4gdGltZSB3aXRoIHdoYXQncyBpbiByZWdpc3RyeSEgKHNvIHNob3VsZCBuZXZlciBiZSAnZmluYWwnKQotCSAqLwotCXN0YXRpYyBTdHJpbmcgQXNzb2NpYXRlZENvbnRlbnRUeXBlSUQgPSBYU0xDb3JlLlhTTF9DT05URU5UX1RZUEU7Ci0JLyoqCi0JICogTmVlZHMgdG8gbWF0Y2ggd2hhdCdzIGluIHBsdWdpbiByZWdpc3RyeS4gSW4gZmFjdCwgY2FuIGJlIG92ZXJ3cml0dGVuCi0JICogYXQgcnVuIHRpbWUgd2l0aCB3aGF0J3MgaW4gcmVnaXN0cnkhIChzbyBzaG91bGQgbmV2ZXIgYmUgJ2ZpbmFsJykKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgTW9kZWxIYW5kbGVySUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsaGFuZGxlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBNb2RlbEhhbmRsZXJGb3JYU0woKSB7Ci0JCXN1cGVyKCk7CQotCQlzZXRJZChNb2RlbEhhbmRsZXJJRCk7Ci0JCXNldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKEFzc29jaWF0ZWRDb250ZW50VHlwZUlEKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSURvY3VtZW50TG9hZGVyIGdldERvY3VtZW50TG9hZGVyKCkgewotCQlyZXR1cm4gbmV3IFhTTERvY3VtZW50TG9hZGVyKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIElEb2N1bWVudENoYXJzZXREZXRlY3RvciBnZXRFbmNvZGluZ0RldGVjdG9yKCkgewotCQlyZXR1cm4gbmV3IFhNTERvY3VtZW50Q2hhcnNldERldGVjdG9yKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIElNb2RlbExvYWRlciBnZXRNb2RlbExvYWRlcigpIHsKLQkJcmV0dXJuIG5ldyBYU0xNb2RlbExvYWRlcigpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvbW9kZWxoYW5kbGVyL1hTTE1vZGVsTG9hZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9tb2RlbGhhbmRsZXIvWFNMTW9kZWxMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODhmN2E3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9tb2RlbGhhbmRsZXIvWFNMTW9kZWxMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuUHJvcGFnYXRpbmdBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuRGVidWdBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRE9NTW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWE1MTW9kZWxMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWFNMRG9jdW1lbnRMb2FkZXI7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIHJlYWRzIGFuIFhNTCBmaWxlIGFuZCBjcmVhdGVzIGFuIFhNTCBTdHJ1Y3R1cmVkIE1vZGVsLgotICogIAotICovCi1wdWJsaWMgY2xhc3MgWFNMTW9kZWxMb2FkZXIgZXh0ZW5kcyBYTUxNb2RlbExvYWRlciB7Ci0KLQkvLwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSX0VOQ09ESU5HID0gImVuY29kaW5nIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogWE1MTG9hZGVyIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFhTTE1vZGVsTG9hZGVyKCkgewotCQlzdXBlcigpOwotCX0KLQotLy8JQE92ZXJyaWRlCi0vLwlwdWJsaWMgTGlzdCBnZXRBZGFwdGVyRmFjdG9yaWVzKCkgewotLy8JCUxpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotLy8JCUlOb2RlQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IG51bGw7Ci0vLwkJZmFjdG9yeSA9IG5ldyBNb2RlbFF1ZXJ5QWRhcHRlckZhY3RvcnlGb3JYTUwoKTsKLS8vCQlyZXN1bHQuYWRkKGZhY3RvcnkpOwotLy8JCS8vIERvZXMgWE1MIG5lZWQgcHJvcGFnYXRpbmcgYWRhcHRlcj8gT3IganVzdCBKU1A/Ci0vLwkJZmFjdG9yeSA9IG5ldyBQcm9wYWdhdGluZ0FkYXB0ZXJGYWN0b3J5SW1wbCgpOwotLy8JCXJlc3VsdC5hZGQoZmFjdG9yeSk7Ci0vLwkJcmV0dXJuIHJlc3VsdDsKLS8vCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJRG9jdW1lbnRMb2FkZXIgZ2V0RG9jdW1lbnRMb2FkZXIoKSB7Ci0JCWlmIChkb2N1bWVudExvYWRlckluc3RhbmNlID09IG51bGwpIHsKLQkJCWRvY3VtZW50TG9hZGVySW5zdGFuY2UgPSBuZXcgWFNMRG9jdW1lbnRMb2FkZXIoKTsKLQkJfQotCQlyZXR1cm4gZG9jdW1lbnRMb2FkZXJJbnN0YW5jZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSU1vZGVsTG9hZGVyIG5ld0luc3RhbmNlKCkgewotCQlyZXR1cm4gbmV3IFhTTE1vZGVsTG9hZGVyKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIElTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwoKSB7Ci0JCXJldHVybiBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgcHJlTG9hZEFkYXB0KElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB7Ci0JCXN1cGVyLnByZUxvYWRBZGFwdChzdHJ1Y3R1cmVkTW9kZWwpOwotCQlJRE9NTW9kZWwgZG9tTW9kZWwgPSAoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWw7Ci0JCS8vIGlmIHRoZXJlIGlzIGEgbW9kZWwgaW4gdGhlIGFkYXB0ZXIsIHRoaXMgd2lsbCBhZGFwdCBpdCB0bwotCQkvLyBmaXJzdCBub2RlLiBBZnRlciB0aGF0IHRoZSBQcm9wYWdhdGluZ0FkYXRlciBzcHJlYWRzIG92ZXIgdGhlCi0JCS8vIGNoaWxkcmVuIGJlaW5nCi0JCS8vIGNyZWF0ZWQuIEVhY2ggdGltZSB0aGF0IGhhcHBlbmRzLCBhIHNpZGUgZWZmZWN0IGlzIHRvCi0JCS8vIGFsc28gInNwcmVhZCIgc3ByZWNpZmljIHJlZ2lzdGVyZWQgYWRhcHRlcnMsCi0JCS8vIHRoZXkgdHdvIGNhbiBwcm9waWdhdGUgaXMgbmVlZGVkLgotCQkoKElOb2RlTm90aWZpZXIpIGRvbU1vZGVsLmdldERvY3VtZW50KCkpLmdldEFkYXB0ZXJGb3IoUHJvcGFnYXRpbmdBZGFwdGVyLmNsYXNzKTsKLQotCQlpZiAoRGVidWcuZGVidWdOb3RpZmljYXRpb25BbmRFdmVudHMpIHsKLQkJCVByb3BhZ2F0aW5nQWRhcHRlciBwcm9wYWdhdGluZ0FkYXB0ZXIgPSAoUHJvcGFnYXRpbmdBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvbU1vZGVsLmdldERvY3VtZW50KCkpLmdldEFkYXB0ZXJGb3IoUHJvcGFnYXRpbmdBZGFwdGVyLmNsYXNzKTsKLQkJCXByb3BhZ2F0aW5nQWRhcHRlci5hZGRBZGFwdE9uQ3JlYXRlRmFjdG9yeShuZXcgRGVidWdBZGFwdGVyRmFjdG9yeSgpKTsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wYXJzZXIvWFNMU291cmNlUGFyc2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wYXJzZXIvWFNMU291cmNlUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Y2FhMmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvcGFyc2VyL1hTTFNvdXJjZVBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5CbG9ja1Rva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5SZWdpb25QYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhNTFNvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi1wdWJsaWMgY2xhc3MgWFNMU291cmNlUGFyc2VyIGV4dGVuZHMgWE1MU291cmNlUGFyc2VyIHsKLQotCi0JcHVibGljIFhTTFNvdXJjZVBhcnNlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFJlZ2lvblBhcnNlciBuZXdJbnN0YW5jZSgpIHsKLQkJWFNMU291cmNlUGFyc2VyIG5ld0luc3RhbmNlID0gbmV3IFhTTFNvdXJjZVBhcnNlcigpOwotCQluZXdJbnN0YW5jZS5zZXRUb2tlbml6ZXIoZ2V0VG9rZW5pemVyKCkubmV3SW5zdGFuY2UoKSk7Ci0JCXJldHVybiBuZXdJbnN0YW5jZTsKLQl9Ci0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc2V0VG9rZW5pemVyKEJsb2NrVG9rZW5pemVyIG5ld1Rva2VuaXplcikgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXN1cGVyLnNldFRva2VuaXplcihuZXdUb2tlbml6ZXIpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwYXJzZU5vZGVzKCkgewotCQkvLyByZWdpb25zIGFyZSBpbml0aWFsbHkgcmVwb3J0ZWQgYXMgY29tcGxldGUgb2Zmc2V0cyB3aXRoaW4gdGhlCi0JCS8vIHNjYW5uZWQgaW5wdXQKLQkJLy8gdGhleSBhcmUgYWRqdXN0ZWQgaGVyZSB0byBiZSBpbmRleGVzIGZyb20gdGhlIGN1cnJlbnROb2RlJ3Mgc3RhcnQKLQkJLy8gb2Zmc2V0Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gaGVhZE5vZGUgPSBudWxsOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGxhc3ROb2RlID0gbnVsbDsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gbnVsbDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBjdXJyZW50Tm9kZSA9IG51bGw7Ci0JCVN0cmluZyB0eXBlID0gbnVsbDsKLQotCQl3aGlsZSAoKHJlZ2lvbiA9IGdldE5leHRSZWdpb24oKSkgIT0gbnVsbCkgewotCQkJdHlwZSA9IHJlZ2lvbi5nZXRUeXBlKCk7Ci0JCQkvLyB0aGVzZSB0eXBlcyAobWlnaHQpIGRlbWFuZCBhIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZm9yIGVhY2gKLQkJCS8vIG9mIHRoZW0KLQkJCQotCQkJaWYgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUKSB7Ci0JCQkJaWYgKGN1cnJlbnROb2RlICE9IG51bGwgJiYgY3VycmVudE5vZGUuZ2V0TGFzdFJlZ2lvbigpLmdldFR5cGUoKSA9PSBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQpIHsKLQkJCQkJLy8gbXVsdGlwbGUgYmxvY2sgdGV4dHMgaW5kaWNhdGVkIGVtYmVkZGVkIGNvbnRhaW5lcnM7IG5vCi0JCQkJCS8vIG5ldyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uCi0JCQkJCWN1cnJlbnROb2RlLmFkZFJlZ2lvbihyZWdpb24pOwotCQkJCQljdXJyZW50Tm9kZS5zZXRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgKyByZWdpb24uZ2V0TGVuZ3RoKCkgLSBjdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkJcmVnaW9uLmFkanVzdFN0YXJ0KC1jdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkJLy8gRFcgNC8xNi8yMDAzIHJlZ2lvbnMgbm8gbG9uZ2VyIGhhdmUgcGFyZW50cwotCQkJCQkvLyByZWdpb24uc2V0UGFyZW50KGN1cnJlbnROb2RlKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCS8vIG5vdCBjb250aW51aW5nIGEgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbgotCQkJCQlpZiAoY3VycmVudE5vZGUgIT0gbnVsbCkgewotCQkJCQkJLy8gZW5zdXJlIHRoYXQgYW55IGV4aXN0aW5nIG5vZGUgaXMgYXQgbGVhc3QKLQkJCQkJCS8vIHRlcm1pbmF0ZWQKLQkJCQkJCWlmICghY3VycmVudE5vZGUuaXNFbmRlZCgpKSB7Ci0JCQkJCQkJY3VycmVudE5vZGUuc2V0TGVuZ3RoKHJlZ2lvbi5nZXRTdGFydCgpIC0gY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJCQkJLy8gZkN1cnJlbnROb2RlLnNldFRleHRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgLQotCQkJCQkJCS8vIGZDdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkJCX0KLQkJCQkJCWxhc3ROb2RlID0gY3VycmVudE5vZGU7Ci0JCQkJCX0KLQkJCQkJZmlyZU5vZGVQYXJzZWQoY3VycmVudE5vZGUpOwotCQkJCQljdXJyZW50Tm9kZSA9IGNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbih0eXBlKTsKLQkJCQkJaWYgKGxhc3ROb2RlICE9IG51bGwpIHsKLQkJCQkJCWxhc3ROb2RlLnNldE5leHQoY3VycmVudE5vZGUpOwotCQkJCQl9Ci0JCQkJCWN1cnJlbnROb2RlLnNldFByZXZpb3VzKGxhc3ROb2RlKTsKLQkJCQkJY3VycmVudE5vZGUuc2V0U3RhcnQocmVnaW9uLmdldFN0YXJ0KCkpOwotCQkJCQljdXJyZW50Tm9kZS5zZXRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgKyByZWdpb24uZ2V0TGVuZ3RoKCkgLSBjdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkJY3VycmVudE5vZGUuc2V0RW5kZWQodHJ1ZSk7Ci0JCQkJCXJlZ2lvbi5hZGp1c3RTdGFydCgtY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJCWN1cnJlbnROb2RlLmFkZFJlZ2lvbihyZWdpb24pOwotCQkJCQkvLyBEVyA0LzE2LzIwMDMgcmVnaW9ucyBubyBsb25nZXIgaGF2ZSBwYXJlbnRzCi0JCQkJCS8vIHJlZ2lvbi5zZXRQYXJlbnQoY3VycmVudE5vZGUpOwotCQkJCX0KLQkJCX0KLQkJCS8vIHRoZSBmb2xsb3dpbmcgY29udGV4dHMgT1BFTiBuZXcgU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucwotCQkJZWxzZSBpZiAoKGN1cnJlbnROb2RlICE9IG51bGwgJiYgY3VycmVudE5vZGUuaXNFbmRlZCgpKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9DSEFSX1JFRkVSRU5DRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfRU5USVRZX1JFRkVSRU5DRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfT1BFTikgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4pIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTikgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9ERUNMQVJBVElPTl9PUEVOKSkgewotCQkJCWlmIChjdXJyZW50Tm9kZSAhPSBudWxsKSB7Ci0JCQkJCS8vIGVuc3VyZSB0aGF0IGFueSBleGlzdGluZyBub2RlIGlzIGF0IGxlYXN0IHRlcm1pbmF0ZWQKLQkJCQkJaWYgKCFjdXJyZW50Tm9kZS5pc0VuZGVkKCkpIHsKLQkJCQkJCWN1cnJlbnROb2RlLnNldExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSAtIGN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCQkJLy8gZkN1cnJlbnROb2RlLnNldFRleHRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgLQotCQkJCQkJLy8gZkN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCQl9Ci0JCQkJCWxhc3ROb2RlID0gY3VycmVudE5vZGU7Ci0JCQkJfQotCQkJCWZpcmVOb2RlUGFyc2VkKGN1cnJlbnROb2RlKTsKLQkJCQljdXJyZW50Tm9kZSA9IGNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbih0eXBlKTsKLQkJCQlpZiAobGFzdE5vZGUgIT0gbnVsbCkgewotCQkJCQlsYXN0Tm9kZS5zZXROZXh0KGN1cnJlbnROb2RlKTsKLQkJCQl9Ci0JCQkJY3VycmVudE5vZGUuc2V0UHJldmlvdXMobGFzdE5vZGUpOwotCQkJCWN1cnJlbnROb2RlLnNldFN0YXJ0KHJlZ2lvbi5nZXRTdGFydCgpKTsKLQkJCQljdXJyZW50Tm9kZS5hZGRSZWdpb24ocmVnaW9uKTsKLQkJCQljdXJyZW50Tm9kZS5zZXRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgKyByZWdpb24uZ2V0TGVuZ3RoKCkgLSBjdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQlyZWdpb24uYWRqdXN0U3RhcnQoLWN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCS8vIERXIDQvMTYvMjAwMyByZWdpb25zIG5vIGxvbmdlciBoYXZlIHBhcmVudHMKLQkJCQkvLyByZWdpb24uc2V0UGFyZW50KGN1cnJlbnROb2RlKTsKLQkJCX0KLQkJCS8vIHRoZSBmb2xsb3dpbmcgY29udGV4dHMgbmVpdGhlciBvcGVuIG5vciBjbG9zZQotCQkJLy8gU3RydWN0dXJlZERvY3VtZW50UmVnaW9uczsganVzdCBhZGQgdG8gdGhlbQotCQkJZWxzZSBpZiAoKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfUElfQ09OVEVOVCkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfRE9DVFlQRV9JTlRFUk5BTF9TVUJTRVQpKSB7Ci0JCQkJY3VycmVudE5vZGUuYWRkUmVnaW9uKHJlZ2lvbik7Ci0JCQkJY3VycmVudE5vZGUuc2V0TGVuZ3RoKHJlZ2lvbi5nZXRTdGFydCgpICsgcmVnaW9uLmdldExlbmd0aCgpIC0gY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJcmVnaW9uLmFkanVzdFN0YXJ0KC1jdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkvLyBEVyA0LzE2LzIwMDMgcmVnaW9ucyBubyBsb25nZXIgaGF2ZSBwYXJlbnRzCi0JCQkJLy8gcmVnaW9uLnNldFBhcmVudChjdXJyZW50Tm9kZSk7Ci0JCQl9Ci0JCQkvLyB0aGUgZm9sbG93aW5nIGNvbnRleHRzIGNsb3NlIG9mZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zCi0JCQkvLyBjbGVhbmx5Ci0JCQllbHNlIGlmICgodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRSkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0UpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0RFQ0xBUkFUSU9OX0NMT1NFKSB8fCAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSkpIHsKLQkJCQljdXJyZW50Tm9kZS5zZXRFbmRlZCh0cnVlKTsKLQkJCQljdXJyZW50Tm9kZS5zZXRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgKyByZWdpb24uZ2V0TGVuZ3RoKCkgLSBjdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQljdXJyZW50Tm9kZS5hZGRSZWdpb24ocmVnaW9uKTsKLQkJCQlyZWdpb24uYWRqdXN0U3RhcnQoLWN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCS8vIERXIDQvMTYvMjAwMyByZWdpb25zIG5vIGxvbmdlciBoYXZlIHBhcmVudHMKLQkJCQkvLyByZWdpb24uc2V0UGFyZW50KGN1cnJlbnROb2RlKTsKLQkJCX0KLQkJCS8vIHRoaXMgaXMgZXh0cmVtZWx5IHJhcmUsIGJ1dCB2YWxpZAotCQkJZWxzZSBpZiAodHlwZSA9PSBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFKSB7Ci0JCQkJSVRleHRSZWdpb24gbGFzdFJlZ2lvbiA9IGN1cnJlbnROb2RlLmdldExhc3RSZWdpb24oKTsKLQkJCQkvLyBwYWNrIHRoZSBlbWJlZGRlZCBjb250YWluZXIgd2l0aCB0aGlzIHJlZ2lvbgotCQkJCWlmIChsYXN0UmVnaW9uIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpIHsKLQkJCQkJSVRleHRSZWdpb25Db250YWluZXIgY29udGFpbmVyID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSBsYXN0UmVnaW9uOwotCQkJCQljb250YWluZXIuZ2V0UmVnaW9ucygpLmFkZChyZWdpb24pOwotCQkJCQkvLyBjb250YWluZXJzIG11c3QgaGF2ZSBwYXJlbnQgc2V0IC4uLgotCQkJCQkvLyBzZXR0aW5nIGZvciBFQUNIIHN1YnJlZ2lvbiBpcyByZWR1bmRlbnQsIGJ1dCBub3Qgc3VyZQotCQkJCQkvLyB3aGVyZSBlbHNlIHRvIGRvLCBzbyB3aWxsIGRvIGhlcmUgZm9yIG5vdy4KLQkJCQkJY29udGFpbmVyLnNldFBhcmVudChjdXJyZW50Tm9kZSk7Ci0JCQkJCS8vIERXIDQvMTYvMjAwMyByZWdpb25zIG5vIGxvbmdlciBoYXZlIHBhcmVudHMKLQkJCQkJLy8gcmVnaW9uLnNldFBhcmVudChjb250YWluZXIpOwotCQkJCQlyZWdpb24uYWRqdXN0U3RhcnQoY29udGFpbmVyLmdldExlbmd0aCgpIC0gcmVnaW9uLmdldFN0YXJ0KCkpOwotCQkJCX0KLQkJCQljdXJyZW50Tm9kZS5nZXRMYXN0UmVnaW9uKCkuYWRqdXN0TGVuZ3RoKHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCQkJY3VycmVudE5vZGUuYWRqdXN0TGVuZ3RoKHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuVU5ERUZJTkVEICYmIGN1cnJlbnROb2RlICE9IG51bGwpIHsKLQkJCQkvLyBza2lwIG9uIGEgdmVyeS1maXJzdCByZWdpb24gc2l0dWF0aW9uIGFzIHRoZSBkZWZhdWx0Ci0JCQkJLy8gYmVoYXZpb3IgaXMgZ29vZCBlbm91Z2gKLQkJCQkvLyBjb21iaW5lIHdpdGggcHJldmlvdXMgaWYgYWxzbyB1bmRlZmluZWQKLQkJCQlpZiAoY3VycmVudE5vZGUuZ2V0TGFzdFJlZ2lvbigpICE9IG51bGwgJiYgY3VycmVudE5vZGUuZ2V0TGFzdFJlZ2lvbigpLmdldFR5cGUoKSA9PSBET01SZWdpb25Db250ZXh0LlVOREVGSU5FRCkgewotCQkJCQljdXJyZW50Tm9kZS5nZXRMYXN0UmVnaW9uKCkuYWRqdXN0TGVuZ3RoKHJlZ2lvbi5nZXRMZW5ndGgoKSk7Ci0JCQkJCWN1cnJlbnROb2RlLmFkanVzdExlbmd0aChyZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQkJCX0KLQkJCQkvLyBwcmV2aW91cyB3YXNuJ3QgdW5kZWZpbmVkCi0JCQkJZWxzZSB7Ci0JCQkJCWN1cnJlbnROb2RlLmFkZFJlZ2lvbihyZWdpb24pOwotCQkJCQljdXJyZW50Tm9kZS5zZXRMZW5ndGgocmVnaW9uLmdldFN0YXJ0KCkgKyByZWdpb24uZ2V0TGVuZ3RoKCkgLSBjdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQkJcmVnaW9uLmFkanVzdFN0YXJ0KC1jdXJyZW50Tm9kZS5nZXRTdGFydCgpKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQkvLyBpZiBhbiB1bmtub3duIHR5cGUgaXMgdGhlIGZpcnN0IHJlZ2lvbiBpbiB0aGUgZG9jdW1lbnQsCi0JCQkJLy8gZW5zdXJlIHRoYXQgYSBub2RlIGV4aXN0cwotCQkJCWlmIChjdXJyZW50Tm9kZSA9PSBudWxsKSB7Ci0JCQkJCWN1cnJlbnROb2RlID0gY3JlYXRlU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKHR5cGUpOwotCQkJCQljdXJyZW50Tm9kZS5zZXRTdGFydChyZWdpb24uZ2V0U3RhcnQoKSk7Ci0JCQkJfQotCQkJCWN1cnJlbnROb2RlLmFkZFJlZ2lvbihyZWdpb24pOwotCQkJCWN1cnJlbnROb2RlLnNldExlbmd0aChyZWdpb24uZ2V0U3RhcnQoKSArIHJlZ2lvbi5nZXRMZW5ndGgoKSAtIGN1cnJlbnROb2RlLmdldFN0YXJ0KCkpOwotCQkJCXJlZ2lvbi5hZGp1c3RTdGFydCgtY3VycmVudE5vZGUuZ2V0U3RhcnQoKSk7Ci0JCQkJLy8gRFcgNC8xNi8yMDAzIHJlZ2lvbnMgbm8gbG9uZ2VyIGhhdmUgcGFyZW50cwotCQkJCS8vIHJlZ2lvbi5zZXRQYXJlbnQoY3VycmVudE5vZGUpOwotCQkJCWlmIChEZWJ1Zy5kZWJ1Z1Rva2VuaXplcikKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBmb3VuZCByZWdpb24gb2Ygbm90IHNwZWNpZmljYWxseSBoYW5kbGVkIHR5cGUgIiArIHJlZ2lvbi5nZXRUeXBlKCkgKyAiIEAgIiArIHJlZ2lvbi5nZXRTdGFydCgpICsgIlsiICsgcmVnaW9uLmdldExlbmd0aCgpICsgIl0iKTsgLy8kTk9OLU5MUy00JC8vJE5PTi1OTFMtMyQvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQkJCS8vJE5PTi1OTFMtMyQvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQkvLyB0aGVzZSByZWdpb25zIGFsc28gZ2V0IHRoZWlyIG93biBub2RlLCBzbyBjbG9zZSB0aGVtIGNsZWFubHkKLQkJCS8vIE5PVEU6IHRoZXNlIHJlZ2lvbnMgaGF2ZSBuZXcgU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyBjcmVhdGVkCi0JCQkvLyBmb3IgdGhlbSBhYm92ZTsgaXQgbWF5Ci0JCQkvLyBiZSBtb3JlIHJlYWRhYmxlIGlmIHRoYXQgaXMgaGFuZGxlZCBoZXJlIGFzIHdlbGwsIGJ1dCB0aGUKLQkJCS8vIGN1cnJlbnQgbGF5b3V0Ci0JCQkvLyBlbnN1cmVzIHRoYXQgdGhleSBvcGVuIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMgdGhlIHNhbWUgd2F5Ci0JCQlpZiAoKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVCkgfHwgKHR5cGUgPT0gRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0hBUl9SRUZFUkVOQ0UpIHx8ICh0eXBlID09IERPTVJlZ2lvbkNvbnRleHQuWE1MX0VOVElUWV9SRUZFUkVOQ0UpKSB7Ci0JCQkJY3VycmVudE5vZGUuc2V0RW5kZWQodHJ1ZSk7Ci0JCQl9Ci0JCQlpZiAoaGVhZE5vZGUgPT0gbnVsbCAmJiBjdXJyZW50Tm9kZSAhPSBudWxsKSB7Ci0JCQkJaGVhZE5vZGUgPSBjdXJyZW50Tm9kZTsKLQkJCX0KLQkJfQotCQlpZiAoY3VycmVudE5vZGUgIT0gbnVsbCkgewotCQkJZmlyZU5vZGVQYXJzZWQoY3VycmVudE5vZGUpOwotCQkJY3VycmVudE5vZGUuc2V0UHJldmlvdXMobGFzdE5vZGUpOwotCQl9Ci0JCS8vIGZTdHJpbmdJbnB1dCA9IG51bGw7Ci0JCXByaW1SZXNldCgpOwotCQlyZXR1cm4gaGVhZE5vZGU7Ci0JfQotCQotfQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wYXJzZXIvcmVnaW9ucy9YUGF0aFNlcGFyYXRvclJlZ2lvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvcGFyc2VyL3JlZ2lvbnMvWFBhdGhTZXBhcmF0b3JSZWdpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmQ1NjNjZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9wYXJzZXIvcmVnaW9ucy9YUGF0aFNlcGFyYXRvclJlZ2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnMuUmVnaW9uVG9TdHJpbmdVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgWFBhdGhTZXBhcmF0b3JSZWdpb24gaW1wbGVtZW50cyBJVGV4dFJlZ2lvbiB7Ci0Jc3RhdGljIHByaXZhdGUgZmluYWwgYnl0ZSBmVGV4dExlbmd0aCA9IDE7Ci0Jc3RhdGljIHByaXZhdGUgZmluYWwgU3RyaW5nIGZUeXBlID0gRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFM7Ci0JcHJpdmF0ZSBzaG9ydCBmTGVuZ3RoOwotCXByaXZhdGUgaW50IGZTdGFydDsKLQotCi0JcHVibGljIFhQYXRoU2VwYXJhdG9yUmVnaW9uKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBYUGF0aFNlcGFyYXRvclJlZ2lvbihpbnQgc3RhcnQsIGludCB0ZXh0TGVuZ3RoLCBpbnQgbGVuZ3RoKSB7Ci0JCXRoaXMoKTsKLQkJZlN0YXJ0ID0gc3RhcnQ7Ci0JCWZMZW5ndGggPSAoc2hvcnQpIGxlbmd0aDsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIGFkanVzdExlbmd0aChpbnQgaSkgewotCQlmTGVuZ3RoICs9IGk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGp1c3RTdGFydChpbnQgaSkgewotCQlmU3RhcnQgKz0gaTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIGFkanVzdFRleHRMZW5ndGgoaW50IGkpIHsKLQkJLy8gbm90IHN1cHBvcnRlZAotCi0JfQotCi0JcHVibGljIHZvaWQgZXF1YXRlUG9zaXRpb25zKElUZXh0UmVnaW9uIHJlZ2lvbikgewotCQlmU3RhcnQgPSByZWdpb24uZ2V0U3RhcnQoKTsKLQkJZkxlbmd0aCA9IChzaG9ydCkgcmVnaW9uLmdldExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0RW5kKCkgewotCQlyZXR1cm4gZlN0YXJ0ICsgZkxlbmd0aDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKLQkJcmV0dXJuIGZMZW5ndGg7Ci0JfQotCi0JcHVibGljIGludCBnZXRTdGFydCgpIHsKLQkJcmV0dXJuIGZTdGFydDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFRleHRFbmQoKSB7Ci0JCXJldHVybiBmU3RhcnQgKyBmVGV4dExlbmd0aDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldFRleHRMZW5ndGgoKSB7Ci0JCXJldHVybiBmVGV4dExlbmd0aDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7Ci0JCXJldHVybiBmVHlwZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlyZXR1cm4gUmVnaW9uVG9TdHJpbmdVdGlsLnRvU3RyaW5nKHRoaXMpOwotCX0KLQotCXB1YmxpYyBTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCB1cGRhdGVSZWdpb24oT2JqZWN0IHJlcXVlc3RlciwgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwYXJlbnQsIFN0cmluZyBjaGFuZ2VzLCBpbnQgcmVxdWVzdFN0YXJ0LCBpbnQgbGVuZ3RoVG9SZXBsYWNlKSB7Ci0JCS8vIGNhbiBuZXZlciBiZSB1cGRhdGVkCi0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3JlZ2lvbnMvWFBhdGhSZWdpb25Db250ZXh0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9yZWdpb25zL1hQYXRoUmVnaW9uQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmNDZkYjhhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3JlZ2lvbnMvWFBhdGhSZWdpb25Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgWFBhdGhSZWdpb25Db250ZXh0IHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJMT0NLX1RFWFQgPSAiQkxPQ0tfVEVYVCI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVOREVGSU5FRCA9ICJVTkRFRklORUQiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXSElURV9TUEFDRSA9ICJXSElURV9TUEFDRSI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhQQVRIX0NPTlRFTlQgPSAiWFBBVEhfQ09OVEVOVCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9TRVBBUkFUT1JfRElWID0gIlhQQVRIX1NFUEFSQVRPUl9ESVYiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19PUEVOID0gIlhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfT1BFTiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX0NMT1NFID0gIlhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfQ0xPU0UiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFBBVEhfRlVOQ1RJT05fTkFNRSA9ICJYUEFUSF9GVU5DVElPTl9OQU1FIjsgLy8kTk9OLU5MUy0xJAotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjX3NzZS9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvaW50ZXJuYWwvcmVnaW9ucy9YU0xQYXJzZXJSZWdpb25GYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9yZWdpb25zL1hTTFBhcnNlclJlZ2lvbkZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVjMTFkZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC9yZWdpb25zL1hTTFBhcnNlclJlZ2lvbkZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zLlhNTFBhcnNlclJlZ2lvbkZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBYU0xQYXJzZXJSZWdpb25GYWN0b3J5IGV4dGVuZHMgWE1MUGFyc2VyUmVnaW9uRmFjdG9yeSB7Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3RleHQvSVhTTFBhcnRpdGlvbnMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3RleHQvSVhTTFBhcnRpdGlvbnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNDhiMWM0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC90ZXh0L0lYU0xQYXJ0aXRpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQ7Ci0KLQotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZC4KLSAqIEl0IGRlZmluZXMgdGhlIHBhcnRpdGlvbiB0eXBlcyBmb3IgWFNMLgotICogQ2xpZW50cyBzaG91bGQgcmVmZXJlbmNlIHRoZSBwYXJ0aXRpb24gdHlwZSBTdHJpbmdzIGRlZmluZWQgaGVyZSBkaXJlY3RseS4KLSAqIAotICogQHNpbmNlIDAuNU03Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVhTTFBhcnRpdGlvbnMgewotCQotCVN0cmluZyBYU0xfWFBBVEggPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5YU0xfWFBBVEgiOyAvLyROT04tTkxTLTEkCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9pbnRlcm5hbC90ZXh0L3J1bGVzL1N0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3RleHQvcnVsZXMvU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhZjczNzQ4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyY19zc2Uvb3JnL2VjbGlwc2Uvd3N0L3hzbC9jb3JlL2ludGVybmFsL3RleHQvcnVsZXMvU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQuSVhTTFBhcnRpdGlvbnM7Ci0KLS8qKgotICogQ29udGFpbnMgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gc2V0dGluZyB1cCBTdHJ1Y3R1cmVkIERvY3VtZW50IFBhcnRpb25zIAotICogaW4gWFNMIGRvY3VtZW50cy4gCi0gKiBAYXV0aG9yIGRjYXJ2ZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMIGV4dGVuZHMgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTCBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHsKLQotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DREFUQSwgSVhNTFBhcnRpdGlvbnMuWE1MX1BJLCBJWE1MUGFydGl0aW9ucy5YTUxfREVDTEFSQVRJT04sIElYTUxQYXJ0aXRpb25zLlhNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5EVERfU1VCU0VULCBJWFNMUGFydGl0aW9ucy5YU0xfWFBBVEh9OwotCi0JLyoqCi0JICogVGhlIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wgYWRkcyB0aGUgbmVjZXNzYXJ5Ci0JICogUGFydGl0aW9uIHR5cGVzIHRvIGhlbHAgSWRlbnRpZnkgcG90ZW50aWFsIFhQYXRoIGFyZWFzLgotCSAqIFRoaXMgaXMgYWxzbyB1c2VkIGZvciBMaW5lIFN0eWxpbmcgYW5kIENvbnRlbnQgQXNzaXN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFBhcnRpdGlvblR5cGUoSVRleHRSZWdpb24gcmVnaW9uLCBpbnQgb2Zmc2V0KSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlpZiAocmVnaW9uLmdldFR5cGUoKSA9PSBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFKSB7Ci0JCQkJCXJlc3VsdCA9IElYU0xQYXJ0aXRpb25zLlhTTF9YUEFUSDsKLQkJfSBlbHNlIHsKLQkJCXJlc3VsdCA9IHN1cGVyLmdldFBhcnRpdGlvblR5cGUocmVnaW9uLCBvZmZzZXQpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQkJcmV0dXJuIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMuY2xvbmUoKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIElEb2N1bWVudFBhcnRpdGlvbmVyIG5ld0luc3RhbmNlKCkgewotCQlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMIGluc3RhbmNlID0gbmV3IFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0woKTsKLQkJcmV0dXJuIGluc3RhbmNlOwotCX0KLQkKLQotCQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hpbmNsdWRlLnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3hzbHQtc2NoZW1hcy94aW5jbHVkZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMWNiMzAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hpbmNsdWRlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVzNDwq4gU09GVFdBUkUgTk9USUNFIEFORCBMSUNFTlNFCi0gKiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMAotICoKLSAqIENvcHlyaWdodCDCqSAxOTk0LTIwMDIgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mCi0gKiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLAotICogS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KLSAqCi0gKiBUaGlzIFczQyB3b3JrIChpbmNsdWRpbmcgc29mdHdhcmUsIGRvY3VtZW50cywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcKLSAqIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuIEJ5IG9idGFpbmluZywKLSAqIHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwKLSAqIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi0gKiBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQotICogb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMKLSAqIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucywgdGhhdAotICogeW91IG1ha2U6Ci0gKgotICogIDEuIFRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZAotICogICAgIG9yIGRlcml2YXRpdmUgd29yay4KLSAqICAyLiBBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kCi0gKiAgICAgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgYSBzaG9ydCBub3RpY2Ugb2YgdGhlIGZvbGxvd2luZyBmb3JtIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkgc2hvdWxkIGJlIHVzZWQgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZTogIkNvcHlyaWdodCDCqSBbJGRhdGUtb2Ytc29mdHdhcmVdIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyIKLSAqICAzLiBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgVzNDIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcwotICogICAgIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzCi0gKiAgICAgZGVyaXZlZC4pCi0gKgotICogVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBOTyAKLSAqIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YKLSAqIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLAotICogVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCi0gKgotICogQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04uCi0gKgotICogVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eQotICogcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQKLSAqIGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggY29weXJpZ2h0Ci0gKiBob2xkZXJzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAotIC0tPgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIgotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiCi0gICAgICAgICAgIGZpbmFsRGVmYXVsdD0iZXh0ZW5zaW9uIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJpbmNsdWRlIiB0eXBlPSJ4aTppbmNsdWRlVHlwZSIgLz4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iaW5jbHVkZVR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnID4KLSAgICAgIDx4czplbGVtZW50IHJlZj0neGk6ZmFsbGJhY2snIC8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdsYXgnIC8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyNsb2NhbCcgcHJvY2Vzc0NvbnRlbnRzPSdsYXgnIC8+Ci0gICAgPC94czpjaG9pY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJocmVmIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBhcnNlIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJ4bWwiCi0gICAgICAgICAgICAgICAgICB0eXBlPSJ4aTpwYXJzZVR5cGUiIC8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ4cG9pbnRlciIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIgdXNlPSJvcHRpb25hbCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhY2NlcHQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9InhzOnN0cmluZyIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWNjZXB0LWxhbmd1YWdlIiB1c2U9Im9wdGlvbmFsIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwYXJzZVR5cGUiPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InhtbCIvPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXh0Ii8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotICAKLSAgPHhzOmVsZW1lbnQgbmFtZT0iZmFsbGJhY2siIHR5cGU9InhpOmZhbGxiYWNrVHlwZSIgLz4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZmFsbGJhY2tUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieGk6aW5jbHVkZSIvPgotICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNsb2NhbCIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICA8L3hzOmNob2ljZT4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hzbHQtMS4wLnhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3hzbHQtc2NoZW1hcy94c2x0LTEuMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYTFiYTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUveHNsdC1zY2hlbWFzL3hzbHQtMS4wLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3MDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA3IC0gVzNDLCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwsCi0gKiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gMjAwNzEyMjggLSBTVEFSIC0gVXBkYXRlZCB0byBYTUwgU2NoZW1hcyAyMDAxIDEuMAotICogICAgICAgICBOb3RlIHRoaXMgc2NoZW1hcyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBmb3IgWFNMVCAyLjAsIGl0IGhhcwotICogICAgICAgICBiZWVuIHN0cmlwcGVkIG9mIGFsbCBYU0xUIDIuMCBhZGRpdGlvbnMsIHRvIGJyaW5nIGl0IGluIGxpbmUgd2l0aCB0aGUgWFNMVCAxLjAKLSAqICAgICAgICAgc3BlY2lmaWNhdGlvbi4KLSAqICAgICAgICAgVGhlIG9yaWdpbmFsIHZlcnNpb24gbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cudzMub3JnLzIwMDcvc2NoZW1hLWZvci14c2x0MjAueHNkCi0gKiAgICAgICAgIFRoZSBvcmlnaW5hbCBXM0MgY29weXJpZ2h0IG5vdGljZSBpcyBpbmNsdWRlZDoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSAyMDA4MDMzMCAtIFNUQVIgLSBidWcgMjI0ODE5IC0gY2hhbmdlZCBwcm9jZXNDb250ZW50cyBmcm9tIGxheCB0byBza2lwCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyOTM5MDIgLSBjb3JyZWN0IGV4Y2x1ZGUtcmVzdWx0LXByZWZpeCB0byB1c2UgcHJlZml4LWxpc3QKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVzNDwq4gU09GVFdBUkUgTk9USUNFIEFORCBMSUNFTlNFCi0gKiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMAotICoKLSAqIENvcHlyaWdodCDCqSAxOTk0LTIwMDIgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mCi0gKiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLAotICogS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KLSAqCi0gKiBUaGlzIFczQyB3b3JrIChpbmNsdWRpbmcgc29mdHdhcmUsIGRvY3VtZW50cywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcKLSAqIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuIEJ5IG9idGFpbmluZywKLSAqIHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwKLSAqIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi0gKiBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQotICogb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMKLSAqIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucywgdGhhdAotICogeW91IG1ha2U6Ci0gKgotICogIDEuIFRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZAotICogICAgIG9yIGRlcml2YXRpdmUgd29yay4KLSAqICAyLiBBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kCi0gKiAgICAgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgYSBzaG9ydCBub3RpY2Ugb2YgdGhlIGZvbGxvd2luZyBmb3JtIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkgc2hvdWxkIGJlIHVzZWQgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZTogIkNvcHlyaWdodCDCqSBbJGRhdGUtb2Ytc29mdHdhcmVdIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyIKLSAqICAzLiBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgVzNDIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcwotICogICAgIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzCi0gKiAgICAgZGVyaXZlZC4pCi0gKgotICogVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBOTyAKLSAqIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YKLSAqIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLAotICogVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCi0gKgotICogQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04uCi0gKgotICogVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eQotICogcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQKLSAqIGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggY29weXJpZ2h0Ci0gKiBob2xkZXJzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAotIC0tPgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiAKLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIAotICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgPgotCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotICAKLSAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0gCi08IS0tCi1UaGUgZGVjbGFyYXRpb24gb2YgeG1sOnNwYWNlIGFuZCB4bWw6bGFuZyBtYXkgbmVlZCB0byBiZSBjb21tZW50ZWQgb3V0IGJlY2F1c2UKLW9mIHByb2JsZW1zIHByb2Nlc3NpbmcgdGhlIHNjaGVtYSB1c2luZyB2YXJpb3VzIHRvb2xzCi0tLT4KLSAgICAgIAotPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgCi0gIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLTx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQQVJUIEE6IGRlZmluaXRpb25zIG9mIGNvbXBsZXggdHlwZXMgYW5kIG1vZGVsIGdyb3VwcyB1c2VkIGFzIHRoZSBiYXNpcyAKLSAgICAgICAgICAgIGZvciBlbGVtZW50IGRlZmluaXRpb25zCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0KLTx4czpjb21wbGV4VHlwZSBuYW1lPSJnZW5lcmljLWVsZW1lbnQtdHlwZSIgbWl4ZWQ9InRydWUiPgotICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08IS0tIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ2ZXJzaW9uZWQtZWxlbWVudC10eXBlIiBtaXhlZD0idHJ1ZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+ICAgIAotICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpkZWNpbWFsIiB1c2U9Im9wdGlvbmFsIi8+Ci0KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLTwveHM6Y29tcGxleFR5cGU+Ci0tLT4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIiBtaXhlZD0iZmFsc2UiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+Ci0gICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLQotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9InNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+ICAgIAotICAgICAgPHhzOmdyb3VwIHJlZj0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yLWdyb3VwIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6Z3JvdXAgbmFtZT0ic2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiPgotICA8eHM6Y2hvaWNlPgotCi0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6dmFyaWFibGUiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzbDppbnN0cnVjdGlvbiIvPgotICAgIDx4czpncm91cCByZWY9InhzbDpyZXN1bHQtZWxlbWVudHMiLz4KLSAgPC94czpjaG9pY2U+Ci08L3hzOmdyb3VwPgotCi08eHM6ZWxlbWVudCBuYW1lPSJkZWNsYXJhdGlvbiIgdHlwZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIiBhYnN0cmFjdD0idHJ1ZSIvPgotCi08eHM6ZWxlbWVudCBuYW1lPSJpbnN0cnVjdGlvbiIgdHlwZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIiBhYnN0cmFjdD0idHJ1ZSIvPgotCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotCi0gICAgUEFSVCBCOiBkZWZpbml0aW9ucyBvZiBpbmRpdmlkdWFsIFhTTFQgZWxlbWVudHMgICAgCi0gICAgRWxlbWVudHMgYXJlIGxpc3RlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuICAgIAotICA8L3hzOmRvY3VtZW50YXRpb24+Ci08L3hzOmFubm90YXRpb24+ICAgCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotCi08eHM6ZWxlbWVudCBuYW1lPSJhcHBseS1pbXBvcnRzIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIFRoaXMgY29tbWFuZCBhcHBsaWVzIHRlbXBsYXRlIHJ1bGUgZnJvbSBhbiBpbXBvcnRlZCBzdHlsZSBzaGVldC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSIvPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImFwcGx5LXRlbXBsYXRlcyIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBBcHBsaWVzIHRlbXBsYXRlIHJ1bGVzIGJhc2VkIG9uIGEgZ2l2ZW4gWFBhdGggc2VsZWN0aW9uIGNyaXRlcmlhLiAgSWYgbm8gdGVtcGxhdGUKLSAgICAgICAgaXMgZm91bmQgdGhlIGJ1aWx0IGluIHRlbXBsYXRlcyBhcmUgdXNlZC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpzb3J0Ii8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6d2l0aC1wYXJhbSIvPgotICAgICAgICA8L3hzOmNob2ljZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiBkZWZhdWx0PSJjaGlsZDo6bm9kZSgpIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIFhQYXRoIGNyaXRlcmlhIHRvIGJlIHVzZWQgdG8gYXBwbHkgdGhlIHRlbXBsYXRlcy4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzbDptb2RlIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRlbXBsYXRlIHRvIGJlIHVzZWQgaWYgdGhlcmUgaXMgbW9yZSB0aGFuCi0gICAgICAgICAgICAgICAgIG9uZSB3YXkgaW4gd2hpY2ggdG8gcHJvY2VzcyB0aGUgZ2l2ZW4gY3JpdGVyaWEuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgRGVmaW5lcyBhbiBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlIHB1dCBpbiB0aGUgcmVzdWx0IHNldC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOmF2dCIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgUmVxdWlyZWQuIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gYmUgY3JlYXRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHNsOmF2dCI+Ci0gICAgICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZS4KLSAgICAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4gICAgICAgIAotCi08eHM6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUtc2V0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBEZWZpbmVzIGEgZ3JvdXAgb2YgYXR0cmlidXRlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBhbmQgY2FuIGJlIHJldXNlZAotICAgICAgICAgYnkgb3RoZXIgcG9ydGlvbnMgb2YgdGhlIHN0eWxlc2hlZXQgZHVyaW5nIHByb2Nlc3NpbmcuICBUaGVzZSBhdHRyaWJ1dGVzCi0gICAgICAgICB3aWxsIGFwcGVhciBvbiB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHdoZW4gdXNlZC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmF0dHJpYnV0ZSIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgc2V0LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2w6UU5hbWVzIiBkZWZhdWx0PSIiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhdHRyaWJ1dGVzLXNldHMgc2VwYXJhdGVkIGJ5IHNwYWNlcyB0byBiZSB1c2VkIGluIHRoaXMKLSAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBzZXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImNhbGwtdGVtcGxhdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgdGVtcGxhdGUgdG8gYmUgY2FsbGVkLiBBIGNhbGxlZCB0ZW1wbGF0ZQotICAgICAgICBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gaXQgaXMgY2FsbGVkLiAgSXQgaXMgbm90IGV4ZWN1dGVkIGRpcmVjdGx5IGJ5Ci0gICAgICAgIGFuIGFwcGx5LXRlbXBsYXRlcyBjb21tYW5kLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aXRoLXBhcmFtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIHRvIGJlIGNhbGxlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY2hvb3NlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBDaG9vc2UgaXMgdGhlIGJlZ2lubmluZyBvZiBhIFdoZW4vT3RoZXJ3aXNlIGNvbWJpbmF0aW9uLiAgSXQgaXMKLSAgICAgICAgIHRoZSB3YXkgdG8gaW1wbGVtZW50IGNhc2Ugc2VsZWN0aW9uIG9mIElmL1RoZW4vRWxzZUlmIHR5cGUgbG9naWNhbAotICAgICAgICAgcHJvY2Vzc2luZy4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aGVuIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOm90aGVyd2lzZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJjb21tZW50IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIENyZWF0ZXMgYSBjb21tZW50IG5vZGUgaW4gdGhlIHJlc3VsdCBkb2N1bWVudC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiLz4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJjb3B5IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBDb3B5IGNyZWF0ZXMgYSBkdXBsaWNhdGUgb2YgdGhlIGN1cnJlbnQgbm9kZSBiZWluZyBwcm9jZXNzZWQuICBJdAotICAgICAgICAgZG9lcyBub3QgY29weSB0aGUgYXR0cmlidXRlcyBvciBjaGlsZHJlbiBub2Rlcy4gIFNlZSBjb3B5LW9mIGZvcgotICAgICAgICAgY29weWluZyBhdHRyaWJ1dGVzIGFuZCBjaGlsZHJlbiBub2Rlcy4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNsOlFOYW1lcyIgZGVmYXVsdD0iIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgQSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzIHNldHMgdG8gYXBwbHkgdG8gdGhlCi0gICAgICAgICAgICAgICAgIHJlc3VsdCBkb2N1bWVudC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY29weS1vZiIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgQ3JlYXRlcyBhIGNvcHktb2YgdGhlIGN1cnJlbnQgbm9kZSBhbmQgYWxsIGF0dHJpYnV0ZXMsIGFuZCBjaGlsZHJlbiBub2Rlcy4KLSAgICAgICAgIEl0IGNvcGllcyB0aGUgbm9kZXMgc3BlY2lmaWVkIGJ5IHRoZSBYUGF0aCBzZWxlY3Rpb24gY3JpdGVyaWEuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFhQYXRoIGV4cHJlc3Npb25zIHRoYXQgc2VsZWN0IHRoZSBub2RlcyB0byBiZSBjb3BpZWQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImRlY2ltYWwtZm9ybWF0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBEZWZpbmVzIHRoZSBvdXRwdXQgZm9ybWF0IHRvIGJlIHVzZWQgd2hlbiBjb252ZXJ0aW5nIG51bWJlcnMgaW50byBzdHJpbmdzIHdoZW4KLSAgICAgICAgIHVzZWQgd2l0aCB0aGUgWFBhdGggZnVuY3Rpb24gZm9ybWF0LW51bWJlcigpLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSB1bmlxdWUgbmFtZSBmb3IgdGhpcyBmb3JtYXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWNpbWFsLXNlcGFyYXRvciIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9Ii4iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVGhlIGNoYXJhY3RlciB0byB1c2UgdG8gcmVwcmVzZW50IGEgZGVjaW1hbCBwb2ludC4KLSAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgcGVyaW9kLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ3JvdXBpbmctc2VwYXJhdG9yIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iLCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBjaGFyYWN0ZXIgdG8gYmUgdXNlZCB0byBzZXBlcmF0ZSB0aG91c2FuZHMuICBUaGUKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYSBjb21tYS4gICAgICAgICAgICAgIAotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5maW5pdHkiIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iSW5maW5pdHkiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgc3RyaW5nIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IGluZmluaXR5LiBUaGUgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgaXMgSW5maW5pdHkuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW51cy1zaWduIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iLSI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBjaGFyYWN0ZXIgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgbmVnYXRpdmUgbnVtYmVycy4KLSAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIHRoZSBtaW51cyBzaWduLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iTmFOIiB0eXBlPSJ4czpzdHJpbmciIGRlZmF1bHQ9Ik5hTiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBUaGUgc3RyaW5nIHRvIGJlIHVzZWQgd2hlbiB0aGUgaW5wdXQgaXMgTm90IGEgTnVtYmVyLgotICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgTmFOLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGVyY2VudCIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IiUiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgY2hhcmFjdGVyIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgcGVyY2VudC4KLSAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIGEgcGVyY2VudCBzaWduLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icGVyLW1pbGxlIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iJiN4MjAzMDsiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgVGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIHRvIHJlcHJlc2V0IHBlciB0aG91c2FuZC4KLSAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICYjeDIwMzA7Ci0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ6ZXJvLWRpZ2l0IiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iMCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBjaGFyYWN0ZXIgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgdGhlIGRpZ2l0IHplcm8uCi0gICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0aGUgbnVtYmVyIHplcm8uCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaWdpdCIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IiMiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIHRvIGluZGljYXRlZCB3aGVyZSBhIGRpZ2l0Ci0gICAgICAgICAgICAgICAgICAgaXMgcmVxdWlyZWQuICBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMgIyBjaGFyYWN0ZXIuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXR0ZXJuLXNlcGFyYXRvciIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IjsiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIHRvIHNlcGFyYXRlIHBvc2l0aXZlIGFuZAotICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlIHN1Yi1wYXR0ZXJucyBpbiBhIHBhdHRlcm4uICBUaGUgZGVmYXVsdCBpcyBhIHNlbWktY29sb24uICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJlbGVtZW50IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBDcmVhdGVzIGFuIGVsZW1lbnQgaW4gdGhlIHJlc3VsdCBkb2N1bWVudC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDphdnQiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gYmUgY3JlYXRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHNsOmF2dCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgbmFtZXNwYWNlIHRoZSBlbGVtZW50IGJlbG9uZ3MuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgQSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGUtc2V0IG5hbWVzIHRvIAotICAgICAgICAgICAgICAgICAgIGJlIGluY2x1ZGVkIG9uIHRoZSBlbGVtZW50LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJmYWxsYmFjayIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiIgdHlwZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgU3BlY2lmaWVzIGFsdGVybmF0ZSBjb2RlIHRvIGJlIHJ1biBpZiB0aGUgWFNMVCBwcm9jZXNzb3IgZG9lc24ndCB1bmRlcnN0YW5kCi0gICAgICAgICAgYSBwYXJ0aWN1bGFyIHhzbCBlbGVtZW50LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZm9yLWVhY2giIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIEEgbG9vcGluZyBjb21tYW5kIHRoYXQgcHJvY2Vzc2VzIGVhY2ggbm9kZSByZXR1cm5lZCBmcm9tIHRoZQotICAgICAgICAgWFBhdGggc2VsZWN0aW9uIGNyaXRlcmlhLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpzb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yLWdyb3VwIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBYUGF0aCBzZWxlY3Rpb24gY3JpdGVyaWEgdG8gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgbm9kZSBzZXQgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSBsb29wLiAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImlmIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBBIGxvZ2ljYWwgY29uc3RydWN0LCB0aGF0IHdpbGwgb25seSBiZSBhcHBsaWVkIHdoZW4gdGhlIFhQYXRoIGV4cHJlc3Npb24KLSAgICAgICAgIHRlc3QgcmV0dXJucyB0cnVlLiAgSXQgZG9lcyBub3Qgc3VwcG9ydCBhIEVsc2Ugc3RhdGVtZW50LCBzZWUgQ2hvb3NlCi0gICAgICAgICBmb3IgaW1wbGVtZW50aW5nIElmL1RoZW4vRWxzZUlmIGxvZ2ljLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBUaGUgWFBhdGggZXhwcmVzc2lvbiB0byB0ZXN0IHRoZSB2YXJpYWJsZSBvciBub2RlIGFnYWluc3QuCi0gICAgICAgICAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnRzIG5lc3RlZCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgaWYgdGhlIHRlc3QgcmV0dXJucwotICAgICAgICAgICAgICAgICAgICB0cnVlLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgQWxsb3dzIHRoZSBpbmNsdXNpb24gb2Ygb25lIHN0eWxlc2hlZXQgaW50byBhbm90aGVyLiAgSWYgdGhlcmUgYXJlCi0gICAgICAgIHRlbXBsYXRlcyB0aGF0IGFyZSB0aGUgc2FtZSBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQgdGhhdCBhcmUgaW4gdGhlCi0gICAgICAgIHN0eWxlc2hlZXQgYmVpbmcgaW1wb3J0ZWQsIHRoZSBwYXJlbnQgc3R5bGVzaGVldCdzIHRlbXBsYXRlcyB3aWxsIAotICAgICAgICB0YWtlIHByZWNlZGVuY2UuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBUaGUgVVJJIGZvciB0aGUgc3R5bGVzaGVldC4gIFRoaXMgaXMgZWl0aGVyIGEgcmVsYXRpdmUKLSAgICAgICAgICAgICAgICAgIG9yIHBoeXNpY2FsIFVSSS4gIElmIGl0IGlzIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24KLSAgICAgICAgICAgICAgICAgIG9mIHRoZSBzdHlsZXNoZWV0LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi0KLTx4czplbGVtZW50IG5hbWU9ImluY2x1ZGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIEluY2x1ZGUgYnJpbmdzIGluIGFub3RoZXIgc3R5bGVzaGVldCBpbnRvIHRoZSBjdXJyZW50IG9uZS4gIFVubGlrZQotICAgICAgICAgdGhlIEltcG9ydCBzdGF0ZW1lbnQsIHRoZSBzdHlsZXNoZWV0IHRlbXBsYXRlcyBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UKLSAgICAgICAgIGFzIHRoZSBvbmUgYmVpbmcgaW5jbHVkZWQgaW4gdG8uCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBVUkkgZm9yIHRoZSBzdHlsZXNoZWV0LiAgVGhpcyBpcyBlaXRoZXIgYSByZWxhdGl2ZQotICAgICAgICAgICAgICAgICAgICAgb3IgcGh5c2ljYWwgVVJJLiAgSWYgaXQgaXMgcmVsYXRpdmUsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN0eWxlc2hlZXQuCi0gICAgICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImtleSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBBIGtleSBpcyBhIHdheSB0byBpbmRleCBhIHNldCBvZiBub2RlcyB0byBiZSByZXRyaWV2ZWQgbGF0ZXIgYnkgdGhlIFhQYXRoCi0gICAgICAgIGtleSgpIGZ1bmN0aW9uLiAgSXQgYWxsb3dzIGZhc3RlciBhY2Nlc3MgdG8gYSBzZXJpZXMgb2Ygbm9kZXMgYmFzZWQgb2ZmIG9mIGEKLSAgICAgICAgdW5pcXVlIGtleSB3aXRoIGluIGEgbGlzdCBvZiBub2Rlcy4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLQotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBuYW1lIG9mIHRoZSBrZXkgdG8gYmUgY3JlYXRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hdGNoIiB0eXBlPSJ4c2w6cGF0dGVybiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBEZWZpbmVzIHRoZSBYUGF0aCBleHByZXNzaW9uIHRvIHdoaWNoIHRoZSBub2RlcyB3aWxsCi0gICAgICAgICAgICAgICAgICBiZSBhcHBsaWVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlIiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSB2YWx1ZSBvZiB0aGUga2V5IGZvciBlYWNoIG9mIHRoZSBub2Rlcy4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJtZXNzYWdlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICBXcml0ZXMgYSBtZXNzYWdlIHRvIHRoZSBvdXRwdXQsIHVzdWFsbHkgc3Rkb3V0IG9yIHN0ZGVycm8uICBUeXBpY2FsbHkKLSAgICAgICAgIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBkdXJpbmcgcHJvY2Vzc2luZy4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRlcm1pbmF0ZSIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0ibm8iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgSW5kaWNhdGVzIHdoZXRoZXIgcHJvY2Vzc2luZyBzaG91bGQgYmUgZW5kZWQgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgIHByb2R1Y2luZyB0aGUgbWVzc2FnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJuYW1lc3BhY2UtYWxpYXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIEFsbG93cyByZXBsYWNpbmcgb2YgYSBwYXJ0aWN1bGFyIG5hbWVzcGFjZSBmcm9tIHRoZSBzdHlsZSBzaGVldCB0byBhIGRpZmZlcmVudAotICAgICAgICAgbmFtZXNwYWNlIHdoZW4gd3JpdGluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0eWxlc2hlZXQtcHJlZml4IiB0eXBlPSJ4c2w6cHJlZml4LW9yLWRlZmF1bHQiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBwcmVmaXggeW91IHdhbnQgdG8gY2hhbmdlLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVzdWx0LXByZWZpeCIgdHlwZT0ieHNsOnByZWZpeC1vci1kZWZhdWx0IiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgcHJlZml4IHRoZSByZXN1bHQgaXMgdG8gdXNlLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJudW1iZXIiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgVXNlZCB0byBkZXRlcm1pbmUgdGhlIGludGVnZXIgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgbm9kZS4gIEFsc28gdXNlZAotICAgICAgICBpbiBmb3JtYXR0aW5nIGEgbnVtYmVyLiAgICAgCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBIG51bWJlciBwcm92aWRlZCBieSB0aGUgaW1wbGVtZW50b3IgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICAgYSBzeXN0ZW0gZ2VuZXJhdGVkIG51bWJlci4gIFRoZSBwb3NpdGlvbigpIHhwYXRoIGZ1bmN0aW9uIGNhbgotICAgICAgICAgICAgICAgICAgYmUgdXNlZCBhcyB3ZWxsLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGV2ZWwiIHR5cGU9InhzbDpsZXZlbCIgZGVmYXVsdD0ic2luZ2xlIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBTcGVjaWZpZXMgaG93IHRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgYXNzaWduZWQuICBWYWxpZCB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgYXJlIHNpbmdsZSAoZGVmYXVsdCksIG11bHRpcGxlLCBhbmQgYW55LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY291bnQiIHR5cGU9InhzbDpwYXR0ZXJuIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgQW4gWFBhdGggZXhwcmVzc2lvbiB0aGF0IGluZGljYXRlcyB3aGF0IG5vZGVzIGFyZSB0byBiZQotICAgICAgICAgICAgICAgICBjb3VudGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnJvbSIgdHlwZT0ieHNsOnBhdHRlcm4iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBbiBYUGF0aCBleHByZXNzaW9uIHRoYXQgaW5kaWNhdGVzIHdoZXJlIGNvdW50aW5nIHdpbGwgc3RhcnQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIHR5cGU9InhzbDphdnQiIGRlZmF1bHQ9IjEiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBUaGUgZm9ybWF0IHN0cmluZyBpbiB3aGljaCB0aGUgbnVtYmVyIGlzIHRvIGJlIGZvcm1hdHRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzbDphdnQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBUaGUgbGFuZ3VhZ2UgY29kZSB1c2VkIHRvIGluZGljYXRlIHdoYXQgc3Bva2VuIGxhbmd1YWdlIGlzCi0gICAgICAgICAgICAgICAgIHRvIGJlIHVzZWQgZm9yIHRoZSBmb3JtYXQgc3RyaW5nLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGV0dGVyLXZhbHVlIiB0eXBlPSJ4c2w6YXZ0Ij4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIG51bWJlciBpcyBhbHBoYWJldGljYWwgb3IgdHJhZGl0aW9uYWwuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzbDphdnQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBUaGUgY2hhcmFjdGVyIHRvIGJlIHVzZWQgdG8gc2VwZXJhdGUgYSBncm91cCBvZiBudW1iZXJzLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ3JvdXBpbmctc2l6ZSIgdHlwZT0ieHNsOmF2dCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIEEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gYSBncm91cC4gIFRoZQotICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyAzLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJvdGhlcndpc2UiIHR5cGU9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIE90aGVyd2lzZSBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBkZWZhdWx0IGFjdGlvbiB3aGVuIG5vbmUgb2YgdGhlIAotICAgICAgICAgV2hlbiB0ZXN0cyBhcmUgdHJ1ZSwgaW4gYSBDaG9vc2Ugc3RhdGVtZW50LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9Im91dHB1dCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIFNwZWNpZmllcyB0aGUgZm9ybWF0IGZvciB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1ldGhvZCIgdHlwZT0ieHNsOm1ldGhvZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFZhbGlkIHZhbHVlcyBhcmUgeG1sLCBodG1sLCBhbmQgdGV4dC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNkYXRhLXNlY3Rpb24tZWxlbWVudHMiIHR5cGU9InhzbDpRTmFtZXMiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIEEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZWxlbWVudHMgd2hvc2UgY29udGVudCBzaG91bGQKLSAgICAgICAgICAgICAgICAgYmUgd3JhcHBlZCB3aXRoIENEQVRBLiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRvY3R5cGUtcHVibGljIiB0eXBlPSJ4czpzdHJpbmciPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBQdWJsaWMgZG9jdHlwZSBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXN5c3RlbSIgdHlwZT0ieHM6c3RyaW5nIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgU3lzdGVtIGRvY3R5cGUgYXR0cmlidXRlLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW5jb2RpbmciIHR5cGU9InhzOnN0cmluZyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGVuY29kaW5nIHRvIHVzZS4gIGkuZS4gVVRGLTgsIFVURi0xNiwgZXRjLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZW50IiB0eXBlPSJ4c2w6eWVzLW9yLW5vIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBTaG91bGQgdGhlIHJlc3VsdCBkb2N1bWVudCBiZSBwcmV0dHktcHJpbnRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1lZGlhLXR5cGUiIHR5cGU9InhzOnN0cmluZyI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIFRoZSBtaW1lIHR5cGUgb2YgdGhlIHJlc3VsdCBkb2N1bWVudC4gIGkuZS4gdGV4dC94bWwKLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im9taXQteG1sLWRlY2xhcmF0aW9uIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFdoZXRoZXIgdGhlIHhtbCBkZWNsYXRpb24gc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIAotICAgICAgICAgICAgICAgICAgcmVzdWx0IGRvY3VtZW50LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RhbmRhbG9uZSIgdHlwZT0ieHNsOnllcy1vci1uby1vci1vbWl0Ij4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBJbmRpY2F0ZXMgaWYgYSBzdGFuZGFsb25lIGRlY2xhcnRpb24gc2hvdWxkIG9jY2N1ciBpbiB0aGUKLSAgICAgICAgICAgICAgICAgcmVzdWx0IGRvY3VtZW50LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHM6Tk1UT0tFTiI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBPcHRpb25hbC4gU2V0cyB0aGUgVzNDIHZlcnNpb24gbnVtYmVyIHRvIGJlIHVzZWQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgcmVzdWx0IGRvY3VtZW50LiAgT25seSB1c2VkIGZvciBIVE1MIG9yIFhNTCBvdXRwdXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InBhcmFtIj4KLSAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICBVc2VkIHRvIGRlY2xhcmUgYSBsb2NhbCBvciBnbG9iYWwgcGFyYW1ldGVyLgotICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgdG8gYmUgY3JlYXRlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgQW4gWFBhdGggZXhwcmVzc2lvbiB0byBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgICAgICAgICAgIGlmIG5vdGhpbmcgaXMgcGFzc2VkIHRvIGl0LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi0KLTx4czplbGVtZW50IG5hbWU9InByZXNlcnZlLXNwYWNlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgSW5kaWNhdGVzIHRoZSBlbGVtZW50cyB0aGF0IGFyZSB0byBoYXZlIHdoaXRlIHNwYWNlIHByZXNlcnZlZCB3aGVuCi0gICAgICAgICBjcmVhdGluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzbDpuYW1ldGVzdHMiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgQSBzcGFjZSBzZXBlcmF0ZWQgbGlzdCBvZiBlbGVtZW50cyBpbiB3aGljaAotICAgICAgICAgICAgICAgICAgd2hpdGUgc3BhY2UgaXMgc2lnbmlmaWNhbnQgYW5kIHNob3VsZCBiZSBwcmVzZXJ2ZWQgd2hlbgotICAgICAgICAgICAgICAgICAgY3JlYXRpbmcgdGhlIHJlc3VsdCBkb2N1bWVudC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0icHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgIENyZWF0ZXMgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGluIHRoZSByZXN1bHQgZG9jdW1lbnQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOmF2dCIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRvIGJlIGNyZWF0ZWQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InNvcnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgU29ydHMgdGhlIG91dHB1dCBvZiB0aGUgbm9kZSBzZXQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBTcGVjaWZpZXMgdGhlIFhQYXRoIGV4cHJlc3Npb24gdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIG5vZGVzZXQKLSAgICAgICAgICAgICAgICAgdG8gYmUgc29ydGVkLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+ICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4c2w6YXZ0Ij4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gVGhlIGxhbmd1YWdlIGNvZGUgdG8gYmUgdXNlZCBmb3Igc29ydGluZy4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPiAgICAgICAgCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGF0YS10eXBlIiB0eXBlPSJ4c2w6YXZ0IiBkZWZhdWx0PSJ0ZXh0Ij4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCBpcyBiZWluZyBzb3J0ZWQuIFRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICBpcyB0ZXh0LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+ICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvcmRlciIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0iYXNjZW5kaW5nIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgZGF0YSBpcyB0byBiZSBzb3J0ZWQuICBUaGUKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYXNjZW5kaW5nLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+ICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXNlLW9yZGVyIiB0eXBlPSJ4c2w6YXZ0Ij4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFNwZWNpZmllcyBpZiB1cHBlciBvciBsb3dlcmNhc2UgbGV0dGVycyBhcmUgdG8gCi0gICAgICAgICAgICAgICAgICBiZSBzb3J0ZWQgZmlyc3QuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InN0cmlwLXNwYWNlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIERlZmluZXMgd2hpY2ggZWxlbWVudHMgYXJlIHRvIGhhdmUgd2hpdGUgc3BhY2Ugc3RyaXBwZWQgd2hlbgotICAgICAgICB3cml0aW5nIHRoZSByZXN1bHQgZG9jdW1lbnQuICAgICAKLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzbDpuYW1ldGVzdHMiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBBIHNwYWNlIHNlcGFyZWF0ZWQgbGlzdCBvZiBlbGVtZW50cyBhcmUgdG8gaGF2ZQotICAgICAgICAgICAgICAgICB3aGl0ZSBzcGFjZSByZW1vdmVkIHdoZW4gd3JpdGluZyB0aGUgcmVzdWx0IGRvY3VtZW50LgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJzdHlsZXNoZWV0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOnRyYW5zZm9ybSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgVGhlIHJvb3QgZWxlbWVudCBvZiBhIHN0eWxlIHNoZWV0LiAgQWxzbyBzZWUgdGhlIHRyYW5zZm9ybSBlbGVtZW50LgotICAgICAgICAgRWl0aGVyIHN0eWxlc2hlZXQgb3IgdHJhbnNmb3JtIGNhbiBiZSB1c2VkLiAgVHlwaWNhbGx5IHN0eWxzaGVldCBpcwotICAgICAgICAgdXNlZC4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InRlbXBsYXRlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICBBIHRlbXBsYXRlIGNvbnRhaW5zIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGFuZCBjb21tYW5kcyBmb3Igbm9kZXMgaW4gdGhlCi0gICAgICAgIGlucHV0IGRvY3VtZW50IHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBYUGF0aCBleHByZXNzaW9uLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6cGFyYW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXRjaCIgdHlwZT0ieHNsOnBhdHRlcm4iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuIEFuIFhQYXRoIGV4cHJlc3Npb24gb3IgZXhwcmVzc2lvbnMgdGhhdCB0aGlzIHRlbXBsYXRlIHdpbGwKLSAgICAgICAgICAgICAgICAgYmUgYXBwbGllZCB0by4gIE5vdGUgaWYgdGhpcyBpcyBvbWl0dGVkLCB0aGVuIGEgbmFtZSBhdHRyaWJ1dGUgbXVzdAotICAgICAgICAgICAgICAgICBiZSB1c2VkLiAgRWl0aGVyIGEgbmFtb2Ugb3IgYSBtYXRjaCBhcmUgdG8gYmUgdXNlZCwgYnV0IG5vdCBib3RoLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHJpb3JpdHkiIHR5cGU9InhzOmRlY2ltYWwiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgSW5kaWNhdGVzIHRoZSBudW1lcmljIHByaW9ydGl0eSBmb3IgcHJvY2Vzc2luZyB0aGUKLSAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9kZSIgdHlwZT0ieHNsOm1vZGVzIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBuYW1lIG9mIHRoZSBtb2RlIGZvciB0aGlzIHRlbXBsYXRlLiAgVXNlZCB0byBtYXRjaAotICAgICAgICAgICAgICAgICAgdXAgd2l0aCB0aGUgYXBwbHktdGVtcGxhdGVzIG1vZGUgYXR0cmlidXRlLgotICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBuYW1lIG9mIGEgY2FsbGVkIHRlbXBsYXRlLiAgTm90ZSB0aGF0IGlmIG5hbWUgaXMKLSAgICAgICAgICAgICAgICAgIG5vdCB1c2VkLCB0aGVuIG1hdGNoIG11c3QgYmUgdXNlZC4gIFlvdSBjYW4gaGF2ZSBvbmUgb3IgdGhlIG90aGVyCi0gICAgICAgICAgICAgICAgICBidXQgbm90IGJvdGguCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czpjb21wbGV4VHlwZSBuYW1lPSJ0ZXh0LWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgPHhzOnNpbXBsZUNvbnRlbnQ+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+Ci0KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVDb250ZW50PgotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmVsZW1lbnQgbmFtZT0idGV4dCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgV3JpdGVzIHRleHQgZGF0YSB0byB0aGUgb3V0cHV0LiAgaS5lLiAjUENEYXRhCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpzaW1wbGVDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dGV4dC1lbGVtZW50LWJhc2UtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmciIHR5cGU9InhzbDp5ZXMtb3Itbm8iIGRlZmF1bHQ9Im5vIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgSW5kaWNhdGVzIGlmIG5vbiBmcmllbmRseSBodG1sIGFuZCB4bWwgY29udGVudCBzaG91bGQgYmUgY29udmVydGVkCi0gICAgICAgICAgICAgICAgIHRvIHRoZWlyIGVudGl0eSB0eXBlcy4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpzaW1wbGVDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0idHJhbnNmb3JtLWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHM6ZGVjaW1hbCIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgICAgICAgICBSZXF1aXJlZC4gIFRoZSB2ZXJzaW9uIG51bWJlciBjb3JyZXNwb25kaW5nIHRoZSB0aGUKLSAgICAgICAgICAgICAgICAgWFNMVCBzcGVjaWZpY2F0aW9uIGJlaW5nIHVzZWQuICBGb3IgWFNMVCAxLjAsIHRoaXMgd2lsbAotICAgICAgICAgICAgICAgICBiZSAxLjAuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIiB0eXBlPSJ4c2w6cHJlZml4LWxpc3QiIHVzZT0ib3B0aW9uYWwiPgotICAgICAgCTx4czphbm5vdGF0aW9uPgotICAgICAgCQk8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6L3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAJCQlPcHRpb25hbC4gQSBsaXN0IG9mIG5hbWVzcGFjZSBwcmVmaXhlcyB0byBleGNsdWRlIGZyb20gdGhlIHJlc3VsdCBkb2N1bWVudC4gI2RlZmF1bHQgZXhjbHVkZXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgotICAgICAgCQk8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAJPC94czphbm5vdGF0aW9uPgotICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzIiB0eXBlPSJ4c2w6cHJlZml4LWxpc3QiIHVzZT0ib3B0aW9uYWwiPgotICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6L3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICBPcHRpb25hbC4gIEEgbGlzdCBvZiBleHRlbnNpb24gbmFtZXNwYWNlIHByZWZpeGVzLiAgVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IG5hbWVzcGFjZXMgdGhhdAotICAgICAgICAgICAgICAgY29udGFpbiBYU0xUIHByb2Nlc3NvciBleHRlbnNpb25zLiAgI2RlZmF1bHQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCi0gICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLTx4czplbGVtZW50IG5hbWU9InRyYW5zZm9ybSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgVGhlIHJvb3QgZWxlbWVudCBvZiBhIHN0eWxlIHNoZWV0LiAgQWxzbyBzZWUgdGhlIHN0eWxlc2hlZXQgZWxlbWVudC4KLSAgICAgICAgIEVpdGhlciBzdHlsZXNoZWV0IG9yIHRyYW5zZm9ybSBjYW4gYmUgdXNlZC4gIFR5cGljYWxseSBzdHlsc2hlZXQgaXMKLSAgICAgICAgIHVzZWQuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dHJhbnNmb3JtLWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmltcG9ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpkZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6dmFyaWFibGUiLz4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnBhcmFtIi8+ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4gPCEtLSB3ZWFrZXIgdGhhbiBYU0xUIDEuMCAtLT4KLSAgICAgICAgICA8L3hzOmNob2ljZT4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgT3B0aW9uYWwuICBBIHVuaXF1ZSBJRCBmb3IgdGhlIHN0eWxlc2hlZXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InZhbHVlLW9mIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIFVzZWQgdG8gcHVsbCB0aGUgZGF0YSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3RlZCBub2RlIG9yIFhQYXRoIGV4cHJlc3Npb24uCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBUaGUgWFBhdGggZXhwcmVzc2lvbiBvciBjdXJyZW50IG5vZGUgdG8gYmUgdXNlZAotICAgICAgICAgICAgICAgICB0byBwdWxsIHRoZSBkYXRhIGZyb20uCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ibm8iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiBXaGV0aGVyIG5vbi14bWwgZnJpZW5kbHkgZGF0YSBzaG91bGQgYmUgZW50aXR5IGVzY2FwZWQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InZhcmlhYmxlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgIERlY2xhcmVzIGEgbG9jYWwgb3IgZ2xvYmFsIHZhcmlhYmxlIHRvIGJlIHVzZWQgZHVyaW5nIHByb2Nlc3NpbmcuCi0gICAgICAgIFRoZSBjb250ZW50cyBvZiB2YXJpYWJsZSBjYW4gYmUgcG9wdWxhdGVkIGJ5IGVpdGhlciBhIHNlcmllcyBvZgotICAgICAgICBYU0xUIGNvbW1hbmRzIG9yIFhQYXRoIGV4cHJlc3Npb25zLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgUmVxdWlyZWQuICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuICBUaGlzIGlzIGhvdyB0aGUKLSAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgYWNjZXNzZWQgbGF0ZXIgaW4gdGhlIHN0eWxlc2hlZXQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9Im9wdGlvbmFsIj4KLSAgICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+Ci0gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gIFRoZSBYUGF0aCBleHByZXNzaW9uIGluIHdoaWNoIHRoZSB2YXJpYWJsZSBpcwotICAgICAgICAgICAgICAgICAgcG9wdWxhdGVkIGZyb20uICBUaGlzIHNwZWNpZmllcyB3aGVyZSB0aGUgdmFyaWFibGUgaXMgdG8gZ2V0Ci0gICAgICAgICAgICAgICAgICBpdCdzIGRhdGEgdmFsdWUgZnJvbS4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0id2hlbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hzbHQiPgotICAgICAgICAgQSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgc2ltaWxpYXIgdG8gYW4gaWYgc3RhdGVtZW50LCB1c2VkIHRvIHRlc3QKLSAgICAgICAgIGlmIGEgcGFydGljdWxhciBleHByZXNzaW9uIGlzIHRydWUgb3IgZmFsc2UuICBVc2Ugd2l0aCB0aGUgQ2hvb3NlIGFuZAotICAgICAgICAgT3RoZXIgd2lzZSBlbGVtZW50cy4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgQW4gWFBhdGggZXhwcmVzc2lvbiB0aGF0IHRlc3RzIHRvIHRydWUgb3IgZmFsc2UuICBJZiB0cnVlCi0gICAgICAgICAgICAgICAgIHRoZSBzdGF0ZW1lbnRzIHdpdGhpbiBhcmUgZXhlY3V0ZWQuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9IndpdGgtcGFyYW0iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgRGVmaW5lcyB0aGUgdmFsdWUgb2YgYSBwYXJhbWV0ZXIgdG8gYmUgcGFzc2VkIHRvIGEgY2FsbGVkIHRlbXBsYXRlLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIFJlcXVpcmVkLiAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB0byBiZSBzZXQuICBUaGlzCi0gICAgICAgICAgICAgICAgICBtdXN0IGV4aXN0IGluIHRoZSB0ZW1wbGF0ZSB0aGF0IGlzIGJlaW5nIGNhbGxlZC4KLSAgICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iPgotICAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij4KLSAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLiAgQW4gWFBhdGggZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gc2V0Ci0gICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgYmVpbmcgcGFzc2VkIHRvIGEgdGVtcGxhdGUuCi0gICAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci08eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgUEFSVCBDOiBkZWZpbml0aW9uIG9mIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnRzCi0gICAgCi0gICAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gZGVmaW5lIHRoZSBsaXRlcmFsIHJlc3VsdCBlbGVtZW50cwotICAgIHBlcm1pc3NpYmxlIGluIGEgc3R5bGVzaGVldC4KLSAgICAKLSAgICAoYSkgZG8gbm90aGluZy4gVGhpcyBhbGxvd3MgYW55IGVsZW1lbnQgdG8gYmUgdXNlZCBhcyBhIGxpdGVyYWwKLSAgICAgICAgcmVzdWx0IGVsZW1lbnQsIHByb3ZpZGVkIGl0IGlzIG5vdCBpbiB0aGUgWFNMVCBuYW1lc3BhY2UKLSAgICAKLSAgICAoYikgZGVjbGFyZSBhbGwgcGVybWl0dGVkIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnRzIGFzIG1lbWJlcnMKLSAgICAgICAgb2YgdGhlIHhzbDpsaXRlcmFsLXJlc3VsdC1lbGVtZW50IHN1YnN0aXR1dGlvbiBncm91cAotICAgICAgICAKLSAgICAoYykgcmVkZWZpbmUgdGhlIG1vZGVsIGdyb3VwIHhzbDpyZXN1bHQtZWxlbWVudHMgdG8gYWNjb21tb2RhdGUKLSAgICAgICAgYWxsIHBlcm1pdHRlZCBsaXRlcmFsIHJlc3VsdCBlbGVtZW50cy4KLSAgICAgICAgCi0gICAgTGl0ZXJhbCByZXN1bHQgZWxlbWVudHMgYXJlIGFsbG93ZWQgdG8gdGFrZSBjZXJ0YWluIGF0dHJpYnV0ZXMKLSAgICBpbiB0aGUgWFNMVCBuYW1lc3BhY2UuIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBhdHRyaWJ1dGUgZ3JvdXAKLSAgICBsaXRlcmFsLXJlc3VsdC1lbGVtZW50LWF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUKLSAgICBkZWZpbml0aW9uIG9mIGFueSBsaXRlcmFsIHJlc3VsdCBlbGVtZW50LgotICAgIAotICA8L3hzOmRvY3VtZW50YXRpb24+Ci0KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0KLTx4czplbGVtZW50IG5hbWU9ImxpdGVyYWwtcmVzdWx0LWVsZW1lbnQiIGFic3RyYWN0PSJ0cnVlIiB0eXBlPSJ4czphbnlUeXBlIi8+Ci0KLTx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXRlcmFsLXJlc3VsdC1lbGVtZW50LWF0dHJpYnV0ZXMiPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlZmF1bHQtY29sbGF0aW9uIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDp1cmktbGlzdCIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpwcmVmaXhlcyIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpwcmVmaXhlcyIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9InhwYXRoLWRlZmF1bHQtbmFtZXNwYWNlIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzOmFueVVSSSIvPiAgICAKLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmhlcml0LW5hbWVzcGFjZXMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ieWVzIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiIvPgotCi0gIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLXdoZW4iIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzOmRlY2ltYWwiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpRTmFtZSIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRpb24iIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnZhbGlkYXRpb24tdHlwZSIvPgotPC94czphdHRyaWJ1dGVHcm91cD4KLQotPHhzOmdyb3VwIG5hbWU9InJlc3VsdC1lbGVtZW50cyI+Ci0gIDx4czpjaG9pY2U+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6bGl0ZXJhbC1yZXN1bHQtZWxlbWVudCIvPgotICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLQotICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI2xvY2FsIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLSAgPC94czpjaG9pY2U+Ci08L3hzOmdyb3VwPgotCi0KLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci08eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgUEFSVCBEOiBkZWZpbml0aW9ucyBvZiBzaW1wbGUgdHlwZXMgdXNlZCBpbiBzdHlsZXNoZWV0IGF0dHJpYnV0ZXMgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9ImF2dCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgVGhpcyB0eXBlIGlzIHVzZWQgZm9yIGFsbCBhdHRyaWJ1dGVzIHRoYXQgYWxsb3cgYW4gYXR0cmlidXRlIHZhbHVlIHRlbXBsYXRlLgotICAgICAgVGhlIGdlbmVyYWwgcnVsZXMgZm9yIHRoZSBzeW50YXggb2YgYXR0cmlidXRlIHZhbHVlIHRlbXBsYXRlcywgYW5kIHRoZSBzcGVjaWZpYwotICAgICAgcnVsZXMgZm9yIGVhY2ggc3VjaCBhdHRyaWJ1dGUsIGFyZSBkZXNjcmliZWQgaW4gdGhlIFhTTFQgMi4wIFJlY29tbWVuZGF0aW9uLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9ImNoYXIiPgotICA8eHM6YW5ub3RhdGlvbj4KLQotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgQSBzdHJpbmcgY29udGFpbmluZyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotICAgIDx4czpsZW5ndGggdmFsdWU9IjEiLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iZXhwcmVzc2lvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotCi0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBbiBYUGF0aCAyLjAgZXhwcmVzc2lvbi4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6cGF0dGVybiB2YWx1ZT0iLisiLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iaW5wdXQtdHlwZS1hbm5vdGF0aW9ucy10eXBlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIERlc2NyaWJlcyBob3cgdHlwZSBhbm5vdGF0aW9ucyBpbiBzb3VyY2UgZG9jdW1lbnRzIGFyZSBoYW5kbGVkLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0cmlwIi8+ICAgCi0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bnNwZWNpZmllZCIvPiAgICAgICAgCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9ImxldmVsIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGUgbGV2ZWwgYXR0cmlidXRlIG9mIHhzbDpudW1iZXI6IAotICAgICAgb25lIG9mIHNpbmdsZSwgbXVsdGlwbGUsIG9yIGFueS4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzaW5nbGUiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im11bHRpcGxlIi8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbnkiLz4KLQotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJtb2RlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGUgbW9kZSBhdHRyaWJ1dGUgb2YgeHNsOmFwcGx5LXRlbXBsYXRlczogCi0gICAgICBlaXRoZXIgYSBRTmFtZSwgb3IgI2N1cnJlbnQsIG9yICNkZWZhdWx0LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzbDpRTmFtZSI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2RlZmF1bHQiLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjY3VycmVudCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6dW5pb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Im1vZGVzIj4KLSAgPHhzOmFubm90YXRpb24+Ci0KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBtb2RlIGF0dHJpYnV0ZSBvZiB4c2w6dGVtcGxhdGU6IAotICAgICAgZWl0aGVyIGEgbGlzdCwgZWFjaCBtZW1iZXIgYmVpbmcgZWl0aGVyIGEgUU5hbWUgb3IgI2RlZmF1bHQ7Ci0gICAgICBvciB0aGUgdmFsdWUgI2FsbAotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6bGlzdD4KLSAgICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPHhzOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2w6UU5hbWUiPgotCi0gICAgICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNkZWZhdWx0Ii8+Ci0gICAgICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPC94czp1bmlvbj4KLSAgICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgPC94czpsaXN0PgotICAgIDwveHM6c2ltcGxlVHlwZT4KLQotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ibmFtZXRlc3RzIj4KLSAgPHhzOmFubm90YXRpb24+Ci0KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEEgbGlzdCBvZiBOYW1lVGVzdHMsIGFzIGRlZmluZWQgaW4gdGhlIFhQYXRoIDIuMCBSZWNvbW1lbmRhdGlvbi4KLSAgICAgIEVhY2ggTmFtZVRlc3QgaXMgZWl0aGVyIGEgUU5hbWUsIG9yICIqIiwgb3IgInByZWZpeDoqIiwgb3IgIio6bG9jYWxuYW1lIgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6bGlzdD4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHNsOlFOYW1lIj4KLSAgICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLQotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIqIi8+Ci0gICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlxpXGMqOlwqIi8+Ci0gICAgICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXCo6XGlcYyoiLz4gICAgICAgICAgICAKLSAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgICAgIDwveHM6dW5pb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOmxpc3Q+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InByZWZpeGVzIj4KLSAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOk5DTmFtZSIvPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJwcmVmaXgtbGlzdC1vci1hbGwiPgotICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzbDpwcmVmaXgtbGlzdCI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2FsbCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6dW5pb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAKLTx4czpzaW1wbGVUeXBlIG5hbWU9InByZWZpeC1saXN0Ij4KLSAgPHhzOmxpc3QgaXRlbVR5cGU9InhzbDpwcmVmaXgtb3ItZGVmYXVsdCIvPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJtZXRob2QiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBtZXRob2QgYXR0cmlidXRlIG9mIHhzbDpvdXRwdXQ6Ci0gICAgICBFaXRoZXIgb25lIG9mIHRoZSByZWNvZ25pemVkIG5hbWVzICJ4bWwiLCAieGh0bWwiLCAiaHRtbCIsICJ0ZXh0IiwKLSAgICAgIG9yIGEgUU5hbWUgdGhhdCBtdXN0IGluY2x1ZGUgYSBwcmVmaXguCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOQ05hbWUiPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InhtbCIvPgotCi0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieGh0bWwiLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJodG1sIi8+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGV4dCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOlFOYW1lIj4KLSAgICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlxjKjpcYyoiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6dW5pb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InBhdHRlcm4iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEEgbWF0Y2ggcGF0dGVybiBhcyBkZWZpbmVkIGluIHRoZSBYU0xUIDIuMCBSZWNvbW1lbmRhdGlvbi4KLSAgICAgIFRoZSBzeW50YXggZm9yIHBhdHRlcm5zIGlzIGEgcmVzdHJpY3RlZCBmb3JtIG9mIHRoZSBzeW50YXggZm9yCi0gICAgICBYUGF0aCAyLjAgZXhwcmVzc2lvbnMuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotCi08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InByZWZpeC1vci1kZWZhdWx0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBFaXRoZXIgYSBuYW1lc3BhY2UgcHJlZml4LCBvciAjZGVmYXVsdC4KLSAgICAgIFVzZWQgaW4gdGhlIHhzbDpuYW1lc3BhY2UtYWxpYXMgZWxlbWVudC4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnVuaW9uIG1lbWJlclR5cGVzPSJ4czpOQ05hbWUiPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLQotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNkZWZhdWx0Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iUU5hbWVzIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBIGxpc3Qgb2YgUU5hbWVzLgotICAgICAgVXNlZCBpbiB0aGUgW3hzbDpddXNlLWF0dHJpYnV0ZS1zZXRzIGF0dHJpYnV0ZSBvZiB2YXJpb3VzIGVsZW1lbnRzLAotICAgICAgYW5kIGluIHRoZSBjZGF0YS1zZWN0aW9uLWVsZW1lbnRzIGF0dHJpYnV0ZSBvZiB4c2w6b3V0cHV0Ci0gICAgPC94czpkb2N1bWVudGF0aW9uPgotCi0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmxpc3QgaXRlbVR5cGU9InhzbDpRTmFtZSIvPiAgICAgICAgICAKLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iUU5hbWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEEgUU5hbWUuCi0gICAgICBUaGlzIHNjaGVtYSBkb2VzIG5vdCB1c2UgdGhlIGJ1aWx0LWluIHR5cGUgeHM6UU5hbWUsIGJ1dCByYXRoZXIgZGVmaW5lcyBpdHMgb3duCi0gICAgICBRTmFtZSB0eXBlLiBBbHRob3VnaCB4czpRTmFtZSB3b3VsZCBkZWZpbmUgdGhlIGNvcnJlY3QgdmFsaWRhdGlvbiBvbiB0aGVzZSBhdHRyaWJ1dGVzLAotICAgICAgYSBzY2hlbWEgcHJvY2Vzc29yIHdvdWxkIGV4cGFuZCB1bnByZWZpeGVkIFFOYW1lcyBpbmNvcnJlY3RseSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgUFNWSSwKLSAgICAgIGJlY2F1c2UgKGFzIGRlZmluZWQgaW4gWE1MIFNjaGVtYSBlcnJhdGEpIGFuIHVucHJlZml4ZWQgeHM6UU5hbWUgaXMgYXNzdW1lZCB0byBiZSBpbgotICAgICAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLCB3aGljaCBpcyBub3QgdGhlIGNvcnJlY3QgYXNzdW1wdGlvbiBmb3IgWFNMVC4KLSAgICAgIFRoZSBkYXRhIHR5cGUgaXMgZGVmaW5lZCBhcyBhIHJlc3RyaWN0aW9uIG9mIHRoZSBidWlsdC1pbiB0eXBlIE5hbWUsIHJlc3RyaWN0ZWQKLSAgICAgIHNvIHRoYXQgaXQgY2FuIG9ubHkgY29udGFpbiBvbmUgY29sb24gd2hpY2ggbXVzdCBub3QgYmUgdGhlIGZpcnN0IG9yIGxhc3QgY2hhcmFjdGVyLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TmFtZSI+Ci0KLSAgICA8eHM6cGF0dGVybiB2YWx1ZT0iKFteOl0rOik/W146XSsiLz4gICAgICAKLSAgPC94czpyZXN0cmljdGlvbj4gICAgICAgIAotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJzZXF1ZW5jZS10eXBlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGUgZGVzY3JpcHRpb24gb2YgYSBkYXRhIHR5cGUsIGNvbmZvcm1pbmcgdG8gdGhlCi0gICAgICBTZXF1ZW5jZVR5cGUgcHJvZHVjdGlvbiBkZWZpbmVkIGluIHRoZSBYUGF0aCAyLjAgUmVjb21tZW5kYXRpb24KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLQotICAgIDx4czpwYXR0ZXJuIHZhbHVlPSIuKyIvPiAgICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJ1cmktbGlzdCI+Ci0gIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czphbnlVUkkiLz4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0idmFsaWRhdGlvbi1zdHJpcC1vci1wcmVzZXJ2ZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRGVzY3JpYmVzIGRpZmZlcmVudCB3YXlzIG9mIHR5cGUtYW5ub3RhdGluZyBhbiBlbGVtZW50IG9yIGF0dHJpYnV0ZS4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOnZhbGlkYXRpb24tdHlwZSI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzZXJ2ZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaXAiLz4gICAgCi0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InZhbGlkYXRpb24tdHlwZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRGVzY3JpYmVzIGRpZmZlcmVudCB3YXlzIG9mIHR5cGUtYW5ub3RhdGluZyBhbiBlbGVtZW50IG9yIGF0dHJpYnV0ZS4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaWN0Ii8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsYXgiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNlcnZlIi8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdHJpcCIvPiAgICAKLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ieWVzLW9yLW5vIj4KLSAgPHhzOmFubm90YXRpb24+Ci0KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE9uZSBvZiB0aGUgdmFsdWVzICJ5ZXMiIG9yICJubyIuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ5ZXMiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Inllcy1vci1uby1vci1vbWl0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBPbmUgb2YgdGhlIHZhbHVlcyAieWVzIiBvciAibm8iIG9yICJvbWl0Ii4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InllcyIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm8iLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9taXQiLz4KLQotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3hzbHQtc2NoZW1hcy94c2x0LTIuMC54c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS94c2x0LXNjaGVtYXMveHNsdC0yLjAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjU3M2NiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3hzbHQtc2NoZW1hcy94c2x0LTIuMC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTczICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLSAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDcgLSBXM0MsIFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCwKLSAqIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSAyMDA4MDMzMCAtIFNUQVIgLSBidWcgMjI0ODE5IC0gY2hhbmdlZCBwcm9jZXNDb250ZW50cyBmcm9tIGxheCB0byBza2lwCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyNzk3MzcgLSB1c2UgbmFtZXNwYWNlIHRvIGltcG9ydCB4bWwgc2NoZW1hIGRlZmluaXRpb25zLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFczQ8KuIFNPRlRXQVJFIE5PVElDRSBBTkQgTElDRU5TRQotICogaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9jb3B5cmlnaHQtc29mdHdhcmUtMTk5ODA3MjAKLSAqCi0gKiBDb3B5cmlnaHQgwqkgMTk5NC0yMDAyIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZgotICogVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwKLSAqIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvCi0gKgotICogVGhpcyBXM0Mgd29yayAoaW5jbHVkaW5nIHNvZnR3YXJlLCBkb2N1bWVudHMsIG9yIG90aGVyIHJlbGF0ZWQgaXRlbXMpIGlzIGJlaW5nCi0gKiBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLiBCeSBvYnRhaW5pbmcsCi0gKiB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsCi0gKiB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotICogZG9jdW1lbnRhdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKLSAqIG9yIHJveWFsdHkgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzCi0gKiBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMsIHRoYXQKLSAqIHlvdSBtYWtlOgotICoKLSAqICAxLiBUaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQKLSAqICAgICBvciBkZXJpdmF0aXZlIHdvcmsuCi0gKiAgMi4gQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZAotICogICAgIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIGEgc2hvcnQgbm90aWNlIG9mIHRoZSBmb2xsb3dpbmcgZm9ybSAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHNob3VsZCBiZSB1c2VkIHdpdGhpbiB0aGUgYm9keSBvZiBhbnkgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIGNvZGU6ICJDb3B5cmlnaHQgwqkgWyRkYXRlLW9mLXNvZnR3YXJlXSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8iCi0gKiAgMy4gTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFczQyBmaWxlcywgaW5jbHVkaW5nIHRoZSBkYXRlIGNoYW5nZXMKLSAqICAgICB3ZXJlIG1hZGUuIChXZSByZWNvbW1lbmQgeW91IHByb3ZpZGUgVVJJcyB0byB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgY29kZSBpcwotICogICAgIGRlcml2ZWQuKQotICoKLSAqIFRISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gCi0gKiBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPLCAKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GCi0gKiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywKLSAqIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLgotICoKLSAqIENPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OLgotICoKLSAqIFRoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkKLSAqIHBlcnRhaW5pbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0Ci0gKiBpbiB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodAotICogaG9sZGVycy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIC0tPgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotICAKLSAgICBUaGlzIGlzIGEgc2NoZW1hIGZvciBYU0xUIDIuMCBzdHlsZXNoZWV0cy4KLSAgICAKLSAgICBJdCBkZWZpbmVzIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBhcHBlYXIgaW4gdGhlIFhTTFQgbmFtZXNwYWNlOyBpdCBhbHNvCi0gICAgcHJvdmlkZXMgaG9va3MgdGhhdCBhbGxvdyB0aGUgaW5jbHVzaW9uIG9mIHVzZXItZGVmaW5lZCBsaXRlcmFsIHJlc3VsdCBlbGVtZW50cywKLSAgICBleHRlbnNpb24gaW5zdHJ1Y3Rpb25zLCBhbmQgdG9wLWxldmVsIGRhdGEgZWxlbWVudHMuCi0gICAgCi0gICAgVGhlIHNjaGVtYSBpcyBkZXJpdmVkICh3aXRoIGtpbmQgcGVybWlzc2lvbikgZnJvbSBhIHNjaGVtYSBmb3IgWFNMVCAxLjAgc3R5bGVzaGVldHMKLSAgICBwcm9kdWNlZCBieSBBc2lyIFMgVmVkYW11dGh1IG9mIFdlYk1ldGhvZHMgSW5jLgotICAgIAotICAgIFRoaXMgc2NoZW1hIGlzIGF2YWlsYWJsZSBmb3IgdXNlIHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHRoZSBXM0MgU29mdHdhcmUgTGljZW5zZQotICAgIHB1Ymxpc2hlZCBhdCBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMAotICAgIAotICAgIFRoZSBzY2hlbWEgaXMgb3JnYW5pemVkIGFzIGZvbGxvd3M6Ci0gICAgCi0gICAgUEFSVCBBOiBkZWZpbml0aW9ucyBvZiBjb21wbGV4IHR5cGVzIGFuZCBtb2RlbCBncm91cHMgdXNlZCBhcyB0aGUgYmFzaXMgCi0gICAgICAgICAgICBmb3IgZWxlbWVudCBkZWZpbml0aW9ucwotICAgIFBBUlQgQjogZGVmaW5pdGlvbnMgb2YgaW5kaXZpZHVhbCBYU0xUIGVsZW1lbnRzCi0gICAgUEFSVCBDOiBkZWZpbml0aW9ucyBmb3IgbGl0ZXJhbCByZXN1bHQgZWxlbWVudHMKLSAgICBQQVJUIEQ6IGRlZmluaXRpb25zIG9mIHNpbXBsZSB0eXBlcyB1c2VkIGluIGF0dHJpYnV0ZSBkZWZpbml0aW9ucwotICAgIAotICAgIFRoaXMgc2NoZW1hIGRvZXMgbm90IGF0dGVtcHQgdG8gZGVmaW5lIGFsbCB0aGUgY29uc3RyYWludHMgdGhhdCBhcHBseSB0byBhIHZhbGlkCi0gICAgWFNMVCAyLjAgc3R5bGVzaGVldCBtb2R1bGUuIEl0IGlzIHRoZSBpbnRlbnRpb24gdGhhdCBhbGwgdmFsaWQgc3R5bGVzaGVldCBtb2R1bGVzIAotICAgIHNob3VsZCBjb25mb3JtIHRvIHRoaXMgc2NoZW1hOyBob3dldmVyLCB0aGUgc2NoZW1hIGlzIG5vbi1ub3JtYXRpdmUgYW5kIGluIHRoZSBldmVudCAKLSAgICBvZiBhbnkgY29uZmxpY3QsIHRoZSB0ZXh0IG9mIHRoZSBSZWNvbW1lbmRhdGlvbiB0YWtlcyBwcmVjZWRlbmNlLgotCi0gICAgVGhpcyBzY2hlbWEgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBzcGVjaWFsIHJ1bGVzIHRoYXQgYXBwbHkgd2hlbiBhIHN0eWxlc2hlZXQKLSAgICBoYXMgc2VjdGlvbnMgdGhhdCB1c2UgZm9yd2FyZHMtY29tcGF0aWJsZS1tb2RlLiBJbiB0aGlzIG1vZGUsIHNldHRpbmcgdmVyc2lvbj0iMy4wIgotICAgIGFsbG93cyBlbGVtZW50cyBmcm9tIHRoZSBYU0xUIG5hbWVzcGFjZSB0byBiZSB1c2VkIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIFhTTFQgMi4wLgotCi0gICAgU2ltcGxpZmllZCBzdHlsZXNoZWV0cyAodGhvc2Ugd2l0aCBhIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnQgYXMgdGhlIG91dGVybW9zdCBlbGVtZW50KQotICAgIHdpbGwgdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYSBvbmx5IGlmIHZhbGlkYXRpb24gc3RhcnRzIGluIGxheCBtb2RlLgotICAgIAotICAgIFRoaXMgdmVyc2lvbiBpcyBkYXRlZCAyMDA1LTAyLTExCi0gICAgQXV0aG9yczogTWljaGFlbCBIIEtheSwgU2F4b25pY2EgTGltaXRlZAotICAgICAgICAgICAgIEplbmkgVGVubmlzb24sIEplbmkgVGVubmlzb24gQ29uc3VsdGluZyBMdGQuCi0gICAgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0gCi08IS0tCi1UaGUgZGVjbGFyYXRpb24gb2YgeG1sOnNwYWNlIGFuZCB4bWw6bGFuZyBtYXkgbmVlZCB0byBiZSBjb21tZW50ZWQgb3V0IGJlY2F1c2UKLW9mIHByb2JsZW1zIHByb2Nlc3NpbmcgdGhlIHNjaGVtYSB1c2luZyB2YXJpb3VzIHRvb2xzCi0tLT4KLSAgICAgIAotPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgCi0gIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QiLz4KLQotPCEtLSAKLSAgICBBbiBYU0xUIHN0eWxlc2hlZXQgbWF5IGNvbnRhaW4gYW4gaW4tbGluZSBzY2hlbWEgd2l0aGluIGFuIHhzbDppbXBvcnQtc2NoZW1hIGVsZW1lbnQsCi0gICAgc28gdGhlIFNjaGVtYSBmb3Igc2NoZW1hcyBuZWVkcyB0byBiZSBpbXBvcnRlZAotLS0+Ci0gIAotPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIi8+Ci0KLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci08eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgUEFSVCBBOiBkZWZpbml0aW9ucyBvZiBjb21wbGV4IHR5cGVzIGFuZCBtb2RlbCBncm91cHMgdXNlZCBhcyB0aGUgYmFzaXMgCi0gICAgICAgICAgICBmb3IgZWxlbWVudCBkZWZpbml0aW9ucwotICA8L3hzOmRvY3VtZW50YXRpb24+Ci08L3hzOmFubm90YXRpb24+ICAgCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2VuZXJpYy1lbGVtZW50LXR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0LWNvbGxhdGlvbiIgdHlwZT0ieHNsOnVyaS1saXN0Ii8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMiIHR5cGU9InhzbDpwcmVmaXgtbGlzdC1vci1hbGwiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcyIgdHlwZT0ieHNsOnByZWZpeC1saXN0Ii8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLXdoZW4iIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0ieHBhdGgtZGVmYXVsdC1uYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0idmVyc2lvbmVkLWVsZW1lbnQtdHlwZSIgbWl4ZWQ9InRydWUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6Z2VuZXJpYy1lbGVtZW50LXR5cGUiPiAgICAKLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHM6ZGVjaW1hbCIgdXNlPSJvcHRpb25hbCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIiBtaXhlZD0iZmFsc2UiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzbDp2ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9InNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp2ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4gICAgCi0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLTx4czpncm91cCBuYW1lPSJzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCI+Ci0gIDx4czpjaG9pY2U+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6dmFyaWFibGUiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzbDppbnN0cnVjdGlvbiIvPgotICAgIDx4czpncm91cCByZWY9InhzbDpyZXN1bHQtZWxlbWVudHMiLz4KLSAgPC94czpjaG9pY2U+Ci08L3hzOmdyb3VwPgotCi08eHM6ZWxlbWVudCBuYW1lPSJkZWNsYXJhdGlvbiIgdHlwZT0ieHNsOmdlbmVyaWMtZWxlbWVudC10eXBlIiBhYnN0cmFjdD0idHJ1ZSIvPgotCi08eHM6ZWxlbWVudCBuYW1lPSJpbnN0cnVjdGlvbiIgdHlwZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiIGFic3RyYWN0PSJ0cnVlIi8+Ci0KLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci08eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgUEFSVCBCOiBkZWZpbml0aW9ucyBvZiBpbmRpdmlkdWFsIFhTTFQgZWxlbWVudHMgICAgCi0gICAgRWxlbWVudHMgYXJlIGxpc3RlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuICAgIAotICA8L3hzOmRvY3VtZW50YXRpb24+Ci08L3hzOmFubm90YXRpb24+ICAgCi08IS0tICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIC0tPgotCi08eHM6ZWxlbWVudCBuYW1lPSJhbmFseXplLXN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDptYXRjaGluZy1zdWJzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOm5vbi1tYXRjaGluZy1zdWJzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmZhbGxiYWNrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlZ2V4IiB0eXBlPSJ4c2w6YXZ0IiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmxhZ3MiIHR5cGU9InhzbDphdnQiIGRlZmF1bHQ9IiIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iYXBwbHktaW1wb3J0cyIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aXRoLXBhcmFtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJhcHBseS10ZW1wbGF0ZXMiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnNvcnQiLz4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aXRoLXBhcmFtIi8+Ci0gICAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIGRlZmF1bHQ9ImNoaWxkOjpub2RlKCkiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtb2RlIiB0eXBlPSJ4c2w6bW9kZSIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOmF2dCIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZXBhcmF0b3IiIHR5cGU9InhzbDphdnQiLz4gICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4c2w6UU5hbWUiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZGF0aW9uIiB0eXBlPSJ4c2w6dmFsaWRhdGlvbi10eXBlIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PiAgICAgICAgCi0KLTx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZS1zZXQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6YXR0cmlidXRlIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2w6UU5hbWVzIiBkZWZhdWx0PSIiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImNhbGwtdGVtcGxhdGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6d2l0aC1wYXJhbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY2hhcmFjdGVyLW1hcCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpvdXRwdXQtY2hhcmFjdGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLWNoYXJhY3Rlci1tYXBzIiB0eXBlPSJ4c2w6UU5hbWVzIiBkZWZhdWx0PSIiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImNob29zZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aGVuIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOm90aGVyd2lzZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJjb21tZW50IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iY29weSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvcHktbmFtZXNwYWNlcyIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ieWVzIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5oZXJpdC1uYW1lc3BhY2VzIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJ5ZXMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzbDpRTmFtZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRpb24iIHR5cGU9InhzbDp2YWxpZGF0aW9uLXR5cGUiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImNvcHktb2YiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb3B5LW5hbWVzcGFjZXMiIHR5cGU9InhzbDp5ZXMtb3Itbm8iIGRlZmF1bHQ9InllcyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzbDpRTmFtZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRpb24iIHR5cGU9InhzbDp2YWxpZGF0aW9uLXR5cGUiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImRlY2ltYWwtZm9ybWF0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWNpbWFsLXNlcGFyYXRvciIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9Ii4iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzbDpjaGFyIiBkZWZhdWx0PSIsIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5maW5pdHkiIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iSW5maW5pdHkiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW51cy1zaWduIiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iLSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Ik5hTiIgdHlwZT0ieHM6c3RyaW5nIiBkZWZhdWx0PSJOYU4iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJjZW50IiB0eXBlPSJ4c2w6Y2hhciIgZGVmYXVsdD0iJSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InBlci1taWxsZSIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IiYjeDIwMzA7Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iemVyby1kaWdpdCIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IjAiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaWdpdCIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IiMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXR0ZXJuLXNlcGFyYXRvciIgdHlwZT0ieHNsOmNoYXIiIGRlZmF1bHQ9IjsiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6YXZ0IiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5oZXJpdC1uYW1lc3BhY2VzIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIiBkZWZhdWx0PSJ5ZXMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzbDpRTmFtZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRpb24iIHR5cGU9InhzbDp2YWxpZGF0aW9uLXR5cGUiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImZhbGxiYWNrIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIiB0eXBlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiLz4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZm9yLWVhY2giIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6c29ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImZvci1lYWNoLWdyb3VwIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp2ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnNvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ3JvdXAtYnkiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ3JvdXAtYWRqYWNlbnQiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+ICAgICAgICAgICAgCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ3JvdXAtc3RhcnRpbmctd2l0aCIgdHlwZT0ieHNsOnBhdHRlcm4iLz4gICAgICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJncm91cC1lbmRpbmctd2l0aCIgdHlwZT0ieHNsOnBhdHRlcm4iLz4gICAgICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xsYXRpb24iIHR5cGU9InhzOmFueVVSSSIvPiAgICAgICAgICAgIAotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iZnVuY3Rpb24iIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6cGFyYW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3ItZ3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJvdmVycmlkZSIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ieWVzIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXMiIHR5cGU9InhzbDpzZXF1ZW5jZS10eXBlIiBkZWZhdWx0PSJpdGVtKCkqIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJpZiIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRlc3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnQiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0iaW1wb3J0LXNjaGVtYSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDplbGVtZW50LW9ubHktdmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNjaGVtYSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjaGVtYS1sb2NhdGlvbiIgdHlwZT0ieHM6YW55VVJJIi8+ICAgICAgICAgICAgICAgICAgCi0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJpbmNsdWRlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9ImtleSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzbDpRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hdGNoIiB0eXBlPSJ4c2w6cGF0dGVybiIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVzZSIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2xsYXRpb24iIHR5cGU9InhzOmFueVVSSSIvPiAgICAgICAgICAgICAgIAotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ibWF0Y2hpbmctc3Vic3RyaW5nIiB0eXBlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiLz4KLQotPHhzOmVsZW1lbnQgbmFtZT0ibWVzc2FnZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0ZXJtaW5hdGUiIHR5cGU9InhzbDphdnQiIGRlZmF1bHQ9Im5vIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJuYW1lc3BhY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50IG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2w6YXZ0IiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ibmFtZXNwYWNlLWFsaWFzIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZXNoZWV0LXByZWZpeCIgdHlwZT0ieHNsOnByZWZpeC1vci1kZWZhdWx0IiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVzdWx0LXByZWZpeCIgdHlwZT0ieHNsOnByZWZpeC1vci1kZWZhdWx0IiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJuZXh0LW1hdGNoIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDp3aXRoLXBhcmFtIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6ZmFsbGJhY2siLz4KLSAgICAgICAgPC94czpjaG9pY2U+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJub24tbWF0Y2hpbmctc3Vic3RyaW5nIiB0eXBlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiLz4KLQotPHhzOmVsZW1lbnQgbmFtZT0ibnVtYmVyIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp2ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGV2ZWwiIHR5cGU9InhzbDpsZXZlbCIgZGVmYXVsdD0ic2luZ2xlIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY291bnQiIHR5cGU9InhzbDpwYXR0ZXJuIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZnJvbSIgdHlwZT0ieHNsOnBhdHRlcm4iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtYXQiIHR5cGU9InhzbDphdnQiIGRlZmF1bHQ9IjEiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibGV0dGVyLXZhbHVlIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3JkaW5hbCIgdHlwZT0ieHNsOmF2dCIvPiAgICAgICAgCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ3JvdXBpbmctc2VwYXJhdG9yIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ3JvdXBpbmctc2l6ZSIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ib3RoZXJ3aXNlIiB0eXBlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiLz4KLQotPHhzOmVsZW1lbnQgbmFtZT0ib3V0cHV0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmRlY2xhcmF0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpnZW5lcmljLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWV0aG9kIiB0eXBlPSJ4c2w6bWV0aG9kIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYnl0ZS1vcmRlci1tYXJrIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2RhdGEtc2VjdGlvbi1lbGVtZW50cyIgdHlwZT0ieHNsOlFOYW1lcyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRvY3R5cGUtcHVibGljIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXN5c3RlbSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZW5jb2RpbmciIHR5cGU9InhzOnN0cmluZyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVzY2FwZS11cmktYXR0cmlidXRlcyIgdHlwZT0ieHNsOnllcy1vci1ubyIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImluY2x1ZGUtY29udGVudC10eXBlIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZW50IiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWVkaWEtdHlwZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm9ybWFsaXphdGlvbi1mb3JtIiB0eXBlPSJ4czpOTVRPS0VOIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib21pdC14bWwtZGVjbGFyYXRpb24iIHR5cGU9InhzbDp5ZXMtb3Itbm8iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGFuZGFsb25lIiB0eXBlPSJ4c2w6eWVzLW9yLW5vLW9yLW9taXQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1bmRlY2xhcmUtcHJlZml4ZXMiIHR5cGU9InhzbDp5ZXMtb3Itbm8iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtY2hhcmFjdGVyLW1hcHMiIHR5cGU9InhzbDpRTmFtZXMiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpOTVRPS0VOIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJvdXRwdXQtY2hhcmFjdGVyIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaGFyYWN0ZXIiIHR5cGU9InhzbDpjaGFyIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3RyaW5nIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InBhcmFtIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFzIiB0eXBlPSJ4c2w6c2VxdWVuY2UtdHlwZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlcXVpcmVkIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHVubmVsIiB0eXBlPSJ4c2w6eWVzLW9yLW5vIi8+ICAgICAgICAKLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InBlcmZvcm0tc29ydCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpzb3J0IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHNsOnNlcXVlbmNlLWNvbnN0cnVjdG9yLWdyb3VwIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0icHJlc2VydmUtc3BhY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVsZW1lbnRzIiB0eXBlPSJ4c2w6bmFtZXRlc3RzIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOmF2dCIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InJlc3VsdC1kb2N1bWVudCIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm1hdCIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzbDpRTmFtZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRpb24iIHR5cGU9InhzbDp2YWxpZGF0aW9uLXR5cGUiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXRob2QiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJieXRlLW9yZGVyLW1hcmsiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjZGF0YS1zZWN0aW9uLWVsZW1lbnRzIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1wdWJsaWMiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXN5c3RlbSIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVuY29kaW5nIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZXNjYXBlLXVyaS1hdHRyaWJ1dGVzIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaW5jbHVkZS1jb250ZW50LXR5cGUiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRlbnQiIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZWRpYS10eXBlIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm9ybWFsaXphdGlvbi1mb3JtIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib21pdC14bWwtZGVjbGFyYXRpb24iIHR5cGU9InhzbDphdnQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGFuZGFsb25lIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idW5kZWNsYXJlLXByZWZpeGVzIiB0eXBlPSJ4c2w6YXZ0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLWNoYXJhY3Rlci1tYXBzIiB0eXBlPSJ4c2w6UU5hbWVzIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3V0cHV0LXZlcnNpb24iIHR5cGU9InhzbDphdnQiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InNlcXVlbmNlIiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOmluc3RydWN0aW9uIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFzIiB0eXBlPSJ4c2w6c2VxdWVuY2UtdHlwZSIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ic29ydCI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4gIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzbDphdnQiLz4gICAgICAgIAotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRhdGEtdHlwZSIgdHlwZT0ieHNsOmF2dCIgZGVmYXVsdD0idGV4dCIvPiAgICAgICAgCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3JkZXIiIHR5cGU9InhzbDphdnQiIGRlZmF1bHQ9ImFzY2VuZGluZyIvPiAgICAgICAgCi0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2FzZS1vcmRlciIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbGxhdGlvbiIgdHlwZT0ieHNsOmF2dCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN0YWJsZSIgdHlwZT0ieHNsOnllcy1vci1ubyIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0ic3RyaXAtc3BhY2UiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6ZGVjbGFyYXRpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6ZWxlbWVudC1vbmx5LXZlcnNpb25lZC1lbGVtZW50LXR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVsZW1lbnRzIiB0eXBlPSJ4c2w6bmFtZXRlc3RzIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJzdHlsZXNoZWV0IiBzdWJzdGl0dXRpb25Hcm91cD0ieHNsOnRyYW5zZm9ybSIvPgotCi08eHM6ZWxlbWVudCBuYW1lPSJ0ZW1wbGF0ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDpkZWNsYXJhdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpwYXJhbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3Rvci1ncm91cCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hdGNoIiB0eXBlPSJ4c2w6cGF0dGVybiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InByaW9yaXR5IiB0eXBlPSJ4czpkZWNpbWFsIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9kZSIgdHlwZT0ieHNsOm1vZGVzIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXMiIHR5cGU9InhzbDpzZXF1ZW5jZS10eXBlIiBkZWZhdWx0PSJpdGVtKCkqIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0idGV4dC1lbGVtZW50LWJhc2UtdHlwZSI+Ci0gIDx4czpzaW1wbGVDb250ZW50PgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4c2w6dmVyc2lvbmVkLWVsZW1lbnQtdHlwZSI+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlQ29udGVudD4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLTx4czplbGVtZW50IG5hbWU9InRleHQiIHN1YnN0aXR1dGlvbkdyb3VwPSJ4c2w6aW5zdHJ1Y3Rpb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDp0ZXh0LWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ibm8iLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6c2ltcGxlQ29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRyYW5zZm9ybS1lbGVtZW50LWJhc2UtdHlwZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOmVsZW1lbnQtb25seS12ZXJzaW9uZWQtZWxlbWVudC10eXBlIj4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHM6ZGVjaW1hbCIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6ZWxlbWVudCBuYW1lPSJ0cmFuc2Zvcm0iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6dHJhbnNmb3JtLWVsZW1lbnQtYmFzZS10eXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmltcG9ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzbDpkZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4c2w6dmFyaWFibGUiLz4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHNsOnBhcmFtIi8+ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiLz4gPCEtLSB3ZWFrZXIgdGhhbiBYU0xUIDEuMCAtLT4KLSAgICAgICAgICA8L3hzOmNob2ljZT4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0LXZhbGlkYXRpb24iIHR5cGU9InhzbDp2YWxpZGF0aW9uLXN0cmlwLW9yLXByZXNlcnZlIiBkZWZhdWx0PSJzdHJpcCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlucHV0LXR5cGUtYW5ub3RhdGlvbnMiIHR5cGU9InhzbDppbnB1dC10eXBlLWFubm90YXRpb25zLXR5cGUiIGRlZmF1bHQ9InVuc3BlY2lmaWVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJ2YWx1ZS1vZiIgc3Vic3RpdHV0aW9uR3JvdXA9InhzbDppbnN0cnVjdGlvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNlbGVjdCIgdHlwZT0ieHNsOmV4cHJlc3Npb24iLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZXBhcmF0b3IiIHR5cGU9InhzbDphdnQiLz4gICAgICAgICAgICAKLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ibm8iLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czplbGVtZW50IG5hbWU9InZhcmlhYmxlIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFzIiB0eXBlPSJ4c2w6c2VxdWVuY2UtdHlwZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPHhzOmVsZW1lbnQgbmFtZT0id2hlbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4c2w6c2VxdWVuY2UtY29uc3RydWN0b3IiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InRlc3QiIHR5cGU9InhzbDpleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotPC94czplbGVtZW50PgotCi08eHM6ZWxlbWVudCBuYW1lPSJ3aXRoLXBhcmFtIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czpjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzbDpzZXF1ZW5jZS1jb25zdHJ1Y3RvciI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNsOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJ4c2w6ZXhwcmVzc2lvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFzIiB0eXBlPSJ4c2w6c2VxdWVuY2UtdHlwZSIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR1bm5lbCIgdHlwZT0ieHNsOnllcy1vci1ubyIvPiAgIAotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLTwveHM6ZWxlbWVudD4KLQotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLTx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQQVJUIEM6IGRlZmluaXRpb24gb2YgbGl0ZXJhbCByZXN1bHQgZWxlbWVudHMKLSAgICAKLSAgICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBkZWZpbmUgdGhlIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnRzCi0gICAgcGVybWlzc2libGUgaW4gYSBzdHlsZXNoZWV0LgotICAgIAotICAgIChhKSBkbyBub3RoaW5nLiBUaGlzIGFsbG93cyBhbnkgZWxlbWVudCB0byBiZSB1c2VkIGFzIGEgbGl0ZXJhbAotICAgICAgICByZXN1bHQgZWxlbWVudCwgcHJvdmlkZWQgaXQgaXMgbm90IGluIHRoZSBYU0xUIG5hbWVzcGFjZQotICAgIAotICAgIChiKSBkZWNsYXJlIGFsbCBwZXJtaXR0ZWQgbGl0ZXJhbCByZXN1bHQgZWxlbWVudHMgYXMgbWVtYmVycwotICAgICAgICBvZiB0aGUgeHNsOmxpdGVyYWwtcmVzdWx0LWVsZW1lbnQgc3Vic3RpdHV0aW9uIGdyb3VwCi0gICAgICAgIAotICAgIChjKSByZWRlZmluZSB0aGUgbW9kZWwgZ3JvdXAgeHNsOnJlc3VsdC1lbGVtZW50cyB0byBhY2NvbW1vZGF0ZQotICAgICAgICBhbGwgcGVybWl0dGVkIGxpdGVyYWwgcmVzdWx0IGVsZW1lbnRzLgotICAgICAgICAKLSAgICBMaXRlcmFsIHJlc3VsdCBlbGVtZW50cyBhcmUgYWxsb3dlZCB0byB0YWtlIGNlcnRhaW4gYXR0cmlidXRlcwotICAgIGluIHRoZSBYU0xUIG5hbWVzcGFjZS4gVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGF0dHJpYnV0ZSBncm91cAotICAgIGxpdGVyYWwtcmVzdWx0LWVsZW1lbnQtYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIGluY2x1ZGVkIGluIHRoZQotICAgIGRlZmluaXRpb24gb2YgYW55IGxpdGVyYWwgcmVzdWx0IGVsZW1lbnQuCi0gICAgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLTwveHM6YW5ub3RhdGlvbj4gICAKLTwhLS0gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgLS0+Ci0KLTx4czplbGVtZW50IG5hbWU9ImxpdGVyYWwtcmVzdWx0LWVsZW1lbnQiIGFic3RyYWN0PSJ0cnVlIiB0eXBlPSJ4czphbnlUeXBlIi8+Ci0KLTx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJsaXRlcmFsLXJlc3VsdC1lbGVtZW50LWF0dHJpYnV0ZXMiPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlZmF1bHQtY29sbGF0aW9uIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDp1cmktbGlzdCIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpwcmVmaXhlcyIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpwcmVmaXhlcyIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9InhwYXRoLWRlZmF1bHQtbmFtZXNwYWNlIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzOmFueVVSSSIvPiAgICAKLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmhlcml0LW5hbWVzcGFjZXMiIGZvcm09InF1YWxpZmllZCIgdHlwZT0ieHNsOnllcy1vci1ubyIgZGVmYXVsdD0ieWVzIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpRTmFtZXMiIGRlZmF1bHQ9IiIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9InVzZS13aGVuIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDpleHByZXNzaW9uIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgZm9ybT0icXVhbGlmaWVkIiB0eXBlPSJ4czpkZWNpbWFsIi8+Ci0gIDx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgZm9ybT0icXVhbGlmaWVkIiB0eXBlPSJ4c2w6UU5hbWUiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZGF0aW9uIiBmb3JtPSJxdWFsaWZpZWQiIHR5cGU9InhzbDp2YWxpZGF0aW9uLXR5cGUiLz4KLTwveHM6YXR0cmlidXRlR3JvdXA+Ci0KLTx4czpncm91cCBuYW1lPSJyZXN1bHQtZWxlbWVudHMiPgotICA8eHM6Y2hvaWNlPgotICAgIDx4czplbGVtZW50IHJlZj0ieHNsOmxpdGVyYWwtcmVzdWx0LWVsZW1lbnQiLz4KLSAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIi8+Ci0gICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjbG9jYWwiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIvPgotICA8L3hzOmNob2ljZT4KLTwveHM6Z3JvdXA+Ci0KLQotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLTx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQQVJUIEQ6IGRlZmluaXRpb25zIG9mIHNpbXBsZSB0eXBlcyB1c2VkIGluIHN0eWxlc2hlZXQgYXR0cmlidXRlcyAKLSAgPC94czpkb2N1bWVudGF0aW9uPgotPC94czphbm5vdGF0aW9uPiAgIAotPCEtLSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAtLT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iYXZ0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGlzIHR5cGUgaXMgdXNlZCBmb3IgYWxsIGF0dHJpYnV0ZXMgdGhhdCBhbGxvdyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGVtcGxhdGUuCi0gICAgICBUaGUgZ2VuZXJhbCBydWxlcyBmb3IgdGhlIHN5bnRheCBvZiBhdHRyaWJ1dGUgdmFsdWUgdGVtcGxhdGVzLCBhbmQgdGhlIHNwZWNpZmljCi0gICAgICBydWxlcyBmb3IgZWFjaCBzdWNoIGF0dHJpYnV0ZSwgYXJlIGRlc2NyaWJlZCBpbiB0aGUgWFNMVCAyLjAgUmVjb21tZW5kYXRpb24uCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iY2hhciI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgQSBzdHJpbmcgY29udGFpbmluZyBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotICAgIDx4czpsZW5ndGggdmFsdWU9IjEiLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iZXhwcmVzc2lvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgQW4gWFBhdGggMi4wIGV4cHJlc3Npb24uCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOnBhdHRlcm4gdmFsdWU9Ii4rIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9ImlucHV0LXR5cGUtYW5ub3RhdGlvbnMtdHlwZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRGVzY3JpYmVzIGhvdyB0eXBlIGFubm90YXRpb25zIGluIHNvdXJjZSBkb2N1bWVudHMgYXJlIGhhbmRsZWQuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzZXJ2ZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaXAiLz4gICAKLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVuc3BlY2lmaWVkIi8+ICAgICAgICAKLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0ibGV2ZWwiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBsZXZlbCBhdHRyaWJ1dGUgb2YgeHNsOm51bWJlcjogCi0gICAgICBvbmUgb2Ygc2luZ2xlLCBtdWx0aXBsZSwgb3IgYW55LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNpbmdsZSIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibXVsdGlwbGUiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImFueSIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJtb2RlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBUaGUgbW9kZSBhdHRyaWJ1dGUgb2YgeHNsOmFwcGx5LXRlbXBsYXRlczogCi0gICAgICBlaXRoZXIgYSBRTmFtZSwgb3IgI2N1cnJlbnQsIG9yICNkZWZhdWx0LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzbDpRTmFtZSI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNkZWZhdWx0Ii8+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2N1cnJlbnQiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJtb2RlcyI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgVGhlIG1vZGUgYXR0cmlidXRlIG9mIHhzbDp0ZW1wbGF0ZTogCi0gICAgICBlaXRoZXIgYSBsaXN0LCBlYWNoIG1lbWJlciBiZWluZyBlaXRoZXIgYSBRTmFtZSBvciAjZGVmYXVsdDsKLSAgICAgIG9yIHRoZSB2YWx1ZSAjYWxsCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpsaXN0PgotICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzbDpRTmFtZSI+Ci0gICAgICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNkZWZhdWx0Ii8+Ci0gICAgICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPC94czp1bmlvbj4KLSAgICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgPC94czpsaXN0PgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iI2FsbCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6dW5pb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Im5hbWV0ZXN0cyI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgQSBsaXN0IG9mIE5hbWVUZXN0cywgYXMgZGVmaW5lZCBpbiB0aGUgWFBhdGggMi4wIFJlY29tbWVuZGF0aW9uLgotICAgICAgRWFjaCBOYW1lVGVzdCBpcyBlaXRoZXIgYSBRTmFtZSwgb3IgIioiLCBvciAicHJlZml4OioiLCBvciAiKjpsb2NhbG5hbWUiCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpsaXN0PgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2w6UU5hbWUiPgotICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIqIi8+Ci0gICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlxpXGMqOlwqIi8+Ci0gICAgICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXCo6XGlcYyoiLz4gICAgICAgICAgICAKLSAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzOnVuaW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czpsaXN0PgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJwcmVmaXhlcyI+Ci0gIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czpOQ05hbWUiLz4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0icHJlZml4LWxpc3Qtb3ItYWxsIj4KLSAgPHhzOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2w6cHJlZml4LWxpc3QiPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLSAgICAgIAotPHhzOnNpbXBsZVR5cGUgbmFtZT0icHJlZml4LWxpc3QiPgotICA8eHM6bGlzdCBpdGVtVHlwZT0ieHNsOnByZWZpeC1vci1kZWZhdWx0Ii8+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Im1ldGhvZCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgVGhlIG1ldGhvZCBhdHRyaWJ1dGUgb2YgeHNsOm91dHB1dDoKLSAgICAgIEVpdGhlciBvbmUgb2YgdGhlIHJlY29nbml6ZWQgbmFtZXMgInhtbCIsICJ4aHRtbCIsICJodG1sIiwgInRleHQiLAotICAgICAgb3IgYSBRTmFtZSB0aGF0IG11c3QgaW5jbHVkZSBhIHByZWZpeC4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnVuaW9uPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieG1sIi8+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieGh0bWwiLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJodG1sIi8+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idGV4dCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOlFOYW1lIj4KLSAgICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlxjKjpcYyoiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJwYXR0ZXJuIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBIG1hdGNoIHBhdHRlcm4gYXMgZGVmaW5lZCBpbiB0aGUgWFNMVCAyLjAgUmVjb21tZW5kYXRpb24uCi0gICAgICBUaGUgc3ludGF4IGZvciBwYXR0ZXJucyBpcyBhIHJlc3RyaWN0ZWQgZm9ybSBvZiB0aGUgc3ludGF4IGZvcgotICAgICAgWFBhdGggMi4wIGV4cHJlc3Npb25zLgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHNsOmV4cHJlc3Npb24iLz4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0icHJlZml4LW9yLWRlZmF1bHQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEVpdGhlciBhIG5hbWVzcGFjZSBwcmVmaXgsIG9yICNkZWZhdWx0LgotICAgICAgVXNlZCBpbiB0aGUgeHNsOm5hbWVzcGFjZS1hbGlhcyBlbGVtZW50LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzOk5DTmFtZSI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNkZWZhdWx0Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0iUU5hbWVzIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBIGxpc3Qgb2YgUU5hbWVzLgotICAgICAgVXNlZCBpbiB0aGUgW3hzbDpddXNlLWF0dHJpYnV0ZS1zZXRzIGF0dHJpYnV0ZSBvZiB2YXJpb3VzIGVsZW1lbnRzLAotICAgICAgYW5kIGluIHRoZSBjZGF0YS1zZWN0aW9uLWVsZW1lbnRzIGF0dHJpYnV0ZSBvZiB4c2w6b3V0cHV0Ci0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpsaXN0IGl0ZW1UeXBlPSJ4c2w6UU5hbWUiLz4gICAgICAgICAgCi08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9IlFOYW1lIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBBIFFOYW1lLgotICAgICAgVGhpcyBzY2hlbWEgZG9lcyBub3QgdXNlIHRoZSBidWlsdC1pbiB0eXBlIHhzOlFOYW1lLCBidXQgcmF0aGVyIGRlZmluZXMgaXRzIG93bgotICAgICAgUU5hbWUgdHlwZS4gQWx0aG91Z2ggeHM6UU5hbWUgd291bGQgZGVmaW5lIHRoZSBjb3JyZWN0IHZhbGlkYXRpb24gb24gdGhlc2UgYXR0cmlidXRlcywKLSAgICAgIGEgc2NoZW1hIHByb2Nlc3NvciB3b3VsZCBleHBhbmQgdW5wcmVmaXhlZCBRTmFtZXMgaW5jb3JyZWN0bHkgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFBTVkksCi0gICAgICBiZWNhdXNlIChhcyBkZWZpbmVkIGluIFhNTCBTY2hlbWEgZXJyYXRhKSBhbiB1bnByZWZpeGVkIHhzOlFOYW1lIGlzIGFzc3VtZWQgdG8gYmUgaW4KLSAgICAgIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSwgd2hpY2ggaXMgbm90IHRoZSBjb3JyZWN0IGFzc3VtcHRpb24gZm9yIFhTTFQuCi0gICAgICBUaGUgZGF0YSB0eXBlIGlzIGRlZmluZWQgYXMgYSByZXN0cmljdGlvbiBvZiB0aGUgYnVpbHQtaW4gdHlwZSBOYW1lLCByZXN0cmljdGVkCi0gICAgICBzbyB0aGF0IGl0IGNhbiBvbmx5IGNvbnRhaW4gb25lIGNvbG9uIHdoaWNoIG11c3Qgbm90IGJlIHRoZSBmaXJzdCBvciBsYXN0IGNoYXJhY3Rlci4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5hbWUiPgotICAgIDx4czpwYXR0ZXJuIHZhbHVlPSIoW146XSs6KT9bXjpdKyIvPiAgICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPiAgICAgICAgCi08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9InNlcXVlbmNlLXR5cGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFRoZSBkZXNjcmlwdGlvbiBvZiBhIGRhdGEgdHlwZSwgY29uZm9ybWluZyB0byB0aGUKLSAgICAgIFNlcXVlbmNlVHlwZSBwcm9kdWN0aW9uIGRlZmluZWQgaW4gdGhlIFhQYXRoIDIuMCBSZWNvbW1lbmRhdGlvbgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgIDx4czpwYXR0ZXJuIHZhbHVlPSIuKyIvPiAgICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJ1cmktbGlzdCI+Ci0gIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czphbnlVUkkiLz4KLTwveHM6c2ltcGxlVHlwZT4KLQotPHhzOnNpbXBsZVR5cGUgbmFtZT0idmFsaWRhdGlvbi1zdHJpcC1vci1wcmVzZXJ2ZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRGVzY3JpYmVzIGRpZmZlcmVudCB3YXlzIG9mIHR5cGUtYW5ub3RhdGluZyBhbiBlbGVtZW50IG9yIGF0dHJpYnV0ZS4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzbDp2YWxpZGF0aW9uLXR5cGUiPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0cmlwIi8+ICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJ2YWxpZGF0aW9uLXR5cGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIERlc2NyaWJlcyBkaWZmZXJlbnQgd2F5cyBvZiB0eXBlLWFubm90YXRpbmcgYW4gZWxlbWVudCBvciBhdHRyaWJ1dGUuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdHJpY3QiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxheCIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN0cmlwIi8+ICAgIAotICA8L3hzOnJlc3RyaWN0aW9uPgotPC94czpzaW1wbGVUeXBlPgotCi08eHM6c2ltcGxlVHlwZSBuYW1lPSJ5ZXMtb3Itbm8iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE9uZSBvZiB0aGUgdmFsdWVzICJ5ZXMiIG9yICJubyIuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ5ZXMiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci08L3hzOnNpbXBsZVR5cGU+Ci0KLTx4czpzaW1wbGVUeXBlIG5hbWU9Inllcy1vci1uby1vci1vbWl0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBPbmUgb2YgdGhlIHZhbHVlcyAieWVzIiBvciAibm8iIG9yICJvbWl0Ii4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InllcyIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibm8iLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im9taXQiLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLTwveHM6c2ltcGxlVHlwZT4KLQotPC94czpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0ZTg2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzYwMjliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1qYXZhQ29tcGlsZXIuLi5hcmdzCi1idWlsZC54bWwKLUBkb3QKLXRlbXAuZm9sZGVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDM0MmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhN2JiNmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RodSBKYW4gMDMgMjI6MjQ6MDEgRVNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTgxODguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNUaHUgSnVuIDExIDAxOjMzOjMwIEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY3YjQ3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI0ZyaSBNYXkgMDkgMTU6MzI6MzQgQlNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+PHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGQ4NTY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI0ZyaSBKYW4gMDQgMDk6MDQ6NDMgRVNUIDIwMDgKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MQotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5taXNzaW5nLWJ1bmRsZS1jbGFzc3BhdGgtZW50cmllcz0wCi1jb21waWxlcnMucC5taXNzaW5nLXBhY2thZ2VzPTIKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTEKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTEKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFjZDZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4yMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy51aTtidW5kbGUtdmVyc2lvbj0iWzMuNS4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkuaWRlO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvcjtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uub3NnaS51dGlsO2J1bmRsZS12ZXJzaW9uPSJbMy4yLjAsNC4wLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy5pbnRlcm5hbC51dGlsO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZyxvcmcuZWNsaXBzZS53c3QuamF4cC5kZWJ1Zy51aSxvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZyxvcmcuZWNsaXBzZS53c3QuamF4cC5kZWJ1Zy51aSxvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLG9yZy5lY2xpcHNlLndzdC5qYXhwLmRlYnVnLnVpLG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmciLAotIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYnJlYWtwb2ludDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcsb3JnLmVjbGlwc2Uud3N0LmpheHAuZGVidWcudWksb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5tb2RlbDt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcsb3JnLmVjbGlwc2Uud3N0LmpheHAuZGVidWcudWksb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW47eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLG9yZy5lY2xpcHNlLndzdC5qYXhwLmRlYnVnLnVpLG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmciLAotIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQ7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLG9yZy5lY2xpcHNlLndzdC5qYXhwLmRlYnVnLnVpLG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmciCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzhkYTIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGljb25zLwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL2Jya3Bfb2JqLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9icmtwX29iai5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MzFmZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL2Jya3Bfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9sb2NhbHZhcmlhYmxlX29iai5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMvbG9jYWx2YXJpYWJsZV9vYmouZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjQ0YjI2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9sb2NhbHZhcmlhYmxlX29iai5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMvb3BlcmF0aW9uLmdpZiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9vcGVyYXRpb24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTVkOWUzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy9vcGVyYXRpb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL3NhbXBsZS5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMvc2FtcGxlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRmYjNjOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMvc2FtcGxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy94c2x0X2xhdW5jaC5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMveHNsdF9sYXVuY2guZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmUxNWY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9pY29ucy94c2x0X2xhdW5jaC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMveHNsdF9vdXRwdXQuZ2lmIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL2ljb25zL3hzbHRfb3V0cHV0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmYjA4ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvaWNvbnMveHNsdF9vdXRwdXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmQ2NWM5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkKLUJ1bmRsZS1OYW1lLjAgPSBYU0wgRGVidWdnZXIgVUkKLWxhdW5jaE1vZGUuZGVzY3JpcHRpb24uMCA9IENyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gdG8gZGVidWcgYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbgotbGF1bmNoTW9kZS5kZXNjcmlwdGlvbi4xID0gQ3JlYXRlIGEgY29uZmlndXJhdGlvbiB0byBydW4gYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbgotY29udGV4dC5kZXNjcmlwdGlvbi4wID0gQ29udGV4dCBmb3IgZGVidWdnaW5nIFhTTFQKLWNvbnRleHQubmFtZS4wID0gWFNMVCBEZWJ1Z2dpbmcKLXNob3J0Y3V0LmxhYmVsLjAgPSBYU0wgVHJhbnNmb3JtYXRpb24KLXNob3J0Y3V0LmxhYmVsLjEgPSBYU0xUIFRyYW5zZm9ybWF0aW9uCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotZGVzY3JpcHRpb24uZGVzY3JpcHRpb24uMCA9IFJ1biBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uIHVzaW5nIHRoZSBzZWxlY3RlZCBmaWxlKHMpCi1kZXNjcmlwdGlvbi5kZXNjcmlwdGlvbi4xID0gRGVidWcgYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbiB1c2luZyB0aGUgc2VsZWN0ZWQgZmlsZShzKQotZGVzY3JpcHRpb24uZGVzY3JpcHRpb24uMiA9IFByb2ZpbGUgYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbiB1c2luZyB0aGUgc2VsZWN0ZWQgZmlsZShzKQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI3NDBmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZUV4dGVuc2lvbnMiPgotCQk8cGVyc3BlY3RpdmVFeHRlbnNpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3QueG1sLnBlcnNwZWN0aXZlIj4KLQkJCTxhY3Rpb25TZXQgaWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmRlYnVnQWN0aW9uU2V0IiAvPgotCQkJPGFjdGlvblNldCBpZD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQWN0aW9uU2V0IiAvPgotCQkJPGFjdGlvblNldCBpZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuYnJlYWtwb2ludEFjdGlvblNldCIgLz4KLQkJCTxhY3Rpb25TZXQgaWQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLnByb2ZpbGVBY3Rpb25TZXQiIC8+Ci0JCTwvcGVyc3BlY3RpdmVFeHRlbnNpb24+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblR5cGVJbWFnZXMiPgotCQk8bGF1bmNoQ29uZmlndXJhdGlvblR5cGVJbWFnZSBpY29uPSJpY29ucy94c2x0X2xhdW5jaC5naWYiCi0JCQljb25maWdUeXBlSUQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblR5cGVJbWFnZSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cHMiPgotCQk8bGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xUVGFiR3JvdXAiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9uVGFiR3JvdXAueHNsdCIKLQkJCXR5cGU9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIj4KLQkJCTxsYXVuY2hNb2RlIGRlc2NyaXB0aW9uPSIlbGF1bmNoTW9kZS5kZXNjcmlwdGlvbi4wIgotCQkJCW1vZGU9ImRlYnVnIiBwZXJzcGVjdGl2ZT0ib3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdQZXJzcGVjdGl2ZSIgLz4KLQkJCTxsYXVuY2hNb2RlIGRlc2NyaXB0aW9uPSIlbGF1bmNoTW9kZS5kZXNjcmlwdGlvbi4xIgotCQkJCW1vZGU9InJ1biIgcGVyc3BlY3RpdmU9Im9yZy5lY2xpcHNlLndzdC54bWwucGVyc3BlY3RpdmUiIC8+Ci0JCTwvbGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwPgotCTwvZXh0ZW5zaW9uPgotCQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbnRleHRzIj4KLQkJPGNvbnRleHQgZGVzY3JpcHRpb249IiVjb250ZXh0LmRlc2NyaXB0aW9uLjAiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5jb250ZXh0IiBuYW1lPSIlY29udGV4dC5uYW1lLjAiCi0JCQlwYXJlbnRJZD0ib3JnLmVjbGlwc2UuZGVidWcudWkuZGVidWdnaW5nIj4KLQkJPC9jb250ZXh0PgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkuZGVidWdNb2RlbFByZXNlbnRhdGlvbnMiPgotCQk8ZGVidWdNb2RlbFByZXNlbnRhdGlvbgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubW9kZWwuWFNMTW9kZWxQcmVzZW50YXRpb24iCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMRGVidWdNb2RlbCI+Ci0JCTwvZGVidWdNb2RlbFByZXNlbnRhdGlvbj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaFNob3J0Y3V0cyI+Ci0JCTxzaG9ydGN1dAotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xMYXVuY2hTaG9ydGN1dCIKLSAgICAgICAgaWNvbj0iaWNvbnMveHNsdF9sYXVuY2guZ2lmIgotICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5sYXVuY2hzaG9ydGN1dCIKLSAgICAgICAgbGFiZWw9IiVzaG9ydGN1dC5sYWJlbC4wIgotICAgICAgICBtb2Rlcz0icnVuLCBkZWJ1ZywgcHJvZmlsZSI+Ci0JCQk8Y29udGV4dHVhbExhdW5jaD4KLQkJCQk8ZW5hYmxlbWVudD4KLQkJCQkJPHdpdGggdmFyaWFibGU9InNlbGVjdGlvbiI+Ci0JCQkJCQk8aXRlcmF0ZT4KLQkJCQkJCQk8YWRhcHQKLQkJCQkJCQkJdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiPgotCQkJCQkJCQk8b3I+Ci0JCQkJCQkJCQk8dGVzdAotCQkJCQkJCQkJCXByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5jb250ZW50VHlwZUlkIgotCQkJCQkJCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIiAvPgotCQkJCQkJCQkJPHRlc3QKLQkJCQkJCQkJCQlwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuY29udGVudFR5cGVJZCIKLQkJCQkJCQkJCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZSIgLz4KLQkJCQkJCQkJCTx0ZXN0Ci0JCQkJCQkJCQkJcHJvcGVydHk9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLmNvbnRlbnRUeXBlSWQiCi0JCQkJCQkJCQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiIC8+Ci0JCQkJCQkJCQk8dGVzdAotCQkJCQkJCQkJCXByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5jb250ZW50VHlwZUlkIgotCQkJCQkJCQkJCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUueHNkc291cmNlIiAvPgotCQkJCQkJCQk8L29yPgotCQkJCQkJCTwvYWRhcHQ+Ci0JCQkJCQk8L2l0ZXJhdGU+Ci0JCQkJCTwvd2l0aD4KLQkJCQk8L2VuYWJsZW1lbnQ+Ci0JCQk8L2NvbnRleHR1YWxMYXVuY2g+Ci0JCSAgIDxkZXNjcmlwdGlvbgotCQkgICAgICAgICBkZXNjcmlwdGlvbj0iJWRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uLjAiCi0JCSAgICAgICAgIG1vZGU9InJ1biI+Ci0JCSAgIDwvZGVzY3JpcHRpb24+Ci0JCSAgIDxkZXNjcmlwdGlvbgotCQkgICAgICAgICBkZXNjcmlwdGlvbj0iJWRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uLjEiCi0JCSAgICAgICAgIG1vZGU9ImRlYnVnIj4KLQkJICAgPC9kZXNjcmlwdGlvbj4KLQkJICAgPGRlc2NyaXB0aW9uCi0JCSAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGVzY3JpcHRpb24uZGVzY3JpcHRpb24uMiIKLQkJICAgICAgICAgbW9kZT0icHJvZmlsZSI+Ci0JCSAgIDwvZGVzY3JpcHRpb24+Ci0JCTwvc2hvcnRjdXQ+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkuZGVidWdNb2RlbENvbnRleHRCaW5kaW5ncyI+Ci0JCTxtb2RlbENvbnRleHRCaW5kaW5nCi0JCQljb250ZXh0SWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuY29udGV4dCIKLQkJCWRlYnVnTW9kZWxJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMRGVidWdNb2RlbCI+Ci0JCTwvbW9kZWxDb250ZXh0QmluZGluZz4KLQk8L2V4dGVuc2lvbj4KLQkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmJyZWFrcG9pbnQiPgotCQk8YnJlYWtwb2ludENvbnRyaWJ1dGlvbgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkucHJvdmlkZXJzIj4JCQotCQkJPHByb3ZpZGVyIGNvbnRlbnRUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5icmVha3BvaW50LlhTTEJyZWFrcG9pbnRQcm92aWRlcjoqeHNsLCp4c2x0IgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLlhTTEJyZWFrcG9pbnRQcm92aWRlciIgLz4KLQkJCTwhLS0gVE9ETyBhZGQgdGhpcyBiYWNrIGluIHdoZW4gd2UgY2FuIGRvIHNvbWV0aGluZyB3aXRoIGJyZWFrcG9pbnRzIG9uIFhNTCBmaWxlcwotCQkJPHByb3ZpZGVyIGNvbnRlbnRUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSxvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlLG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYnJlYWtwb2ludC5YU0xCcmVha3BvaW50UHJvdmlkZXI6KnhzbCwqeHNsdCwqeG1sIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLlhTTEJyZWFrcG9pbnRQcm92aWRlciIgLz4gIC0tPgotCQk8L2JyZWFrcG9pbnRDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3BvbS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThiZjJjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aTwvYXJ0aWZhY3RJZD4KLSAgIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KLSAgIDx2ZXJzaW9uPjEuMC4yMDAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICA8bmFtZT5YU0xUIERlYnVnIFVJIFBsdWdpbjwvbmFtZT4KLQotICAgPHBhcmVudD4KLSAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9kZXZlbG9wbWVudC9hdGhlbmEvb3JnLmVjbGlwc2Uud3N0LnhzbC5yZWxlbmc8L3JlbGF0aXZlUGF0aD4KLSAgIDwvcGFyZW50PgotCi0gICA8YnVpbGQ+Ci0gICAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgotICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjc8L3ZlcnNpb24+Ci0gICAgICAgICA8L3BsdWdpbj4KLSAgICAgIDwvcGx1Z2lucz4KLSAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9kZWJ1Zy9pbnRlcm5hbC91dGlsL1hTTERlYnVnUGx1Z2luSW1hZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZGVidWcvaW50ZXJuYWwvdXRpbC9YU0xEZWJ1Z1BsdWdpbkltYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlOWM2NTM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9kZWJ1Zy9pbnRlcm5hbC91dGlsL1hTTERlYnVnUGx1Z2luSW1hZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMjM1NTcgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBIb2xnZXIgVm9vcm1hbm4gLSBJY29ucyBmb3IgUHJvY2Vzc29yLCBPdXRwdXQsIGFuZCBMYXVuY2ggdGFicwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcuaW50ZXJuYWwudXRpbDsKLQotLyoqCi0gKiBCdW5kbGUgb2YgbW9zdCBpbWFnZXMgdXNlZCBieSB0aGUgWFNMIERlYnVnIFBsdWdpbnMKLSAqLwotcHVibGljIGNsYXNzIFhTTERlYnVnUGx1Z2luSW1hZ2VzIHsKLQotCS8qKgotCSAqIFBhdGggdG8gdGhlIFhTTFQgUHJvY2Vzc29yIEltYWdlcyB1c2VkIGZvciBsYXVuY2ggY29uZmlndXJhdGlvbnMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfUFJPQ0VTU09SX1RBQiA9ICJpY29ucy94c2x0X3Byb2Nlc3Nvci5naWYiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBQYXRoIHRvIHRoZSBYU0xUIE91dHB1dCBJbWFnZXMgdXNlZCBmb3IgbGF1bmNoIGNvbmZpZ3VyYXRpb25zCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX09VVFBVVF9UQUIgPSAiaWNvbnMveHNsdF9vdXRwdXQuZ2lmIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogUGF0aCB0byB0aGUgWFNMVCBMYXVuY2ggSW1hZ2VzIHVzZWQgZm9yIGxhdW5jaCBjb25maWd1cmF0aW9ucwotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19NQUlOX1RBQiA9ICJpY29ucy94c2x0X2xhdW5jaC5naWYiOyAvLyROT04tTkxTLTEkCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9kZWJ1Zy9pbnRlcm5hbC91dGlsL1hTTFBsdWdpbkltYWdlSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZGVidWcvaW50ZXJuYWwvdXRpbC9YU0xQbHVnaW5JbWFnZUhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3NDM5NmE0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9kZWJ1Zy9pbnRlcm5hbC91dGlsL1hTTFBsdWdpbkltYWdlSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMjEzODQ5IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotCi0vKioKLSAqIEhlbHBlciBjbGFzcyB0byBoYW5kbGUgaW1hZ2VzIHByb3ZpZGVkIGJ5IHRoaXMgcGx1Zy1pbi4KLSAqIAotICogTk9URTogRm9yIGludGVybmFsIHVzZSBvbmx5LiBGb3IgaW1hZ2VzIHVzZWQgZXh0ZXJuYWxseSwgcGxlYXNlIHVzZSB0aGUKLSAqIFNoYXJlZCoqKkltYWdlSGVscGVyIGNsYXNzIGluc3RlYWQuCi0gKiAKLSAqIEBhdXRob3IgZGF2aWQgY2FydmVyIGJhc2VkIG9uIHdvcmsgYnkgYW15d3UKLSAqLwotcHVibGljIGNsYXNzIFhTTFBsdWdpbkltYWdlSGVscGVyIHsKLQlwcml2YXRlIHN0YXRpYyBYU0xQbHVnaW5JbWFnZUhlbHBlciBpbnN0YW5jZSA9IG51bGw7Ci0KLQkvKioKLQkgKiBHZXRzIHRoZSBpbnN0YW5jZS4KLQkgKiAKLQkgKiBAcmV0dXJuIFJldHVybnMgYSBYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFhTTFBsdWdpbkltYWdlSGVscGVyIGdldEluc3RhbmNlKCkgewotCQlpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotCQkJaW5zdGFuY2UgPSBuZXcgWFNMUGx1Z2luSW1hZ2VIZWxwZXIoKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFuY2U7Ci0JfQotCi0JLy8gc2F2ZSBhIGRlc2NyaXB0b3IgZm9yIGVhY2ggaW1hZ2UKLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIEhhc2hNYXAgZkltYWdlRGVzY1JlZ2lzdHJ5ID0gbnVsbDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQTFVHSU5JRCA9IFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lEOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBpbWFnZSBmcm9tIHRoZSBnaXZlbiByZXNvdXJjZSBhbmQgYWRkcyB0aGUgaW1hZ2UgdG8gdGhlIGltYWdlCi0JICogcmVnaXN0cnkuCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlCi0JICogQHJldHVybiBJbWFnZQotCSAqLwotCXByaXZhdGUgSW1hZ2UgY3JlYXRlSW1hZ2UoU3RyaW5nIHJlc291cmNlKSB7Ci0JCUltYWdlRGVzY3JpcHRvciBkZXNjID0gZ2V0SW1hZ2VEZXNjcmlwdG9yKHJlc291cmNlKTsKLQkJSW1hZ2UgaW1hZ2UgPSBudWxsOwotCi0JCWlmIChkZXNjICE9IG51bGwpIHsKLQkJCWltYWdlID0gZGVzYy5jcmVhdGVJbWFnZSgpOwotCQkJLy8gZG9udCBhZGQgdGhlIG1pc3NpbmcgaW1hZ2UgZGVzY3JpcHRvciBpbWFnZSB0byB0aGUgaW1hZ2UKLQkJCS8vIHJlZ2lzdHJ5Ci0JCQlpZiAoIWRlc2MuZXF1YWxzKEltYWdlRGVzY3JpcHRvci5nZXRNaXNzaW5nSW1hZ2VEZXNjcmlwdG9yKCkpKSB7Ci0JCQkJZ2V0SW1hZ2VSZWdpc3RyeSgpLnB1dChyZXNvdXJjZSwgaW1hZ2UpOwotCQkJfQotCQl9Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGltYWdlIGRlc2NyaXB0b3IgZnJvbSB0aGUgZ2l2ZW4gaW1hZ2VGaWxlUGF0aCBhbmQgYWRkcyB0aGUKLQkgKiBpbWFnZSBkZXNjcmlwdG9yIHRvIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5LiBJZiBhbiBpbWFnZSBkZXNjcmlwdG9yCi0JICogY291bGQgbm90IGJlIGNyZWF0ZWQsIHRoZSBkZWZhdWx0ICJtaXNzaW5nIiBpbWFnZSBkZXNjcmlwdG9yIGlzIHJldHVybmVkCi0JICogYnV0IG5vdCBhZGRlZCB0byB0aGUgaW1hZ2UgZGVzY3JpcHRvciByZWdpc3RyeS4KLQkgKiAKLQkgKiBAcGFyYW0gaW1hZ2VGaWxlUGF0aAotCSAqIEByZXR1cm4gSW1hZ2VEZXNjcmlwdG9yIGltYWdlIGRlc2NyaXB0b3IgZm9yIGltYWdlRmlsZVBhdGggb3IgZGVmYXVsdAotCSAqICAgICAgICAgIm1pc3NpbmciIGltYWdlIGRlc2NyaXB0b3IgaWYgcmVzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kCi0JICovCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSBJbWFnZURlc2NyaXB0b3IgY3JlYXRlSW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBpbWFnZUZpbGVQYXRoKSB7Ci0JCUltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSBBYnN0cmFjdFVJUGx1Z2luCi0JCQkJLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOSUQsIGltYWdlRmlsZVBhdGgpOwotCQlpZiAoaW1hZ2VEZXNjcmlwdG9yICE9IG51bGwpIHsKLQkJCWdldEltYWdlRGVzY3JpcHRvclJlZ2lzdHJ5KCkucHV0KGltYWdlRmlsZVBhdGgsIGltYWdlRGVzY3JpcHRvcik7Ci0JCX0gZWxzZSB7Ci0JCQlpbWFnZURlc2NyaXB0b3IgPSBJbWFnZURlc2NyaXB0b3IuZ2V0TWlzc2luZ0ltYWdlRGVzY3JpcHRvcigpOwotCQl9Ci0KLQkJcmV0dXJuIGltYWdlRGVzY3JpcHRvcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBmcm9tIHRoZSBpbWFnZSByZWdpc3RyeS4gSWYKLQkgKiB0aGUgaW1hZ2UgY2Fubm90IGJlIHJldHJpZXZlZCwgYXR0ZW1wdCB0byBmaW5kIGFuZCBsb2FkIHRoZSBpbWFnZSBhdCB0aGUKLQkgKiBsb2NhdGlvbiBzcGVjaWZpZWQgaW4gcmVzb3VyY2UuCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlCi0JICogICAgICAgICAgICB0aGUgaW1hZ2UgdG8gcmV0cmlldmUKLQkgKiBAcmV0dXJuIEltYWdlIHRoZSBpbWFnZSBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2Ugb3IgbnVsbCBpZiBvbmUgY291bGQgbm90Ci0JICogICAgICAgICBiZSBmb3VuZAotCSAqLwotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShTdHJpbmcgcmVzb3VyY2UpIHsKLQkJSW1hZ2UgaW1hZ2UgPSBnZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KHJlc291cmNlKTsKLQkJaWYgKGltYWdlID09IG51bGwpIHsKLQkJCS8vIGNyZWF0ZSBhbiBpbWFnZQotCQkJaW1hZ2UgPSBjcmVhdGVJbWFnZShyZXNvdXJjZSk7Ci0JCX0KLQkJcmV0dXJuIGltYWdlOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2UgZnJvbSB0aGUgaW1hZ2UKLQkgKiBkZXNjcmlwdG9yIHJlZ2lzdHJ5LiBJZiB0aGUgaW1hZ2UgZGVzY3JpcHRvciBjYW5ub3QgYmUgcmV0cmlldmVkLCBhdHRlbXB0Ci0JICogdG8gZmluZCBhbmQgbG9hZCB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGluCi0JICogcmVzb3VyY2UuCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlCi0JICogICAgICAgICAgICB0aGUgaW1hZ2UgZGVzY3JpcHRvciB0byByZXRyaWV2ZQotCSAqIEByZXR1cm4gSW1hZ2VEZXNjcmlwdG9yIHRoZSBpbWFnZSBkZXNjcmlwdG9yIGFzc29jYXRlZCB3aXRoIHJlc291cmNlIG9yCi0JICogICAgICAgICB0aGUgZGVmYXVsdCAibWlzc2luZyIgaW1hZ2UgZGVzY3JpcHRvciBpZiBvbmUgY291bGQgbm90IGJlIGZvdW5kCi0JICovCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHJlc291cmNlKSB7Ci0JCUltYWdlRGVzY3JpcHRvciBpbWFnZURlc2NyaXB0b3IgPSBudWxsOwotCQlPYmplY3QgbyA9IGdldEltYWdlRGVzY3JpcHRvclJlZ2lzdHJ5KCkuZ2V0KHJlc291cmNlKTsKLQkJaWYgKG8gPT0gbnVsbCkgewotCQkJLy8gY3JlYXRlIGEgZGVzY3JpcHRvcgotCQkJaW1hZ2VEZXNjcmlwdG9yID0gY3JlYXRlSW1hZ2VEZXNjcmlwdG9yKHJlc291cmNlKTsKLQkJfSBlbHNlIHsKLQkJCWltYWdlRGVzY3JpcHRvciA9IChJbWFnZURlc2NyaXB0b3IpIG87Ci0JCX0KLQkJcmV0dXJuIGltYWdlRGVzY3JpcHRvcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbi4KLQkgKiAKLQkgKiBAcmV0dXJuIEhhc2hNYXAgLSBpbWFnZSBkZXNjcmlwdG9yIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbgotCSAqLwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgSGFzaE1hcCBnZXRJbWFnZURlc2NyaXB0b3JSZWdpc3RyeSgpIHsKLQkJaWYgKGZJbWFnZURlc2NSZWdpc3RyeSA9PSBudWxsKSB7Ci0JCQlmSW1hZ2VEZXNjUmVnaXN0cnkgPSBuZXcgSGFzaE1hcCgpOwotCQl9Ci0JCXJldHVybiBmSW1hZ2VEZXNjUmVnaXN0cnk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaW1hZ2UgcmVnaXN0cnkgZm9yIHRoaXMgcGx1Z2luLgotCSAqIAotCSAqIEByZXR1cm4gSW1hZ2VSZWdpc3RyeSAtIGltYWdlIHJlZ2lzdHJ5IGZvciB0aGlzIHBsdWdpbgotCSAqLwotCXByaXZhdGUgSW1hZ2VSZWdpc3RyeSBnZXRJbWFnZVJlZ2lzdHJ5KCkgewotCQlyZXR1cm4gSkZhY2VSZXNvdXJjZXMuZ2V0SW1hZ2VSZWdpc3RyeSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9BYnN0cmFjdFRhYmxlQmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9BYnN0cmFjdFRhYmxlQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwODVhNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvQWJzdHJhY3RUYWJsZUJsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotCi0vKioKLSAqIEFuIDxjb2RlPkFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYjwvY29kZT4gc3BlY2lhbGlzZWQgZm9yIGJsb2NrcyB0aGF0Ci0gKiBjb250YWluIGEgdGFibGUuIFRoaXMgYWJzdHJhY3QgY2xhc3MgY29udmVuaWVudGx5IHNhdmVzIGFuZCByZXN0b3JlcyB0aGUKLSAqIHRhYmxlJ3MgY29sdW1uIHNldHRpbmdzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRhYmxlQmxvY2sgZXh0ZW5kcyBBYnN0cmFjdExhdW5jaENvbmZpZ3VyYXRpb25UYWIgewotCXByaXZhdGUgaW50IGZTb3J0Q29sdW1uOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFRhYmxlIGdldFRhYmxlKCk7Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCk7Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFF1YWxpZmllcigpOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0U29ydENvbHVtbihpbnQgY29sdW1uKSB7Ci0JCWZTb3J0Q29sdW1uID0gY29sdW1uOwotCX0KLQotCS8qKgotCSAqIFBlcnNpc3QgdGFibGUgc2V0dGluZ3MgaW50byB0aGUgZ2l2ZSBkaWFsb2cgc3RvcmUsIHByZWZpeGVkIHdpdGggdGhlCi0JICogZ2l2ZW4ga2V5LgotCSAqLwotCXB1YmxpYyB2b2lkIHNhdmVDb2x1bW5TZXR0aW5ncygpIHsKLQkJaW50IGNvbHVtbkNvdW50ID0gZ2V0VGFibGUoKS5nZXRDb2x1bW5Db3VudCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspIHsKLQkJCWdldERpYWxvZ1NldHRpbmdzKCkKLQkJCQkJLnB1dCgKLQkJCQkJCQlnZXRRdWFsaWZpZXIoKSArICIuY29sdW1uV2lkdGgiICsgaSwgZ2V0VGFibGUoKS5nZXRDb2x1bW4oaSkuZ2V0V2lkdGgoKSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlnZXREaWFsb2dTZXR0aW5ncygpLnB1dChnZXRRdWFsaWZpZXIoKSArICIuc29ydENvbHVtbiIsIGZTb3J0Q29sdW1uKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIFJlc3RvcmUgdGFibGUgc2V0dGluZ3MgZnJvbSB0aGUgZ2l2ZW4gZGlhbG9nIHN0b3JlIHVzaW5nIHRoZSBnaXZlbiBrZXkuCi0JICovCi0JcHVibGljIHZvaWQgcmVzdG9yZUNvbHVtblNldHRpbmdzKCkgewotCQlnZXRUYWJsZSgpLmxheW91dCh0cnVlKTsKLQkJcmVzdG9yZUNvbHVtbldpZHRocyhnZXREaWFsb2dTZXR0aW5ncygpLCBnZXRRdWFsaWZpZXIoKSk7Ci0JCWludCBjb2wgPSAwOwotCQl0cnkgewotCQkJY29sID0gZ2V0RGlhbG9nU2V0dGluZ3MoKS5nZXRJbnQoZ2V0UXVhbGlmaWVyKCkgKyAiLnNvcnRDb2x1bW4iKTsgLy8kTk9OLU5MUy0xJAotCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJY29sID0gMTsKLQkJfQotCQlzZXRTb3J0Q29sdW1uKGNvbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlc3RvcmVDb2x1bW5XaWR0aHMoSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzLCBTdHJpbmcgcXVhbGlmaWVyKSB7Ci0JCWludCBjb2x1bW5Db3VudCA9IGdldFRhYmxlKCkuZ2V0Q29sdW1uQ291bnQoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7Ci0JCQlpbnQgd2lkdGggPSAtMTsKLQkJCXRyeSB7Ci0JCQkJd2lkdGggPSBzZXR0aW5ncy5nZXRJbnQocXVhbGlmaWVyICsgIi5jb2x1bW5XaWR0aCIgKyBpKTsgLy8kTk9OLU5MUy0xJAotCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCX0KLQotCQkJaWYgKHdpZHRoID4gMCkKLQkJCQlnZXRUYWJsZSgpLmdldENvbHVtbihpKS5zZXRXaWR0aCh3aWR0aCk7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlpZiAoZ2V0VGFibGUoKSAhPSBudWxsICYmICFnZXRUYWJsZSgpLmlzRGlzcG9zZWQoKSkKLQkJCXNhdmVDb2x1bW5TZXR0aW5ncygpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzYTM5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gdXBkYXRlZCB0byBtZWV0IEdhbGlsZW8gcmVxdWlyZW1lbnRzCi0gKiAgICAgU3R1YXJ0IEhhcnBlciAtIGFkZGVkICJvcGVuIGZpbGVzIiBzZWxlY3RvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIE1lc3NhZ2VzIGZvciB0aGUgZGVidWcudWkgcGFja2FnZS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogQSBuYW1lIGZvciB0aGUgcmVtb3ZlIGFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBSZW1vdmVBY3Rpb25fVGV4dDsKLQotCS8qKgotCSAqIEEgbmFtZSBmb3IgdGhlIDxjb2RlPkFkZFdvcmtzcGFjZUZpbGVBY3Rpb248L2NvZGU+IGFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX1RleHQ7Ci0KLQkvKioKLQkgKiBBIG5hbWUgZm9yIHRoZSA8Y29kZT5BZGRFeHRlcm5hbEZpbGVBY3Rpb248L2NvZGU+IGFjdGlvbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRFeHRlcm5hbEZpbGVBY3Rpb25fVGV4dDsKLQotCS8qKgotCSAqIEEgbmFtZSBmb3IgdGhlIDxjb2RlPk1vdmVEb3duQWN0aW9uPC9jb2RlPiBhY3Rpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTW92ZURvd25BY3Rpb25fVGV4dDsKLQotCS8qKgotCSAqIEEgbmFtZSBmb3IgdGhlIDxjb2RlPk1vdmVVcEFjdGlvbjwvY29kZT4gYWN0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1vdmVVcEFjdGlvbl9UZXh0OwotCi0JLyoqCi0JICogQSBoZWFkaW5nIGZvciB0aGUgPGNvZGU+QWRkRXh0ZXJuYWxGaWxlQWN0aW9uPC9jb2RlPiBkaWFsb2cuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkRXh0ZXJuYWxGaWxlQWN0aW9uX1NlbGVjdGlvbl8zOwotCi0JLyoqCi0JICogQSBtZXNzYWdlIGZvciB0aGUgPGNvZGU+QWRkV29ya3NwYWNlRmlsZUFjdGlvbjwvY29kZT4gZGlhbG9nLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fRGlhbG9nTWVzc2FnZTsKLQotCS8qKgotCSAqIEEgdGl0bGUgZm9yIHRoZSA8Y29kZT5BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uPC9jb2RlPiBkaWFsb2cuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkV29ya3NwYWNlRmlsZUFjdGlvbl9EaWFsb2dUaXRsZTsKLQotCS8qKgotCSAqIEEgbmFtZSBmb3IgdGhlIDxjb2RlPkFkZFBhcmFtZXRlckFjdGlvbjwvY29kZT4gYWN0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFBhcmFtZXRlckFjdGlvbjsKLQotCS8qKgotCSAqIEEgbmFtZSBmb3IgdGhlIDxjb2RlPlJlbW92ZVBhcmFtZXRlckFjdGlvbjwvY29kZT4gYWN0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJlbW92ZVBhcmFtZXRlckFjdGlvbjsKLQotCS8qKgotCSAqIEEgbGFiZWwgZm9yIHRoZSBWYXJpYWJsZXMgYnV0dG9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZhcmlhYmxlc0ZpZWxkQnV0dG9uX1RleHQ7Ci0KLQkvKioKLQkgKiBBIHRpdGxlIGZvciB0aGUgPGNvZGU+QWRkUGFyYW1ldGVyQWN0aW9uPC9jb2RlPiBkaWFsb2cuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZzsKLQotCS8qKgotCSAqIEEgbGFiZWwgZm9yIHRoZSA8Y29kZT5BZGRQYXJhbWV0ZXJBY3Rpb248L2NvZGU+IG5hbWUgdGV4dCBib3guCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19OYW1lOwotCi0JLyoqCi0JICogQSBsYWJlbCBmb3IgdGhlIDxjb2RlPkFkZFBhcmFtZXRlckFjdGlvbjwvY29kZT4gdHlwZSBjb21iby4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nX1R5cGU7Ci0KLQkvKioKLQkgKiBBIGxhYmVsIGZvciB0aGUgPGNvZGU+QWRkUGFyYW1ldGVyQWN0aW9uPC9jb2RlPiB2YWx1ZSB0ZXh0IGJveC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nX1ZhbHVlOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMQnJlYWtwb2ludFByb3ZpZGVyXzA7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTdHlsZXNoZWV0RW50cnlMYWJlbFByb3ZpZGVyX0ludmFsaWRfcGF0aDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRyYW5zZm9ybXNCbG9ja18wOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVHJhbnNmb3Jtc0Jsb2NrX05hbWU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19ESVJFQ1RPUllfTk9UX1NQRUNJRklFRDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX0dST1VQX05BTUU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19ERUZBVUxUX1JBRElPOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfT1RIRVJfUkFESU87Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19ESUFMT0dfTUVTU0FHRTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfTUVTU0FHRTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX1ZBUklBQkxFU19CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19GSUxFX1NZU1RFTV9CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfQlVUVE9OOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfT1BFTkZJTEVTX0JVVFRPTjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX09QRU5GSUxFU19ESUFMT0c7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBJbnB1dEZpbGVCbG9ja19OYW1lOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5wdXRGaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3JlYWRpbmdfY29uZmlndXJhdGlvbjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIElucHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfVElUTEU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xNYWluVGFiX1RhYk5hbWU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBUcmFuc2Zvcm1zQmxvY2tfUGFyYW1ldGVyc0xhYmVsOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgVHJhbnNmb3Jtc0Jsb2NrX1N0eWxlc2hlZXRzTGFiZWw7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQYXJhbWV0ZXJzQmxvY2tfMTA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFyYW1ldGVyc0Jsb2NrXzExOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja18yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja18zOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja180OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja181OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja182OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja183OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja184OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhcmFtZXRlcnNCbG9ja185OwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0UHJvcGVydGllc0Jsb2NrXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0UHJvcGVydGllc0Jsb2NrXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0UHJvcGVydGllc0Jsb2NrXzEzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja18zOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja180OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja181OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja183OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja184OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFByb3BlcnRpZXNCbG9ja185OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFRhYl8wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dFRhYl8xOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0VHlwZUJsb2NrX0dyb3VwX05hbWU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfMDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja18xOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrXzI7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfNzsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja184OwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrXzk7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfRElSRUNUT1JZX0RPRVNfTk9UX0VYSVNUOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX0dST1VQX05BTUU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfREVGQVVMVF9SQURJTzsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19PVEhFUl9SQURJTzsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19ESUFMT0dfTUVTU0FHRTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfVkFSSUFCTEVTX0JVVFRPTjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19GSUxFX1NZU1RFTV9CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfV09SS1NQQUNFX0JVVFRPTjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19OYW1lOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0RmlsZUJsb2NrX0V4Y2VwdGlvbl9vY2N1cnJlZF9yZWFkaW5nX2NvbmZpZ3VyYXRpb247Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19USVRMRTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZpbGVCbG9ja19FeGNlcHRpb25fb2NjdXJyZWRfc2F2aW5nX2NvbmZpZ3VyYXRpb247Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19ESVJFQ1RPUllfTk9UX1NQRUNJRklFRDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX0dST1VQX05BTUU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19ERUZBVUxUX1JBRElPOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfT1RIRVJfUkFESU87Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19ESUFMT0dfTUVTU0FHRTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfTUVTU0FHRTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX1ZBUklBQkxFU19CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19GSUxFX1NZU1RFTV9CVVRUT047Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19XT1JLU1BBQ0VfQlVUVE9OOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfTmFtZTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE91dHB1dEZPRmlsZUJsb2NrX0V4Y2VwdGlvbl9vY2N1cnJlZF9yZWFkaW5nX2NvbmZpZ3VyYXRpb247Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBPdXRwdXRGT0ZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX1RJVExFOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgT3V0cHV0Rk9GaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3NhdmluZ19jb25maWd1cmF0aW9uOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUmVzb3VyY2VTZWxlY3Rpb25CbG9ja18wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTExhdW5jaFNob3J0Y3V0XzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMTGF1bmNoU2hvcnRjdXRfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xMYXVuY2hTaG9ydGN1dF8yOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTExhdW5jaFNob3J0Y3V0XzY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMU2VsZWN0RXhpc3Rpbmc7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCX0KLQotCXN0YXRpYyB7Ci0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9SZXNvdXJjZVNlbGVjdGlvbkJsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvUmVzb3VyY2VTZWxlY3Rpb25CbG9jay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjU2ODYwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9SZXNvdXJjZVNlbGVjdGlvbkJsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAxMCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgU3R1YXJ0IEhhcnBlciAtIGJ1ZyAyNjQ3ODggLSBhZGRlZCAib3BlbiBmaWxlcyIgc2VsZWN0b3IKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI2NDc4OCAtIHB1bGxlZCB1cCBnZXRGaWxlRXh0ZW5zaW9ucyBmcm9tIElucHV0RmlsZUJsb2NrCi0gKiAgICAgRGF2aWQgQ2FydmVyIChJbnRhbGlvKSAtIGNsZWFuIHVwIGZpbmQgYnVncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLklTdHJpbmdWYXJpYWJsZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXMuVmFyaWFibGVzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLlN0cmluZ1ZhcmlhYmxlU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlyZWN0b3J5RGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5FbGVtZW50TGlzdFNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5uYXZpZ2F0b3IuUmVzb3VyY2VDb21wYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlhNTENvbnRlbnRUeXBlOwotCi0vKioKLSAqIEEgYmxvY2sgdGhhdCBzaG93cyBhIHRleHQgYm94IHdpdGggYnV0dG9ucyBmb3IgYnJvd3Npbmcgd29ya3NwYWNlIG9yIHRoZQotICogZmlsZXN5c3RlbSBpbiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgdGV4dCBib3ggd2l0aCBhIGZpbGUgcGF0aC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVzb3VyY2VTZWxlY3Rpb25CbG9jayBleHRlbmRzCi0JCUFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYiB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQgPSAxOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVCA9IDI7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgR1JPVVBfTkFNRSA9IDM7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgVVNFX0RFRkFVTFRfUkFESU8gPSA0OwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFVTRV9PVEhFUl9SQURJTyA9IDU7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgRElSRUNUT1JZX0RJQUxPR19NRVNTQUdFID0gNjsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBXT1JLU1BBQ0VfRElBTE9HX01FU1NBR0UgPSA3OwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFZBUklBQkxFU19CVVRUT04gPSA4OwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEZJTEVfU1lTVEVNX0JVVFRPTiA9IDk7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgV09SS1NQQUNFX0JVVFRPTiA9IDEwOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFdPUktTUEFDRV9ESUFMT0dfVElUTEUgPSAxMTsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBPUEVORklMRVNfQlVUVE9OID0gMTI7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgT1BFTkZJTEVTX0RJQUxPR19USVRMRSA9IDEzOwotCi0JcHJvdGVjdGVkIEJ1dHRvbiBmV29ya3NwYWNlQnV0dG9uOwotCXByb3RlY3RlZCBCdXR0b24gZkZpbGVTeXN0ZW1CdXR0b247Ci0JcHJvdGVjdGVkIEJ1dHRvbiBmVmFyaWFibGVzQnV0dG9uOwotCXByb3RlY3RlZCBCdXR0b24gZk9wZW5GaWxlc0J1dHRvbjsKLQlwcm90ZWN0ZWQgQnV0dG9uIHVzZURlZmF1bHRDaGVja0J1dHRvbjsKLQlwcm90ZWN0ZWQgVGV4dCByZXNvdXJjZVRleHQ7Ci0JcHJvdGVjdGVkIFdpZGdldExpc3RlbmVyIHdpZGdldExpc3RlbmVyID0gbmV3IFdpZGdldExpc3RlbmVyKCk7Ci0JcHJpdmF0ZSBJTGF1bmNoQ29uZmlndXJhdGlvbiBmTGF1bmNoQ29uZmlndXJhdGlvbjsKLQlwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBzaG93RGVmYXVsdDsKLQlwcml2YXRlIGZpbmFsIGludCByZXNvdXJjZVR5cGU7Ci0JcHJpdmF0ZSBmaW5hbCBib29sZWFuIG11c3RFeGlzdDsKLQlwcm90ZWN0ZWQgYm9vbGVhbiByZXF1aXJlZDsKLQlwcm90ZWN0ZWQgU3RyaW5nIGRlZmF1bHRSZXNvdXJjZTsKLQlwcm90ZWN0ZWQgU3RyaW5nIHJlc291cmNlOwotCXByb3RlY3RlZCBTdHJpbmcgZmlsZUxhYmVsID0gTWVzc2FnZXMuUmVzb3VyY2VTZWxlY3Rpb25CbG9ja18wOwotCi0JcHJpdmF0ZSBmaW5hbCBJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yKCkgewotCQlwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZShPYmplY3RbXSBzZWxlY3Rpb24pIHsKLQkJCWlmIChzZWxlY3Rpb24ubGVuZ3RoID09IDApIHsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwKLQkJCQkJCSIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3Rpb24ubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAocmVzb3VyY2VUeXBlID09IElSZXNvdXJjZS5GT0xERVIKLQkJCQkJCSYmICEoc2VsZWN0aW9uW2ldIGluc3RhbmNlb2YgSUNvbnRhaW5lcikpCi0JCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsICIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsc2UgaWYgKHJlc291cmNlVHlwZSA9PSBJUmVzb3VyY2UuRklMRQotCQkJCQkJJiYgIShzZWxlY3Rpb25baV0gaW5zdGFuY2VvZiBJRmlsZSkpCi0JCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsICIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsCi0JCQkJCSIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfTsKLQotCWNsYXNzIFdpZGdldExpc3RlbmVyIGV4dGVuZHMgU2VsZWN0aW9uQWRhcHRlciBpbXBsZW1lbnRzIE1vZGlmeUxpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQl0ZXh0TW9kaWZpZWQoKTsKLQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQlPYmplY3Qgc291cmNlID0gZS5nZXRTb3VyY2UoKTsKLQkJCWlmIChzb3VyY2UgPT0gZldvcmtzcGFjZUJ1dHRvbikgewotCQkJCWhhbmRsZVdvcmtzcGFjZVJlc291cmNlQnJvd3NlQnV0dG9uU2VsZWN0ZWQoKTsKLQkJCX0gZWxzZSBpZiAoc291cmNlID09IGZGaWxlU3lzdGVtQnV0dG9uKSB7Ci0JCQkJaGFuZGxlRXh0ZXJuYWxSZXNvdXJjZUJyb3dzZUJ1dHRvblNlbGVjdGVkKCk7Ci0JCQl9IGVsc2UgaWYgKHNvdXJjZSA9PSBmVmFyaWFibGVzQnV0dG9uKSB7Ci0JCQkJaGFuZGxlUmVzb3VyY2VWYXJpYWJsZXNCdXR0b25TZWxlY3RlZCgpOwotCQkJfSBlbHNlIGlmIChzb3VyY2UgPT0gdXNlRGVmYXVsdENoZWNrQnV0dG9uKSB7Ci0JCQkJdXBkYXRlUmVzb3VyY2VUZXh0KHVzZURlZmF1bHRDaGVja0J1dHRvbi5nZXRTZWxlY3Rpb24oKSk7Ci0JCQl9IGVsc2UgaWYgKHNvdXJjZSA9PSBmT3BlbkZpbGVzQnV0dG9uKSB7Ci0JCQkJaGFuZGxlT3BlbkZpbGVzUmVzb3VyY2VCcm93c2VCdXR0b25TZWxlY3RlZCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogU2FtZSBhcyA8Y29kZT5uZXcgUmVzb3VyY2VTZWxlY3Rpb25CbG9jayh0cnVlKTwvY29kZT4KLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25CbG9jaygpIHsKLQkJdGhpcyh0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiBTYW1lIGFzCi0JICogPGNvZGU+bmV3IFJlc291cmNlU2VsZWN0aW9uQmxvY2soSVJlc291cmNlLkZPTERFUixzaG93RGVmYXVsdCk8L2NvZGU+Ci0JICogCi0JICogQHBhcmFtIHNob3dEZWZhdWx0Ci0JICogICAgICAgICAgICB0cnVlIGlmIHRoaXMgc2hvdWxkIGhhdmUgYSAnU2hvdyBEZWZhdWx0JyBidXR0b24KLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25CbG9jayhib29sZWFuIHNob3dEZWZhdWx0KSB7Ci0JCXRoaXMoSVJlc291cmNlLkZPTERFUiwgc2hvd0RlZmF1bHQpOwotCX0KLQotCS8qKgotCSAqIFNhbWUgYXMKLQkgKiA8Y29kZT5uZXcgUmVzb3VyY2VTZWxlY3Rpb25CbG9jayhyZXNvdXJjZVR5cGUsc2hvd0RlZmF1bHQsdHJ1ZSk8L2NvZGU+Ci0JICogCi0JICogQHBhcmFtIHJlc291cmNlVHlwZQotCSAqICAgICAgICAgICAgdGhlIHR5cGUgb2YgcmVzb3VyY2UgdG8gc2VsZWN0IC0gSVJlc291cmNlLkZPTERFUiBvcgotCSAqICAgICAgICAgICAgSVJlc291cmNlLkZJTEUKLQkgKiBAcGFyYW0gc2hvd0RlZmF1bHQKLQkgKiAgICAgICAgICAgIHRydWUgaWYgdGhpcyBzaG91bGQgaGF2ZSBhICdTaG93IERlZmF1bHQnIGJ1dHRvbgotCSAqLwotCXB1YmxpYyBSZXNvdXJjZVNlbGVjdGlvbkJsb2NrKGludCByZXNvdXJjZVR5cGUsIGJvb2xlYW4gc2hvd0RlZmF1bHQpIHsKLQkJdGhpcyhyZXNvdXJjZVR5cGUsIHNob3dEZWZhdWx0LCB0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiBTYW1lIGFzCi0JICogPGNvZGU+bmV3IFJlc291cmNlU2VsZWN0aW9uQmxvY2socmVzb3VyY2VUeXBlLHNob3dEZWZhdWx0LHJlcXVpcmVkLHRydWUpPC9jb2RlPgotCSAqIAotCSAqIEBwYXJhbSByZXNvdXJjZVR5cGUKLQkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIHNlbGVjdCAtIElSZXNvdXJjZS5GT0xERVIgb3IKLQkgKiAgICAgICAgICAgIElSZXNvdXJjZS5GSUxFCi0JICogQHBhcmFtIHNob3dEZWZhdWx0Ci0JICogICAgICAgICAgICB0cnVlIGlmIHRoaXMgc2hvdWxkIGhhdmUgYSAnU2hvdyBEZWZhdWx0JyBidXR0b24KLQkgKiBAcGFyYW0gcmVxdWlyZWQKLQkgKiAgICAgICAgICAgIHRydWUgaWYgYSBibGFuayB0ZXh0IGJveCBpcyBpbnZhbGlkCi0JICovCi0JcHVibGljIFJlc291cmNlU2VsZWN0aW9uQmxvY2soaW50IHJlc291cmNlVHlwZSwgYm9vbGVhbiBzaG93RGVmYXVsdCwKLQkJCWJvb2xlYW4gcmVxdWlyZWQpIHsKLQkJdGhpcyhyZXNvdXJjZVR5cGUsIHNob3dEZWZhdWx0LCByZXF1aXJlZCwgdHJ1ZSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHJlc291cmNlVHlwZQotCSAqICAgICAgICAgICAgdGhlIHR5cGUgb2YgcmVzb3VyY2UgdG8gc2VsZWN0IC0gSVJlc291cmNlLkZPTERFUiBvcgotCSAqICAgICAgICAgICAgSVJlc291cmNlLkZJTEUKLQkgKiBAcGFyYW0gc2hvd0RlZmF1bHQKLQkgKiAgICAgICAgICAgIHRydWUgaWYgdGhpcyBzaG91bGQgaGF2ZSBhICdTaG93IERlZmF1bHQnIGJ1dHRvbgotCSAqIEBwYXJhbSByZXF1aXJlZAotCSAqICAgICAgICAgICAgdHJ1ZSBpZiBhIGJsYW5rIHRleHQgYm94IGlzIGludmFsaWQKLQkgKiBAcGFyYW0gbXVzdEV4aXN0Ci0JICogICAgICAgICAgICB0cnVlIG9mIHRoZSBzZWxlY3RlZCByZXNvdXJjZSBtdXN0IGFscmVhZHkgZXhpc3QKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VTZWxlY3Rpb25CbG9jayhpbnQgcmVzb3VyY2VUeXBlLCBib29sZWFuIHNob3dEZWZhdWx0LAotCQkJYm9vbGVhbiByZXF1aXJlZCwgYm9vbGVhbiBtdXN0RXhpc3QpIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5zaG93RGVmYXVsdCA9IHNob3dEZWZhdWx0OwotCQl0aGlzLnJlc291cmNlVHlwZSA9IHJlc291cmNlVHlwZTsKLQkJdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkOwotCQl0aGlzLm11c3RFeGlzdCA9IG11c3RFeGlzdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIGdyb3VwID0gY3JlYXRlQ29udGFpbmVyKHBhcmVudCk7Ci0JCXNldENvbnRyb2woZ3JvdXApOwotCQljcmVhdGVDb250ZW50cyhncm91cCk7Ci0JfQotCi0JcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVDb250YWluZXIoQ29tcG9zaXRlIHBhcmVudCkgewotCQlHcm91cCBncm91cCA9IG5ldyBHcm91cChwYXJlbnQsIFNXVC5OT05FKTsKLQkJZ3JvdXAuc2V0VGV4dChnZXRNZXNzYWdlKEdST1VQX05BTUUpKTsKLQkJLy8gVE9ETyBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwLi4uCi0JCUdyaWRMYXlvdXQgZ3JvdXBMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlncm91cExheW91dC5udW1Db2x1bW5zID0gMjsKLQkJZ3JvdXBMYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gZmFsc2U7Ci0JCWdyb3VwLnNldExheW91dChncm91cExheW91dCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWdyb3VwLnNldExheW91dERhdGEoZ2QpOwotCQlncm91cC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQlyZXR1cm4gZ3JvdXA7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotCQljcmVhdGVDaGVja2JveEFuZFRleHQocGFyZW50KTsKLQkJY3JlYXRlQnV0dG9ucyhwYXJlbnQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNoZWNrYm94QW5kVGV4dChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWlmIChzaG93RGVmYXVsdCkgewotCQkJdXNlRGVmYXVsdENoZWNrQnV0dG9uID0gY3JlYXRlQ2hlY2tCdXR0b24ocGFyZW50LAotCQkJCQlnZXRNZXNzYWdlKFVTRV9ERUZBVUxUX1JBRElPKSk7Ci0JCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7Ci0JCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCQl1c2VEZWZhdWx0Q2hlY2tCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCQl1c2VEZWZhdWx0Q2hlY2tCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCQl9Ci0KLQkJQ29tcG9zaXRlIHNwZWNpZmljRmlsZUNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJaWYgKHNob3dEZWZhdWx0KQotCQkJbGF5b3V0Lm1hcmdpbkxlZnQgPSAyMDsKLQkJZWxzZQotCQkJbGF5b3V0Lm1hcmdpbkxlZnQgPSAwOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJc3BlY2lmaWNGaWxlQ29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlzcGVjaWZpY0ZpbGVDb21wLnNldExheW91dERhdGEoZ2QpOwotCi0JCWlmIChzaG93RGVmYXVsdCkgewotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoc3BlY2lmaWNGaWxlQ29tcCwgU1dULk5PTkUpOwotCQkJbGFiZWwuc2V0VGV4dChmaWxlTGFiZWwpOwotCQl9Ci0KLQkJcmVzb3VyY2VUZXh0ID0gbmV3IFRleHQoc3BlY2lmaWNGaWxlQ29tcCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IHNob3dEZWZhdWx0ID8gMSA6IDI7Ci0JCXJlc291cmNlVGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcmVzb3VyY2VUZXh0LnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0JCXJlc291cmNlVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcih3aWRnZXRMaXN0ZW5lcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlQnV0dG9ucyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JCS8vIGZpbGxlcgotCQluZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7Ci0KLQkJQ29tcG9zaXRlIGJ1dHRvbkNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDQsIGZhbHNlKTsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWJ1dHRvbkNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRU5EKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAxOwotCQlidXR0b25Db21wLnNldExheW91dERhdGEoZ2QpOwotCQlidXR0b25Db21wLnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0KLQkJZldvcmtzcGFjZUJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9uQ29tcCwKLQkJCQlnZXRNZXNzYWdlKFdPUktTUEFDRV9CVVRUT04pLCBudWxsKTsKLQkJZldvcmtzcGFjZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih3aWRnZXRMaXN0ZW5lcik7Ci0KLQkJZkZpbGVTeXN0ZW1CdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbkNvbXAsCi0JCQkJZ2V0TWVzc2FnZShGSUxFX1NZU1RFTV9CVVRUT04pLCBudWxsKTsKLQkJZkZpbGVTeXN0ZW1CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCi0JCWZWYXJpYWJsZXNCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbkNvbXAsCi0JCQkJZ2V0TWVzc2FnZShWQVJJQUJMRVNfQlVUVE9OKSwgbnVsbCk7Ci0JCWZWYXJpYWJsZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCi0JCWZPcGVuRmlsZXNCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbkNvbXAsCi0JCQkJZ2V0TWVzc2FnZShPUEVORklMRVNfQlVUVE9OKSwgbnVsbCk7Ci0JCWZPcGVuRmlsZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVJlc291cmNlVGV4dChib29sZWFuIHVzZURlZmF1bHQpIHsKLQkJaWYgKHVzZURlZmF1bHQpIHsKLQkJCXJlc291cmNlVGV4dAotCQkJCQkuc2V0VGV4dChkZWZhdWx0UmVzb3VyY2UgPT0gbnVsbCA/ICIiIDogZGVmYXVsdFJlc291cmNlKTsgLy8kTk9OLU5MUy0xJAotCQl9IGVsc2UgewotCQkJcmVzb3VyY2VUZXh0LnNldFRleHQocmVzb3VyY2UgPT0gbnVsbCA/ICIiIDogcmVzb3VyY2UpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmVzb3VyY2VUZXh0LnNldEVuYWJsZWQoIXVzZURlZmF1bHQpOwotCQlmRmlsZVN5c3RlbUJ1dHRvbi5zZXRFbmFibGVkKCF1c2VEZWZhdWx0KTsKLQkJZlZhcmlhYmxlc0J1dHRvbi5zZXRFbmFibGVkKCF1c2VEZWZhdWx0KTsKLQkJZldvcmtzcGFjZUJ1dHRvbi5zZXRFbmFibGVkKCF1c2VEZWZhdWx0KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCX0KLQotCXByb3RlY3RlZCB2b2lkIGhhbmRsZUV4dGVybmFsUmVzb3VyY2VCcm93c2VCdXR0b25TZWxlY3RlZCgpIHsKLQkJU3RyaW5nIGN1cnJlbnRXb3JraW5nRGlyID0gZ2V0VGV4dCgpOwotCQlTdHJpbmcgc2VsZWN0ZWQgPSBudWxsOwotCQlpZiAocmVzb3VyY2VUeXBlID09IElSZXNvdXJjZS5GT0xERVIpIHsKLQkJCURpcmVjdG9yeURpYWxvZyBkaWFsb2cgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKGdldFNoZWxsKCkpOwotCQkJZGlhbG9nLnNldE1lc3NhZ2UoZ2V0TWVzc2FnZShESVJFQ1RPUllfRElBTE9HX01FU1NBR0UpKTsKLQkJCWlmICghY3VycmVudFdvcmtpbmdEaXIudHJpbSgpLmVxdWFscygiIikpIC8vJE5PTi1OTFMtMSQKLQkJCXsKLQkJCQlGaWxlIHBhdGggPSBuZXcgRmlsZShjdXJyZW50V29ya2luZ0Rpcik7Ci0JCQkJaWYgKHBhdGguZXhpc3RzKCkpIHsKLQkJCQkJZGlhbG9nLnNldEZpbHRlclBhdGgoY3VycmVudFdvcmtpbmdEaXIpOwotCQkJCX0KLQkJCX0KLQkJCXNlbGVjdGVkID0gZGlhbG9nLm9wZW4oKTsKLQkJfSBlbHNlIHsKLQkJCUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2coZ2V0U2hlbGwoKSk7Ci0JCQlpZiAoIWN1cnJlbnRXb3JraW5nRGlyLnRyaW0oKS5lcXVhbHMoIiIpKSAvLyROT04tTkxTLTEkCi0JCQl7Ci0JCQkJRmlsZSBwYXRoID0gbmV3IEZpbGUoY3VycmVudFdvcmtpbmdEaXIpOwotCQkJCWlmIChwYXRoLmV4aXN0cygpKSB7Ci0JCQkJCWRpYWxvZy5zZXRGaWx0ZXJQYXRoKGN1cnJlbnRXb3JraW5nRGlyKTsKLQkJCQl9Ci0JCQl9Ci0JCQlTdHJpbmdbXSBmaWxlRXh0ZW5zaW9ucyA9IGdldEZpbGVFeHRlbnNpb25zKCk7Ci0JCQlpZiAoZmlsZUV4dGVuc2lvbnMgIT0gbnVsbCkgewotCQkJCVN0cmluZ1tdIGZpbHRlckV4dGVuc2lvbnMgPSBuZXcgU3RyaW5nW2ZpbGVFeHRlbnNpb25zLmxlbmd0aF07Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlRXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykgewotCQkJCQlTdHJpbmcgZXh0ID0gZmlsZUV4dGVuc2lvbnNbaV07Ci0JCQkJCWZpbHRlckV4dGVuc2lvbnNbaV0gPSAiKi4iICsgZXh0OyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJCWRpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKGZpbHRlckV4dGVuc2lvbnMpOwotCQkJfQotCQkJc2VsZWN0ZWQgPSBkaWFsb2cub3BlbigpOwotCQl9Ci0JCWlmIChzZWxlY3RlZCAhPSBudWxsKSB7Ci0JCQlyZXNvdXJjZVRleHQuc2V0VGV4dChzZWxlY3RlZCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0RmlsZUV4dGVuc2lvbnMoKSB7Ci0JCXJldHVybiBuZXcgWE1MQ29udGVudFR5cGUoKS5nZXRGaWxlRXh0ZW5zaW9ucygpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGhhbmRsZU9wZW5GaWxlc1Jlc291cmNlQnJvd3NlQnV0dG9uU2VsZWN0ZWQoKSB7Ci0JCVN0cmluZyBwYXRoID0gb3BlbkZpbGVMaXN0UmVzb3VyY2VEaWFsb2coKTsKLQkJaWYgKHBhdGggIT0gbnVsbCkKLQkJCXNldFRleHQoIiR7d29ya3NwYWNlX2xvYzoiICsgcGF0aCArICJ9Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCX0KLQotCS8qKgotCSAqIE9wZW5zIGEgZGlhbG9nIGRpc3BsYXlpbmcgYSBsaXN0IG9mIGFsbCBYTUwgZmlsZXMgaW4gdGhlIGVkaXRvciBhbmQKLQkgKiBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IG9uZSBvZiB0aGVtLgotCSAqIAotCSAqIEByZXR1cm4gVGhlIHBhdGggdG8gdGhlIHNlbGVjdGVkIFhNTCBmaWxlIG9yIG51bGwgaWYgbm9uZSB3YXMgY2hvc2VuLgotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgb3BlbkZpbGVMaXN0UmVzb3VyY2VEaWFsb2coKSB7Ci0JCUlFZGl0b3JSZWZlcmVuY2VbXSBlZGl0b3JzID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKQotCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkKLQkJCQkuZ2V0RWRpdG9yUmVmZXJlbmNlcygpOwotCi0JCVN0cmluZ1tdIHBhdGhzID0gZmlsdGVyT3BlbkVkaXRvcnNCeUZpbGVFeHRlbnNpb24oZWRpdG9ycyk7Ci0KLQkJRWxlbWVudExpc3RTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IEVsZW1lbnRMaXN0U2VsZWN0aW9uRGlhbG9nKAotCQkJCWdldFNoZWxsKCksIG5ldyBMYWJlbFByb3ZpZGVyKCkpOwotCi0JCWRpYWxvZy5zZXRUaXRsZShnZXRNZXNzYWdlKE9QRU5GSUxFU19ESUFMT0dfVElUTEUpKTsKLQkJZGlhbG9nLnNldEVsZW1lbnRzKHBhdGhzKTsKLQkJZGlhbG9nLm9wZW4oKTsKLQotCQlyZXR1cm4gKFN0cmluZykgZGlhbG9nLmdldEZpcnN0UmVzdWx0KCk7Ci0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGZpbHRlck9wZW5FZGl0b3JzQnlGaWxlRXh0ZW5zaW9uKElFZGl0b3JSZWZlcmVuY2VbXSBlZGl0b3JzKSB7Ci0JCVN0cmluZ1tdIHBhdGhzID0gbmV3IFN0cmluZ1tlZGl0b3JzLmxlbmd0aF07Ci0JCVN0cmluZ1tdIGZpbGVFeHRzID0gZ2V0RmlsZUV4dGVuc2lvbnMoKTsKLQotCQlmb3IgKGludCBpID0gMDsgaSA8IGVkaXRvcnMubGVuZ3RoOyBpKyspIHsKLQkJCUlFZGl0b3JSZWZlcmVuY2UgY3VycmVudEVkaXRvciA9IGVkaXRvcnNbaV07Ci0JCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gY3VycmVudEVkaXRvci5nZXRFZGl0b3IodHJ1ZSk7Ci0JCQlJRmlsZSBmaWxlID0gKElGaWxlKSBlZGl0b3JQYXJ0LmdldEVkaXRvcklucHV0KCkuZ2V0QWRhcHRlcigKLQkJCQkJSUZpbGUuY2xhc3MpOwotCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCUlQYXRoIHBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCQkJcGF0aHNbaV0gPSBnZXRFZGl0b3JQYXRoKHBhdGgsIGZpbGVFeHRzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcGF0aHM7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RWRpdG9yUGF0aChJUGF0aCBmaWxlUGF0aCwgU3RyaW5nW10gZmlsZUV4dHMpIHsKLQkJaWYgKGZpbGVFeHRzID09IG51bGwgfHwgZmlsZUV4dHMubGVuZ3RoID09IDApIHsKLQkJCXJldHVybiBmaWxlUGF0aC50b09TU3RyaW5nKCk7Ci0JCX0KLQotCQlTdHJpbmcgcGF0aCA9IG51bGw7Ci0JCWZvciAoaW50IGNudCA9IDA7IGNudCA8IGZpbGVFeHRzLmxlbmd0aDsgY250KyspIHsKLQkJCWlmIChmaWxlUGF0aC5nZXRGaWxlRXh0ZW5zaW9uKCkuZXF1YWxzKGZpbGVFeHRzW2NudF0pKSB7Ci0JCQkJcGF0aCA9IGZpbGVQYXRoLnRvT1NTdHJpbmcoKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcGF0aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVXb3Jrc3BhY2VSZXNvdXJjZUJyb3dzZUJ1dHRvblNlbGVjdGVkKCkgewotCQlJUGF0aCBwYXRoID0gb3BlbldvcmtzcGFjZVJlc291cmNlRGlhbG9nKCk7Ci0JCWlmIChwYXRoICE9IG51bGwpCi0JCQlzZXRUZXh0KCIke3dvcmtzcGFjZV9sb2M6IiArIHBhdGgudG9TdHJpbmcoKSArICJ9Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCX0KLQotCXByb3RlY3RlZCBJUGF0aCBvcGVuV29ya3NwYWNlUmVzb3VyY2VEaWFsb2coKSB7Ci0JCUlSZXNvdXJjZSBjdXJyZW50UmVzb3VyY2UgPSBnZXRSZXNvdXJjZSgpOwotCQlFbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2coCi0JCQkJZ2V0U2hlbGwoKSwgbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKSwKLQkJCQluZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCkpOwotCQlkaWFsb2cuc2V0VGl0bGUoZ2V0TWVzc2FnZShXT1JLU1BBQ0VfRElBTE9HX1RJVExFKSk7Ci0JCWRpYWxvZy5zZXRNZXNzYWdlKGdldE1lc3NhZ2UoV09SS1NQQUNFX0RJQUxPR19NRVNTQUdFKSk7Ci0JCWRpYWxvZy5zZXRWYWxpZGF0b3IodmFsaWRhdG9yKTsKLQkJZGlhbG9nLmFkZEZpbHRlcihuZXcgVmlld2VyRmlsdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgYm9vbGVhbiBzZWxlY3QoVmlld2VyIHZpZXdlciwgT2JqZWN0IHBhcmVudEVsZW1lbnQsCi0JCQkJCU9iamVjdCBlbGVtZW50KSB7Ci0JCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQlpZiAocmVzb3VyY2VUeXBlICE9IElSZXNvdXJjZS5GSUxFKQotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZWxlbWVudDsKLQkJCQlTdHJpbmdbXSBleHRlbnNpb25zID0gZ2V0RmlsZUV4dGVuc2lvbnMoKTsKLQkJCQlpZiAoZXh0ZW5zaW9ucyA9PSBudWxsKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQlTdHJpbmcgZmlsZUV4dCA9IGZpbGUuZ2V0RmlsZUV4dGVuc2lvbigpOwotCQkJCWlmIChmaWxlRXh0ICE9IG51bGwpIHsKLQkJCQkJZm9yIChTdHJpbmcgZXh0IDogZXh0ZW5zaW9ucykgewotCQkJCQkJaWYgKGZpbGVFeHQuZXF1YWxzSWdub3JlQ2FzZShleHQpKQotCQkJCQkJCXJldHVybiB0cnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfSk7Ci0JCVZpZXdlckZpbHRlciBmaWx0ZXIgPSBnZXRSZXNvdXJjZUZpbHRlcigpOwotCQlpZiAoZmlsdGVyICE9IG51bGwpCi0JCQlkaWFsb2cuYWRkRmlsdGVyKGZpbHRlcik7Ci0JCWRpYWxvZy5zZXRJbnB1dChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpKTsKLQkJZGlhbG9nLnNldEluaXRpYWxTZWxlY3Rpb24oY3VycmVudFJlc291cmNlKTsKLQkJZGlhbG9nLnNldENvbXBhcmF0b3IobmV3IFJlc291cmNlQ29tcGFyYXRvcihSZXNvdXJjZUNvbXBhcmF0b3IuTkFNRSkpOwotCQlkaWFsb2cuc2V0QWxsb3dNdWx0aXBsZShmYWxzZSk7Ci0KLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlPYmplY3RbXSBlbGVtZW50cyA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLQkJCWlmIChlbGVtZW50cy5sZW5ndGggPiAwKQotCQkJCXJldHVybiAoKElSZXNvdXJjZSkgZWxlbWVudHNbMF0pLmdldEZ1bGxQYXRoKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIFZpZXdlckZpbHRlciBnZXRSZXNvdXJjZUZpbHRlcigpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgd29ya3NwYWNlIGNvbnRhaW5lcixvciA8Y29kZT5udWxsPC9jb2RlPgotCSAqLwotCXByb3RlY3RlZCBJUmVzb3VyY2UgZ2V0UmVzb3VyY2UoKSB7Ci0JCVN0cmluZyBwYXRoID0gZ2V0VGV4dCgpOwotCQlpZiAocGF0aC5sZW5ndGgoKSA+IDApIHsKLQkJCUlSZXNvdXJjZSByZXMgPSBudWxsOwotCQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQl0cnkgewotCQkJCWlmIChwYXRoLnN0YXJ0c1dpdGgoIiR7d29ya3NwYWNlX2xvYzoiKSkgLy8kTk9OLU5MUy0xJAotCQkJCXsKLQkJCQkJSVN0cmluZ1ZhcmlhYmxlTWFuYWdlciBtYW5hZ2VyID0gVmFyaWFibGVzUGx1Z2luCi0JCQkJCQkJLmdldERlZmF1bHQoKS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKTsKLQkJCQkJcGF0aCA9IG1hbmFnZXIucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihwYXRoLCBmYWxzZSk7Ci0JCQkJfQotCQkJCUZpbGUgZiA9IG5ldyBGaWxlKHBhdGgpOwotCQkJCWlmIChyZXNvdXJjZVR5cGUgPT0gSVJlc291cmNlLkZPTERFUikgewotCQkJCQlJQ29udGFpbmVyW10gY29udGFpbmVycyA9IHJvb3QKLQkJCQkJCQkuZmluZENvbnRhaW5lcnNGb3JMb2NhdGlvblVSSShmLnRvVVJJKCkpOwotCQkJCQlpZiAoY29udGFpbmVycy5sZW5ndGggPiAwKSB7Ci0JCQkJCQlyZXMgPSBjb250YWluZXJzWzBdOwotCQkJCQl9Ci0JCQkJfSBlbHNlIGlmIChyZXNvdXJjZVR5cGUgPT0gSVJlc291cmNlLkZJTEUpIHsKLQkJCQkJSUZpbGVbXSBmaWxlcyA9IHJvb3QuZmluZEZpbGVzRm9yTG9jYXRpb25VUkkoZi50b1VSSSgpKTsKLQkJCQkJaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKLQkJCQkJCXJlcyA9IGZpbGVzWzBdOwotCQkJCQl9Ci0JCQkJfQotCQkJCXJldHVybiByZXM7Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVSZXNvdXJjZVZhcmlhYmxlc0J1dHRvblNlbGVjdGVkKCkgewotCQlTdHJpbmdWYXJpYWJsZVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgU3RyaW5nVmFyaWFibGVTZWxlY3Rpb25EaWFsb2coCi0JCQkJZ2V0U2hlbGwoKSk7Ci0JCWRpYWxvZy5vcGVuKCk7Ci0JCVN0cmluZyB2YXJpYWJsZVRleHQgPSBkaWFsb2cuZ2V0VmFyaWFibGVFeHByZXNzaW9uKCk7Ci0JCWlmICh2YXJpYWJsZVRleHQgIT0gbnVsbCkgewotCQkJcmVzb3VyY2VUZXh0Lmluc2VydCh2YXJpYWJsZVRleHQpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gaXNWYWxpZChJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOwotCQlzZXRNZXNzYWdlKG51bGwpOwotCQkvLyBpZiB2YXJpYWJsZXMgYXJlIHByZXNlbnQsIHdlIGNhbm5vdCByZXNvbHZlIHRoZSBkaXJlY3RvcnkKLQkJU3RyaW5nIHdvcmtpbmdEaXJQYXRoID0gZ2V0VGV4dCgpOwotCQlpZiAod29ya2luZ0RpclBhdGguaW5kZXhPZigiJHsiKSA+PSAwKSAvLyROT04tTkxTLTEkCi0JCXsKLQkJCUlTdHJpbmdWYXJpYWJsZU1hbmFnZXIgbWFuYWdlciA9IFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkJLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpOwotCQkJdHJ5IHsKLQkJCQltYW5hZ2VyLnZhbGlkYXRlU3RyaW5nVmFyaWFibGVzKHdvcmtpbmdEaXJQYXRoKTsKLQkJCQlpZiAobXVzdEV4aXN0KSB7Ci0JCQkJCVN0cmluZyBwYXRoID0gbWFuYWdlcgotCQkJCQkJCS5wZXJmb3JtU3RyaW5nU3Vic3RpdHV0aW9uKHdvcmtpbmdEaXJQYXRoKTsKLQkJCQkJdmFsaWRhdGVSZXNvdXJjZShwYXRoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQlzZXRFcnJvck1lc3NhZ2UoZS5nZXRNZXNzYWdlKCkpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfSBlbHNlIGlmIChtdXN0RXhpc3QgJiYgd29ya2luZ0RpclBhdGgubGVuZ3RoKCkgPiAwKSB7Ci0JCQlyZXR1cm4gdmFsaWRhdGVSZXNvdXJjZSh3b3JraW5nRGlyUGF0aCk7Ci0JCX0gZWxzZSBpZiAocmVxdWlyZWQgJiYgd29ya2luZ0RpclBhdGgubGVuZ3RoKCkgPT0gMCkgewotCQkJc2V0RXJyb3JNZXNzYWdlKGdldE1lc3NhZ2UoRVJST1JfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQpKTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVJlc291cmNlKFN0cmluZyB3b3JraW5nRGlyUGF0aCkgewotCQlpZiAocmVzb3VyY2VUeXBlID09IElSZXNvdXJjZS5GT0xERVIpIHsKLQkJCUlDb250YWluZXIgY29udGFpbmVyID0gKElDb250YWluZXIpIGdldFJlc291cmNlKCk7Ci0JCQlpZiAoY29udGFpbmVyID09IG51bGwpIHsKLQkJCQlGaWxlIGRpciA9IG5ldyBGaWxlKHdvcmtpbmdEaXJQYXRoKTsKLQkJCQlpZiAoZGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfSBlbHNlCi0JCQkJcmV0dXJuIHRydWU7Ci0JCX0gZWxzZSBpZiAocmVzb3VyY2VUeXBlID09IElSZXNvdXJjZS5GSUxFKSB7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh3b3JraW5nRGlyUGF0aCk7Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXNldEVycm9yTWVzc2FnZShnZXRNZXNzYWdlKEVSUk9SX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVCkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRNZXNzYWdlKGludCB0eXBlKTsKLQotCXByb3RlY3RlZCB2b2lkIHRleHRNb2RpZmllZCgpIHsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiByZXNvdXJjZVRleHQuZ2V0VGV4dCgpLnRyaW0oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KSB7Ci0JCXJlc291cmNlVGV4dC5zZXRUZXh0KHRleHQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldExhdW5jaENvbmZpZ3VyYXRpb24oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0JCWZMYXVuY2hDb25maWd1cmF0aW9uID0gY29uZmlnOwotCX0KLQotCXByb3RlY3RlZCBJTGF1bmNoQ29uZmlndXJhdGlvbiBnZXRMYXVuY2hDb25maWd1cmF0aW9uKCkgewotCQlyZXR1cm4gZkxhdW5jaENvbmZpZ3VyYXRpb247Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xEZWJ1Z1VJQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2FlNzk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xEZWJ1Z1VJQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpOwotCi0vKioKLSAqIENvbnN0YW50cyBmb3IgdGhlIFhTTCBEZWJ1ZyBVSS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgWFNMRGVidWdVSUNvbnN0YW50cyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWCA9IFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lEICsgJy4nOwotCS8qKgotCSAqIENvbnN0YW50IHVzZWQgdG8gc3RvcmUgY29sdW1uIHNldHRpbmcgcHJlZmVyZW5jZXMgZm9yIHRoZQotCSAqIDxjb2RlPkluc3RhbGxlZFByb2Nlc3NvcnNCbG9jazwvY29kZT4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9DRVNTT1JfREVUQUlMU19ESUFMT0cgPSBQUkVGSVgKLQkJCSsgIlBST0NFU1NPUl9ERVRBSUxTX0RJQUxPRyI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBDb25zdGFudCB1c2VkIHRvIHN0b3JlIGNvbHVtbiBzZXR0aW5nIHByZWZlcmVuY2VzIGZvciB0aGUKLQkgKiA8Y29kZT5QYXJhbWV0ZXJzQmxvY2s8L2NvZGU+Ci0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFJTl9QQVJBTUFURVJTX0JMT0NLID0gUFJFRklYCi0JCQkrICJNQUlOX1BBUkFNQVRFUlNfQkxPQ0siOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogQ29uc3RhbnQgdXNlZCB0byBzdG9yZSBjb2x1bW4gc2V0dGluZyBwcmVmZXJlbmNlcyBmb3IgdGhlCi0JICogPGNvZGU+VHJhbnNmb3Jtc0Jsb2NrPC9jb2RlPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BSU5fVFJBTlNGT1JNU19CTE9DSyA9IFBSRUZJWAotCQkJKyAiTUFJTl9UUkFOU0ZPUk1TX0JMT0NLIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIENvbnN0YW50IHVzZWQgdG8gc3RvcmUgY29sdW1uIHNldHRpbmcgcHJlZmVyZW5jZXMgZm9yIHRoZQotCSAqIDxjb2RlPk91dHB1dEJsb2NrPC9jb2RlPgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVFBVVF9CTE9DSyA9IFBSRUZJWCArICJPVVRQVVRfQkxPQ0siOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogVGhlIGlkIG9mIHRoZSBYU0wgZWRpdG9yCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMX0VESVRPUl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnVpLlhTTEVkaXRvciI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xEZWJ1Z1VJTGF1bmNoTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xEZWJ1Z1VJTGF1bmNoTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2MGE1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSUxhdW5jaExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuY29tbW9uLkNvbW1hbmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLkVGUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0uSUZpbGVTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25UeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaGVzTGlzdGVuZXIyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5JSGFuZGxlclNlcnZpY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuQmFzZUxhdW5jaEhlbHBlcjsKLQotLyoqCi0gKiBBIGxpc3RlbmVyIHRvIFhTTCBsYXVuY2hlcy4gV2hlbiBhbiBYU0wgbGF1bmNoIGlzIHRlcm1pbmF0ZWQsIHRoaXMgcGVyZm9ybXMKLSAqIHRoZSBVSSBwYXJ0cyBvZiB0aGUgWFNMIGxhdW5jaGluZyAtIHN1Y2ggYXMgb3BlbiB0aGUgZWRpdG9yIG9uIHRoZSBvdXRwdXQKLSAqIGZpbGUsIGFuZCBmb3JtYXQgaXQuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTERlYnVnVUlMYXVuY2hMaXN0ZW5lciBpbXBsZW1lbnRzIElMYXVuY2hlc0xpc3RlbmVyMiB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNMX0xBVU5DSF9DT05GSUdVUkFUSU9OX1RZUEUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBTdGFydHMgdGhlIGxhdW5jaCBsaXN0ZW5pbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydCgpIHsKLQkJRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldExhdW5jaE1hbmFnZXIoKS5hZGRMYXVuY2hMaXN0ZW5lcih0aGlzKTsKLQl9Ci0KLQkvKioKLQkgKiBTdG9wcyB0aGUgbGF1bmNoIGxpc3RlbmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0JCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMYXVuY2hNYW5hZ2VyKCkucmVtb3ZlTGF1bmNoTGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgbGF1bmNoZXNUZXJtaW5hdGVkKElMYXVuY2hbXSBsYXVuY2hlcykgewotCQlmb3IgKElMYXVuY2ggbGF1bmNoIDogbGF1bmNoZXMpIHsKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uVHlwZSBjb25maWdUeXBlID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJY29uZmlnVHlwZSA9IGxhdW5jaC5nZXRMYXVuY2hDb25maWd1cmF0aW9uKCkuZ2V0VHlwZSgpOwotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gZG8gbm90aGluZwotCQkJfQotCQkJaWYgKGNvbmZpZ1R5cGUgIT0gbnVsbAotCQkJCQkmJiBYU0xfTEFVTkNIX0NPTkZJR1VSQVRJT05fVFlQRS5lcXVhbHMoY29uZmlnVHlwZQotCQkJCQkJCS5nZXRJZGVudGlmaWVyKCkpKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJQmFzZUxhdW5jaEhlbHBlciBsYXVuY2hIZWxwZXIgPSBuZXcgQmFzZUxhdW5jaEhlbHBlcihsYXVuY2gKLQkJCQkJCQkuZ2V0TGF1bmNoQ29uZmlndXJhdGlvbigpKTsKLQkJCQkJRmlsZSBmaWxlID0gbGF1bmNoSGVscGVyLmdldFRhcmdldCgpOwotCQkJCQlJRmlsZSBpZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkKLQkJCQkJCQkuZ2V0RmlsZUZvckxvY2F0aW9uKAotCQkJCQkJCQkJbmV3IFBhdGgoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSkpOwotCQkJCQlpZiAoaWZpbGUgIT0gbnVsbCkgey8vIHJlZnJlc2ggdGhpcyB3b3Jrc3BhY2UgZmlsZS4uCi0JCQkJCQl0cnkgewotCQkJCQkJCWlmaWxlLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfWkVSTywKLQkJCQkJCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJb3BlbkZpbGVJZlJlcXVpcmVkKGxhdW5jaEhlbHBlcik7Ci0JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGxhdW5jaGVzQWRkZWQoSUxhdW5jaFtdIGxhdW5jaGVzKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBsYXVuY2hlc0NoYW5nZWQoSUxhdW5jaFtdIGxhdW5jaGVzKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBsYXVuY2hlc1JlbW92ZWQoSUxhdW5jaFtdIGxhdW5jaGVzKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkZpbGVJZlJlcXVpcmVkKGZpbmFsIEJhc2VMYXVuY2hIZWxwZXIgbGF1bmNoSGVscGVyKSB7Ci0JCWlmIChsYXVuY2hIZWxwZXIuZ2V0T3BlbkZpbGVPbkNvbXBsZXRpb24oKSkgewotCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQkvLyBPcGVuIGVkaXRvciBvbiBuZXcgZmlsZS4KLQkJCQkJCUlXb3JrYmVuY2hXaW5kb3cgZHcgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpCi0JCQkJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCQkJCUZpbGUgZmlsZSA9IGxhdW5jaEhlbHBlci5nZXRUYXJnZXQoKTsKLQkJCQkJCVBhdGggcGF0aCA9IG5ldyBQYXRoKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQkJCQkJSUZpbGVTdG9yZSBmaWxlc3RvcmUgPSBFRlMuZ2V0TG9jYWxGaWxlU3lzdGVtKCkKLQkJCQkJCQkJLmdldFN0b3JlKHBhdGgpOwotCQkJCQkJSURFCi0JCQkJCQkJCS5vcGVuRWRpdG9yT25GaWxlU3RvcmUoZHcuZ2V0QWN0aXZlUGFnZSgpLAotCQkJCQkJCQkJCWZpbGVzdG9yZSk7Ci0KLQkJCQkJCWlmIChsYXVuY2hIZWxwZXIuZ2V0Rm9ybWF0RmlsZU9uQ29tcGxldGlvbigpKSB7Ci0JCQkJCQkJLy8gZm9ybWF0IHRoZSBlZGl0b3IgY29udGVudHMKLQkJCQkJCQlJSGFuZGxlclNlcnZpY2UgcCA9IChJSGFuZGxlclNlcnZpY2UpIFBsYXRmb3JtVUkKLQkJCQkJCQkJCS5nZXRXb3JrYmVuY2goKS5nZXRTZXJ2aWNlKAotCQkJCQkJCQkJCQlJSGFuZGxlclNlcnZpY2UuY2xhc3MpOwotCQkJCQkJCXAKLQkJCQkJCQkJCS5leGVjdXRlQ29tbWFuZCgKLQkJCQkJCQkJCQkJIm9yZy5lY2xpcHNlLndzdC5zc2UudWkuZm9ybWF0LmRvY3VtZW50IiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCX0KLQkJCQkJfSBjYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCQkJCX0gY2F0Y2ggKENvbW1hbmRFeGNlcHRpb24gZSkgewotCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xEZWJ1Z1VJUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMRGVidWdVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmVmMzY2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xEZWJ1Z1VJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBYU0wgRGVidWcgVUkgcGx1Z2luLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xEZWJ1Z1VJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0JLyoqCi0JICogVGhlIGlkIG9mIHRoaXMuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgWFNMRGVidWdVSVBsdWdpbiBwbHVnaW47Ci0KLQlwcml2YXRlIFhTTERlYnVnVUlMYXVuY2hMaXN0ZW5lciBsYXVuY2hMaXN0ZW5lciA9IG5ldyBYU0xEZWJ1Z1VJTGF1bmNoTGlzdGVuZXIoKTsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqLwotCXB1YmxpYyBYU0xEZWJ1Z1VJUGx1Z2luKCkgewotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlsYXVuY2hMaXN0ZW5lci5zdGFydCgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJbGF1bmNoTGlzdGVuZXIuc3RvcCgpOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgc2luZ2xldG9uCi0JICovCi0JcHVibGljIHN0YXRpYyBYU0xEZWJ1Z1VJUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogR2V0IGFuIEltYWdlRGVzY3JpcHRvciBmcm9tIGEgcGF0aCBpbiB0aGlzIGJ1bmRsZS4KLQkgKiAKLQkgKiBAcGFyYW0gcGF0aAotCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGhlIGltYWdlCi0JICogQHJldHVybiB0aGUgSW1hZ2VEZXNjcmlwdG9yCi0JICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7Ci0JCXJldHVybiBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgcGF0aCk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBvcGVuaW5nIGEgZ2l2ZW4gcHJlZmVyZW5jZSBwYWdlLgotCSAqIAotCSAqIEBwYXJhbSBpZAotCSAqICAgICAgICAgICAgdGhlIGlkIG9mIHRoZSBwcmVmZXJlbmNlIHBhZ2UKLQkgKiBAcGFyYW0gcGFnZQotCSAqICAgICAgICAgICAgdGhlIHByZWZlcmVuY2UgcGFnZSB0byBzaG93Ci0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIHNob3dQcmVmZXJlbmNlUGFnZShTdHJpbmcgaWQsIElQcmVmZXJlbmNlUGFnZSBwYWdlKSB7Ci0JCWZpbmFsIElQcmVmZXJlbmNlTm9kZSB0YXJnZXROb2RlID0gbmV3IFByZWZlcmVuY2VOb2RlKGlkLCBwYWdlKTsKLQotCQlQcmVmZXJlbmNlTWFuYWdlciBtYW5hZ2VyID0gbmV3IFByZWZlcmVuY2VNYW5hZ2VyKCk7Ci0JCW1hbmFnZXIuYWRkVG9Sb290KHRhcmdldE5vZGUpOwotCQlmaW5hbCBQcmVmZXJlbmNlRGlhbG9nIGRpYWxvZyA9IG5ldyBQcmVmZXJlbmNlRGlhbG9nKFhTTERlYnVnVUlQbHVnaW4KLQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoU2hlbGwoKSwgbWFuYWdlcik7Ci0JCWZpbmFsIGJvb2xlYW5bXSByZXN1bHQgPSBuZXcgYm9vbGVhbltdIHsgZmFsc2UgfTsKLQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoWFNMRGVidWdVSVBsdWdpbi5nZXRTdGFuZGFyZERpc3BsYXkoKSwKLQkJCQluZXcgUnVubmFibGUoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCWRpYWxvZy5jcmVhdGUoKTsKLQkJCQkJCWRpYWxvZy5zZXRNZXNzYWdlKHRhcmdldE5vZGUuZ2V0TGFiZWxUZXh0KCkpOwotCQkJCQkJcmVzdWx0WzBdID0gKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKTsKLQkJCQkJfQotCQkJCX0pOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgY3VycmVudCBEaXNwbGF5IGlmIHBvc3NpYmxlLCBvciBlbHNlIHRoZSBkZWZhdWx0IERpc3BsYXkuCi0JICogCi0JICogQHJldHVybiB0aGUgY3VycmVudCBvciBkZWZhdWx0IERpc3BsYXkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIERpc3BsYXkgZ2V0U3RhbmRhcmREaXNwbGF5KCkgewotCQlEaXNwbGF5IGRpc3BsYXk7Ci0JCWRpc3BsYXkgPSBEaXNwbGF5LmdldEN1cnJlbnQoKTsKLQkJaWYgKGRpc3BsYXkgPT0gbnVsbCkKLQkJCWRpc3BsYXkgPSBEaXNwbGF5LmdldERlZmF1bHQoKTsKLQkJcmV0dXJuIGRpc3BsYXk7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBhY3RpdmUgd29ya2JlbmNoIHdpbmRvdyBmcm9tIHRoZSB3b3JrYmVuY2guCi0JICogCi0JICogQHJldHVybiB0aGUgYWN0aXZlIHdvcmtiZW5jaCB3aW5kb3cKLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3JrYmVuY2hXaW5kb3cgZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkgewotCQlyZXR1cm4gZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgc2hlbGwgb2YgdGhlIGFjdGl2ZSB3b3JrYmVuY2ggd2luZG93LgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGFjdGl2ZSB3b3JrYmVuY2ggc2hlbGwKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNoZWxsIGdldEFjdGl2ZVdvcmtiZW5jaFNoZWxsKCkgewotCQlJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IGdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQlpZiAod2luZG93ICE9IG51bGwpIHsKLQkJCXJldHVybiB3aW5kb3cuZ2V0U2hlbGwoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGFjdGl2ZSBwYWdlIG9mIHRoZSBhY3RpdmUgd29ya2JlbmNoIHdpbmRvdy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBhY3RpdmUgcGFnZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtiZW5jaFBhZ2UgZ2V0QWN0aXZlUGFnZSgpIHsKLQkJSVdvcmtiZW5jaFdpbmRvdyB3ID0gZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCWlmICh3ICE9IG51bGwpIHsKLQkJCXJldHVybiB3LmdldEFjdGl2ZVBhZ2UoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBMb2cgdGhlIGdpdmVuIGV4Y2VwdGlvbiBieSBjcmVhdGluZyBhIG5ldyBTdGF0dXMuCi0JICogCi0JICogQHBhcmFtIGUKLQkgKiAgICAgICAgICAgIHRoZSBleGNlcHRpb24gdG8gbG9nCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhFeGNlcHRpb24gZSkgewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKAotCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCAiIiwgZSkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogTG9nIHRoZSBnaXZlbiBjb3JlIGV4Y2VwdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZQotCSAqICAgICAgICAgICAgdGhlIGV4Y2VwdGlvbiB0byBsb2cKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKENvcmVFeGNlcHRpb24gZSkgewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKGUuZ2V0U3RhdHVzKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xMYXVuY2hDb25maWd1cmF0aW9uVGFiLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmY0NjlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xMYXVuY2hDb25maWd1cmF0aW9uVGFiLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy51aS5JTGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci0KLS8qKgotICogVGhlIGJhc2UgY2xhc3MgZm9yIFhTTCBsYXVuY2ggY29uZmlndXJhdGlvbiB0YWJzIHdoaWNoIGFsbG93cyBhIG51bWJlciBvZgotICogJ2Jsb2NrcycgdG8gYmUgYWRkZWQuIEVhY2ggYmxvY2sgbXVzdCBpdHNlbGYgZnVsbHkgaW1wbGVtZW50Ci0gKiA8Y29kZT5JTGF1bmNoQ29uZmlndXJhdGlvblRhYjwvY29kZT4uCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIgZXh0ZW5kcwotCQlBYnN0cmFjdExhdW5jaENvbmZpZ3VyYXRpb25UYWIgewotCXByaXZhdGUgSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSBibG9ja3M7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRCbG9ja3MoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSBibG9ja3MpIHsKLQkJdGhpcy5ibG9ja3MgPSBibG9ja3M7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBjb21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJY29tcC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQkvLyBUT0RPIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAoZ2V0Q29udHJvbCgpLAotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJc2V0Q29udHJvbChjb21wKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pIHsKLQkJZm9yIChJTGF1bmNoQ29uZmlndXJhdGlvblRhYiBlbGVtZW50IDogYmxvY2tzKQotCQkJZWxlbWVudC5zZXREZWZhdWx0cyhjb25maWd1cmF0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0JCWZvciAoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIgZWxlbWVudCA6IGJsb2NrcykKLQkJCWVsZW1lbnQuaW5pdGlhbGl6ZUZyb20oY29uZmlndXJhdGlvbik7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpCi0JCQllbGVtZW50LnBlcmZvcm1BcHBseShjb25maWd1cmF0aW9uKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKElMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nIGRpYWxvZykgewotCQlzdXBlci5zZXRMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKGRpYWxvZyk7Ci0JCWZvciAoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIgZWxlbWVudCA6IGJsb2NrcykKLQkJCWVsZW1lbnQuc2V0TGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZyhkaWFsb2cpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCWZvciAoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIgZWxlbWVudCA6IGJsb2NrcykKLQkJCWVsZW1lbnQuZGlzcG9zZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGFjdGl2YXRlZChJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IHdvcmtpbmdDb3B5KSB7Ci0JCS8vIGRvbid0IGNhbGwgaW5pdGlhbGl6ZUZyb20KLQkJLy8gc3VwZXIuYWN0aXZhdGVkKHdvcmtpbmdDb3B5KTsKLQkJZm9yIChJTGF1bmNoQ29uZmlndXJhdGlvblRhYiBlbGVtZW50IDogYmxvY2tzKQotCQkJZWxlbWVudC5hY3RpdmF0ZWQod29ya2luZ0NvcHkpOwotCX0KLQotCS8vIEBPdmVycmlkZQotCS8vIHByb3RlY3RlZCBib29sZWFuIGlzRGlydHkoKQotCS8vIHsKLQkvLyBmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpCi0JLy8gaWYgKCgoWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYillbGVtZW50KS5pc0RpcnR5KCkpCi0JLy8gcmV0dXJuIHRydWU7Ci0JLy8gcmV0dXJuIHN1cGVyLmlzRGlydHkoKTsKLQkvLyB9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLQkJYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0JCWZvciAoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWIgZWxlbWVudCA6IGJsb2NrcykKLQkJCXZhbGlkICY9IGVsZW1lbnQuaXNWYWxpZChjb25maWd1cmF0aW9uKTsKLQkJcmV0dXJuIHZhbGlkOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgewotCQlTdHJpbmcgbSA9IHN1cGVyLmdldEVycm9yTWVzc2FnZSgpOwotCQlpZiAobSA9PSBudWxsKSB7Ci0JCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpIHsKLQkJCQltID0gZWxlbWVudC5nZXRFcnJvck1lc3NhZ2UoKTsKLQkJCQlpZiAobSAhPSBudWxsKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCVN0cmluZyBtID0gc3VwZXIuZ2V0TWVzc2FnZSgpOwotCQlpZiAobSA9PSBudWxsKSB7Ci0JCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uVGFiIGVsZW1lbnQgOiBibG9ja3MpIHsKLQkJCQltID0gZWxlbWVudC5nZXRNZXNzYWdlKCk7Ci0JCQkJaWYgKG0gIT0gbnVsbCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG07Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMTGF1bmNoU2hvcnRjdXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xMYXVuY2hTaG9ydGN1dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzBkZDUwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xMYXVuY2hTaG9ydGN1dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvblR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuRGVidWdVSVRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklEZWJ1Z01vZGVsUHJlc2VudGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklMYXVuY2hTaG9ydGN1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5TdGF0dXNEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLkVsZW1lbnRMaXN0U2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLklucHV0RmlsZUJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkJhc2VMYXVuY2hIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFBpcGVsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLS8qKgotICogPHRhYmxlIGJvcmRlcj0xPgotICogPHRoPgotICogPHRyPgotICogPHRkPlhNTCBGaWxlczwvdGQ+Ci0gKiA8dGQ+WFNMIEZpbGVzPC90ZD4KLSAqIDx0ZD5BY3Rpb248L3RkPgotICogPC90cj4KLSAqIDwvdGg+Ci0gKiA8dGJvZHk+Ci0gKiA8dHI+Ci0gKiA8dGQ+MTwvdGQ+Ci0gKiA8dGQ+MDwvdGQ+Ci0gKiA8dGQ+TGF1bmNoIGFzc3VtaW5nIGVtYmVkZGVkIHN0eWxlc2hlZXQgaW5zdHJ1Y3Rpb248L3RkPgotICogPC90cj4KLSAqIDx0cj4KLSAqIDx0ZD4wPC90ZD4KLSAqIDx0ZD4mZ3Q7PTE8L3RkPgotICogPHRkPk9wZW4gZGlhbG9nIC0gcHJvbXB0IGZvciBpbnB1dCBmaWxlPC90ZD4KLSAqIDwvdHI+Ci0gKiA8dHI+Ci0gKiA8dGQ+MTwvdGQ+Ci0gKiA8dGQ+Jmd0Oz0xPC90ZD4KLSAqIDx0ZD5MYXVuY2g8L3RkPgotICogPC90cj4KLSAqIDwvdGJvZHk+Ci0gKiA8L3RhYmxlPgotICogCi0gKiA8cD4KLSAqIFRoZSBsYXVuY2ggc2hvcnRjdXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIG1lbnUgZm9yIGFueSBvdGhlciBjb21iaW5hdGlvbgotICogb2YgZmlsZXMKLSAqIDwvcD4KLSAqIDxwPgotICogSW4gYWxsIGNhc2VzLCBhIGNoZWNrIG11c3QgYmUgcGVyZm9ybWVkIHRvIGZpbmQgYW55IGV4aXN0aW5nIGxhdW5jaAotICogY29uZmlndXJhdGlvbiB0aGF0IHVzZXMgdGhlIHNlbGVjdGVkIGZpbGVzLgotICogPC9wPgotICogCi0gKiBAYXV0aG9yIERvdWcKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTExhdW5jaFNob3J0Y3V0IGltcGxlbWVudHMgSUxhdW5jaFNob3J0Y3V0IHsKLQlwcml2YXRlIElGaWxlIHhtbEZpbGU7Ci0JcHJpdmF0ZSBJUGF0aCB4bWxGaWxlUGF0aDsKLQlwcml2YXRlIElGaWxlW10geHNsRmlsZXM7Ci0KLQlwdWJsaWMgdm9pZCBsYXVuY2goSVNlbGVjdGlvbiBzZWxlY3Rpb24sIFN0cmluZyBtb2RlKSB7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3NlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJc2VhcmNoQW5kTGF1bmNoKHNzZWwudG9BcnJheSgpLCBtb2RlKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGxhdW5jaChJRWRpdG9yUGFydCBlZGl0b3IsIFN0cmluZyBtb2RlKSB7Ci0JCUlFZGl0b3JJbnB1dCBpbnB1dCA9IGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpOwotCQlpZiAoaW5wdXQgIT0gbnVsbCkgewotCQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgaW5wdXQuZ2V0QWRhcHRlcihJRmlsZS5jbGFzcyk7Ci0JCQlpZiAoZmlsZSAhPSBudWxsKQotCQkJCXNlYXJjaEFuZExhdW5jaChuZXcgT2JqZWN0W10geyBmaWxlIH0sIG1vZGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNlYXJjaEFuZExhdW5jaChPYmplY3RbXSBvYmplY3RzLCBTdHJpbmcgbW9kZSkgewotCQlpZiAoZmlsbEZpbGVzKG9iamVjdHMpKSB7Ci0JCQkvLyBlbnN1cmUgd2UgaGF2ZSBhbiBpbnB1dCBmaWxlCi0JCQlpZiAoeG1sRmlsZSA9PSBudWxsKQotCQkJCXByb21wdEZvcklucHV0KCk7Ci0JCQlpZiAoeG1sRmlsZSAhPSBudWxsIHx8IHhtbEZpbGVQYXRoICE9IG51bGwpCi0JCQkJbGF1bmNoKG1vZGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByb21wdEZvcklucHV0KCkgewotCQkvLyBwcm9tcHQgZm9yIGlucHV0IHhtbCBmaWxlCi0JCVN0YXR1c0RpYWxvZyBkaWFsb2cgPSBuZXcgU3RhdHVzRGlhbG9nKGdldFNoZWxsKCkpIHsKLQkJCXByaXZhdGUgSW5wdXRGaWxlQmxvY2sgaW5wdXRGaWxlQmxvY2sgPSBuZXcgSW5wdXRGaWxlQmxvY2sobnVsbCk7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQkJQ29tcG9zaXRlIGNvbXAgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQkJY29tcC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMSwgZmFsc2UpOwotCQkJCWNvbXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLCBTV1QuTk9ORSk7Ci0JCQkJbGFiZWwuc2V0Rm9udChjb21wLmdldEZvbnQoKSk7Ci0JCQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJCQlnZC5ob3Jpem9udGFsSW5kZW50ID0gNTsKLQkJCQlnZC52ZXJ0aWNhbEluZGVudCA9IDU7Ci0JCQkJZ2Qud2lkdGhIaW50ID0gMzgwOwotCQkJCWxhYmVsLnNldExheW91dERhdGEoZ2QpOwotCQkJCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuWFNMTGF1bmNoU2hvcnRjdXRfMCk7Ci0KLQkJCQlpbnB1dEZpbGVCbG9jay5jcmVhdGVDb250cm9sKGNvbXApOwotCQkJCXJldHVybiBjb21wOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCgpIHsKLQkJCQlJUmVzb3VyY2UgcmVzID0gaW5wdXRGaWxlQmxvY2suZ2V0UmVzb3VyY2UoKTsKLQkJCQlpZiAocmVzID09IG51bGwpCi0JCQkJCXhtbEZpbGVQYXRoID0gbmV3IFBhdGgoaW5wdXRGaWxlQmxvY2suZ2V0VGV4dCgpKTsKLQkJCQllbHNlIGlmIChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmV4aXN0cygKLQkJCQkJCXJlcy5nZXRGdWxsUGF0aCgpKQotCQkJCQkJJiYgcmVzLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkKLQkJCQkJeG1sRmlsZSA9IChJRmlsZSkgcmVzOwotCQkJCXN1cGVyLm9rUHJlc3NlZCgpOwotCQkJfQotCi0JCX07Ci0JCWRpYWxvZy5zZXRIZWxwQXZhaWxhYmxlKGZhbHNlKTsKLQkJZGlhbG9nLnNldFN0YXR1c0xpbmVBYm92ZUJ1dHRvbnModHJ1ZSk7Ci0JCWRpYWxvZy5zZXRUaXRsZShNZXNzYWdlcy5YU0xMYXVuY2hTaG9ydGN1dF8xKTsKLQkJZGlhbG9nLm9wZW4oKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZmlsbEZpbGVzKE9iamVjdFtdIHNlbGVjdGlvbnMpIHsKLQkJeG1sRmlsZSA9IG51bGw7Ci0JCXhtbEZpbGVQYXRoID0gbnVsbDsKLQkJTGlzdDxJRmlsZT4geHNsRmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0PElGaWxlPigpOwotCQlmb3IgKE9iamVjdCBvYmplY3QgOiBzZWxlY3Rpb25zKSB7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKSBvYmplY3Q7Ci0JCQlpZiAocmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7Ci0JCQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgcmVzb3VyY2U7Ci0JCQkJaWYgKFhTTENvcmUuaXNYTUxGaWxlKGZpbGUpKSB7Ci0JCQkJCWlmIChYU0xDb3JlLmlzWFNMRmlsZShmaWxlKSkKLQkJCQkJCXhzbEZpbGVMaXN0LmFkZChmaWxlKTsKLQkJCQkJZWxzZSBpZiAoeG1sRmlsZSA9PSBudWxsKQotCQkJCQkJeG1sRmlsZSA9IGZpbGU7Ci0JCQkJCWVsc2UKLQkJCQkJCXJldHVybiBmYWxzZTsgLy8gbm8gYWN0aW9uIGlmIHdlIGhhdmUgbW9yZSB0aGFuIHRoYW4gMQotCQkJCQkJCQkJCS8vIHhtbCBmaWxlCi0JCQkJfQotCQkJfQotCQl9Ci0JCXhzbEZpbGVzID0geHNsRmlsZUxpc3QudG9BcnJheShuZXcgSUZpbGVbMF0pOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgbGF1bmNoKFN0cmluZyBtb2RlKSB7Ci0JCWlmICh4bWxGaWxlICE9IG51bGwpCi0JCQl4bWxGaWxlUGF0aCA9IHhtbEZpbGUuZ2V0TG9jYXRpb24oKTsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlnID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWNvbmZpZyA9IGZpbmRPckNyZWF0ZUxhdW5jaENvbmZpZ3VyYXRpb24oKTsKLQkJCWlmIChjb25maWcgIT0gbnVsbCkKLQkJCQlEZWJ1Z1VJVG9vbHMubGF1bmNoKGNvbmZpZywgbW9kZSk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgSUxhdW5jaE1hbmFnZXIgZ2V0TGF1bmNoTWFuYWdlcigpIHsKLQkJcmV0dXJuIERlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRMYXVuY2hNYW5hZ2VyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIElMYXVuY2hDb25maWd1cmF0aW9uVHlwZSBnZXRDb25maWd1cmF0aW9uVHlwZSgpIHsKLQkJcmV0dXJuIGdldExhdW5jaE1hbmFnZXIoKS5nZXRMYXVuY2hDb25maWd1cmF0aW9uVHlwZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLklEX0xBVU5DSF9DT05GSUdfVFlQRSk7Ci0JfQotCi0JcHJpdmF0ZSBJTGF1bmNoQ29uZmlndXJhdGlvbiBmaW5kT3JDcmVhdGVMYXVuY2hDb25maWd1cmF0aW9uKCkKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb25bXSBjb25maWdzID0gZ2V0TGF1bmNoTWFuYWdlcigpCi0JCQkJLmdldExhdW5jaENvbmZpZ3VyYXRpb25zKGdldENvbmZpZ3VyYXRpb25UeXBlKCkpOwotCQlMaXN0PElMYXVuY2hDb25maWd1cmF0aW9uPiBjYW5kaWRhdGVDb25maWdzID0gbmV3IEFycmF5TGlzdDxJTGF1bmNoQ29uZmlndXJhdGlvbj4oCi0JCQkJY29uZmlncy5sZW5ndGgpOwotCQlmb3IgKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZyA6IGNvbmZpZ3MpIHsKLQkJCVN0cmluZyBpbnB1dEZpbGUgPSBjb25maWcuZ2V0QXR0cmlidXRlKAotCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwKLQkJCQkJKFN0cmluZykgbnVsbCk7Ci0JCQl0cnkgewotCQkJCWlucHV0RmlsZSA9IFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkJCS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKS5wZXJmb3JtU3RyaW5nU3Vic3RpdHV0aW9uKAotCQkJCQkJCQlpbnB1dEZpbGUpOwotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8ganVzdCBpZ25vcmUgdGhpcyBvbmUKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCVBhdGggcGF0aCA9IG5ldyBQYXRoKGlucHV0RmlsZSk7Ci0JCQkvLyB0aGUgc291cmNlIHhtbCBmaWxlIG11c3QgYmUgdGhlIHNhbWUKLQkJCWlmIChwYXRoLmVxdWFscyh4bWxGaWxlUGF0aCkpIHsKLQkJCQlCYXNlTGF1bmNoSGVscGVyIGxoID0gbmV3IEJhc2VMYXVuY2hIZWxwZXIoY29uZmlnKTsKLQkJCQkvLyBhbGwgdGhlIHNlbGVjdGVkIHN0eWxlc2hlZXRzIG11c3QgYmUgaW4gdGhlIHBpcGVsaW5lCi0JCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQkJCWZvciAoSUZpbGUgc3R5bGVzaGVldCA6IHhzbEZpbGVzKSB7Ci0JCQkJCWZvdW5kID0gZmFsc2U7Ci0JCQkJCWZvciAoSXRlcmF0b3I8TGF1bmNoVHJhbnNmb3JtPiBpdGVyID0gbGguZ2V0UGlwZWxpbmUoKQotCQkJCQkJCS5nZXRUcmFuc2Zvcm1EZWZzKCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJCQlMYXVuY2hUcmFuc2Zvcm0gbHQgPSBpdGVyLm5leHQoKTsKLQkJCQkJCWlmIChsdC5nZXRMb2NhdGlvbigpLmVxdWFscyhzdHlsZXNoZWV0LmdldExvY2F0aW9uKCkpKSB7Ci0JCQkJCQkJZm91bmQgPSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWlmICghZm91bmQpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKGZvdW5kKQotCQkJCQljYW5kaWRhdGVDb25maWdzLmFkZChjb25maWcpOwotCQkJfQotCQl9Ci0KLQkJSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlnID0gbnVsbDsKLQkJaW50IGNhbmRpZGF0ZUNvdW50ID0gY2FuZGlkYXRlQ29uZmlncy5zaXplKCk7Ci0JCWlmIChjYW5kaWRhdGVDb3VudCA9PSAxKQotCQkJY29uZmlnID0gY2FuZGlkYXRlQ29uZmlncy5nZXQoMCk7Ci0JCWVsc2UgaWYgKGNhbmRpZGF0ZUNvdW50ID4gMSkKLQkJCWNvbmZpZyA9IGNob29zZUNvbmZpZ3VyYXRpb24oY2FuZGlkYXRlQ29uZmlncyk7Ci0JCWVsc2UKLQkJCWNvbmZpZyA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oKTsKLQotCQlyZXR1cm4gY29uZmlnOwotCX0KLQotCXByaXZhdGUgSUxhdW5jaENvbmZpZ3VyYXRpb24gY2hvb3NlQ29uZmlndXJhdGlvbigKLQkJCUxpc3Q8SUxhdW5jaENvbmZpZ3VyYXRpb24+IGNvbmZpZ0xpc3QpIHsKLQkJSURlYnVnTW9kZWxQcmVzZW50YXRpb24gbGFiZWxQcm92aWRlciA9IERlYnVnVUlUb29scwotCQkJCS5uZXdEZWJ1Z01vZGVsUHJlc2VudGF0aW9uKCk7Ci0JCUVsZW1lbnRMaXN0U2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IG5ldyBFbGVtZW50TGlzdFNlbGVjdGlvbkRpYWxvZygKLQkJCQlnZXRTaGVsbCgpLCBsYWJlbFByb3ZpZGVyKTsKLQkJZGlhbG9nLnNldEVsZW1lbnRzKGNvbmZpZ0xpc3QudG9BcnJheSgpKTsKLQkJZGlhbG9nLnNldFRpdGxlKE1lc3NhZ2VzLlhTTExhdW5jaFNob3J0Y3V0XzIpOwotCQlkaWFsb2cuc2V0TWVzc2FnZShNZXNzYWdlcy5YU0xTZWxlY3RFeGlzdGluZyk7Ci0JCWRpYWxvZy5zZXRNdWx0aXBsZVNlbGVjdGlvbihmYWxzZSk7Ci0JCWludCByZXN1bHQgPSBkaWFsb2cub3BlbigpOwotCQlsYWJlbFByb3ZpZGVyLmRpc3Bvc2UoKTsKLQkJaWYgKHJlc3VsdCA9PSBXaW5kb3cuT0spIHsKLQkJCXJldHVybiAoSUxhdW5jaENvbmZpZ3VyYXRpb24pIGRpYWxvZy5nZXRGaXJzdFJlc3VsdCgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgSUxhdW5jaENvbmZpZ3VyYXRpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHsKLQkJSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlnID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uVHlwZSBjb25maWdUeXBlID0gZ2V0Q29uZmlndXJhdGlvblR5cGUoKTsKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgd2MgPSBjb25maWdUeXBlLm5ld0luc3RhbmNlKG51bGwsCi0JCQkJCWdldExhdW5jaE1hbmFnZXIoKQotCQkJCQkJCS5nZW5lcmF0ZVVuaXF1ZUxhdW5jaENvbmZpZ3VyYXRpb25OYW1lRnJvbSgKLQkJCQkJCQkJCXhtbEZpbGVQYXRoLmxhc3RTZWdtZW50KCkpKTsKLQkJCWlmICh4bWxGaWxlICE9IG51bGwpCi0JCQkJd2MKLQkJCQkJCS5zZXRBdHRyaWJ1dGUoCi0JCQkJCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9JTlBVVF9GSUxFLAotCQkJCQkJCQkiJHt3b3Jrc3BhY2VfbG9jOiIgKyB4bWxGaWxlLmdldEZ1bGxQYXRoKCkudG9Qb3J0YWJsZVN0cmluZygpICsgIn0iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQllbHNlCi0JCQkJd2Muc2V0QXR0cmlidXRlKAotCQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0lOUFVUX0ZJTEUsCi0JCQkJCQl4bWxGaWxlUGF0aC50b1BvcnRhYmxlU3RyaW5nKCkpOwotCi0JCQl3YwotCQkJCQkuc2V0QXR0cmlidXRlKAotCQkJCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfREVGQVVMVF9PVVRQVVRfRklMRSwKLQkJCQkJCQl0cnVlKTsKLQkJCXdjLnNldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1BFTl9GSUxFLAotCQkJCQl0cnVlKTsKLQotCQkJTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmUgPSBuZXcgTGF1bmNoUGlwZWxpbmUoKTsKLQkJCWZvciAoSUZpbGUgZWxlbWVudCA6IHhzbEZpbGVzKSB7Ci0JCQkJcGlwZWxpbmUuYWRkVHJhbnNmb3JtRGVmKG5ldyBMYXVuY2hUcmFuc2Zvcm0oZWxlbWVudAotCQkJCQkJLmdldEZ1bGxQYXRoKCkudG9Qb3J0YWJsZVN0cmluZygpLAotCQkJCQkJTGF1bmNoVHJhbnNmb3JtLlJFU09VUkNFX1RZUEUpKTsKLQkJCX0KLQkJCXdjLnNldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfUElQRUxJTkUsCi0JCQkJCXBpcGVsaW5lLnRvWE1MKCkpOwotCQkJaWYgKHhtbEZpbGUgIT0gbnVsbCkKLQkJCQl3Yy5zZXRNYXBwZWRSZXNvdXJjZXMobmV3IElSZXNvdXJjZVtdIHsgeG1sRmlsZS5nZXRQcm9qZWN0KCkgfSk7Ci0JCQljb25maWcgPSB3Yy5kb1NhdmUoKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKGdldFNoZWxsKCksIE1lc3NhZ2VzLlhTTExhdW5jaFNob3J0Y3V0XzYsCi0JCQkJCWV4Y2VwdGlvbi5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCXJldHVybiBjb25maWc7Ci0JfQotCi0JcHJvdGVjdGVkIFNoZWxsIGdldFNoZWxsKCkgewotCQlyZXR1cm4gWFNMRGVidWdVSVBsdWdpbi5nZXRBY3RpdmVXb3JrYmVuY2hTaGVsbCgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xUVGFiR3JvdXAuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9YU0xUVGFiR3JvdXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA5ODQ2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvWFNMVFRhYkdyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuQ29tbW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLnNvdXJjZWxvb2t1cC5Tb3VyY2VMb29rdXBUYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uWFNMTWFpblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMub3V0cHV0Lk91dHB1dFRhYjsKLQotLyoqCi0gKiBUaGUgdGFiIGdyb3VwIGZvciB0aGUgWFNMIHRhYnMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqIEBzaW5jZSAxLjAKLSAqLwotcHVibGljIGNsYXNzIFhTTFRUYWJHcm91cCBleHRlbmRzIEFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwIHsKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKi8KLQlwdWJsaWMgWFNMVFRhYkdyb3VwKCkgewotCX0KLQotCXB1YmxpYyB2b2lkIGNyZWF0ZVRhYnMoSUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2cgZGlhbG9nLCBTdHJpbmcgbW9kZSkgewotCQlYU0xNYWluVGFiIG1haW4gPSBuZXcgWFNMTWFpblRhYigpOwotCQlJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdIHRhYnMgPSBuZXcgSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB7IG1haW4sCi0JCQkJbmV3IE91dHB1dFRhYihtYWluKSB9OwotCQl0YWJzID0gYWRkVGFicyh0YWJzLCBuZXcgSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB7Ci0JCQkJbmV3IFNvdXJjZUxvb2t1cFRhYigpLCBuZXcgQ29tbW9uVGFiKCkgfSk7Ci0KLQkJc2V0VGFicyh0YWJzKTsKLQl9Ci0KLQlwcml2YXRlIElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10gYWRkVGFicyhJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdIHRhYnMxLAotCQkJSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB0YWJzMikgewotCQlJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdIG5ld1RhYnMgPSBuZXcgSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbdGFiczEubGVuZ3RoCi0JCQkJKyB0YWJzMi5sZW5ndGhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KHRhYnMxLCAwLCBuZXdUYWJzLCAwLCB0YWJzMS5sZW5ndGgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KHRhYnMyLCAwLCBuZXdUYWJzLCB0YWJzMS5sZW5ndGgsIHRhYnMyLmxlbmd0aCk7Ci0JCXJldHVybiBuZXdUYWJzOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldFRhYnMoSUxhdW5jaENvbmZpZ3VyYXRpb25UYWJbXSB0YWJzKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJc3VwZXIuc2V0VGFicyh0YWJzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BYnN0cmFjdFBhcmFtZXRlckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiMmQ1NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BYnN0cmFjdFBhcmFtZXRlckFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuU2VsZWN0aW9uTGlzdGVuZXJBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uUGFyYW1ldGVyVmlld2VyOwotCi0vKioKLSAqIEEgY29udmVuaWVudCBiYXNlIGNsYXNzIGZvciBhZGQvcmVtb3ZlIHBhcmFtZXRlciBhY3Rpb25zLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFBhcmFtZXRlckFjdGlvbiBleHRlbmRzIFNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uIHsKLQlwcml2YXRlIFBhcmFtZXRlclZpZXdlciB2aWV3ZXI7Ci0JcHJpdmF0ZSBCdXR0b24gYnV0dG9uOwotCXByaXZhdGUgU2hlbGwgc2hlbGw7Ci0KLQlwcm90ZWN0ZWQgQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24oU3RyaW5nIHRleHQsIFBhcmFtZXRlclZpZXdlciB2aWV3ZXIpIHsKLQkJc3VwZXIodGV4dCk7Ci0JCXNldFZpZXdlcih2aWV3ZXIpOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgdmlld2VyLgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiAgICAgICAgICAgIHRoZSBwYXJhbWV0ZXJlIHZpZXdlcgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZpZXdlcihQYXJhbWV0ZXJWaWV3ZXIgdmlld2VyKSB7Ci0JCWlmICh0aGlzLnZpZXdlciAhPSBudWxsKSB7Ci0JCQl0aGlzLnZpZXdlci5nZXRWaWV3ZXIoKS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCX0KLQkJdGhpcy52aWV3ZXIgPSB2aWV3ZXI7Ci0JCWlmICh2aWV3ZXIgIT0gbnVsbCkgewotCQkJdmlld2VyLmdldFZpZXdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJCXVwZGF0ZSgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFBhcmFtZXRlclZpZXdlciBnZXRWaWV3ZXIoKSB7Ci0JCXJldHVybiB2aWV3ZXI7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSBidXR0b24gYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24uCi0JICogCi0JICogQHBhcmFtIGJ1dHRvbgotCSAqICAgICAgICAgICAgdGhlIGJ1dHRvbgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJ1dHRvbihCdXR0b24gYnV0dG9uKSB7Ci0JCXRoaXMuYnV0dG9uID0gYnV0dG9uOwotCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2dCkgewotCQkJCXJ1bigpOwotCQkJfQotCQl9KTsKLQkJYnV0dG9uLnNldEVuYWJsZWQoaXNFbmFibGVkKCkpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0JCXN1cGVyLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCWlmIChidXR0b24gIT0gbnVsbCkgewotCQkJYnV0dG9uLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGUoKSB7Ci0JCXNlbGVjdGlvbkNoYW5nZWQoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRWaWV3ZXIoKS5nZXRWaWV3ZXIoKQotCQkJCS5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHJvdGVjdGVkIFNoZWxsIGdldFNoZWxsKCkgewotCQlpZiAoc2hlbGwgPT0gbnVsbCkgewotCQkJc2hlbGwgPSBnZXRWaWV3ZXIoKS5nZXRTaGVsbCgpOwotCQl9Ci0JCXJldHVybiBzaGVsbDsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHNoZWxsIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBvcGVuaW5nIGEgZGlhbG9nLgotCSAqIAotCSAqIEBwYXJhbSBzaGVsbAotCSAqICAgICAgICAgICAgdGhlIHNoZWxsIHRvIHVzZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFNoZWxsKFNoZWxsIHNoZWxsKSB7Ci0JCXRoaXMuc2hlbGwgPSBzaGVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCXJldHVybiBnZXRWaWV3ZXIoKS51cGRhdGVTZWxlY3Rpb24oZ2V0QWN0aW9uVHlwZSgpLCBzZWxlY3Rpb24pOwotCX0KLQotCXByb3RlY3RlZCBpbnQgZ2V0QWN0aW9uVHlwZSgpIHsKLQkJcmV0dXJuIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5ERUZBVUxUOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0Fic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMTc3MjIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5TZWxlY3Rpb25MaXN0ZW5lckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5TdHlsZXNoZWV0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hQaXBlbGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi0vKioKLSAqIEEgY29udmVuaWVudCBiYXNlIGNsYXNzIGZvciBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3R5bGVzaGVldCB2aWV3ZXIuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbiBleHRlbmRzIFNlbGVjdGlvbkxpc3RlbmVyQWN0aW9uIHsKLQkvKioKLQkgKiBUaGUgZGVmYXVsdCBhY3Rpb24gdHlwZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUID0gMDsKLQkvKioKLQkgKiBUaGUgYWN0aW9uIHR5cGUgZm9yIGFkZCBhY3Rpb25zLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFERCA9IDE7Ci0JLyoqCi0JICogVGhlIGFjdGlvbiB0eXBlIGZvciByZW1vdmUgYWN0aW9ucy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRU1PVkUgPSAyOwotCS8qKgotCSAqIFRoZSBhY3Rpb24gdHlwZSBmb3IgbW92ZSBhY3Rpb25zLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PVkUgPSAzOwotCi0JcHJpdmF0ZSBTdHlsZXNoZWV0Vmlld2VyIHZpZXdlcjsKLQlwcml2YXRlIEJ1dHRvbiBidXR0b247Ci0JcHJpdmF0ZSBTaGVsbCBzaGVsbDsKLQotCXByb3RlY3RlZCBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24oU3RyaW5nIHRleHQsIFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKHRleHQpOwotCQlzZXRWaWV3ZXIodmlld2VyKTsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYW4gYXJyYXkgb2YgTGF1bmNoVHJhbnNmb3JtJ3MgdG8gdGhlIHZpZXdlci4KLQkgKiAKLQkgKiBAcGFyYW0gcmVzCi0JICogICAgICAgICAgICBsYXVuY2ggdHJhbnNmb3JtcyB0byBhZGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUcmFuc2Zvcm1zKExhdW5jaFRyYW5zZm9ybVtdIHJlcykgewotCQl2aWV3ZXIuYWRkVHJhbnNmb3JtcyhyZXMpOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgdmlld2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICB0aGUgdmlld2VyCi0JICovCi0JcHVibGljIHZvaWQgc2V0Vmlld2VyKFN0eWxlc2hlZXRWaWV3ZXIgdmlld2VyKSB7Ci0JCWlmICh0aGlzLnZpZXdlciAhPSBudWxsKSB7Ci0JCQl0aGlzLnZpZXdlci5nZXRWaWV3ZXIoKS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCX0KLQkJdGhpcy52aWV3ZXIgPSB2aWV3ZXI7Ci0JCWlmICh2aWV3ZXIgIT0gbnVsbCkgewotCQkJdmlld2VyLmdldFZpZXdlcigpLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJCXVwZGF0ZSgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFN0eWxlc2hlZXRWaWV3ZXIgZ2V0Vmlld2VyKCkgewotCQlyZXR1cm4gdmlld2VyOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgYnV0dG9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gYnV0dG9uCi0JICogICAgICAgICAgICB0aGUgYnV0dG9uCi0JICovCi0JcHVibGljIHZvaWQgc2V0QnV0dG9uKEJ1dHRvbiBidXR0b24pIHsKLQkJdGhpcy5idXR0b24gPSBidXR0b247Ci0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZ0KSB7Ci0JCQkJcnVuKCk7Ci0JCQl9Ci0JCX0pOwotCQlidXR0b24uc2V0RW5hYmxlZChpc0VuYWJsZWQoKSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKLQkJc3VwZXIuc2V0RW5hYmxlZChlbmFibGVkKTsKLQkJaWYgKGJ1dHRvbiAhPSBudWxsKSB7Ci0JCQlidXR0b24uc2V0RW5hYmxlZChlbmFibGVkKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZSgpIHsKLQkJc2VsZWN0aW9uQ2hhbmdlZCgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFZpZXdlcigpLmdldFZpZXdlcigpCi0JCQkJLmdldFNlbGVjdGlvbigpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU2hlbGwgZ2V0U2hlbGwoKSB7Ci0JCWlmIChzaGVsbCA9PSBudWxsKSB7Ci0JCQlzaGVsbCA9IGdldFZpZXdlcigpLmdldFNoZWxsKCk7Ci0JCX0KLQkJcmV0dXJuIHNoZWxsOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgc2hlbGwgdG8gYmUgdXNlZCBmb3Igb3BlbmluZyBhIGRpYWxvZy4KLQkgKiAKLQkgKiBAcGFyYW0gc2hlbGwKLQkgKiAgICAgICAgICAgIHRoZSBzaGVsbCB0byB1c2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTaGVsbChTaGVsbCBzaGVsbCkgewotCQl0aGlzLnNoZWxsID0gc2hlbGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlyZXR1cm4gZ2V0Vmlld2VyKCkudXBkYXRlU2VsZWN0aW9uKGdldEFjdGlvblR5cGUoKSwgc2VsZWN0aW9uKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgaW50IGdldEFjdGlvblR5cGUoKSB7Ci0JCXJldHVybiBERUZBVUxUOwotCX0KLQotCXByb3RlY3RlZCBMaXN0PD8+IGdldE9yZGVyZWRTZWxlY3Rpb24oKSB7Ci0JCUxpc3Q8Pz4gc2VsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0Vmlld2VyKCkuZ2V0Vmlld2VyKCkKLQkJCQkuZ2V0U2VsZWN0aW9uKCkpLnRvTGlzdCgpOwotCQlyZXR1cm4gc2VsZWN0aW9uOwotCX0KLQotCXByb3RlY3RlZCBMaXN0PExhdW5jaFRyYW5zZm9ybT4gZ2V0RW50cmllc0FzTGlzdCgpIHsKLQkJLy8gSVN0eWxlc2hlZXRFbnRyeVtdIGVudHJpZXMgPSBnZXRWaWV3ZXIoKS5nZXRFbnRyaWVzKCk7Ci0JCS8vIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoZW50cmllcy5sZW5ndGgpOwotCQkvLyBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHsKLQkJLy8gbGlzdC5hZGQoZW50cmllc1tpXSk7Ci0JCS8vIH0KLQkJTGF1bmNoUGlwZWxpbmUgbHAgPSAoTGF1bmNoUGlwZWxpbmUpIGdldFZpZXdlcigpLmdldFZpZXdlcigpLmdldElucHV0KCk7Ci0JCXJldHVybiBscC5nZXRUcmFuc2Zvcm1EZWZzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0RW50cmllcyhMaXN0PD8+IGxpc3QpIHsKLQkJZ2V0Vmlld2VyKCkuc2V0RW50cmllcyhsaXN0LnRvQXJyYXkobmV3IExhdW5jaFRyYW5zZm9ybVtsaXN0LnNpemUoKV0pKTsKLQkJLy8gLy8gdXBkYXRlIGFsbCBzZWxlY3Rpb24gbGlzdGVuZXJzCi0JCS8vIGdldFZpZXdlcigpLnNldFNlbGVjdGlvbihnZXRWaWV3ZXIoKS5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNJbmRleFNlbGVjdGVkKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwgaW50IGluZGV4KSB7Ci0JCWlmIChzZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJSXRlcmF0b3I8Pz4gZW50cmllcyA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOwotCQlMaXN0PD8+IGxpc3QgPSBnZXRFbnRyaWVzQXNMaXN0KCk7Ci0JCXdoaWxlIChlbnRyaWVzLmhhc05leHQoKSkgewotCQkJT2JqZWN0IG5leHQgPSBlbnRyaWVzLm5leHQoKTsKLQkJCWlmIChsaXN0LmluZGV4T2YobmV4dCkgPT0gaW5kZXgpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BZGRFeHRlcm5hbEZpbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0FkZEV4dGVybmFsRmlsZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjdhYTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0FkZEV4dGVybmFsRmlsZUFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDU3NzIgLSBOTFMgTWVzc2FnZSByZWZhY3RvcmluZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotCi0vKioKLSAqIEFuIGFjdGlvbiB0aGF0IG9wZW5zIGEgZGlhbG9nIHRvIGFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBhIGZpbGUgZnJvbSB0aGUKLSAqIGZpbGUgc3lzdGVtLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGRFeHRlcm5hbEZpbGVBY3Rpb24gZXh0ZW5kcyBPcGVuRGlhbG9nQWN0aW9uIHsKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICB0aGUgc3R5bGVzaGVldCB2aWV3ZXIKLQkgKiBAcGFyYW0gZGlhbG9nU2V0dGluZ3NQcmVmaXgKLQkgKiAgICAgICAgICAgIGEgcHJlZml4IHRvIHVzZSBmb3Igc2F2aW5nIGRpYWxvZyBwcmVmZXJlbmNlcwotCSAqLwotCXB1YmxpYyBBZGRFeHRlcm5hbEZpbGVBY3Rpb24oU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIsCi0JCQlTdHJpbmcgZGlhbG9nU2V0dGluZ3NQcmVmaXgpIHsKLQkJc3VwZXIoTWVzc2FnZXMuQWRkRXh0ZXJuYWxGaWxlQWN0aW9uX1RleHQsIHZpZXdlciwgZGlhbG9nU2V0dGluZ3NQcmVmaXgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJU3RyaW5nIGxhc3RVc2VkUGF0aCA9IGdldERpYWxvZ1NldHRpbmcoTEFTVF9QQVRIX1NFVFRJTkcpOwotCQlpZiAobGFzdFVzZWRQYXRoID09IG51bGwpIHsKLQkJCWxhc3RVc2VkUGF0aCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJRmlsZURpYWxvZyBkaWFsb2cgPSBuZXcgRmlsZURpYWxvZyhnZXRTaGVsbCgpLCBTV1QuTVVMVEkpOwotCQlkaWFsb2cuc2V0VGV4dChNZXNzYWdlcy5BZGRFeHRlcm5hbEZpbGVBY3Rpb25fU2VsZWN0aW9uXzMpOwotCQlkaWFsb2cuc2V0RmlsdGVyUGF0aChsYXN0VXNlZFBhdGgpOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIGNvbnRlbnRUeXBlTWFuYWdlciA9IFBsYXRmb3JtCi0JCQkJLmdldENvbnRlbnRUeXBlTWFuYWdlcigpOwotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBjb250ZW50VHlwZU1hbmFnZXIKLQkJCQkuZ2V0Q29udGVudFR5cGUoWFNMQ29yZS5YU0xfQ09OVEVOVF9UWVBFKTsKLQkJU3RyaW5nW10geHNsQ29udGVudFR5cGVzID0gY29udGVudFR5cGUKLQkJCQkuZ2V0RmlsZVNwZWNzKElDb250ZW50VHlwZS5GSUxFX0VYVEVOU0lPTl9TUEVDKTsKLQotCQkvLyBhZGQgKi4gdG8gZnJvbnQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB4c2xDb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBzdHJpbmcgPSB4c2xDb250ZW50VHlwZXNbaV07Ci0JCQl4c2xDb250ZW50VHlwZXNbaV0gPSAiKi4iICsgc3RyaW5nOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlkaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyh4c2xDb250ZW50VHlwZXMpOwotCQlTdHJpbmcgcmVzID0gZGlhbG9nLm9wZW4oKTsKLQkJaWYgKHJlcyA9PSBudWxsKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlJUGF0aCBmaWx0ZXJQYXRoID0gbmV3IFBhdGgoZGlhbG9nLmdldEZpbHRlclBhdGgoKSk7Ci0JCUxhdW5jaFRyYW5zZm9ybVtdIGx0cyA9IG5ldyBMYXVuY2hUcmFuc2Zvcm1bMV07Ci0JCUlQYXRoIHBhdGggPSBuZXcgUGF0aChyZXMpLm1ha2VBYnNvbHV0ZSgpOwotCQlsdHNbMF0gPSBuZXcgTGF1bmNoVHJhbnNmb3JtKHBhdGgudG9Qb3J0YWJsZVN0cmluZygpLAotCQkJCUxhdW5jaFRyYW5zZm9ybS5FWFRFUk5BTF9UWVBFKTsKLQotCQlzZXREaWFsb2dTZXR0aW5nKExBU1RfUEFUSF9TRVRUSU5HLCBmaWx0ZXJQYXRoLnRvT1NTdHJpbmcoKSk7Ci0KLQkJYWRkVHJhbnNmb3JtcyhsdHMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0FkZFBhcmFtZXRlckFjdGlvbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWRkUGFyYW1ldGVyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmN2I1NjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvQWRkUGFyYW1ldGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI0NTc3MiAtIE5MUyBNZXNzYWdlIHJlZmFjdG9yaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlBhcmFtZXRlclZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoQXR0cmlidXRlOwotCi0vKioKLSAqIEFuIGFjdGlvbiB0aGF0IG9wZW5zIGEgZGlhbG9nIHRvIGFsbG93IHRoZSB1c2VyIHRvIGFkZCBhIHBhcmFtZXRlciB0byBhCi0gKiB0cmFuc2Zvcm0uCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIEFkZFBhcmFtZXRlckFjdGlvbiBleHRlbmRzIEFic3RyYWN0UGFyYW1ldGVyQWN0aW9uIHsKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICB0ZWggdmlld2VyCi0JICovCi0JcHVibGljIEFkZFBhcmFtZXRlckFjdGlvbihQYXJhbWV0ZXJWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKE1lc3NhZ2VzLkFkZFBhcmFtZXRlckFjdGlvbiwgdmlld2VyKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCU11bHRpcGxlSW5wdXREaWFsb2cgZGlhbG9nID0gbmV3IE11bHRpcGxlSW5wdXREaWFsb2coZ2V0U2hlbGwoKSwKLQkJCQlNZXNzYWdlcy5BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nKTsKLQkJU3RyaW5nIG5hbWVsYWJlbCA9IE1lc3NhZ2VzLkFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2dfTmFtZTsKLQkJZGlhbG9nLmFkZFRleHRGaWVsZChuYW1lbGFiZWwsIG51bGwsIGZhbHNlKTsKLQkJU3RyaW5nIHZhcmlhYmxlc2xhYmVsID0gTWVzc2FnZXMuQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19WYWx1ZTsKLQkJZGlhbG9nLmFkZFZhcmlhYmxlc0ZpZWxkKHZhcmlhYmxlc2xhYmVsLCBudWxsLCBmYWxzZSk7Ci0JCWRpYWxvZy5vcGVuKCk7Ci0KLQkJaWYgKGRpYWxvZy5nZXRSZXR1cm5Db2RlKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlTdHJpbmcgbmFtZSA9IGRpYWxvZy5nZXRTdHJpbmdWYWx1ZShuYW1lbGFiZWwpOwotCQkJU3RyaW5nIHZhbHVlID0gZGlhbG9nLmdldFN0cmluZ1ZhbHVlKHZhcmlhYmxlc2xhYmVsKTsKLQkJCUxhdW5jaEF0dHJpYnV0ZSBwYXJhbWV0ZXIgPSBudWxsOwotCQkJaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaW5kZXhPZigiJHsiKSA+IC0xKSAvLyROT04tTkxTLTEkCi0JCQkJcGFyYW1ldGVyID0gbmV3IExhdW5jaEF0dHJpYnV0ZShuYW1lLCBudWxsLCB2YWx1ZSk7Ci0JCQllbHNlCi0JCQkJcGFyYW1ldGVyID0gbmV3IExhdW5jaEF0dHJpYnV0ZShuYW1lLCBudWxsLCB2YWx1ZSk7Ci0JCQlnZXRWaWV3ZXIoKS5hZGRQYXJhbWV0ZXIocGFyYW1ldGVyKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0FkZFdvcmtzcGFjZUZpbGVBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0FkZFdvcmtzcGFjZUZpbGVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyNTlmMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDI0NTc3MiAtIE5MUyBNZXNzYWdlIHJlZmFjdG9yaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLm5hdmlnYXRvci5SZXNvdXJjZUNvbXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi0vKioKLSAqIEFuIGFjdGlvbiB0aGF0IG9wZW5zIGEgZGlhbG9nIHRvIGFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBhIGZpbGUgaW4gdGhlCi0gKiB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIEFkZFdvcmtzcGFjZUZpbGVBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24gewotCXByaXZhdGUgZmluYWwgSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSVNlbGVjdGlvblN0YXR1c1ZhbGlkYXRvcigpIHsKLQkJcHVibGljIElTdGF0dXMgdmFsaWRhdGUoT2JqZWN0W10gc2VsZWN0aW9uKSB7Ci0JCQlpZiAoc2VsZWN0aW9uLmxlbmd0aCA9PSAwKSB7Ci0JCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsCi0JCQkJCQkiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCEoc2VsZWN0aW9uW2ldIGluc3RhbmNlb2YgSUZpbGUpKSB7Ci0JCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsICIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCX0KLQkJCX0KLQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCAwLAotCQkJCQkiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX07Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICB0aGUgdmlld2VyCi0JICovCi0JcHVibGljIEFkZFdvcmtzcGFjZUZpbGVBY3Rpb24oU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIpIHsKLQkJc3VwZXIoTWVzc2FnZXMuQWRkV29ya3NwYWNlRmlsZUFjdGlvbl9UZXh0LCB2aWV3ZXIpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQotCQkvLyBWaWV3ZXJGaWx0ZXIgZmlsdGVyPSBuZXcgU3R5bGVzaGVldEZpbHRlcihnZXRTZWxlY3RlZEphcnMoKSk7Ci0KLQkJSUxhYmVsUHJvdmlkZXIgbHAgPSBuZXcgV29ya2JlbmNoTGFiZWxQcm92aWRlcigpOwotCQlJVHJlZUNvbnRlbnRQcm92aWRlciBjcCA9IG5ldyBXb3JrYmVuY2hDb250ZW50UHJvdmlkZXIoKTsKLQotCQlFbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZyBkaWFsb2cgPSBuZXcgRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2coCi0JCQkJZ2V0U2hlbGwoKSwgbHAsIGNwKTsKLQkJZGlhbG9nLnNldFZhbGlkYXRvcih2YWxpZGF0b3IpOwotCQlkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuQWRkV29ya3NwYWNlRmlsZUFjdGlvbl9EaWFsb2dUaXRsZSk7Ci0JCWRpYWxvZy5zZXRNZXNzYWdlKE1lc3NhZ2VzLkFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fRGlhbG9nTWVzc2FnZSk7Ci0JCWRpYWxvZy5hZGRGaWx0ZXIobmV3IFZpZXdlckZpbHRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRFbGVtZW50LAotCQkJCQlPYmplY3QgZWxlbWVudCkgewotCQkJCWlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpKQotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgZWxlbWVudDsKLQkJCQlpZiAocmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7Ci0JCQkJCWlmICghWFNMQ29yZS5pc1hTTEZpbGUoKElGaWxlKSByZXNvdXJjZSkpCi0JCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9KTsKLQkJZGlhbG9nLnNldElucHV0KFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkpOwotCQlkaWFsb2cuc2V0Q29tcGFyYXRvcihuZXcgUmVzb3VyY2VDb21wYXJhdG9yKFJlc291cmNlQ29tcGFyYXRvci5OQU1FKSk7Ci0KLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQlPYmplY3RbXSBlbGVtZW50cyA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLQkJCUxhdW5jaFRyYW5zZm9ybVtdIHJlcyA9IG5ldyBMYXVuY2hUcmFuc2Zvcm1bZWxlbWVudHMubGVuZ3RoXTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJSVJlc291cmNlIGVsZW0gPSAoSVJlc291cmNlKSBlbGVtZW50c1tpXTsKLQkJCQlyZXNbaV0gPSBuZXcgTGF1bmNoVHJhbnNmb3JtKGVsZW0uZ2V0RnVsbFBhdGgoKQotCQkJCQkJLnRvUG9ydGFibGVTdHJpbmcoKSwgTGF1bmNoVHJhbnNmb3JtLlJFU09VUkNFX1RZUEUpOwotCQkJfQotCQkJYWRkVHJhbnNmb3JtcyhyZXMpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGludCBnZXRBY3Rpb25UeXBlKCkgewotCQlyZXR1cm4gQUREOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0NvbnRyb2xBY2Nlc3NpYmxlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL0NvbnRyb2xBY2Nlc3NpYmxlTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNlNmZjZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Db250cm9sQWNjZXNzaWJsZUxpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmxlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLQotLyoqCi0gKiBVc2VkIHRvIGhlbHAgd2l0aCBhY2Nlc3NpYmlsaXR5LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBDb250cm9sQWNjZXNzaWJsZUxpc3RlbmVyIGV4dGVuZHMgQWNjZXNzaWJsZUFkYXB0ZXIgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIGNvbnRyb2xOYW1lOwotCi0JcHJpdmF0ZSBDb250cm9sQWNjZXNzaWJsZUxpc3RlbmVyKFN0cmluZyBuYW1lKSB7Ci0JCWNvbnRyb2xOYW1lID0gbmFtZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBnZXROYW1lKEFjY2Vzc2libGVFdmVudCBlKSB7Ci0JCWUucmVzdWx0ID0gY29udHJvbE5hbWU7Ci0JfQotCi0JLyoqCi0JICogSGVscGVyIGZvciBhZGRpbmcgYW4gaW5zdGFuY2Ugb2YgdGhpcyB0byB0aGUgZ2l2ZW4gY29udHJvbC4KLQkgKiAKLQkgKiBAcGFyYW0gY29tcAotCSAqICAgICAgICAgICAgdGhlIGNvbnRyb2wgdG8gYWRkIHRoaXMgdG8KLQkgKiBAcGFyYW0gbmFtZQotCSAqICAgICAgICAgICAgdGhlIG5hbWUgZm9yIHRoaXMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkTGlzdGVuZXIoQ29udHJvbCBjb21wLCBTdHJpbmcgbmFtZSkgewotCQkvLyBzdHJpcCBtbmVtb25pYwotCQlTdHJpbmdbXSBzdHJzID0gbmFtZS5zcGxpdCgiJiIpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZ0J1ZmZlciBzdHJpcHBlZCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChTdHJpbmcgZWxlbWVudCA6IHN0cnMpIHsKLQkJCXN0cmlwcGVkLmFwcGVuZChlbGVtZW50KTsKLQkJfQotCQljb21wLmdldEFjY2Vzc2libGUoKS5hZGRBY2Nlc3NpYmxlTGlzdGVuZXIoCi0JCQkJbmV3IENvbnRyb2xBY2Nlc3NpYmxlTGlzdGVuZXIoc3RyaXBwZWQudG9TdHJpbmcoKSkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL01vdmVEb3duQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Nb3ZlRG93bkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmEwYzEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL01vdmVEb3duQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5TdHlsZXNoZWV0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLS8qKgotICogVGhlIGFjdGlvbiBmb3IgbW92aW5nIGEgc3R5bGVzaGVldCBmdXJ0aGVyIGRvd24gaW4gdGhlIHRyYW5zZm9ybWF0aW9uCi0gKiBwaXBlbGluZS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgTW92ZURvd25BY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24gewotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKi8KLQlwdWJsaWMgTW92ZURvd25BY3Rpb24oU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIpIHsKLQkJc3VwZXIoTWVzc2FnZXMuTW92ZURvd25BY3Rpb25fVGV4dCwgdmlld2VyKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCUxpc3Q8Pz4gdGFyZ2V0cyA9IGdldE9yZGVyZWRTZWxlY3Rpb24oKTsKLQkJaWYgKHRhcmdldHMuaXNFbXB0eSgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJTGlzdDxMYXVuY2hUcmFuc2Zvcm0+IGxpc3QgPSBnZXRFbnRyaWVzQXNMaXN0KCk7Ci0JCWludCBib3R0b20gPSBsaXN0LnNpemUoKSAtIDE7Ci0JCWludCBpbmRleCA9IDA7Ci0JCWZvciAoaW50IGkgPSB0YXJnZXRzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlPYmplY3QgdGFyZ2V0ID0gdGFyZ2V0cy5nZXQoaSk7Ci0JCQlpbmRleCA9IGxpc3QuaW5kZXhPZih0YXJnZXQpOwotCQkJaWYgKGluZGV4IDwgYm90dG9tKSB7Ci0JCQkJYm90dG9tID0gaW5kZXggKyAxOwotCQkJCU9iamVjdCB0ZW1wID0gbGlzdC5nZXQoYm90dG9tKTsKLQkJCQlsaXN0LnNldChib3R0b20sIChMYXVuY2hUcmFuc2Zvcm0pIHRhcmdldCk7Ci0JCQkJbGlzdC5zZXQoaW5kZXgsIChMYXVuY2hUcmFuc2Zvcm0pIHRlbXApOwotCQkJfQotCQkJYm90dG9tID0gaW5kZXg7Ci0JCX0KLQkJc2V0RW50cmllcyhsaXN0KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCWlmIChzZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIGdldFZpZXdlcigpLnVwZGF0ZVNlbGVjdGlvbihnZXRBY3Rpb25UeXBlKCksIHNlbGVjdGlvbikKLQkJCQkmJiAhaXNJbmRleFNlbGVjdGVkKHNlbGVjdGlvbiwgZ2V0RW50cmllc0FzTGlzdCgpLnNpemUoKSAtIDEpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBpbnQgZ2V0QWN0aW9uVHlwZSgpIHsKLQkJcmV0dXJuIE1PVkU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvTW92ZVVwQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Nb3ZlVXBBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxM2RhYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9Nb3ZlVXBBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1NzcyIC0gTkxTIE1lc3NhZ2UgcmVmYWN0b3JpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi0vKioKLSAqIFRoZSBhY3Rpb24gZm9yIG1vdmluZyBhIHN0eWxlc2hlZXQgZnVydGhlciB1cCBpbiB0aGUgdHJhbnNmb3JtYXRpb24gcGlwZWxpbmUuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIE1vdmVVcEFjdGlvbiBleHRlbmRzIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbiB7Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqLwotCXB1YmxpYyBNb3ZlVXBBY3Rpb24oU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIpIHsKLQkJc3VwZXIoTWVzc2FnZXMuTW92ZVVwQWN0aW9uX1RleHQsIHZpZXdlcik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlMaXN0PD8+IHRhcmdldHMgPSBnZXRPcmRlcmVkU2VsZWN0aW9uKCk7Ci0JCWlmICh0YXJnZXRzLmlzRW1wdHkoKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCWludCB0b3AgPSAwOwotCQlpbnQgaW5kZXggPSAwOwotCQlMaXN0PExhdW5jaFRyYW5zZm9ybT4gbGlzdCA9IGdldEVudHJpZXNBc0xpc3QoKTsKLQkJSXRlcmF0b3I8Pz4gZW50cmllcyA9IHRhcmdldHMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGVudHJpZXMuaGFzTmV4dCgpKSB7Ci0JCQlPYmplY3QgdGFyZ2V0ID0gZW50cmllcy5uZXh0KCk7Ci0JCQlpbmRleCA9IGxpc3QuaW5kZXhPZih0YXJnZXQpOwotCQkJaWYgKGluZGV4ID4gdG9wKSB7Ci0JCQkJdG9wID0gaW5kZXggLSAxOwotCQkJCU9iamVjdCB0ZW1wID0gbGlzdC5nZXQodG9wKTsKLQkJCQlsaXN0LnNldCh0b3AsIChMYXVuY2hUcmFuc2Zvcm0pIHRhcmdldCk7Ci0JCQkJbGlzdC5zZXQoaW5kZXgsIChMYXVuY2hUcmFuc2Zvcm0pIHRlbXApOwotCQkJfQotCQkJdG9wID0gaW5kZXg7Ci0JCX0KLQkJc2V0RW50cmllcyhsaXN0KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVTZWxlY3Rpb24oSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCWlmIChzZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIGdldFZpZXdlcigpLnVwZGF0ZVNlbGVjdGlvbihnZXRBY3Rpb25UeXBlKCksIHNlbGVjdGlvbikKLQkJCQkmJiAhaXNJbmRleFNlbGVjdGVkKHNlbGVjdGlvbiwgMCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGludCBnZXRBY3Rpb25UeXBlKCkgewotCQlyZXR1cm4gTU9WRTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9NdWx0aXBsZUlucHV0RGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9NdWx0aXBsZUlucHV0RGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZDQ3MDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvTXVsdGlwbGVJbnB1dERpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1NzcyIC0gTkxTIE1lc3NhZ2UgcmVmYWN0b3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuU3RyaW5nVmFyaWFibGVTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TY3JvbGxhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci0KLS8qKgotICogQSBkaWFsb2cgd2l0aCBoYW5keSBtZXRob2RzIGZvciBhZGRpbmcgc2ltcGxlIGNvbnRyb2xzIHRvIGl0c2VsZi4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgTXVsdGlwbGVJbnB1dERpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklFTERfTkFNRSA9ICJGSUVMRF9OQU1FIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFRFWFQgPSAxMDA7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgQlJPV1NFID0gMTAxOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFZBUklBQkxFID0gMTAyOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IENPTUJPID0gMTAzOwotCi0JcHJvdGVjdGVkIENvbXBvc2l0ZSBwYW5lbDsKLQotCXByb3RlY3RlZCBMaXN0PEZpZWxkU3VtbWFyeT4gZmllbGRMaXN0ID0gbmV3IEFycmF5TGlzdDxGaWVsZFN1bW1hcnk+KCk7Ci0JcHJvdGVjdGVkIExpc3Q8U2Nyb2xsYWJsZT4gY29udHJvbExpc3QgPSBuZXcgQXJyYXlMaXN0PFNjcm9sbGFibGU+KCk7Ci0JcHJvdGVjdGVkIExpc3Q8VmFsaWRhdG9yPiB2YWxpZGF0b3JzID0gbmV3IEFycmF5TGlzdDxWYWxpZGF0b3I+KCk7Ci0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJvdGVjdGVkIE1hcDxPYmplY3QsIENvbXBhcmFibGU+IHZhbHVlTWFwID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBDb21wYXJhYmxlPigpOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdGl0bGU7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gc2hlbGwKLQkgKiAgICAgICAgICAgIHRoZSBzaGVsbCB0byBvcGVuIHRoZSBkaWFsb2cgb24KLQkgKiBAcGFyYW0gdGl0bGUKLQkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBmb3IgdGhlIGRpYWxvZwotCSAqLwotCXB1YmxpYyBNdWx0aXBsZUlucHV0RGlhbG9nKGZpbmFsIFNoZWxsIHNoZWxsLCBmaW5hbCBTdHJpbmcgdGl0bGUpIHsKLQkJc3VwZXIoc2hlbGwpOwotCQl0aGlzLnRpdGxlID0gdGl0bGU7Ci0JCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2hlbGwoU2hlbGwgc2hlbGwpIHsKLQkJc3VwZXIuY29uZmlndXJlU2hlbGwoc2hlbGwpOwotCQlpZiAodGl0bGUgIT0gbnVsbCkgewotCQkJc2hlbGwuc2V0VGV4dCh0aXRsZSk7Ci0JCX0KLQotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUJ1dHRvbkJhcihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbnRyb2wgYmFyID0gc3VwZXIuY3JlYXRlQnV0dG9uQmFyKHBhcmVudCk7Ci0JCXZhbGlkYXRlRmllbGRzKCk7Ci0JCXJldHVybiBiYXI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBjb250YWluZXIgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCS8vICgoR3JpZERhdGEpIHBhcmVudC5nZXRMYXlvdXREYXRhKCkpLmhlaWdodEhpbnQgPSA0MDA7Ci0JCS8vICgoR3JpZERhdGEpIHBhcmVudC5nZXRMYXlvdXREYXRhKCkpLndpZHRoSGludCA9IDQwMDsKLQotCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKSk7Ci0KLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJLy8gZ2QuaGVpZ2h0SGludCA9IDIwMDsKLQkJY29udGFpbmVyLnNldExheW91dERhdGEoZ2QpOwotCi0JCXBhbmVsID0gbmV3IENvbXBvc2l0ZShjb250YWluZXIsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgyLCBmYWxzZSk7Ci0JCXBhbmVsLnNldExheW91dChsYXlvdXQpOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQlmb3IgKEl0ZXJhdG9yPEZpZWxkU3VtbWFyeT4gaSA9IGZpZWxkTGlzdC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspIHsKLQkJCUZpZWxkU3VtbWFyeSBmaWVsZCA9IGkubmV4dCgpOwotCQkJc3dpdGNoIChmaWVsZC50eXBlKSB7Ci0JCQljYXNlIFRFWFQ6Ci0JCQkJY3JlYXRlVGV4dEZpZWxkKGZpZWxkLm5hbWUsIGZpZWxkLmluaXRpYWxWYWx1ZSwKLQkJCQkJCWZpZWxkLmFsbG93c0VtcHR5KTsKLQkJCQlicmVhazsKLQkJCS8vIGNhc2UgQlJPV1NFOgotCQkJLy8gY3JlYXRlQnJvd3NlRmllbGQoZmllbGQubmFtZSwgZmllbGQuaW5pdGlhbFZhbHVlLAotCQkJLy8gZmllbGQuYWxsb3dzRW1wdHkpOwotCQkJLy8gYnJlYWs7Ci0JCQljYXNlIFZBUklBQkxFOgotCQkJCWNyZWF0ZVZhcmlhYmxlc0ZpZWxkKGZpZWxkLm5hbWUsIGZpZWxkLmluaXRpYWxWYWx1ZSwKLQkJCQkJCWZpZWxkLmFsbG93c0VtcHR5KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ09NQk86Ci0JCQkJY3JlYXRlQ29tYm9GaWVsZChmaWVsZC5uYW1lLCBmaWVsZC5pbml0aWFsSW5kZXgsIGZpZWxkLml0ZW1zKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWZpZWxkTGlzdCA9IG51bGw7IC8vIGFsbG93IGl0IHRvIGJlIGdjJ2QKLQkJRGlhbG9nLmFwcGx5RGlhbG9nRm9udChjb250YWluZXIpOwotCi0JCXJldHVybiBjb250YWluZXI7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgbGFiZWwsIHRleHQgYm94IGFuZCBidXR0b24gZm9yIGJyb3dzaW5nIHRoZSBmb3IgYSBmaWxlLgotCSAqIAotCSAqIEBwYXJhbSBsYWJlbFRleHQKLQkgKiAgICAgICAgICAgIHRoZSBsYWJlbAotCSAqIEBwYXJhbSBpbml0aWFsVmFsdWUKLQkgKiAgICAgICAgICAgIHRoZSBpbml0aWFsIHZhbHVlCi0JICogQHBhcmFtIGFsbG93c0VtcHR5Ci0JICogICAgICAgICAgICB0cnVlIGlmIHRoZSB0ZXh0IGJveCBjYW4gYmUgZW1wdHkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRCcm93c2VGaWVsZChTdHJpbmcgbGFiZWxUZXh0LCBTdHJpbmcgaW5pdGlhbFZhbHVlLAotCQkJYm9vbGVhbiBhbGxvd3NFbXB0eSkgewotCQlmaWVsZExpc3QuYWRkKG5ldyBGaWVsZFN1bW1hcnkoQlJPV1NFLCBsYWJlbFRleHQsIGluaXRpYWxWYWx1ZSwKLQkJCQlhbGxvd3NFbXB0eSkpOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGxhYmVsIGFuZCBhIHRleHQgYm94LgotCSAqIAotCSAqIEBwYXJhbSBsYWJlbFRleHQKLQkgKiAgICAgICAgICAgIHRoZSBsYWJlbAotCSAqIEBwYXJhbSBpbml0aWFsVmFsdWUKLQkgKiAgICAgICAgICAgIHRoZSBpbml0aWFsIHZhbHVlCi0JICogQHBhcmFtIGFsbG93c0VtcHR5Ci0JICogICAgICAgICAgICB0cnVlIGlmIHRoZSB0ZXh0IGJveCBjYW4gYmUgZW1wdHkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZXh0RmllbGQoU3RyaW5nIGxhYmVsVGV4dCwgU3RyaW5nIGluaXRpYWxWYWx1ZSwKLQkJCWJvb2xlYW4gYWxsb3dzRW1wdHkpIHsKLQkJZmllbGRMaXN0LmFkZChuZXcgRmllbGRTdW1tYXJ5KFRFWFQsIGxhYmVsVGV4dCwgaW5pdGlhbFZhbHVlLAotCQkJCWFsbG93c0VtcHR5KSk7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgbGFiZWwsIGEgdGV4dCBib3ggYW5kIGEgYnV0dG9uIGZvciBzZWxlY3RpbmcgdmFyaWFibGVzLgotCSAqIAotCSAqIEBwYXJhbSBsYWJlbFRleHQKLQkgKiAgICAgICAgICAgIHRoZSBsYWJlbAotCSAqIEBwYXJhbSBpbml0aWFsVmFsdWUKLQkgKiAgICAgICAgICAgIHRoZSBpbml0aWFsIHZhbHVlCi0JICogQHBhcmFtIGFsbG93c0VtcHR5Ci0JICogICAgICAgICAgICB0cnVlIGlmIHRoZSB0ZXh0IGJveCBjYW4gYmUgZW1wdHkKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRWYXJpYWJsZXNGaWVsZChTdHJpbmcgbGFiZWxUZXh0LCBTdHJpbmcgaW5pdGlhbFZhbHVlLAotCQkJYm9vbGVhbiBhbGxvd3NFbXB0eSkgewotCQlmaWVsZExpc3QuYWRkKG5ldyBGaWVsZFN1bW1hcnkoVkFSSUFCTEUsIGxhYmVsVGV4dCwgaW5pdGlhbFZhbHVlLAotCQkJCWFsbG93c0VtcHR5KSk7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgbGFiZWwgYW5kIGEgY29tYm8uCi0JICogCi0JICogQHBhcmFtIGxhYmVsVGV4dAotCSAqICAgICAgICAgICAgdGhlIGxhYmVsCi0JICogQHBhcmFtIGluaXRpYWxJbmRleAotCSAqICAgICAgICAgICAgdGhlIGluaXRpYWwgc2VsZWN0aW9uIGluZGV4Ci0JICogQHBhcmFtIGl0ZW1zCi0JICogICAgICAgICAgICB0aGUgYXJyYXkgb2YgaXRlbXMgZm9yIHRoZSBjb21ibwotCSAqLwotCXB1YmxpYyB2b2lkIGFkZENvbWJvRmllbGQoU3RyaW5nIGxhYmVsVGV4dCwgaW50IGluaXRpYWxJbmRleCwgU3RyaW5nW10gaXRlbXMpIHsKLQkJZmllbGRMaXN0LmFkZChuZXcgRmllbGRTdW1tYXJ5KENPTUJPLCBsYWJlbFRleHQsIGl0ZW1zLCBpbml0aWFsSW5kZXgpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVUZXh0RmllbGQoU3RyaW5nIGxhYmVsVGV4dCwgU3RyaW5nIGluaXRpYWxWYWx1ZSwKLQkJCWJvb2xlYW4gYWxsb3dFbXB0eSkgewotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYW5lbCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KGxhYmVsVGV4dCk7Ci0JCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0KLQkJZmluYWwgVGV4dCB0ZXh0ID0gbmV3IFRleHQocGFuZWwsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLQkJdGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJdGV4dC5zZXREYXRhKEZJRUxEX05BTUUsIGxhYmVsVGV4dCk7Ci0KLQkJLy8gbWFrZSBzdXJlIHJvd3MgYXJlIHRoZSBzYW1lIGhlaWdodCBvbiBib3RoIHBhbmVscy4KLQkJbGFiZWwuc2V0U2l6ZShsYWJlbC5nZXRTaXplKCkueCwgdGV4dC5nZXRTaXplKCkueSk7Ci0KLQkJaWYgKGluaXRpYWxWYWx1ZSAhPSBudWxsKSB7Ci0JCQl0ZXh0LnNldFRleHQoaW5pdGlhbFZhbHVlKTsKLQkJfQotCi0JCWlmICghYWxsb3dFbXB0eSkgewotCQkJdmFsaWRhdG9ycy5hZGQobmV3IFZhbGlkYXRvcigpIHsKLQkJCQlAT3ZlcnJpZGUKLQkJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKLQkJCQkJcmV0dXJuICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJfSk7Ci0JCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCQkJdmFsaWRhdGVGaWVsZHMoKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCi0JCWNvbnRyb2xMaXN0LmFkZCh0ZXh0KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVWYXJpYWJsZXNGaWVsZChTdHJpbmcgbGFiZWxUZXh0LCBTdHJpbmcgaW5pdGlhbFZhbHVlLAotCQkJYm9vbGVhbiBhbGxvd0VtcHR5KSB7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhbmVsLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQobGFiZWxUZXh0KTsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpKTsKLQotCQlDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUocGFuZWwsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJY29tcC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQlmaW5hbCBUZXh0IHRleHQgPSBuZXcgVGV4dChjb21wLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7Ci0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZGF0YS53aWR0aEhpbnQgPSAyMDA7Ci0JCXRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJdGV4dC5zZXREYXRhKEZJRUxEX05BTUUsIGxhYmVsVGV4dCk7Ci0KLQkJLy8gbWFrZSBzdXJlIHJvd3MgYXJlIHRoZSBzYW1lIGhlaWdodCBvbiBib3RoIHBhbmVscy4KLQkJbGFiZWwuc2V0U2l6ZShsYWJlbC5nZXRTaXplKCkueCwgdGV4dC5nZXRTaXplKCkueSk7Ci0KLQkJaWYgKGluaXRpYWxWYWx1ZSAhPSBudWxsKSB7Ci0JCQl0ZXh0LnNldFRleHQoaW5pdGlhbFZhbHVlKTsKLQkJfQotCi0JCWlmICghYWxsb3dFbXB0eSkgewotCQkJdmFsaWRhdG9ycy5hZGQobmV3IFZhbGlkYXRvcigpIHsKLQkJCQlAT3ZlcnJpZGUKLQkJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKLQkJCQkJcmV0dXJuICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJfSk7Ci0KLQkJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJCQl2YWxpZGF0ZUZpZWxkcygpOwotCQkJCX0KLQkJCX0pOwotCQl9Ci0KLQkJQnV0dG9uIGJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbihjb21wLCBJRGlhbG9nQ29uc3RhbnRzLklHTk9SRV9JRCwKLQkJCQlNZXNzYWdlcy5WYXJpYWJsZXNGaWVsZEJ1dHRvbl9UZXh0LCBmYWxzZSk7Ci0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCVN0cmluZ1ZhcmlhYmxlU2VsZWN0aW9uRGlhbG9nIGRpYWxvZyA9IG5ldyBTdHJpbmdWYXJpYWJsZVNlbGVjdGlvbkRpYWxvZygKLQkJCQkJCWdldFNoZWxsKCkpOwotCQkJCWludCBjb2RlID0gZGlhbG9nLm9wZW4oKTsKLQkJCQlpZiAoY29kZSA9PSBJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKSB7Ci0JCQkJCVN0cmluZyB2YXJpYWJsZSA9IGRpYWxvZy5nZXRWYXJpYWJsZUV4cHJlc3Npb24oKTsKLQkJCQkJaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKLQkJCQkJCXRleHQuaW5zZXJ0KHZhcmlhYmxlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0KLQkJY29udHJvbExpc3QuYWRkKHRleHQpOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29tYm9GaWVsZChTdHJpbmcgbGFiZWxUZXh0LCBpbnQgaW5pdGlhbFZhbHVlLAotCQkJU3RyaW5nW10gaXRlbXMpIHsKLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFuZWwsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChsYWJlbFRleHQpOwotCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORykpOwotCi0JCUNvbXBvc2l0ZSBjb21wID0gbmV3IENvbXBvc2l0ZShwYW5lbCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQljb21wLnNldExheW91dChsYXlvdXQpOwotCQljb21wLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCi0JCWZpbmFsIENvbWJvIGNvbWJvID0gbmV3IENvbWJvKGNvbXAsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSCi0JCQkJfCBTV1QuUkVBRF9PTkxZKTsKLQkJLy8gR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQkvLyBkYXRhLndpZHRoSGludCA9IDIwMDsKLQkJLy8gY29tYm8uc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQljb21iby5zZXREYXRhKEZJRUxEX05BTUUsIGxhYmVsVGV4dCk7Ci0KLQkJLy8gbWFrZSBzdXJlIHJvd3MgYXJlIHRoZSBzYW1lIGhlaWdodCBvbiBib3RoIHBhbmVscy4KLQkJbGFiZWwuc2V0U2l6ZShsYWJlbC5nZXRTaXplKCkueCwgY29tYm8uZ2V0U2l6ZSgpLnkpOwotCi0JCWNvbWJvLnNldEl0ZW1zKGl0ZW1zKTsKLQkJY29tYm8uc2VsZWN0KGluaXRpYWxWYWx1ZSk7Ci0KLQkJY29udHJvbExpc3QuYWRkKGNvbWJvKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCWZvciAoSXRlcmF0b3I8U2Nyb2xsYWJsZT4gaSA9IGNvbnRyb2xMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykgewotCQkJQ29udHJvbCBjb250cm9sID0gaS5uZXh0KCk7Ci0JCQlpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHQpIHsKLQkJCQl2YWx1ZU1hcC5wdXQoY29udHJvbC5nZXREYXRhKEZJRUxEX05BTUUpLCAoKFRleHQpIGNvbnRyb2wpCi0JCQkJCQkuZ2V0VGV4dCgpKTsKLQkJCX0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbWJvKSB7Ci0JCQkJQ29tYm8gY29tYm8gPSAoQ29tYm8pIGNvbnRyb2w7Ci0JCQkJdmFsdWVNYXAucHV0KGNvbnRyb2wuZ2V0RGF0YShGSUVMRF9OQU1FKSwgSW50ZWdlci52YWx1ZU9mKGNvbWJvCi0JCQkJCQkuZ2V0U2VsZWN0aW9uSW5kZXgoKSkpOwotCQkJfQotCQl9Ci0JCWNvbnRyb2xMaXN0ID0gbnVsbDsKLQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBvcGVuKCkgewotCQlhcHBseURpYWxvZ0ZvbnQocGFuZWwpOwotCQlyZXR1cm4gc3VwZXIub3BlbigpOwotCX0KLQotCXByb3RlY3RlZCBPYmplY3QgZ2V0VmFsdWUoU3RyaW5nIGtleSkgewotCQlyZXR1cm4gdmFsdWVNYXAuZ2V0KGtleSk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRTdHJpbmdWYWx1ZShTdHJpbmcga2V5KSB7Ci0JCXJldHVybiAoU3RyaW5nKSBnZXRWYWx1ZShrZXkpOwotCX0KLQotCXByb3RlY3RlZCBpbnQgZ2V0SW50VmFsdWUoU3RyaW5nIGtleSkgewotCQlyZXR1cm4gKChJbnRlZ2VyKSBnZXRWYWx1ZShrZXkpKS5pbnRWYWx1ZSgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHZhbGlkYXRlRmllbGRzKCkgewotCQlmb3IgKEl0ZXJhdG9yPFZhbGlkYXRvcj4gaSA9IHZhbGlkYXRvcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7KSB7Ci0JCQlWYWxpZGF0b3IgdmFsaWRhdG9yID0gaS5uZXh0KCk7Ci0JCQlpZiAoIXZhbGlkYXRvci52YWxpZGF0ZSgpKSB7Ci0JCQkJZ2V0QnV0dG9uKElEaWFsb2dDb25zdGFudHMuT0tfSUQpLnNldEVuYWJsZWQoZmFsc2UpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlnZXRCdXR0b24oSURpYWxvZ0NvbnN0YW50cy5PS19JRCkuc2V0RW5hYmxlZCh0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkgewotCQlyZXR1cm4gWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQgKyAiLk1VTFRJUExFX0lOUFVUX0RJQUxPRyI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ0JvdW5kc1NldHRpbmdzKCkgewotCQlJRGlhbG9nU2V0dGluZ3Mgc2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKQotCQkJCS5nZXREaWFsb2dTZXR0aW5ncygpOwotCQlJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbiA9IHNldHRpbmdzCi0JCQkJLmdldFNlY3Rpb24oZ2V0RGlhbG9nU2V0dGluZ3NTZWN0aW9uTmFtZSgpKTsKLQkJaWYgKHNlY3Rpb24gPT0gbnVsbCkgewotCQkJc2VjdGlvbiA9IHNldHRpbmdzLmFkZE5ld1NlY3Rpb24oZ2V0RGlhbG9nU2V0dGluZ3NTZWN0aW9uTmFtZSgpKTsKLQkJfQotCQlyZXR1cm4gc2VjdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEZpZWxkU3VtbWFyeSB7Ci0JCWludCBpbml0aWFsSW5kZXg7Ci0JCWludCB0eXBlOwotCQlTdHJpbmcgbmFtZTsKLQkJU3RyaW5nIGluaXRpYWxWYWx1ZTsKLQkJYm9vbGVhbiBhbGxvd3NFbXB0eTsKLQkJU3RyaW5nW10gaXRlbXM7Ci0KLQkJcHVibGljIEZpZWxkU3VtbWFyeShpbnQgdHlwZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBpbml0aWFsVmFsdWUsCi0JCQkJYm9vbGVhbiBhbGxvd3NFbXB0eSkgewotCQkJdGhpcy50eXBlID0gdHlwZTsKLQkJCXRoaXMubmFtZSA9IG5hbWU7Ci0JCQl0aGlzLmluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZTsKLQkJCXRoaXMuYWxsb3dzRW1wdHkgPSBhbGxvd3NFbXB0eTsKLQkJfQotCi0JCXB1YmxpYyBGaWVsZFN1bW1hcnkoaW50IHR5cGUsIFN0cmluZyBuYW1lLCBTdHJpbmdbXSBpdGVtcywKLQkJCQlpbnQgaW5pdGlhbEluZGV4KSB7Ci0JCQl0aGlzLnR5cGUgPSB0eXBlOwotCQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJCXRoaXMuaXRlbXMgPSBpdGVtczsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBjbGFzcyBWYWxpZGF0b3IgewotCQlib29sZWFuIHZhbGlkYXRlKCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL09wZW5EaWFsb2dBY3Rpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9hY3Rpb25zL09wZW5EaWFsb2dBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliYWY0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9PcGVuRGlhbG9nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlcjsKLQotLyoqCi0gKiBBbiBhY3Rpb24gdGhhdCBvcGVucyBhIGRpYWxvZy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgT3BlbkRpYWxvZ0FjdGlvbiBleHRlbmRzIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbiB7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFTVF9QQVRIX1NFVFRJTkcgPSAiTEFTVF9QQVRIX1NFVFRJTkciOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBTdHJpbmcgZlByZWZpeCA9IG51bGw7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcwotCSAqIAotCSAqIEBwYXJhbSBsYWJlbAotCSAqICAgICAgICAgICAgdGhlIGRpYWxvZyB0aXRsZQotCSAqIEBwYXJhbSB2aWV3ZXIKLQkgKiAgICAgICAgICAgIGEgdmlld2VyIHRoYXQgdGhpcyBkaWFsb2cgaXMgYXNzb2NpYXRlZCB3aXRoCi0JICogQHBhcmFtIGRpYWxvZ1NldHRpbmdzUHJlZml4Ci0JICogICAgICAgICAgICB0aGUgcHJlZml4IHRvIHVzZSBmb3Igc2F2aW5nIGRpYWxvZyBwcmVmZXJlbmNlcwotCSAqLwotCXB1YmxpYyBPcGVuRGlhbG9nQWN0aW9uKFN0cmluZyBsYWJlbCwgU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIsCi0JCQlTdHJpbmcgZGlhbG9nU2V0dGluZ3NQcmVmaXgpIHsKLQkJc3VwZXIobGFiZWwsIHZpZXdlcik7Ci0JCWZQcmVmaXggPSBkaWFsb2dTZXR0aW5nc1ByZWZpeDsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERpYWxvZ1NldHRpbmdzUHJlZml4KCkgewotCQlyZXR1cm4gZlByZWZpeDsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERpYWxvZ1NldHRpbmcoU3RyaW5nIHNldHRpbmdOYW1lKSB7Ci0JCXJldHVybiBnZXREaWFsb2dTZXR0aW5ncygpLmdldCgKLQkJCQlnZXREaWFsb2dTZXR0aW5nc1ByZWZpeCgpICsgIi4iICsgc2V0dGluZ05hbWUpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0RGlhbG9nU2V0dGluZyhTdHJpbmcgc2V0dGluZ05hbWUsIFN0cmluZyB2YWx1ZSkgewotCQlnZXREaWFsb2dTZXR0aW5ncygpLnB1dCgKLQkJCQlnZXREaWFsb2dTZXR0aW5nc1ByZWZpeCgpICsgIi4iICsgc2V0dGluZ05hbWUsIHZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nU2V0dGluZ3MoKSB7Ci0JCUlEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncyA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JCXJldHVybiBzZXR0aW5nczsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgaW50IGdldEFjdGlvblR5cGUoKSB7Ci0JCXJldHVybiBBREQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvUmVtb3ZlQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9SZW1vdmVBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YwZDA1Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9SZW1vdmVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1NzcyIC0gTkxTIE1lc3NhZ2UgcmVmYWN0b3JpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi0vKioKLSAqIEFuIGFjdGlvbiB0aGF0IHJlbW92ZXMgYSBzZWxlY3Rpb24gZnJvbSBhIHZpZXdlci4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgUmVtb3ZlQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uIHsKLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdmlld2VyCi0JICogICAgICAgICAgICB0aGUgdmlld2VyIHRoYXQgd2lsbCBoYXZlIGl0cyBzZWxlY3Rpb24gcmVtb3ZlZAotCSAqLwotCXB1YmxpYyBSZW1vdmVBY3Rpb24oU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIpIHsKLQkJc3VwZXIoTWVzc2FnZXMuUmVtb3ZlQWN0aW9uX1RleHQsIHZpZXdlcik7Ci0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFZpZXdlcigpCi0JCQkJLmdldFZpZXdlcigpLmdldFNlbGVjdGlvbigpOwotCQlnZXRWaWV3ZXIoKS5yZW1vdmVFbnRyaWVzKAotCQkJCShMYXVuY2hUcmFuc2Zvcm1bXSkgc2VsZWN0aW9uLnRvTGlzdCgpLnRvQXJyYXkoCi0JCQkJCQluZXcgTGF1bmNoVHJhbnNmb3JtWzBdKSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlU2VsZWN0aW9uKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlpZiAoc2VsZWN0aW9uLmlzRW1wdHkoKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiBnZXRWaWV3ZXIoKS51cGRhdGVTZWxlY3Rpb24oZ2V0QWN0aW9uVHlwZSgpLCBzZWxlY3Rpb24pOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBpbnQgZ2V0QWN0aW9uVHlwZSgpIHsKLQkJcmV0dXJuIE1PVkU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL2FjdGlvbnMvUmVtb3ZlUGFyYW1ldGVyQWN0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9SZW1vdmVQYXJhbWV0ZXJBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU5NTE2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYWN0aW9ucy9SZW1vdmVQYXJhbWV0ZXJBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1NzcyIC0gTkxTIE1lc3NhZ2UgcmVmYWN0b3JpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uUGFyYW1ldGVyVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci0KLS8qKgotICogQW4gYWN0aW9uIHRoYXQgcmVtb3ZlcyBhIHNlbGVjdGlvbiBmcm9tIGEgdmlld2VyLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW1vdmVQYXJhbWV0ZXJBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdFBhcmFtZXRlckFjdGlvbiB7Ci0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqICAgICAgICAgICAgdGhlIHZpZXdlciB0aGF0IHdpbGwgaGF2ZSBpdHMgc2VsZWN0aW9uIHJlbW92ZWQKLQkgKi8KLQlwdWJsaWMgUmVtb3ZlUGFyYW1ldGVyQWN0aW9uKFBhcmFtZXRlclZpZXdlciB2aWV3ZXIpIHsKLQkJc3VwZXIoTWVzc2FnZXMuUmVtb3ZlUGFyYW1ldGVyQWN0aW9uLCB2aWV3ZXIpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gZ2V0U3RydWN0dXJlZFNlbGVjdGlvbigpOwotCQlpZiAoc2VsLnNpemUoKSA+IDApIHsKLQkJCUxhdW5jaEF0dHJpYnV0ZVtdIGVudHJpZXMgPSBuZXcgTGF1bmNoQXR0cmlidXRlW3NlbC5zaXplKCldOwotCQkJaW50IGkgPSAwOwotCQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyID0gc2VsLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOyBpKyspIHsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgYXR0ID0gKExhdW5jaEF0dHJpYnV0ZSkgaXRlci5uZXh0KCk7Ci0JCQkJZW50cmllc1tpXSA9IGF0dDsKLQkJCX0KLQkJCWdldFZpZXdlcigpLnJlbW92ZUVudHJpZXMoZW50cmllcyk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvYnJlYWtwb2ludC9YU0xCcmVha3BvaW50UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9icmVha3BvaW50L1hTTEJyZWFrcG9pbnRQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTVhMzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9icmVha3BvaW50L1hTTEJyZWFrcG9pbnRQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1NzcyIC0gTkxTIE1lc3NhZ2UgcmVmYWN0b3JpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmJyZWFrcG9pbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkUmVzb3VyY2VNYXJrZXJBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5leHRlbnNpb25zLklTb3VyY2VFZGl0aW5nVGV4dFRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5icmVha3BvaW50LklCcmVha3BvaW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMTGluZUJyZWFrcG9pbnQ7Ci0KLS8qKgotICogQW4gU1NFIDxjb2RlPklCcmVha3BvaW50UHJvdmlkZXI8L2NvZGU+IGZvciBYU0wgZmlsZXMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFhTTEJyZWFrcG9pbnRQcm92aWRlciBpbXBsZW1lbnRzIElCcmVha3BvaW50UHJvdmlkZXIsCi0JCUlFeGVjdXRhYmxlRXh0ZW5zaW9uIHsKLQlwdWJsaWMgSVN0YXR1cyBhZGRCcmVha3BvaW50KElEb2N1bWVudCBkb2N1bWVudCwgSUVkaXRvcklucHV0IGlucHV0LAotCQkJaW50IGVkaXRvckxpbmVOdW1iZXIsIGludCBvZmZzZXQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSB2YWxpZCBwb3NpdGlvbiB0byBzZXQgYnJlYWtwb2ludAotCQlpbnQgcG9zID0gZ2V0VmFsaWRQb3NpdGlvbihkb2N1bWVudCwgZWRpdG9yTGluZU51bWJlcik7Ci0JCUlTdGF0dXMgc3RhdHVzID0gbnVsbDsKLQkJaWYgKHBvcyA+PSAwKSB7Ci0JCQlJUmVzb3VyY2UgcmVzID0gZ2V0UmVzb3VyY2VGcm9tSW5wdXQoaW5wdXQpOwotCQkJaWYgKHJlcyAhPSBudWxsKSB7Ci0JCQkJYm9vbGVhbiBhZGQgPSB0cnVlOwotCQkJCWlmIChhZGQpIHsKLQkJCQkJSUJyZWFrcG9pbnQgcG9pbnQgPSBuZXcgWFNMTGluZUJyZWFrcG9pbnQocmVzLAotCQkJCQkJCWVkaXRvckxpbmVOdW1iZXIsIHBvcywgcG9zKTsKLQkJCQkJaWYgKHBvaW50ID09IG51bGwpIHsKLQkJCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCQkJCU1lc3NhZ2VzLlhTTEJyZWFrcG9pbnRQcm92aWRlcl8wLCBudWxsKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8vIERlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCcmVha3BvaW50TWFuYWdlcigpLmFkZEJyZWFrcG9pbnQocG9pbnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIElTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQlyZXMgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCVN0cmluZyBpZCA9IGlucHV0LmdldE5hbWUoKTsKLQkJCQlpZiAoaW5wdXQgaW5zdGFuY2VvZiBJU3RvcmFnZUVkaXRvcklucHV0Ci0JCQkJCQkmJiAoKElTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRTdG9yYWdlKCkgIT0gbnVsbAotCQkJCQkJJiYgKChJU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dCkuZ2V0U3RvcmFnZSgpCi0JCQkJCQkJCS5nZXRGdWxsUGF0aCgpICE9IG51bGwpIHsKLQkJCQkJaWQgPSAoKElTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRTdG9yYWdlKCkKLQkJCQkJCQkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQkJCQlhdHRyaWJ1dGVzCi0JCQkJCQkucHV0KAotCQkJCQkJCQlTdHJ1Y3R1cmVkUmVzb3VyY2VNYXJrZXJBbm5vdGF0aW9uTW9kZWwuU0VDT05EQVJZX0lEX0tFWSwKLQkJCQkJCQkJaWQpOwotCQkJCUlCcmVha3BvaW50IHBvaW50ID0gbmV3IFhTTExpbmVCcmVha3BvaW50KHJlcywKLQkJCQkJCWVkaXRvckxpbmVOdW1iZXIsIHBvcywgcG9zKTsKLQkJCQlpZiAocG9pbnQgPT0gbnVsbCkgewotCQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCQkJTWVzc2FnZXMuWFNMQnJlYWtwb2ludFByb3ZpZGVyXzAsIG51bGwpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoc3RhdHVzID09IG51bGwpIHsKLQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsCi0JCQkJCUlTdGF0dXMuT0ssICJKU1BVSU1lc3NhZ2VzLk9LIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXB1YmxpYyBJUmVzb3VyY2UgZ2V0UmVzb3VyY2UoSUVkaXRvcklucHV0IGlucHV0KSB7Ci0JCXJldHVybiBnZXRSZXNvdXJjZUZyb21JbnB1dChpbnB1dCk7Ci0JfQotCi0JcHJpdmF0ZSBJUmVzb3VyY2UgZ2V0UmVzb3VyY2VGcm9tSW5wdXQoSUVkaXRvcklucHV0IGlucHV0KSB7Ci0JCUlSZXNvdXJjZSByZXNvdXJjZSA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSUZpbGUuY2xhc3MpOwotCQlpZiAocmVzb3VyY2UgPT0gbnVsbCkgewotCQkJcmVzb3VyY2UgPSAoSVJlc291cmNlKSBpbnB1dC5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCX0KLQkJcmV0dXJuIHJlc291cmNlOwotCX0KLQotCXByaXZhdGUgaW50IGdldFZhbGlkUG9zaXRpb24oSURvY3VtZW50IGlkb2MsIGludCBlZGl0b3JMaW5lTnVtYmVyKSB7Ci0JCWludCByZXN1bHQgPSAtMTsKLQkJaWYgKGlkb2MgIT0gbnVsbCkgewotCQkJaW50IHN0YXJ0T2Zmc2V0ID0gMDsKLQkJCWludCBlbmRPZmZzZXQgPSAwOwotCQkJdHJ5IHsKLQkJCQlJUmVnaW9uIGxpbmUgPSBpZG9jLmdldExpbmVJbmZvcm1hdGlvbihlZGl0b3JMaW5lTnVtYmVyIC0gMSk7Ci0JCQkJc3RhcnRPZmZzZXQgPSBsaW5lLmdldE9mZnNldCgpOwotCQkJCWVuZE9mZnNldCA9IE1hdGgubWF4KGxpbmUuZ2V0T2Zmc2V0KCksIGxpbmUuZ2V0T2Zmc2V0KCkKLQkJCQkJCSsgbGluZS5nZXRMZW5ndGgoKSk7Ci0KLQkJCQlTdHJpbmcgbGluZVRleHQgPSBpZG9jCi0JCQkJCQkuZ2V0KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCkudHJpbSgpOwotCi0JCQkJLy8gYmxhbmsgbGluZXMgb3IgUEkncyBjYW5ub3QgaGF2ZSBicmVha3BvaW50cwotCQkJCWlmIChsaW5lVGV4dC50cmltKCkuZXF1YWxzKCIiKSB8fCBsaW5lVGV4dC5zdGFydHNXaXRoKCI8PyIpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl7Ci0JCQkJCXJlc3VsdCA9IC0xOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8vIGdldCBhbGwgcGFydGl0aW9ucyBmb3IgY3VycmVudCBsaW5lCi0JCQkJCUlUeXBlZFJlZ2lvbltdIHBhcnRpdGlvbnMgPSBudWxsOwotCi0JCQkJCXBhcnRpdGlvbnMgPSBpZG9jLmNvbXB1dGVQYXJ0aXRpb25pbmcoc3RhcnRPZmZzZXQsCi0JCQkJCQkJZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwotCi0JCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7ICsraSkgewotCQkJCQkJLy8gU3RyaW5nIHR5cGUgPSBwYXJ0aXRpb25zW2ldLmdldFR5cGUoKTsKLQkJCQkJCXJlc3VsdCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJcmVzdWx0ID0gLTE7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRJbml0aWFsaXphdGlvbkRhdGEoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZywKLQkJCVN0cmluZyBwcm9wZXJ0eU5hbWUsIE9iamVjdCBkYXRhKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIG5vdCB1c2VkCi0JfQotCi0JcHVibGljIHZvaWQgc2V0U291cmNlRWRpdGluZ1RleHRUb29scyhJU291cmNlRWRpdGluZ1RleHRUb29scyB0b29scykgewotCQkvLyBub3QgdXNlZAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNWU2YzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotUmVzb3VyY2VTZWxlY3Rpb25CbG9ja18wPUZpbGU6Ci1YU0xMYXVuY2hTaG9ydGN1dF8wPVNlbGVjdCBhbiBpbnB1dCBmaWxlIGZvciB0aGUgdHJhbnNmb3JtYXRpb24KLVhTTExhdW5jaFNob3J0Y3V0XzE9SW5wdXQgRmlsZQotWFNMTGF1bmNoU2hvcnRjdXRfMj1TZWxlY3QgYSBMYXVuY2ggQ29uZmlndXJhdGlvbgotWFNMTGF1bmNoU2hvcnRjdXRfNj1FcnJvcgotWFNMU2VsZWN0RXhpc3Rpbmc9JlNlbGVjdCBleGlzdGluZyBjb25maWd1cmF0aW9uOgotI0FjdGlvbiBNZXNzYWdlcwotUmVtb3ZlQWN0aW9uX1RleHQ9UmVtb3ZlCi1BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX1RleHQ9QWRkIEZpbGVzCi1BZGRFeHRlcm5hbEZpbGVBY3Rpb25fVGV4dD1BZGQgRXh0ZXJuYWwgRmlsZXMKLU1vdmVEb3duQWN0aW9uX1RleHQ9TW92ZSBEb3duCi1Nb3ZlVXBBY3Rpb25fVGV4dD1Nb3ZlIFVwCi1BZGRFeHRlcm5hbEZpbGVBY3Rpb25fU2VsZWN0aW9uXzM9Ci1BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uX0RpYWxvZ01lc3NhZ2U9Q2hvb3NlIFN0eWxlc2hlZXQKLUFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fRGlhbG9nVGl0bGU9Ci1BZGRQYXJhbWV0ZXJBY3Rpb249QWRkIFBhcmFtZXRlcgotUmVtb3ZlUGFyYW1ldGVyQWN0aW9uPVJlbW92ZSBQYXJhbWV0ZXIKLVZhcmlhYmxlc0ZpZWxkQnV0dG9uX1RleHQ9VmFyaWFibGVzLi4uCi1BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nPUFkZCBYU0xUIFBhcmFtZXRlcgotQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19OYW1lPU5hbWU6Ci1BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nX1R5cGU9VHlwZToKLUFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2dfVmFsdWU9VmFsdWU6Ci0jQnJlYWtwb2ludAotWFNMQnJlYWtwb2ludFByb3ZpZGVyXzA9dW5zdXBwb3J0ZWQgaW5wdXQgdHlwZQotCi1TdHlsZXNoZWV0RW50cnlMYWJlbFByb3ZpZGVyX0ludmFsaWRfcGF0aD1JbnZhbGlkIHBhdGgKLVhTTE1haW5UYWJfVGFiTmFtZT1NYWluCi0KLVRyYW5zZm9ybXNCbG9ja18wPVRyYW5zZm9ybXNCbG9jawotVHJhbnNmb3Jtc0Jsb2NrX05hbWU9VHJhbnNmb3JtYXRpb24gUGlwZWxpbmUKLVRyYW5zZm9ybXNCbG9ja19QYXJhbWV0ZXJzTGFiZWw9UGFyYW1ldGVycyBmb3Igc3R5bGVzaGVldDoKLVRyYW5zZm9ybXNCbG9ja19TdHlsZXNoZWV0c0xhYmVsPVN0eWxlc2hlZXRzOgotCi1JbnB1dEZpbGVCbG9ja19ESVJFQ1RPUllfTk9UX1NQRUNJRklFRD1JbnB1dCBmaWxlIG5vdCBzcGVjaWZpZWQKLUlucHV0RmlsZUJsb2NrX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVD1JbnB1dCBmaWxlIGRvZXMgbm90IGV4aXN0Ci1JbnB1dEZpbGVCbG9ja19HUk9VUF9OQU1FPVhNTCBJbnB1dCBGaWxlCi1JbnB1dEZpbGVCbG9ja19ERUZBVUxUX1JBRElPPVVzZSBkZWZhdWx0Ci1JbnB1dEZpbGVCbG9ja19PVEhFUl9SQURJTz1PdGhlcgotSW5wdXRGaWxlQmxvY2tfRElBTE9HX01FU1NBR0U9U2VsZWN0IGFuIGV4dGVybmFsIGlucHV0IGZpbGUKLUlucHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfTUVTU0FHRT1TZWxlY3QgYW4gaW5wdXQgZmlsZSBmcm9tIHRoZSB3b3Jrc3BhY2UKLUlucHV0RmlsZUJsb2NrX1ZBUklBQkxFU19CVVRUT049VmFyaWFibGVzLi4uCi1JbnB1dEZpbGVCbG9ja19GSUxFX1NZU1RFTV9CVVRUT049RmlsZSBTeXN0ZW0uLi4KLUlucHV0RmlsZUJsb2NrX1dPUktTUEFDRV9CVVRUT049V29ya3NwYWNlLi4uCi1JbnB1dEZpbGVCbG9ja19PUEVORklMRVNfQlVUVE9OPU9wZW4gRmlsZXMuLi4KLUlucHV0RmlsZUJsb2NrX09QRU5GSUxFU19ESUFMT0c9U2VsZWN0IEZpbGUKLUlucHV0RmlsZUJsb2NrX05hbWU9WE1MIElucHV0IEZpbGUKLUlucHV0RmlsZUJsb2NrX0V4Y2VwdGlvbl9vY2N1cnJlZF9yZWFkaW5nX2NvbmZpZ3VyYXRpb249RXhjZXB0aW9uIG9jY3VycmVkIHJlYWRpbmcgY29uZmlndXJhdGlvbgotSW5wdXRGaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19USVRMRT1GaWxlIFNlbGVjdGlvbgotCi1SZW1vdmVBY3Rpb25fVGV4dD1SZW1vdmUKLUFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fVGV4dD1BZGQgRmlsZXMKLUFkZEV4dGVybmFsRmlsZUFjdGlvbl9UZXh0PUFkZCBFeHRlcm5hbCBGaWxlcwotTW92ZURvd25BY3Rpb25fVGV4dD1Nb3ZlIERvd24KLU1vdmVVcEFjdGlvbl9UZXh0PU1vdmUgVXAKLUFkZEV4dGVybmFsRmlsZUFjdGlvbl9TZWxlY3Rpb25fMz0KLUFkZFdvcmtzcGFjZUZpbGVBY3Rpb25fRGlhbG9nTWVzc2FnZT1DaG9vc2UgU3R5bGVzaGVldAotQWRkV29ya3NwYWNlRmlsZUFjdGlvbl9EaWFsb2dUaXRsZT0KLUFkZFBhcmFtZXRlckFjdGlvbj1BZGQgUGFyYW1ldGVyCi1SZW1vdmVQYXJhbWV0ZXJBY3Rpb249UmVtb3ZlIFBhcmFtZXRlcgotVmFyaWFibGVzRmllbGRCdXR0b25fVGV4dD1WYXJpYWJsZXMuLi4KLUFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2c9QWRkIFhTTFQgUGFyYW1ldGVyCi1BZGRQYXJhbWV0ZXJBY3Rpb25fRGlhbG9nX05hbWU9TmFtZToKLUFkZFBhcmFtZXRlckFjdGlvbl9EaWFsb2dfVHlwZT1UeXBlOgotQWRkUGFyYW1ldGVyQWN0aW9uX0RpYWxvZ19WYWx1ZT1WYWx1ZToKLQotUGFyYW1ldGVyc0Jsb2NrXzA9TmFtZQotUGFyYW1ldGVyc0Jsb2NrXzE9VHlwZQotUGFyYW1ldGVyc0Jsb2NrXzEwPXR5cGUKLVBhcmFtZXRlcnNCbG9ja18xMT12YWx1ZQotUGFyYW1ldGVyc0Jsb2NrXzI9VmFsdWUKLVBhcmFtZXRlcnNCbG9ja18zPW5hbWUKLVBhcmFtZXRlcnNCbG9ja180PXR5cGUKLVBhcmFtZXRlcnNCbG9ja181PXZhbHVlCi1QYXJhbWV0ZXJzQmxvY2tfNj10eXBlCi1QYXJhbWV0ZXJzQmxvY2tfNz12YWx1ZQotUGFyYW1ldGVyc0Jsb2NrXzg9dHlwZQotUGFyYW1ldGVyc0Jsb2NrXzk9VHJhbnNmb3JtYXRpb24gUGFyYW1ldGVycwotCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMD1Vc2UgcHJvcGVydGllcyBmcm9tIHByZWZlcmVuY2VzCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMT1DaGFuZ2UgUHJlZmVyZW5jZXMuLi4KLU91dHB1dFByb3BlcnRpZXNCbG9ja18xMz1PdXRwdXQgUHJvcGVydGllcwotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzM9VXNlIHNwZWNpZmljIHByb3BlcnRpZXMKLU91dHB1dFByb3BlcnRpZXNCbG9ja180PVByb3BlcnR5Ci1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfNT1WYWx1ZQotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzc9cHJvcGVydHkKLU91dHB1dFByb3BlcnRpZXNCbG9ja184PXZhbHVlCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfOT12YWx1ZQotT3V0cHV0VGFiXzA9T3V0cHV0IFByb3BlcnRpZXMKLU91dHB1dFRhYl8xPU91dHB1dAotCi0KLQotT3V0cHV0VHlwZUJsb2NrX0dyb3VwX05hbWU9T3V0cHV0IFR5cGUKLU91dHB1dEZpbGVCbG9ja18wPVVzZSBkZWZhdWx0IGxvY2F0aW9uCi1PdXRwdXRGaWxlQmxvY2tfMT1GaWxlbmFtZQotT3V0cHV0RmlsZUJsb2NrXzI9Rm9ybWF0IGZpbGUgb24gY29tcGxldGlvbgotT3V0cHV0RmlsZUJsb2NrXzc9TG9jYXRpb246Ci1PdXRwdXRGaWxlQmxvY2tfOD1PcGVuIGZpbGUgb24gY29tcGxldGlvbgotT3V0cHV0RmlsZUJsb2NrXzk9T3V0cHV0IEZpbGUKLU91dHB1dEZpbGVCbG9ja19ESVJFQ1RPUllfTk9UX1NQRUNJRklFRD1UcmFuc2Zvcm0gb3V0cHV0IGZpbGUgbm90IHNwZWNpZmllZAotT3V0cHV0RmlsZUJsb2NrX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVD1UcmFuc2Zvcm0gb3V0cHV0IGZpbGUgZG9lcyBub3QgZXhpc3QKLU91dHB1dEZpbGVCbG9ja19HUk9VUF9OQU1FPVRyYW5zZm9ybSBPdXRwdXQgRmlsZQotT3V0cHV0RmlsZUJsb2NrX0RFRkFVTFRfUkFESU89RGVmYXVsdAotT3V0cHV0RmlsZUJsb2NrX09USEVSX1JBRElPPU90aGVyCi1PdXRwdXRGaWxlQmxvY2tfRElBTE9HX01FU1NBR0U9U2VsZWN0IGFuIGV4dGVybmFsIG91dHB1dCBmaWxlCi1PdXRwdXRGaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19NRVNTQUdFPVNlbGVjdCBhbiBvdXRwdXQgZmlsZSBmcm9tIHRoZSB3b3Jrc3BhY2UKLU91dHB1dEZpbGVCbG9ja19WQVJJQUJMRVNfQlVUVE9OPVZhcmlhYmxlcy4uLgotT3V0cHV0RmlsZUJsb2NrX0ZJTEVfU1lTVEVNX0JVVFRPTj1GaWxlIFN5c3RlbS4uLgotT3V0cHV0RmlsZUJsb2NrX1dPUktTUEFDRV9CVVRUT049V29ya3NwYWNlLi4uCi1PdXRwdXRGaWxlQmxvY2tfTmFtZT1UcmFuc2Zvcm0gT3V0cHV0IEZpbGUKLU91dHB1dEZpbGVCbG9ja19FeGNlcHRpb25fb2NjdXJyZWRfcmVhZGluZ19jb25maWd1cmF0aW9uPUV4Y2VwdGlvbiBvY2N1cnJlZCByZWFkaW5nIGNvbmZpZ3VyYXRpb24KLU91dHB1dEZpbGVCbG9ja19FeGNlcHRpb25fb2NjdXJyZWRfc2F2aW5nX2NvbmZpZ3VyYXRpb249RXhjZXB0aW9uIG9jY3VycmVkIHNhdmluZyBsYXVuY2ggY29uZmlndXJhdGlvbgotT3V0cHV0RmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfVElUTEU9RmlsZSBTZWxlY3Rpb24KLQotT3V0cHV0Rk9GaWxlQmxvY2tfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ9UmVuZGVyZXIgb3V0cHV0IGZpbGUgbm90IHNwZWNpZmllZAotT3V0cHV0Rk9GaWxlQmxvY2tfRElSRUNUT1JZX0RPRVNfTk9UX0VYSVNUPVJlbmRlcmVyIG91dHB1dCBmaWxlIGRvZXMgbm90IGV4aXN0Ci1PdXRwdXRGT0ZpbGVCbG9ja19HUk9VUF9OQU1FPVJlbmRlcmVyIE91dHB1dCBGaWxlCi1PdXRwdXRGT0ZpbGVCbG9ja19ERUZBVUxUX1JBRElPPURlZmF1bHQKLU91dHB1dEZPRmlsZUJsb2NrX09USEVSX1JBRElPPU90aGVyCi1PdXRwdXRGT0ZpbGVCbG9ja19ESUFMT0dfTUVTU0FHRT1TZWxlY3QgYW4gZXh0ZXJuYWwgb3V0cHV0IGZpbGUKLU91dHB1dEZPRmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfTUVTU0FHRT1TZWxlY3QgYW4gb3V0cHV0IGZpbGUgZnJvbSB0aGUgd29ya3NwYWNlCi1PdXRwdXRGT0ZpbGVCbG9ja19WQVJJQUJMRVNfQlVUVE9OPVZhcmlhYmxlcy4uLgotT3V0cHV0Rk9GaWxlQmxvY2tfRklMRV9TWVNURU1fQlVUVE9OPUZpbGUgU3lzdGVtLi4uCi1PdXRwdXRGT0ZpbGVCbG9ja19XT1JLU1BBQ0VfQlVUVE9OPVdvcmtzcGFjZS4uLgotT3V0cHV0Rk9GaWxlQmxvY2tfTmFtZT1SZW5kZXJlciBPdXRwdXQgRmlsZQotT3V0cHV0Rk9GaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3JlYWRpbmdfY29uZmlndXJhdGlvbj1FeGNlcHRpb24gb2NjdXJyZWQgcmVhZGluZyBjb25maWd1cmF0aW9uCi1PdXRwdXRGT0ZpbGVCbG9ja19FeGNlcHRpb25fb2NjdXJyZWRfc2F2aW5nX2NvbmZpZ3VyYXRpb249RXhjZXB0aW9uIG9jY3VycmVkIHNhdmluZyBsYXVuY2ggY29uZmlndXJhdGlvbgotT3V0cHV0Rk9GaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19USVRMRT1GaWxlIFNlbGVjdGlvbgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbW9kZWwvWFNMQnJlYWtwb2ludEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbW9kZWwvWFNMQnJlYWtwb2ludEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NjRmMGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21vZGVsL1hTTEJyZWFrcG9pbnRBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLmFjdGlvbnMuSVRvZ2dsZUJyZWFrcG9pbnRzVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci0KLS8qKgotICogQ3JlYXRlcyBhIHRvZ2dsZSBicmVha3BvaW50IGFkYXB0ZXIKLSAqLwotcHVibGljIGNsYXNzIFhTTEJyZWFrcG9pbnRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIElBZGFwdGVyRmFjdG9yeSB7Ci0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7Ci0JCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikgewotCQkJSVRleHRFZGl0b3IgZWRpdG9yUGFydCA9IChJVGV4dEVkaXRvcikgYWRhcHRhYmxlT2JqZWN0OwotCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpCi0JCQkJCS5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCQlpZiAocmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIElGaWxlKSB7Ci0JCQkJaWYgKFhTTENvcmUuaXNYU0xGaWxlKChJRmlsZSkgcmVzb3VyY2UpKSB7Ci0JCQkJCXJldHVybiBuZXcgWFNMTGluZUJyZWFrcG9pbnRBZGFwdGVyKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBDbGFzc1tdIGdldEFkYXB0ZXJMaXN0KCkgewotCQlyZXR1cm4gbmV3IENsYXNzW10geyBJVG9nZ2xlQnJlYWtwb2ludHNUYXJnZXQuY2xhc3MgfTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbW9kZWwvWFNMTGluZUJyZWFrcG9pbnRBZGFwdGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbW9kZWwvWFNMTGluZUJyZWFrcG9pbnRBZGFwdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZWVlYWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL21vZGVsL1hTTExpbmVCcmVha3BvaW50QWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklCcmVha3BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUxpbmVCcmVha3BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLmFjdGlvbnMuSVRvZ2dsZUJyZWFrcG9pbnRzVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuSVhTTENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xMaW5lQnJlYWtwb2ludDsKLQotLyoqCi0gKiBBbiA8Y29kZT5JVG9nZ2xlQnJlYWtwb2ludHNUYXJnZXQ8L2NvZGU+IGZvciBYU0wgYnJlYWtwb2ludHMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFhTTExpbmVCcmVha3BvaW50QWRhcHRlciBpbXBsZW1lbnRzIElUb2dnbGVCcmVha3BvaW50c1RhcmdldCB7Ci0JcHVibGljIHZvaWQgdG9nZ2xlTGluZUJyZWFrcG9pbnRzKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElTZWxlY3Rpb24gc2VsZWN0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0RWRpdG9yKHBhcnQpOwotCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKSB0ZXh0RWRpdG9yLmdldEVkaXRvcklucHV0KCkKLQkJCQkJLmdldEFkYXB0ZXIoSVJlc291cmNlLmNsYXNzKTsKLQkJCUlUZXh0U2VsZWN0aW9uIHRleHRTZWxlY3Rpb24gPSAoSVRleHRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQkJCWludCBsaW5lTnVtYmVyID0gdGV4dFNlbGVjdGlvbi5nZXRTdGFydExpbmUoKTsKLQkJCUlCcmVha3BvaW50W10gYnJlYWtwb2ludHMgPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkKLQkJCQkJLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkuZ2V0QnJlYWtwb2ludHMoCi0JCQkJCQkJSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUwpOwotCQkJZm9yIChJQnJlYWtwb2ludCBicmVha3BvaW50IDogYnJlYWtwb2ludHMpIHsKLQkJCQlpZiAocmVzb3VyY2UuZXF1YWxzKGJyZWFrcG9pbnQuZ2V0TWFya2VyKCkuZ2V0UmVzb3VyY2UoKSkpIHsKLQkJCQkJaWYgKCgoSUxpbmVCcmVha3BvaW50KSBicmVha3BvaW50KS5nZXRMaW5lTnVtYmVyKCkgPT0gKGxpbmVOdW1iZXIgKyAxKSkgewotCQkJCQkJLy8gcmVtb3ZlCi0JCQkJCQlicmVha3BvaW50LmRlbGV0ZSgpOwotCQkJCQkJcmV0dXJuOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJLy8gY3JlYXRlIGxpbmUgYnJlYWtwb2ludCAoZG9jIGxpbmUgbnVtYmVycyBzdGFydCBhdCAwKQotCQkJWFNMTGluZUJyZWFrcG9pbnQgbGluZUJyZWFrcG9pbnQgPSBuZXcgWFNMTGluZUJyZWFrcG9pbnQocmVzb3VyY2UsCi0JCQkJCWxpbmVOdW1iZXIgKyAxLCAxLCAxKTsKLQkJCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCcmVha3BvaW50TWFuYWdlcigpLmFkZEJyZWFrcG9pbnQoCi0JCQkJCWxpbmVCcmVha3BvaW50KTsKLQkJfQotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblRvZ2dsZUxpbmVCcmVha3BvaW50cyhJV29ya2JlbmNoUGFydCBwYXJ0LAotCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJcmV0dXJuIGdldEVkaXRvcihwYXJ0KSAhPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGVkaXRvciBiZWluZyB1c2VkIHRvIGVkaXQgYSBYU0wgZmlsZSwgYXNzb2NpYXRlZCB3aXRoIHRoZQotCSAqIGdpdmVuIHBhcnQsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUuCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRFZGl0b3IoSVdvcmtiZW5jaFBhcnQgcGFydCkgewotCQlpZiAocGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKSB7Ci0JCQlJVGV4dEVkaXRvciBlZGl0b3JQYXJ0ID0gKElUZXh0RWRpdG9yKSBwYXJ0OwotCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgZWRpdG9yUGFydC5nZXRFZGl0b3JJbnB1dCgpCi0JCQkJCS5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCQlpZiAocmVzb3VyY2UgIT0gbnVsbCAmJiByZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKLQkJCQlpZiAoWFNMQ29yZS5pc1hTTEZpbGUoKElGaWxlKSByZXNvdXJjZSkpIHsKLQkJCQkJcmV0dXJuIGVkaXRvclBhcnQ7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRvZ2dsZU1ldGhvZEJyZWFrcG9pbnRzKElXb3JrYmVuY2hQYXJ0IHBhcnQsCi0JCQlJU2VsZWN0aW9uIHNlbGVjdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblRvZ2dsZU1ldGhvZEJyZWFrcG9pbnRzKElXb3JrYmVuY2hQYXJ0IHBhcnQsCi0JCQlJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgdG9nZ2xlV2F0Y2hwb2ludHMoSVdvcmtiZW5jaFBhcnQgcGFydCwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuVG9nZ2xlV2F0Y2hwb2ludHMoSVdvcmtiZW5jaFBhcnQgcGFydCwKLQkJCUlTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvbW9kZWwvWFNMTW9kZWxQcmVzZW50YXRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9tb2RlbC9YU0xNb2RlbFByZXNlbnRhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzgzOGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS9tb2RlbC9YU0xNb2RlbFByZXNlbnRhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjE0MjM1IC0gQWRkZWQgTm9kZUxpc3Qgc3BlY2lmaWMgaW1hZ2VzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUxpbmVCcmVha3BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklEZWJ1Z01vZGVsUHJlc2VudGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLklWYWx1ZURldGFpbExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuTm9kZUxpc3RWYXJpYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xWYXJpYWJsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudXRpbC5TaGFyZWRYTUxFZGl0b3JQbHVnaW5JbWFnZUhlbHBlcjsKLQotLyoqCi0gKiBBbiA8Y29kZT5JRGVidWdNb2RlbFByZXNlbnRhdGlvbjwvY29kZT4gZm9yIFhTTCBkZWJ1Z2dpbmcuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFhTTE1vZGVsUHJlc2VudGF0aW9uIGV4dGVuZHMgTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzCi0JCUlEZWJ1Z01vZGVsUHJlc2VudGF0aW9uIHsKLQlwcml2YXRlIEltYWdlIGxvY2FsSW1nOwotCi0JcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyBhdHRyaWJ1dGUsIE9iamVjdCB2YWx1ZSkgewotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgewotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFhTTFZhcmlhYmxlKSB7Ci0JCQlYU0xWYXJpYWJsZSB2YXIgPSAoWFNMVmFyaWFibGUpIGVsZW1lbnQ7Ci0JCQlpZiAodmFyLmdldFNjb3BlKCkuZXF1YWxzKFhTTFZhcmlhYmxlLkxPQ0FMX1NDT1BFKSkgewotCQkJCWlmIChsb2NhbEltZyA9PSBudWxsKQotCQkJCQlsb2NhbEltZyA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0SW1hZ2VEZXNjcmlwdG9yKAotCQkJCQkJCSIvaWNvbnMvbG9jYWx2YXJpYWJsZV9vYmouZ2lmIikuY3JlYXRlSW1hZ2UoKTsgLy8kTk9OLU5MUy0xJAotCQkJCXJldHVybiBsb2NhbEltZzsKLQkJCX0KLQkJfQotCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0VmFyaWFibGUpIHsKLQkJCU5vZGVMaXN0VmFyaWFibGUgbm9kZVZhciA9IChOb2RlTGlzdFZhcmlhYmxlKSBlbGVtZW50OwotCQkJaWYgKG5vZGVWYXIuZ2V0Tm9kZSgpICE9IG51bGwpIHsKLQkJCQlOb2RlIG5vZGUgPSBub2RlVmFyLmdldE5vZGUoKTsKLQkJCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0JCQkJCWxvY2FsSW1nID0gU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCQkuZ2V0SW1hZ2UoU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIuSU1HX09CSl9FTEVNRU5UKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkFUVFJJQlVURV9OT0RFKSB7Ci0JCQkJCWxvY2FsSW1nID0gU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCQkuZ2V0SW1hZ2UoU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIuSU1HX09CSl9BVFRSSUJVVEUpOwotCQkJCX0KLQkJCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuQ09NTUVOVF9OT0RFKSB7Ci0JCQkJCWxvY2FsSW1nID0gU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCQkuZ2V0SW1hZ2UoU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIuSU1HX09CSl9DT01NRU5UKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfUFJPQ0VTU0lOR0lOU1RSVUNUSU9OKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfQ0RBVEFTRUNUSU9OKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVOVElUWV9OT0RFKSB7Ci0JCQkJCWxvY2FsSW1nID0gU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCQkuZ2V0SW1hZ2UoU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIuSU1HX09CSl9FTlRJVFkpOwotCQkJCX0KLQkJCQlpZiAobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRU5USVRZX1JFRkVSRU5DRV9OT0RFKSB7Ci0JCQkJCWxvY2FsSW1nID0gU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCQkuZ2V0SW1hZ2UoU2hhcmVkWE1MRWRpdG9yUGx1Z2luSW1hZ2VIZWxwZXIuSU1HX09CSl9FTlRJVFlfUkVGRVJFTkNFKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLlRFWFRfTk9ERSkgewotCQkJCQlsb2NhbEltZyA9IFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkJLmdldEltYWdlKFNoYXJlZFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyLklNR19PQkpfVFhURVhUKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIGxvY2FsSW1nOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlpZiAobG9jYWxJbWcgIT0gbnVsbCkKLQkJCWxvY2FsSW1nLmRpc3Bvc2UoKTsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIGNvbXB1dGVEZXRhaWwoSVZhbHVlIHZhbHVlLCBJVmFsdWVEZXRhaWxMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlTdHJpbmcgZGV0YWlsID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJdHJ5IHsKLQkJCWRldGFpbCA9IHZhbHVlLmdldFZhbHVlU3RyaW5nKCk7Ci0JCX0gY2F0Y2ggKERlYnVnRXhjZXB0aW9uIGUpIHsKLQkJfQotCQlsaXN0ZW5lci5kZXRhaWxDb21wdXRlZCh2YWx1ZSwgZGV0YWlsKTsKLQl9Ci0KLQlwdWJsaWMgSUVkaXRvcklucHV0IGdldEVkaXRvcklucHV0KE9iamVjdCBlbGVtZW50KSB7Ci0JCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpIHsKLQkJCXJldHVybiBuZXcgRmlsZUVkaXRvcklucHV0KChJRmlsZSkgZWxlbWVudCk7Ci0JCX0KLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJTGluZUJyZWFrcG9pbnQpIHsKLQkJCXJldHVybiBuZXcgRmlsZUVkaXRvcklucHV0KChJRmlsZSkgKChJTGluZUJyZWFrcG9pbnQpIGVsZW1lbnQpCi0JCQkJCS5nZXRNYXJrZXIoKS5nZXRSZXNvdXJjZSgpKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEVkaXRvcklkKElFZGl0b3JJbnB1dCBpbnB1dCwgT2JqZWN0IGVsZW1lbnQpIHsKLQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSB8fCBlbGVtZW50IGluc3RhbmNlb2YgSUxpbmVCcmVha3BvaW50KSB7Ci0JCQlyZXR1cm4gWFNMRGVidWdVSUNvbnN0YW50cy5YU0xfRURJVE9SX0lEOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vSVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vSVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzYWZlNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL0lQYXJhbWV0ZXJzQ2hhbmdlZExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotcHVibGljIGludGVyZmFjZSBJUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lciB7Ci0Jdm9pZCBwYXJhbWV0ZXJzQ2hhbmdlZChQYXJhbWV0ZXJWaWV3ZXIgdmlld2VyKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL0lTdHlsZXNoZWV0RW50cmllc0NoYW5nZWRMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDAyYTBmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotcHVibGljIGludGVyZmFjZSBJU3R5bGVzaGVldEVudHJpZXNDaGFuZ2VkTGlzdGVuZXIgewotCXZvaWQgZW50cmllc0NoYW5nZWQoU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9JbnB1dEZpbGVCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9JbnB1dEZpbGVCbG9jay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2MyZjVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vSW5wdXRGaWxlQmxvY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBTdHVhcnQgSGFycGVyIC0gYWRkZWQgIm9wZW4gZmlsZXMiIHNlbGVjdG9yCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLklTdHJpbmdWYXJpYWJsZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXMuVmFyaWFibGVzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5SZXNvdXJjZVNlbGVjdGlvbkJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgSW5wdXRGaWxlQmxvY2sgZXh0ZW5kcyBSZXNvdXJjZVNlbGVjdGlvbkJsb2NrIHsKLQlwcml2YXRlIGZpbmFsIElGaWxlIGRlZmF1bHRGaWxlOwotCi0JcHVibGljIElucHV0RmlsZUJsb2NrKElGaWxlIGRlZmF1bHRGaWxlKSB7Ci0JCXN1cGVyKElSZXNvdXJjZS5GSUxFLCBmYWxzZSk7Ci0JCXRoaXMuZGVmYXVsdEZpbGUgPSBkZWZhdWx0RmlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pIHsKLQkJU3RyaW5nIHBhdGggPSAiIjsgLy8kTk9OLU5MUy0xJAotCQlpZiAoZGVmYXVsdEZpbGUgIT0gbnVsbCkKLQkJCXBhdGggPSBWYXJpYWJsZXNQbHVnaW4KLQkJCQkJLmdldERlZmF1bHQoKQotCQkJCQkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkKLQkJCQkJLmdlbmVyYXRlVmFyaWFibGVFeHByZXNzaW9uKAotCQkJCQkJCSJ3b3Jrc3BhY2VfbG9jIiwgZGVmYXVsdEZpbGUuZ2V0RnVsbFBhdGgoKS50b1BvcnRhYmxlU3RyaW5nKCkpOyAvLyROT04tTkxTLTEkCi0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9JTlBVVF9GSUxFLCBwYXRoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0JCXNldExhdW5jaENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgd2QgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0lOUFVUX0ZJTEUsCi0JCQkJCShTdHJpbmcpIG51bGwpOwotCQkJaWYgKHdkICE9IG51bGwpIHsKLQkJCQlzZXRUZXh0KHdkKTsKLQkJCX0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfRXhjZXB0aW9uX29jY3VycmVkX3JlYWRpbmdfY29uZmlndXJhdGlvbgotCQkJCQkrIGUuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwgZ2V0VGV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19OYW1lOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHRleHRNb2RpZmllZCgpIHsKLQkJSVBhdGggcGF0aCA9IG51bGw7Ci0JCVN0cmluZyB3b3JraW5nRGlyUGF0aCA9IGdldFRleHQoKTsKLQkJaWYgKHdvcmtpbmdEaXJQYXRoLmluZGV4T2YoIiR7IikgPj0gMCkgLy8kTk9OLU5MUy0xJAotCQl7Ci0JCQlJU3RyaW5nVmFyaWFibGVNYW5hZ2VyIG1hbmFnZXIgPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJCS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKTsKLQkJCXRyeSB7Ci0JCQkJbWFuYWdlci52YWxpZGF0ZVN0cmluZ1ZhcmlhYmxlcyh3b3JraW5nRGlyUGF0aCk7Ci0JCQkJcGF0aCA9IG5ldyBQYXRoKG1hbmFnZXIKLQkJCQkJCS5wZXJmb3JtU3RyaW5nU3Vic3RpdHV0aW9uKHdvcmtpbmdEaXJQYXRoKSk7Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCX0KLQkJfSBlbHNlIGlmICh3b3JraW5nRGlyUGF0aC5sZW5ndGgoKSA+IDApIHsKLQkJCXBhdGggPSBuZXcgUGF0aCh3b3JraW5nRGlyUGF0aCk7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldE1lc3NhZ2UoaW50IHR5cGUpIHsKLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgRVJST1JfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ6Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfRElSRUNUT1JZX05PVF9TUEVDSUZJRUQ7Ci0JCWNhc2UgRVJST1JfRElSRUNUT1JZX0RPRVNfTk9UX0VYSVNUOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVDsKLQkJY2FzZSBHUk9VUF9OQU1FOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX0dST1VQX05BTUU7Ci0JCWNhc2UgVVNFX0RFRkFVTFRfUkFESU86Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfREVGQVVMVF9SQURJTzsKLQkJY2FzZSBVU0VfT1RIRVJfUkFESU86Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfT1RIRVJfUkFESU87Ci0JCWNhc2UgRElSRUNUT1JZX0RJQUxPR19NRVNTQUdFOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX0RJQUxPR19NRVNTQUdFOwotCQljYXNlIFdPUktTUEFDRV9ESUFMT0dfTUVTU0FHRToKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U7Ci0JCWNhc2UgVkFSSUFCTEVTX0JVVFRPTjoKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19WQVJJQUJMRVNfQlVUVE9OOwotCQljYXNlIEZJTEVfU1lTVEVNX0JVVFRPTjoKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19GSUxFX1NZU1RFTV9CVVRUT047Ci0JCWNhc2UgV09SS1NQQUNFX0JVVFRPTjoKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19XT1JLU1BBQ0VfQlVUVE9OOwotCQljYXNlIFdPUktTUEFDRV9ESUFMT0dfVElUTEU6Ci0JCQlyZXR1cm4gTWVzc2FnZXMuSW5wdXRGaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19USVRMRTsKLQkJY2FzZSBPUEVORklMRVNfQlVUVE9OOgotCQkJcmV0dXJuIE1lc3NhZ2VzLklucHV0RmlsZUJsb2NrX09QRU5GSUxFU19CVVRUT047Ci0JCWNhc2UgT1BFTkZJTEVTX0RJQUxPR19USVRMRToKLQkJCXJldHVybiBNZXNzYWdlcy5JbnB1dEZpbGVCbG9ja19PUEVORklMRVNfRElBTE9HOwotCQl9Ci0JCXJldHVybiAiIiArIHR5cGU7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVSZXNvdXJjZVRleHQoYm9vbGVhbiB1c2VEZWZhdWx0KSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJWaWV3ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyVmlld2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNTYyMzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJWaWV3ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkxpc3RlbmVyTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFic3RyYWN0U3R5bGVzaGVldEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoQXR0cmlidXRlOwotCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyVmlld2VyIHsKLQlwcml2YXRlIGZpbmFsIFRhYmxlVmlld2VyIHZpZXdlcjsKLQlwcml2YXRlIGZpbmFsIExpc3RlbmVyTGlzdCBmTGlzdGVuZXJzID0gbmV3IExpc3RlbmVyTGlzdCgpOwotCi0JcHVibGljIFBhcmFtZXRlclZpZXdlcihUYWJsZSB0YWJsZSkgewotCQl2aWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIodGFibGUpOwotCX0KLQotCXB1YmxpYyBUYWJsZVZpZXdlciBnZXRWaWV3ZXIoKSB7Ci0JCXJldHVybiB2aWV3ZXI7Ci0JfQotCi0JcHJpdmF0ZSBQYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyIGdldFBhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIoKSB7Ci0JCXJldHVybiAoUGFyYW1ldGVyc0NvbnRlbnRQcm92aWRlcikgdmlld2VyLmdldENvbnRlbnRQcm92aWRlcigpOwotCX0KLQotCXB1YmxpYyBTaGVsbCBnZXRTaGVsbCgpIHsKLQkJcmV0dXJuIHZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHVwZGF0ZVNlbGVjdGlvbihpbnQgYWN0aW9uVHlwZSwKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlzd2l0Y2ggKGFjdGlvblR5cGUpIHsKLQkJY2FzZSBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24uQUREOgotCQkJcmV0dXJuIHRydWU7Ci0JCWNhc2UgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLlJFTU9WRToKLQkJY2FzZSBBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24uTU9WRToKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiBzZWxlY3Rpb24uc2l6ZSgpID4gMDsKLQl9Ci0KLQlwdWJsaWMgSVN0cnVjdHVyZWRTZWxlY3Rpb24gZ2V0U2VsZWN0ZWRFbnRyaWVzKCkgewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHZpZXdlcgotCQkJCS5nZXRTZWxlY3Rpb24oKTsKLQkJcmV0dXJuIHNlbGVjdGlvbjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoTGF1bmNoQXR0cmlidXRlIHBhcmFtZXRlcikgewotCQlnZXRQYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyKCkuYWRkUGFyYW1ldGVyKHBhcmFtZXRlcik7Ci0JCW5vdGlmeUNoYW5nZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVFbnRyaWVzKExhdW5jaEF0dHJpYnV0ZVtdIGVudHJpZXMpIHsKLQkJZ2V0UGFyYW1ldGVyc0NvbnRlbnRQcm92aWRlcigpLnJlbW92ZVBhcmFtZXRlcnMoZW50cmllcyk7Ci0JCW5vdGlmeUNoYW5nZWQoKTsKLQl9Ci0KLQlwdWJsaWMgTGF1bmNoQXR0cmlidXRlW10gZ2V0UGFyYW1ldGVycygpIHsKLQkJcmV0dXJuIGdldFBhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIoKS5nZXRQYXJhbWV0ZXJzKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lcihJUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlmTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lcigKLQkJCUlQYXJhbWV0ZXJzQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWZMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgbm90aWZ5Q2hhbmdlZCgpIHsKLQkJT2JqZWN0W10gbGlzdGVuZXJzID0gZkxpc3RlbmVycy5nZXRMaXN0ZW5lcnMoKTsKLQkJZm9yIChPYmplY3QgZWxlbWVudCA6IGxpc3RlbmVycykgewotCQkJKChJUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lcikgZWxlbWVudCkucGFyYW1ldGVyc0NoYW5nZWQodGhpcyk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyc0Jsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1BhcmFtZXRlcnNCbG9jay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzEyOTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyc0Jsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW47Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ2VsbE1vZGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5BYnN0cmFjdFRhYmxlQmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BYnN0cmFjdFBhcmFtZXRlckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWRkUGFyYW1ldGVyQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5SZW1vdmVQYXJhbWV0ZXJBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyc0Jsb2NrIGV4dGVuZHMgQWJzdHJhY3RUYWJsZUJsb2NrIHsKLQlwcml2YXRlIFBhcmFtZXRlclZpZXdlciBwYXJhbWV0ZXJzVmlld2VyOwotCXByaXZhdGUgQnV0dG9uIGFkZFBhcmFtZXRlckJ1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiByZW1vdmVQYXJhbWV0ZXJCdXR0b247Ci0JcHJpdmF0ZSBmaW5hbCBUcmFuc2Zvcm1zQmxvY2sgdHJhbnNmb3Jtc0Jsb2NrOwotCXByaXZhdGUgZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3R5bGVzaGVldFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQKLQkJCQkJLmdldFNlbGVjdGlvbigpOwotCQkJaWYgKHN0eWxlc2hlZXRTZWxlY3Rpb24uc2l6ZSgpID09IDEpCi0JCQkJc2V0VHJhbnNmb3JtKChMYXVuY2hUcmFuc2Zvcm0pIHN0eWxlc2hlZXRTZWxlY3Rpb24KLQkJCQkJCS5nZXRGaXJzdEVsZW1lbnQoKSk7Ci0JCQllbHNlCi0JCQkJc2V0VHJhbnNmb3JtKG51bGwpOwotCQkJdXBkYXRlRW5hYmxlZCgpOwotCQl9Ci0JfTsKLQlwcml2YXRlIFRhYmxlIGZUYWJsZTsKLQotCXB1YmxpYyBQYXJhbWV0ZXJzQmxvY2soVHJhbnNmb3Jtc0Jsb2NrIHRyYW5zZm9ybXNCbG9jaykgewotCQlzdXBlcigpOwotCQl0aGlzLnRyYW5zZm9ybXNCbG9jayA9IHRyYW5zZm9ybXNCbG9jazsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRUcmFuc2Zvcm0oTGF1bmNoVHJhbnNmb3JtIHRyYW5zZm9ybSkgewotCQlwYXJhbWV0ZXJzVmlld2VyLmdldFZpZXdlcigpLnNldElucHV0KHRyYW5zZm9ybSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlRW5hYmxlZCgpIHsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3R5bGVzaGVldFNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdHJhbnNmb3Jtc0Jsb2NrCi0JCQkJLmdldFN0eWxlc2hlZXRWaWV3ZXIoKS5nZXRTZWxlY3Rpb24oKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gc3R5bGVzaGVldFNlbGVjdGlvbi5zaXplKCkgPT0gMTsKLQkJcGFyYW1ldGVyc1ZpZXdlci5nZXRWaWV3ZXIoKS5nZXRUYWJsZSgpLnNldEVuYWJsZWQoZW5hYmxlZCk7Ci0JCWFkZFBhcmFtZXRlckJ1dHRvbi5zZXRFbmFibGVkKGVuYWJsZWQpOwotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBwYXJhbWV0ZXJzU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBwYXJhbWV0ZXJzVmlld2VyCi0JCQkJLmdldFZpZXdlcigpLmdldFNlbGVjdGlvbigpOwotCQlyZW1vdmVQYXJhbWV0ZXJCdXR0b24uc2V0RW5hYmxlZChlbmFibGVkCi0JCQkJJiYgIXBhcmFtZXRlcnNTZWxlY3Rpb24uaXNFbXB0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJRm9udCBmb250ID0gcGFyZW50LmdldEZvbnQoKTsKLQotCQlHcm91cCBncm91cCA9IG5ldyBHcm91cChwYXJlbnQsIFNXVC5OT05FKTsKLQkJZ3JvdXAuc2V0VGV4dChnZXROYW1lKCkpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQlncm91cC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDM7Ci0JCWdyb3VwLnNldExheW91dChsYXlvdXQpOwotCQlncm91cC5zZXRGb250KGZvbnQpOwotCi0JCXNldENvbnRyb2woZ3JvdXApOwotCi0JCWZUYWJsZSA9IG5ldyBUYWJsZShncm91cCwgU1dULkJPUkRFUiB8IFNXVC5NVUxUSSB8IFNXVC5GVUxMX1NFTEVDVElPTik7Ci0KLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQkvLyBkYXRhLmhlaWdodEhpbnQgPSAxMDA7Ci0JCWZUYWJsZS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQlmVGFibGUuc2V0Rm9udChmb250KTsKLQotCQlmVGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJZlRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQotCQlUYWJsZUNvbHVtbiBjb2x1bW4xID0gbmV3IFRhYmxlQ29sdW1uKGZUYWJsZSwgU1dULk5PTkUpOwotCQljb2x1bW4xLnNldFdpZHRoKDE1MCk7Ci0JCWNvbHVtbjEuc2V0UmVzaXphYmxlKHRydWUpOwotCQljb2x1bW4xLnNldFRleHQoTWVzc2FnZXMuUGFyYW1ldGVyc0Jsb2NrXzApOwotCi0JCVRhYmxlQ29sdW1uIGNvbHVtbjMgPSBuZXcgVGFibGVDb2x1bW4oZlRhYmxlLCBTV1QuTk9ORSk7Ci0JCWNvbHVtbjMuc2V0V2lkdGgoMjUwKTsKLQkJY29sdW1uMy5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCWNvbHVtbjMuc2V0VGV4dChNZXNzYWdlcy5QYXJhbWV0ZXJzQmxvY2tfMik7Ci0KLQkJcGFyYW1ldGVyc1ZpZXdlciA9IG5ldyBQYXJhbWV0ZXJWaWV3ZXIoZlRhYmxlKTsKLQkJcGFyYW1ldGVyc1ZpZXdlci5nZXRWaWV3ZXIoKS5zZXRMYWJlbFByb3ZpZGVyKAotCQkJCW5ldyBQYXJhbWV0ZXJzTGFiZWxQcm92aWRlcigpKTsKLQkJcGFyYW1ldGVyc1ZpZXdlci5nZXRWaWV3ZXIoKS5zZXRDb250ZW50UHJvdmlkZXIoCi0JCQkJbmV3IFBhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIoKSk7Ci0JCXBhcmFtZXRlcnNWaWV3ZXIKLQkJCQkuYWRkUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lcihuZXcgSVBhcmFtZXRlcnNDaGFuZ2VkTGlzdGVuZXIoKSB7Ci0KLQkJCQkJcHVibGljIHZvaWQgcGFyYW1ldGVyc0NoYW5nZWQoUGFyYW1ldGVyVmlld2VyIHZpZXdlcikgewotCQkJCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJCQl9Ci0JCQkJfSk7Ci0JCXBhcmFtZXRlcnNWaWV3ZXIuZ2V0Vmlld2VyKCkuZ2V0VGFibGUoKS5hZGRLZXlMaXN0ZW5lcigKLQkJCQluZXcgS2V5QWRhcHRlcigpIHsKLQkJCQkJQE92ZXJyaWRlCi0JCQkJCXB1YmxpYyB2b2lkIGtleVByZXNzZWQoS2V5RXZlbnQgZXZlbnQpIHsKLQkJCQkJCWlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkRFTCAmJiBldmVudC5zdGF0ZU1hc2sgPT0gMCkgewotCQkJCQkJCVJlbW92ZVBhcmFtZXRlckFjdGlvbiByYSA9IG5ldyBSZW1vdmVQYXJhbWV0ZXJBY3Rpb24oCi0JCQkJCQkJCQlwYXJhbWV0ZXJzVmlld2VyKTsKLQkJCQkJCQlyYS5ydW4oKTsKLQkJCQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9KTsKLQotCQlwYXJhbWV0ZXJzVmlld2VyLmdldFZpZXdlcigpLnNldENvbHVtblByb3BlcnRpZXMoCi0JCQkJbmV3IFN0cmluZ1tdIHsgIm5hbWUiLCAidmFsdWUiIH0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJVGV4dENlbGxFZGl0b3IgdGV4dEVkaXRvciA9IG5ldyBUZXh0Q2VsbEVkaXRvcihmVGFibGUpOwotCQlDZWxsRWRpdG9yW10gZWRpdG9ycyA9IG5ldyBDZWxsRWRpdG9yW10geyBudWxsLCB0ZXh0RWRpdG9yIH07Ci0JCXBhcmFtZXRlcnNWaWV3ZXIuZ2V0Vmlld2VyKCkuc2V0Q2VsbEVkaXRvcnMoZWRpdG9ycyk7Ci0JCXBhcmFtZXRlcnNWaWV3ZXIuZ2V0Vmlld2VyKCkuc2V0Q2VsbE1vZGlmaWVyKG5ldyBJQ2VsbE1vZGlmaWVyKCkgewotCQkJcHVibGljIGJvb2xlYW4gY2FuTW9kaWZ5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIHsKLQkJCQlyZXR1cm4gInZhbHVlIi5lcXVhbHMocHJvcGVydHkpOyAvLyROT04tTkxTLTEkIAotCQkJfQotCi0JCQlwdWJsaWMgT2JqZWN0IGdldFZhbHVlKE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIHsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgYXR0ID0gKExhdW5jaEF0dHJpYnV0ZSkgZWxlbWVudDsKLQkJCQlyZXR1cm4gYXR0LnZhbHVlID09IG51bGwgPyAiIiA6IGF0dC52YWx1ZTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBtb2RpZnkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSwgT2JqZWN0IHZhbHVlKSB7Ci0JCQkJSXRlbSBpdGVtID0gKEl0ZW0pIGVsZW1lbnQ7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIGl0ZW0uZ2V0RGF0YSgpOwotCQkJCWF0dC52YWx1ZSA9IChTdHJpbmcpIHZhbHVlOwotCQkJCXBhcmFtZXRlcnNWaWV3ZXIuZ2V0Vmlld2VyKCkudXBkYXRlKGF0dCwgbnVsbCk7Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJfQotCQl9KTsKLQotCQlDb21wb3NpdGUgcGFyYW1ldGVyQnV0dG9uQ29tcCA9IG5ldyBDb21wb3NpdGUoZ3JvdXAsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBwYXJhbWV0ZXJCdXR0b25Db21wTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJcGFyYW1ldGVyQnV0dG9uQ29tcExheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlwYXJhbWV0ZXJCdXR0b25Db21wTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJcGFyYW1ldGVyQnV0dG9uQ29tcC5zZXRMYXlvdXQocGFyYW1ldGVyQnV0dG9uQ29tcExheW91dCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORwotCQkJCXwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlwYXJhbWV0ZXJCdXR0b25Db21wLnNldExheW91dERhdGEoZ2QpOwotCQlwYXJhbWV0ZXJCdXR0b25Db21wLnNldEZvbnQoZm9udCk7Ci0KLQkJYWRkUGFyYW1ldGVyQnV0dG9uID0gY3JlYXRlQnV0dG9uKHBhcmFtZXRlckJ1dHRvbkNvbXAsCi0JCQkJbmV3IEFkZFBhcmFtZXRlckFjdGlvbihwYXJhbWV0ZXJzVmlld2VyKSk7Ci0JCXJlbW92ZVBhcmFtZXRlckJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbihwYXJhbWV0ZXJCdXR0b25Db21wLAotCQkJCW5ldyBSZW1vdmVQYXJhbWV0ZXJBY3Rpb24ocGFyYW1ldGVyc1ZpZXdlcikpOwotCi0JCXRyYW5zZm9ybXNCbG9jay5nZXRTdHlsZXNoZWV0Vmlld2VyKCkuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAotCQkJCXNlbGVjdGlvbkxpc3RlbmVyKTsKLQotCQlyZXN0b3JlQ29sdW1uU2V0dGluZ3MoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQnV0dG9uIGNyZWF0ZUJ1dHRvbihDb21wb3NpdGUgcGF0aEJ1dHRvbkNvbXAsCi0JCQlBYnN0cmFjdFBhcmFtZXRlckFjdGlvbiBhY3Rpb24pIHsKLQkJQnV0dG9uIGJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIGFjdGlvbi5nZXRUZXh0KCksIG51bGwpOwotCQlhY3Rpb24uc2V0QnV0dG9uKGJ1dHRvbik7Ci0JCXJldHVybiBidXR0b247Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFRhYmxlIGdldFRhYmxlKCkgewotCQlyZXR1cm4gZlRhYmxlOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nU2V0dGluZ3MoKSB7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UXVhbGlmaWVyKCkgewotCQlyZXR1cm4gWFNMRGVidWdVSUNvbnN0YW50cy5NQUlOX1BBUkFNQVRFUlNfQkxPQ0s7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gTWVzc2FnZXMuUGFyYW1ldGVyc0Jsb2NrXzk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQkvLyBoYW5kbGVkIGJ5IHRoZSBUYWIKLQkJdXBkYXRlRW5hYmxlZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pIHsKLQkJLy8gaGFuZGxlZCBieSB0aGUgVGFiCi0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JCS8vIGhhbmRsZWQgYnkgdGhlIFRhYgotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCWlmICh0cmFuc2Zvcm1zQmxvY2suZ2V0U3R5bGVzaGVldFZpZXdlcigpICE9IG51bGwpCi0JCQl0cmFuc2Zvcm1zQmxvY2suZ2V0U3R5bGVzaGVldFZpZXdlcigpCi0JCQkJCS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uTGlzdGVuZXIpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1BhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYyYTMyMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1BhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotcHVibGljIGNsYXNzIFBhcmFtZXRlcnNDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciB7Ci0JcHJpdmF0ZSBMYXVuY2hUcmFuc2Zvcm0gc3R5bGVzaGVldEVudHJ5OwotCXByaXZhdGUgVGFibGVWaWV3ZXIgcGFyYW1ldGVyVmlld2VyOwotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKLQkJaWYgKHN0eWxlc2hlZXRFbnRyeSA9PSBudWxsKQotCQkJcmV0dXJuIG5ldyBPYmplY3RbMF07Ci0JCXJldHVybiBzdHlsZXNoZWV0RW50cnkuZ2V0UGFyYW1ldGVycygpLnRvQXJyYXkoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKLQkJc3R5bGVzaGVldEVudHJ5ID0gKExhdW5jaFRyYW5zZm9ybSkgbmV3SW5wdXQ7Ci0JCXBhcmFtZXRlclZpZXdlciA9IChUYWJsZVZpZXdlcikgdmlld2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JfQotCi0JcHVibGljIExhdW5jaEF0dHJpYnV0ZVtdIGdldFBhcmFtZXRlcnMoKSB7Ci0JCXJldHVybiBzdHlsZXNoZWV0RW50cnkuZ2V0UGFyYW1ldGVycygpLnRvQXJyYXkobmV3IExhdW5jaEF0dHJpYnV0ZVswXSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlUGFyYW1ldGVycyhMYXVuY2hBdHRyaWJ1dGVbXSBlbnRyaWVzKSB7Ci0JCWZvciAoTGF1bmNoQXR0cmlidXRlIHBhcmFtZXRlciA6IGVudHJpZXMpIHsKLQkJCXN0eWxlc2hlZXRFbnRyeS5nZXRQYXJhbWV0ZXJzKCkucmVtb3ZlKHBhcmFtZXRlcik7Ci0JCX0KLQkJVGFibGVJdGVtW10gaXRlbXMgPSBwYXJhbWV0ZXJWaWV3ZXIuZ2V0VGFibGUoKS5nZXRJdGVtcygpOwotCQlMaXN0PExhdW5jaEF0dHJpYnV0ZT4gZW50cnlMaXN0ID0gQXJyYXlzLmFzTGlzdChlbnRyaWVzKTsKLQkJT2JqZWN0IHNlbCA9IG51bGw7Ci0JCWZvciAoaW50IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotCQkJVGFibGVJdGVtIGl0ZW0gPSBpdGVtc1tpXTsKLQkJCWlmICghZW50cnlMaXN0LmNvbnRhaW5zKGl0ZW0uZ2V0RGF0YSgpKSkgewotCQkJCXNlbCA9IGl0ZW0uZ2V0RGF0YSgpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXBhcmFtZXRlclZpZXdlci5yZW1vdmUoZW50cmllcyk7Ci0KLQkJaWYgKHNlbCAhPSBudWxsKQotCQkJcGFyYW1ldGVyVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWwpLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXIoTGF1bmNoQXR0cmlidXRlIHBhcmFtZXRlcikgewotCQlzdHlsZXNoZWV0RW50cnkuZ2V0UGFyYW1ldGVycygpLmFkZChwYXJhbWV0ZXIpOwotCQlwYXJhbWV0ZXJWaWV3ZXIuYWRkKHBhcmFtZXRlcik7Ci0JCXBhcmFtZXRlclZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ocGFyYW1ldGVyKSwgdHJ1ZSk7Ci0JCS8vIHBhcmFtZXRlclZpZXdlci5yZWZyZXNoKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJzTGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9QYXJhbWV0ZXJzTGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTc4MWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vUGFyYW1ldGVyc0xhYmVsUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLQotcHVibGljIGNsYXNzIFBhcmFtZXRlcnNMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlciB7Ci0JcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIHsKLQkJTGF1bmNoQXR0cmlidXRlIHAgPSAoTGF1bmNoQXR0cmlidXRlKSBlbGVtZW50OwotCQlzd2l0Y2ggKGNvbHVtbkluZGV4KSB7Ci0JCWNhc2UgMDoKLQkJCXJldHVybiBwLnVyaTsKLQkJY2FzZSAxOgotCQkJcmV0dXJuIHAudmFsdWU7Ci0JCX0KLQkJcmV0dXJuICIhIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9TdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1N0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ4YzQ2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1N0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoUGlwZWxpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotcHVibGljIGNsYXNzIFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciB7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsKLQlwcml2YXRlIExhdW5jaFBpcGVsaW5lIHBpcGVsaW5lOwotCi0JcHVibGljIFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIoKSB7Ci0JfQotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKLQkJcmV0dXJuIHBpcGVsaW5lLmdldFRyYW5zZm9ybURlZnMoKS50b0FycmF5KG5ldyBMYXVuY2hUcmFuc2Zvcm1bMF0pOwotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkgewotCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcikgdmlld2VyOwotCQlwaXBlbGluZSA9IChMYXVuY2hQaXBlbGluZSkgbmV3SW5wdXQ7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRFbnRyaWVzKExhdW5jaFRyYW5zZm9ybVtdIHRyYW5zZm9ybXMpIHsKLQkJcGlwZWxpbmUuc2V0VHJhbnNmb3JtRGVmcyhuZXcgQXJyYXlMaXN0PExhdW5jaFRyYW5zZm9ybT4oQXJyYXlzCi0JCQkJLmFzTGlzdCh0cmFuc2Zvcm1zKSkpOwotCQl0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkRW50cmllcyhMYXVuY2hUcmFuc2Zvcm1bXSByZXMsIE9iamVjdCBiZWZvcmVFbGVtZW50KSB7Ci0JCWZvciAoTGF1bmNoVHJhbnNmb3JtIHRyYW5zZm9ybSA6IHJlcykgewotCQkJcGlwZWxpbmUuYWRkVHJhbnNmb3JtRGVmKHRyYW5zZm9ybSk7Ci0JCX0KLQkJdGFibGVWaWV3ZXIuYWRkKHJlcyk7Ci0JCS8vIHNlbGVjdCB0aGUgZmlyc3QgbmV3IG9uZQotCQl0YWJsZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ocmVzWzBdKSwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlRW50cmllcyhMYXVuY2hUcmFuc2Zvcm1bXSByZXMpIHsKLQkJZm9yIChMYXVuY2hUcmFuc2Zvcm0gdHJhbnNmb3JtIDogcmVzKSB7Ci0JCQlwaXBlbGluZS5yZW1vdmVUcmFuc2Zvcm1EZWYodHJhbnNmb3JtKTsKLQkJfQotCQl0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1N0eWxlc2hlZXRMYWJlbFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1N0eWxlc2hlZXRMYWJlbFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMDE3NDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9TdHlsZXNoZWV0TGFiZWxQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW47Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotCi1wdWJsaWMgY2xhc3MgU3R5bGVzaGVldExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIHsKLQlwcml2YXRlIEltYWdlIGltYWdlID0gWFNMRGVidWdVSVBsdWdpbi5nZXRJbWFnZURlc2NyaXB0b3IoCi0JCQkiaWNvbnMveHNsdF9sYXVuY2guZ2lmIikuY3JlYXRlSW1hZ2UoKTsgLy8kTk9OLU5MUy0xJAotCi0JQE92ZXJyaWRlCi0JcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKLQkJTGF1bmNoVHJhbnNmb3JtIGx0ID0gKExhdW5jaFRyYW5zZm9ybSkgZWxlbWVudDsKLQkJaW50IGluZGV4ID0gbHQuZ2V0UGlwZWxpbmUoKS5nZXRUcmFuc2Zvcm1EZWZzKCkuaW5kZXhPZihsdCk7Ci0KLQkJSVBhdGggcGF0aDsKLQkJdHJ5IHsKLQkJCXBhdGggPSBsdC5nZXRQYXRoKCk7Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQlNZXNzYWdlcy5TdHlsZXNoZWV0RW50cnlMYWJlbFByb3ZpZGVyX0ludmFsaWRfcGF0aCwKLQkJCQkJbmV3IE9iamVjdFtdIHsgIm51bGwiIH0pOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlpZiAocGF0aCA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCU1lc3NhZ2VzLlN0eWxlc2hlZXRFbnRyeUxhYmVsUHJvdmlkZXJfSW52YWxpZF9wYXRoLAotCQkJCQluZXcgT2JqZWN0W10geyAibnVsbCIgfSk7IC8vJE5PTi1OTFMtMSQKLQkJfSBlbHNlIGlmICghcGF0aC5pc0Fic29sdXRlKCkgfHwgIXBhdGguaXNWYWxpZFBhdGgocGF0aC50b1N0cmluZygpKSkgewotCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQlNZXNzYWdlcy5TdHlsZXNoZWV0RW50cnlMYWJlbFByb3ZpZGVyX0ludmFsaWRfcGF0aCwKLQkJCQkJbmV3IE9iamVjdFtdIHsgcGF0aC50b1N0cmluZygpIH0pOwotCQl9Ci0KLQkJU3RyaW5nW10gc2VnbWVudHMgPSBwYXRoLnNlZ21lbnRzKCk7Ci0JCVN0cmluZ0J1ZmZlciBkaXNwbGF5UGF0aCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDApIHsKLQkJCWRpc3BsYXlQYXRoLmFwcGVuZChzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSk7Ci0JCQlkaXNwbGF5UGF0aC5hcHBlbmQoIiAtICIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgZGV2aWNlID0gcGF0aC5nZXREZXZpY2UoKTsKLQkJCWlmIChkZXZpY2UgIT0gbnVsbCkgewotCQkJCWRpc3BsYXlQYXRoLmFwcGVuZChkZXZpY2UpOwotCQkJfQotCQkJZGlzcGxheVBhdGguYXBwZW5kKEZpbGUuc2VwYXJhdG9yKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7Ci0JCQkJZGlzcGxheVBhdGguYXBwZW5kKHNlZ21lbnRzW2ldKS5hcHBlbmQoRmlsZS5zZXBhcmF0b3IpOwotCQkJfQotCQl9IGVsc2UgewotCQkJZGlzcGxheVBhdGguYXBwZW5kKHBhdGgudG9TdHJpbmcoKSk7Ci0JCX0KLQkJcmV0dXJuIChpbmRleCArIDEpICsgIikgIiArIGRpc3BsYXlQYXRoLnRvU3RyaW5nKCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1N0eWxlc2hlZXRWaWV3ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vU3R5bGVzaGVldFZpZXdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzRiM2VkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL21haW4vU3R5bGVzaGVldFZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkxpc3RlbmVyTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLQotcHVibGljIGNsYXNzIFN0eWxlc2hlZXRWaWV3ZXIgewotCXByaXZhdGUgVGFibGVWaWV3ZXIgdmlld2VyOwotCXByaXZhdGUgZmluYWwgTGlzdGVuZXJMaXN0IGxpc3RlbmVyTGlzdCA9IG5ldyBMaXN0ZW5lckxpc3QoKTsKLQotCXB1YmxpYyBTdHlsZXNoZWV0Vmlld2VyKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHBhcmVudCk7Ci0JfQotCi0JcHVibGljIFRhYmxlVmlld2VyIGdldFZpZXdlcigpIHsKLQkJcmV0dXJuIHZpZXdlcjsKLQl9Ci0KLQlwcml2YXRlIFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIgZ2V0U3R5bGVzaGVldENvbnRlbnRQcm92aWRlcigpIHsKLQkJcmV0dXJuIChTdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyKSB2aWV3ZXIuZ2V0Q29udGVudFByb3ZpZGVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RW50cmllcyhMYXVuY2hUcmFuc2Zvcm1bXSB0cmFuc2Zvcm1zKSB7Ci0JCWdldFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIoKS5zZXRFbnRyaWVzKHRyYW5zZm9ybXMpOwotCQlub3RpZnlDaGFuZ2VkKCk7Ci0JfQotCi0JcHVibGljIExhdW5jaFRyYW5zZm9ybVtdIGdldEVudHJpZXMoKSB7Ci0JCXJldHVybiAoTGF1bmNoVHJhbnNmb3JtW10pIGdldFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIoKS5nZXRFbGVtZW50cygKLQkJCQludWxsKTsKLQl9Ci0KLQlwdWJsaWMgU2hlbGwgZ2V0U2hlbGwoKSB7Ci0JCXJldHVybiB2aWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB1cGRhdGVTZWxlY3Rpb24oaW50IGFjdGlvblR5cGUsCi0JCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJc3dpdGNoIChhY3Rpb25UeXBlKSB7Ci0JCWNhc2UgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLkFERDoKLQkJCXJldHVybiB0cnVlOwotCQljYXNlIEFic3RyYWN0U3R5bGVzaGVldEFjdGlvbi5SRU1PVkU6Ci0JCWNhc2UgQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLk1PVkU6Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gc2VsZWN0aW9uLnNpemUoKSA+IDA7Ci0JfQotCi0JcHVibGljIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGdldFNlbGVjdGVkRW50cmllcygpIHsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB2aWV3ZXIKLQkJCQkuZ2V0U2VsZWN0aW9uKCk7Ci0JCXJldHVybiBzZWxlY3Rpb247Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVHJhbnNmb3JtcyhMYXVuY2hUcmFuc2Zvcm1bXSByZXMpIHsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB2aWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCU9iamVjdCBiZWZvcmVFbGVtZW50ID0gc2VsLmdldEZpcnN0RWxlbWVudCgpOwotCQlpZiAoZ2V0RW50cmllcygpLmxlbmd0aCA+IDEgJiYgYmVmb3JlRWxlbWVudCA9PSBudWxsKQotCQkJYmVmb3JlRWxlbWVudCA9IGdldEVudHJpZXMoKVtnZXRFbnRyaWVzKCkubGVuZ3RoIC0gMV07Ci0JCWdldFN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIoKS5hZGRFbnRyaWVzKHJlcywgYmVmb3JlRWxlbWVudCk7Ci0JCW5vdGlmeUNoYW5nZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVFbnRyaWVzKExhdW5jaFRyYW5zZm9ybVtdIGVudHJpZXMpIHsKLQkJZ2V0U3R5bGVzaGVldENvbnRlbnRQcm92aWRlcigpLnJlbW92ZUVudHJpZXMoZW50cmllcyk7Ci0JCW5vdGlmeUNoYW5nZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyKAotCQkJSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWxpc3RlbmVyTGlzdC5hZGQobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUVudHJpZXNDaGFuZ2VkTGlzdGVuZXIoCi0JCQlJU3R5bGVzaGVldEVudHJpZXNDaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJbGlzdGVuZXJMaXN0LnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIG5vdGlmeUNoYW5nZWQoKSB7Ci0JCU9iamVjdFtdIGxpc3RlbmVycyA9IGxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKTsKLQkJZm9yIChPYmplY3QgZWxlbWVudCA6IGxpc3RlbmVycykgewotCQkJKChJU3R5bGVzaGVldEVudHJpZXNDaGFuZ2VkTGlzdGVuZXIpIGVsZW1lbnQpLmVudHJpZXNDaGFuZ2VkKHRoaXMpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1RyYW5zZm9ybXNCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9UcmFuc2Zvcm1zQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTUyNTc2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1RyYW5zZm9ybXNCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLkFic3RyYWN0VGFibGVCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFic3RyYWN0U3R5bGVzaGVldEFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWRkRXh0ZXJuYWxGaWxlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5Nb3ZlRG93bkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuTW92ZVVwQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5SZW1vdmVBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFBpcGVsaW5lOwotCi1wdWJsaWMgY2xhc3MgVHJhbnNmb3Jtc0Jsb2NrIGV4dGVuZHMgQWJzdHJhY3RUYWJsZUJsb2NrIGltcGxlbWVudHMKLQkJSVN0eWxlc2hlZXRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyIHsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBESUFMT0dfU0VUVElOR1NfUFJFRklYID0gIlRyYW5zZm9ybXNCbG9jayI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIFN0eWxlc2hlZXRWaWV3ZXIgc3R5bGVzaGVldFZpZXdlcjsKLQlwcml2YXRlIExhdW5jaFBpcGVsaW5lIHBpcGVsaW5lOwotCi0JcHVibGljIFRyYW5zZm9ybXNCbG9jaygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJRm9udCBmb250ID0gcGFyZW50LmdldEZvbnQoKTsKLQotCQlHcm91cCBncm91cCA9IG5ldyBHcm91cChwYXJlbnQsIFNXVC5OT05FKTsKLQkJZ3JvdXAuc2V0VGV4dChnZXROYW1lKCkpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlncm91cC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDM7Ci0JCWdyb3VwLnNldExheW91dChsYXlvdXQpOwotCQlncm91cC5zZXRGb250KGZvbnQpOwotCi0JCXNldENvbnRyb2woZ3JvdXApOwotCi0JCXN0eWxlc2hlZXRWaWV3ZXIgPSBuZXcgU3R5bGVzaGVldFZpZXdlcihncm91cCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JCXN0eWxlc2hlZXRWaWV3ZXIuZ2V0Vmlld2VyKCkuZ2V0VGFibGUoKS5zZXRMYXlvdXREYXRhKGdkKTsKLQkJc3R5bGVzaGVldFZpZXdlci5hZGRFbnRyaWVzQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQlzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpLmdldENvbnRyb2woKS5zZXRGb250KGZvbnQpOwotCQlzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpLnNldExhYmVsUHJvdmlkZXIoCi0JCQkJbmV3IFN0eWxlc2hlZXRMYWJlbFByb3ZpZGVyKCkpOwotCQlzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpLnNldENvbnRlbnRQcm92aWRlcigKLQkJCQluZXcgU3R5bGVzaGVldENvbnRlbnRQcm92aWRlcigpKTsKLQkJc3R5bGVzaGVldFZpZXdlci5nZXRWaWV3ZXIoKS5nZXRUYWJsZSgpLmFkZEtleUxpc3RlbmVyKAotCQkJCW5ldyBLZXlBZGFwdGVyKCkgewotCQkJCQlAT3ZlcnJpZGUKLQkJCQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBldmVudCkgewotCQkJCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuREVMICYmIGV2ZW50LnN0YXRlTWFzayA9PSAwKSB7Ci0JCQkJCQkJUmVtb3ZlQWN0aW9uIHJhID0gbmV3IFJlbW92ZUFjdGlvbihzdHlsZXNoZWV0Vmlld2VyKTsKLQkJCQkJCQlyYS5ydW4oKTsKLQkJCQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9KTsKLQotCQlDb21wb3NpdGUgdXBEb3duQnV0dG9uQ29tcCA9IG5ldyBDb21wb3NpdGUoZ3JvdXAsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCB1cERvd25CdXR0b25MYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQl1cERvd25CdXR0b25MYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJdXBEb3duQnV0dG9uTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJdXBEb3duQnV0dG9uQ29tcC5zZXRMYXlvdXQodXBEb3duQnV0dG9uTGF5b3V0KTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCBmYWxzZSwgdHJ1ZSk7Ci0JCXVwRG93bkJ1dHRvbkNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXVwRG93bkJ1dHRvbkNvbXAuc2V0Rm9udChmb250KTsKLQotCQljcmVhdGVBcnJvd0J1dHRvbih1cERvd25CdXR0b25Db21wLCBuZXcgTW92ZVVwQWN0aW9uKHN0eWxlc2hlZXRWaWV3ZXIpLAotCQkJCVNXVC5VUCk7Ci0JCUxhYmVsIHNwYWNlciA9IG5ldyBMYWJlbCh1cERvd25CdXR0b25Db21wLCBTV1QuTk9ORSk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5OT05FLCBTV1QuRklMTCwgZmFsc2UsIHRydWUpOwotCQlzcGFjZXIuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWNyZWF0ZUFycm93QnV0dG9uKHVwRG93bkJ1dHRvbkNvbXAsCi0JCQkJbmV3IE1vdmVEb3duQWN0aW9uKHN0eWxlc2hlZXRWaWV3ZXIpLCBTV1QuRE9XTik7Ci0KLQkJQ29tcG9zaXRlIHBhdGhCdXR0b25Db21wID0gbmV3IENvbXBvc2l0ZShncm91cCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IHBhdGhCdXR0b25MYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlwYXRoQnV0dG9uTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXBhdGhCdXR0b25MYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlwYXRoQnV0dG9uQ29tcC5zZXRMYXlvdXQocGF0aEJ1dHRvbkxheW91dCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORwotCQkJCXwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9GSUxMKTsKLQkJcGF0aEJ1dHRvbkNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXBhdGhCdXR0b25Db21wLnNldEZvbnQoZm9udCk7Ci0KLQkJY3JlYXRlQnV0dG9uKHBhdGhCdXR0b25Db21wLCBuZXcgQWRkV29ya3NwYWNlRmlsZUFjdGlvbigKLQkJCQlzdHlsZXNoZWV0Vmlld2VyKSk7Ci0JCWNyZWF0ZUJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgbmV3IEFkZEV4dGVybmFsRmlsZUFjdGlvbigKLQkJCQlzdHlsZXNoZWV0Vmlld2VyLCBESUFMT0dfU0VUVElOR1NfUFJFRklYKSk7Ci0JCWNyZWF0ZUJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgbmV3IFJlbW92ZUFjdGlvbihzdHlsZXNoZWV0Vmlld2VyKSk7Ci0JfQotCi0JcHVibGljIFZpZXdlciBnZXRTdHlsZXNoZWV0Vmlld2VyKCkgewotCQlyZXR1cm4gc3R5bGVzaGVldFZpZXdlciA9PSBudWxsID8gbnVsbCA6IHN0eWxlc2hlZXRWaWV3ZXIuZ2V0Vmlld2VyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVBcnJvd0J1dHRvbihDb21wb3NpdGUgcGF0aEJ1dHRvbkNvbXAsCi0JCQlBYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24gYWN0aW9uLCBpbnQgdXBkb3duKSB7Ci0JCUJ1dHRvbiBiID0gbmV3IEJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgU1dULkFSUk9XIHwgdXBkb3duKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJYi5zZXRMYXlvdXREYXRhKGdkKTsKLQkJYWN0aW9uLnNldEJ1dHRvbihiKTsKLQkJcmV0dXJuIGI7Ci0JfQotCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVCdXR0b24oQ29tcG9zaXRlIHBhdGhCdXR0b25Db21wLAotCQkJQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uIGFjdGlvbikgewotCQlCdXR0b24gYnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgYWN0aW9uLmdldFRleHQoKSwgbnVsbCk7Ci0JCWFjdGlvbi5zZXRCdXR0b24oYnV0dG9uKTsKLQkJcmV0dXJuIGJ1dHRvbjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBNZXNzYWdlcy5UcmFuc2Zvcm1zQmxvY2tfTmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQaXBlbGluZShMYXVuY2hQaXBlbGluZSBwaXBlbGluZSkgewotCQl0aGlzLnBpcGVsaW5lID0gcGlwZWxpbmU7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQlzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpLnNldElucHV0KHBpcGVsaW5lKTsKLQkJaWYgKHBpcGVsaW5lLmdldFRyYW5zZm9ybURlZnMoKS5zaXplKCkgPiAwKSB7Ci0JCQlzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpCi0JCQkJCS5zZXRTZWxlY3Rpb24oCi0JCQkJCQkJbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24ocGlwZWxpbmUuZ2V0VHJhbnNmb3JtRGVmcygpCi0JCQkJCQkJCQkuZ2V0KDApKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgZW50cmllc0NoYW5nZWQoU3R5bGVzaGVldFZpZXdlciB2aWV3ZXIpIHsKLQkJc2V0RGlydHkodHJ1ZSk7Ci0JCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRTb3J0Q29sdW1uKGludCBjb2x1bW4pIHsKLQkJc3dpdGNoIChjb2x1bW4pIHsKLQkJLy8gY2FzZSAxOgotCQkvLyBzb3J0QnlOYW1lKCk7Ci0JCS8vIGJyZWFrOwotCQkvLyBjYXNlIDI6Ci0JCS8vIHNvcnRCeVR5cGUoKTsKLQkJLy8gYnJlYWs7Ci0JCX0KLQkJc3VwZXIuc2V0U29ydENvbHVtbihjb2x1bW4pOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUYWJsZSBnZXRUYWJsZSgpIHsKLQkJcmV0dXJuIHN0eWxlc2hlZXRWaWV3ZXIgPT0gbnVsbCA/IG51bGwgOiBzdHlsZXNoZWV0Vmlld2VyLmdldFZpZXdlcigpCi0JCQkJLmdldFRhYmxlKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElEaWFsb2dTZXR0aW5ncyBnZXREaWFsb2dTZXR0aW5ncygpIHsKLQkJcmV0dXJuIFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRRdWFsaWZpZXIoKSB7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJQ29uc3RhbnRzLk1BSU5fVFJBTlNGT1JNU19CTE9DSzsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlpZiAoc3R5bGVzaGVldFZpZXdlciAhPSBudWxsKQotCQkJc3R5bGVzaGVldFZpZXdlci5yZW1vdmVFbnRyaWVzQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvbWFpbi9YU0xNYWluVGFiLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1hTTE1haW5UYWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkYjE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9tYWluL1hTTE1haW5UYWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAyMjM1NTcgLSBBZGRlZCBJbWFnZXMgY29udHJpYnV0ZWQgYnkgSG9sZ2VyIFZvb3JtYW4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcuaW50ZXJuYWwudXRpbC5YU0xEZWJ1Z1BsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFBpcGVsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLXB1YmxpYyBjbGFzcyBYU0xNYWluVGFiIGV4dGVuZHMgWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYiB7Ci0JcHJpdmF0ZSBmaW5hbCBJbnB1dEZpbGVCbG9jayBpbnB1dEZpbGVCbG9jazsKLQlwcml2YXRlIGZpbmFsIFRyYW5zZm9ybXNCbG9jayB0cmFuc2Zvcm1zQmxvY2s7Ci0JcHJpdmF0ZSBmaW5hbCBQYXJhbWV0ZXJzQmxvY2sgcGFyYW1ldGVyc0Jsb2NrOwotCXB1YmxpYyBMYXVuY2hQaXBlbGluZSBwaXBlbGluZTsKLQotCS8vIHByaXZhdGUgUmVuZGVyQmxvY2sgcmVuZGVyQmxvY2s7Ci0JLy8gcHJpdmF0ZSBPdXRwdXRCbG9jayBvdXRwdXRCbG9jazsKLQotCXB1YmxpYyBYU0xNYWluVGFiKCkgewotCQlJUmVzb3VyY2VbXSByZXNvdXJjZUNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0JCUlGaWxlIGlucHV0RmlsZSA9IGdldFhNTElucHV0KHJlc291cmNlQ29udGV4dCk7Ci0KLQkJaW5wdXRGaWxlQmxvY2sgPSBuZXcgSW5wdXRGaWxlQmxvY2soaW5wdXRGaWxlKTsKLQkJdHJhbnNmb3Jtc0Jsb2NrID0gbmV3IFRyYW5zZm9ybXNCbG9jaygpOwotCQlwYXJhbWV0ZXJzQmxvY2sgPSBuZXcgUGFyYW1ldGVyc0Jsb2NrKHRyYW5zZm9ybXNCbG9jayk7Ci0JCS8vIHJlbmRlckJsb2NrID0gbmV3IFJlbmRlckJsb2NrKCk7Ci0JCS8vIG91dHB1dEJsb2NrID0gbmV3IE91dHB1dEJsb2NrKCk7Ci0KLQkJc2V0QmxvY2tzKG5ldyBJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdIHsgaW5wdXRGaWxlQmxvY2ssCi0JCQkJdHJhbnNmb3Jtc0Jsb2NrLCBwYXJhbWV0ZXJzQmxvY2sgfSk7IC8vICxyZW5kZXJCbG9jayxvdXRwdXRCbG9ja30pOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0JCUNvbXBvc2l0ZSBjb21wID0gKENvbXBvc2l0ZSkgZ2V0Q29udHJvbCgpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKTsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQlpbnB1dEZpbGVCbG9jay5jcmVhdGVDb250cm9sKGNvbXApOwotCQl0cmFuc2Zvcm1zQmxvY2suY3JlYXRlQ29udHJvbChjb21wKTsKLQkJcGFyYW1ldGVyc0Jsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0JCS8vIHJlbmRlckJsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0JCS8vIG91dHB1dEJsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JCUxhdW5jaFBpcGVsaW5lIGxwID0gbmV3IExhdW5jaFBpcGVsaW5lKCk7Ci0JCUlSZXNvdXJjZVtdIHJlc291cmNlQ29udGV4dCA9IGdldENvbnRleHQoKTsKLQkJSUZpbGVbXSBzdHlsZXNoZWV0cyA9IGdldFhTTFN0eWxlc2hlZXRzKHJlc291cmNlQ29udGV4dCk7Ci0JCWZvciAoSUZpbGUgZmlsZSA6IHN0eWxlc2hlZXRzKSB7Ci0JCQlMYXVuY2hUcmFuc2Zvcm0gbHQgPSBuZXcgTGF1bmNoVHJhbnNmb3JtKGZpbGUuZ2V0RnVsbFBhdGgoKQotCQkJCQkudG9Qb3J0YWJsZVN0cmluZygpLCBMYXVuY2hUcmFuc2Zvcm0uUkVTT1VSQ0VfVFlQRSk7Ci0JCQlscC5hZGRUcmFuc2Zvcm1EZWYobHQpOwotCQl9Ci0JCXNhdmVQaXBlbGluZShjb25maWd1cmF0aW9uLCBscCk7Ci0JCXN1cGVyLnNldERlZmF1bHRzKGNvbmZpZ3VyYXRpb24pOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVGcm9tKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLQkJcGlwZWxpbmUgPSBudWxsOwotCQl0cnkgewotCQkJU3RyaW5nIHMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BJUEVMSU5FLAotCQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShzCi0JCQkJCQkuZ2V0Qnl0ZXMoKSk7Ci0JCQkJcGlwZWxpbmUgPSBMYXVuY2hQaXBlbGluZS5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcGlwZWxpbmUgPSBuZXcgTGF1bmNoUGlwZWxpbmUoKTsKLQkJCX0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQl0cmFuc2Zvcm1zQmxvY2suc2V0UGlwZWxpbmUocGlwZWxpbmUpOwotCQlzdXBlci5pbml0aWFsaXplRnJvbShjb25maWd1cmF0aW9uKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKSB7Ci0JCXN1cGVyLnBlcmZvcm1BcHBseShjb25maWd1cmF0aW9uKTsKLQkJc2F2ZVBpcGVsaW5lKGNvbmZpZ3VyYXRpb24sIHBpcGVsaW5lKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2F2ZVBpcGVsaW5lKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbiwKLQkJCUxhdW5jaFBpcGVsaW5lIHBpcGVsaW5lKSB7Ci0JCXRyeSB7Ci0JCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BJUEVMSU5FLCBwaXBlbGluZQotCQkJCQkJCS50b1hNTCgpKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIE1lc3NhZ2VzLlhTTE1haW5UYWJfVGFiTmFtZTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJUmVzb3VyY2VbXSBnZXRDb250ZXh0KCkgewotCi0JCS8vIElQcm9qZWN0W10gcHJvamVjdHMgPQotCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7Ci0JCS8vIHByb2plY3Quc2V0SW5wdXQoIHByb2plY3RzKTsKLQkJLy8gU3RyaW5nIHMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJLy8gSVhTTFRMYXVuY2hDb25maWd1cmF0aW9uLlBST0pFQ1QsICIiKTsKLQkJLy8gSVByb2plY3QgcHJvamVjdCA9IG51bGw7Ci0JCS8vIGlmKCBzLmVxdWFscygiIikpCi0JCS8vIHsKLQkJLy8gaWYoIHByb2plY3RzLmxlbmd0aD4wKQotCQkvLyB7Ci0JCS8vIHByb2plY3QgPSBwcm9qZWN0c1sgMF07Ci0JCS8vIH0KLQkJLy8gfQotCQkvLyBlbHNlCi0JCS8vIHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoIHMpOwotCi0JCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldEFjdGl2ZVBhZ2UoKTsKLQkJTGlzdDxPYmplY3Q+IHJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOwotCQlpZiAocGFnZSAhPSBudWxsKSB7Ci0JCQkvLyB1c2Ugc2VsZWN0aW9ucyB0byBmaW5kIHRoZSBwcm9qZWN0Ci0JCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHBhZ2UuZ2V0U2VsZWN0aW9uKCk7Ci0JCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkKLQkJCQkJJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzcyA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJCWZvciAoSXRlcmF0b3I8Pz4gaXRlciA9IHNzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCQlPYmplY3QgZWxlbWVudCA9IGl0ZXIubmV4dCgpOwotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkKLQkJCQkJCXJlc291cmNlcy5hZGQoZWxlbWVudCk7Ci0JCQkJfQotCQkJCXJldHVybiByZXNvdXJjZXMudG9BcnJheShuZXcgSVJlc291cmNlWzBdKTsKLQkJCX0KLQkJCS8vIHVzZSBjdXJyZW50IGVkaXRvciB0byBmaW5kIHRoZSBwcm9qZWN0Ci0JCQlJRWRpdG9yUGFydCBwYXJ0ID0gcGFnZS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCWlmIChwYXJ0ICE9IG51bGwpIHsKLQkJCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBwYXJ0LmdldEVkaXRvcklucHV0KCk7Ci0JCQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgaW5wdXQuZ2V0QWRhcHRlcihJRmlsZS5jbGFzcyk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkKLQkJCQkJcmV0dXJuIG5ldyBJUmVzb3VyY2VbXSB7IGZpbGUgfTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmV3IElSZXNvdXJjZVswXTsKLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldFhNTElucHV0KElSZXNvdXJjZVtdIGNvbnRleHQpIHsKLQkJZm9yIChJUmVzb3VyY2UgcmVzb3VyY2UgOiBjb250ZXh0KSB7Ci0JCQlpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBJRmlsZQotCQkJCQkmJiAoInhtbCIuZXF1YWxzSWdub3JlQ2FzZShyZXNvdXJjZS5nZXRGaWxlRXh0ZW5zaW9uKCkpIHx8ICJ4aHRtbCIuZXF1YWxzSWdub3JlQ2FzZShyZXNvdXJjZS5nZXRGaWxlRXh0ZW5zaW9uKCkpKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJcmV0dXJuIChJRmlsZSkgcmVzb3VyY2U7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZVtdIGdldFhTTFN0eWxlc2hlZXRzKElSZXNvdXJjZVtdIGNvbnRleHQpIHsKLQkJTGlzdDxJUmVzb3VyY2U+IHN0eWxlc2hlZXRzID0gbmV3IEFycmF5TGlzdDxJUmVzb3VyY2U+KCk7Ci0JCWZvciAoSVJlc291cmNlIHJlc291cmNlIDogY29udGV4dCkgewotCQkJaWYgKHJlc291cmNlIGluc3RhbmNlb2YgSUZpbGUKLQkJCQkJJiYgWFNMQ29yZS5pc1hTTEZpbGUoKElGaWxlKSByZXNvdXJjZSkpCi0JCQkJc3R5bGVzaGVldHMuYWRkKHJlc291cmNlKTsKLQkJfQotCQlyZXR1cm4gc3R5bGVzaGVldHMudG9BcnJheShuZXcgSUZpbGVbMF0pOwotCi0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgKLQkJCQlYU0xEZWJ1Z1BsdWdpbkltYWdlcy5JTUdfTUFJTl9UQUIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL291dHB1dC9PdXRwdXRGaWxlQmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9kZWJ1Zy91aS90YWJzL291dHB1dC9PdXRwdXRGaWxlQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY5OWI2NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9vdXRwdXQvT3V0cHV0RmlsZUJsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuUmVzb3VyY2VTZWxlY3Rpb25CbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xUUnVudGltZTsKLQotcHVibGljIGNsYXNzIE91dHB1dEZpbGVCbG9jayBleHRlbmRzIFJlc291cmNlU2VsZWN0aW9uQmxvY2sgewotCXByaXZhdGUgQnV0dG9uIG9wZW5GaWxlQ2hlY2tCdXR0b247Ci0JcHJpdmF0ZSBCdXR0b24gZm9ybWF0RmlsZUNoZWNrQnV0dG9uOwotCXByaXZhdGUgU3RyaW5nIGlucHV0RmlsZW5hbWU7Ci0JcHJpdmF0ZSBUZXh0IGZpbGVOYW1lVGV4dDsKLQlwcml2YXRlIFN0cmluZyBkZWZhdWx0T3V0cHV0RmlsZU5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RmlsZU5hbWU7Ci0KLQlwdWJsaWMgT3V0cHV0RmlsZUJsb2NrKCkgewotCQlzdXBlcihJUmVzb3VyY2UuRk9MREVSLCB0cnVlLCB0cnVlLCBmYWxzZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRNZXNzYWdlKGludCB0eXBlKSB7Ci0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEVSUk9SX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZPRmlsZUJsb2NrX0RJUkVDVE9SWV9OT1RfU1BFQ0lGSUVEOwotCQljYXNlIEVSUk9SX0RJUkVDVE9SWV9ET0VTX05PVF9FWElTVDoKLQkJCXJldHVybiBNZXNzYWdlcy5PdXRwdXRGT0ZpbGVCbG9ja19ESVJFQ1RPUllfRE9FU19OT1RfRVhJU1Q7Ci0JCWNhc2UgR1JPVVBfTkFNRToKLQkJCXJldHVybiBnZXROYW1lKCk7Ci0JCWNhc2UgVVNFX0RFRkFVTFRfUkFESU86Ci0JCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0RmlsZUJsb2NrXzA7Ci0JCWNhc2UgVVNFX09USEVSX1JBRElPOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZPRmlsZUJsb2NrX09USEVSX1JBRElPOwotCQljYXNlIERJUkVDVE9SWV9ESUFMT0dfTUVTU0FHRToKLQkJCXJldHVybiBNZXNzYWdlcy5PdXRwdXRGT0ZpbGVCbG9ja19ESUFMT0dfTUVTU0FHRTsKLQkJY2FzZSBXT1JLU1BBQ0VfRElBTE9HX01FU1NBR0U6Ci0JCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0Rk9GaWxlQmxvY2tfV09SS1NQQUNFX0RJQUxPR19NRVNTQUdFOwotCQljYXNlIFZBUklBQkxFU19CVVRUT046Ci0JCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0Rk9GaWxlQmxvY2tfVkFSSUFCTEVTX0JVVFRPTjsKLQkJY2FzZSBGSUxFX1NZU1RFTV9CVVRUT046Ci0JCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0Rk9GaWxlQmxvY2tfRklMRV9TWVNURU1fQlVUVE9OOwotCQljYXNlIFdPUktTUEFDRV9CVVRUT046Ci0JCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0Rk9GaWxlQmxvY2tfV09SS1NQQUNFX0JVVFRPTjsKLQkJY2FzZSBXT1JLU1BBQ0VfRElBTE9HX1RJVExFOgotCQkJcmV0dXJuIE1lc3NhZ2VzLk91dHB1dEZPRmlsZUJsb2NrX1dPUktTUEFDRV9ESUFMT0dfVElUTEU7Ci0JCX0KLQkJcmV0dXJuICIiICsgdHlwZTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNoZWNrYm94QW5kVGV4dChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWlmIChzaG93RGVmYXVsdCkgewotCQkJdXNlRGVmYXVsdENoZWNrQnV0dG9uID0gY3JlYXRlQ2hlY2tCdXR0b24ocGFyZW50LAotCQkJCQlnZXRNZXNzYWdlKFVTRV9ERUZBVUxUX1JBRElPKSk7Ci0JCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7Ci0JCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCQl1c2VEZWZhdWx0Q2hlY2tCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCQl1c2VEZWZhdWx0Q2hlY2tCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCQl9Ci0KLQkJQ29tcG9zaXRlIHNwZWNpZmljRmlsZUNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKTsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJaWYgKHNob3dEZWZhdWx0KQotCQkJbGF5b3V0Lm1hcmdpbkxlZnQgPSAyMDsKLQkJZWxzZQotCQkJbGF5b3V0Lm1hcmdpbkxlZnQgPSAwOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJc3BlY2lmaWNGaWxlQ29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlzcGVjaWZpY0ZpbGVDb21wLnNldExheW91dERhdGEoZ2QpOwotCi0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHNwZWNpZmljRmlsZUNvbXAsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5PdXRwdXRGaWxlQmxvY2tfMSk7Ci0KLQkJZmlsZU5hbWVUZXh0ID0gbmV3IFRleHQoc3BlY2lmaWNGaWxlQ29tcCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IHNob3dEZWZhdWx0ID8gMSA6IDI7Ci0JCWZpbGVOYW1lVGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJZmlsZU5hbWVUZXh0LnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0JCWZpbGVOYW1lVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcih3aWRnZXRMaXN0ZW5lcik7Ci0KLQkJaWYgKHNob3dEZWZhdWx0KSB7Ci0JCQlsYWJlbCA9IG5ldyBMYWJlbChzcGVjaWZpY0ZpbGVDb21wLCBTV1QuTk9ORSk7Ci0JCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLk91dHB1dEZpbGVCbG9ja183KTsKLQkJfQotCi0JCXJlc291cmNlVGV4dCA9IG5ldyBUZXh0KHNwZWNpZmljRmlsZUNvbXAsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSBzaG93RGVmYXVsdCA/IDEgOiAyOwotCQlyZXNvdXJjZVRleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXJlc291cmNlVGV4dC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCQlyZXNvdXJjZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnMoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgY2hlY2tDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQljaGVja0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgKLQkJCQlHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORykpOwotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2wubWFyZ2luV2lkdGggPSAwOwotCQljaGVja0NvbXBvc2l0ZS5zZXRMYXlvdXQoZ2wpOwotCi0JCW9wZW5GaWxlQ2hlY2tCdXR0b24gPSBjcmVhdGVDaGVja0J1dHRvbihjaGVja0NvbXBvc2l0ZSwKLQkJCQlNZXNzYWdlcy5PdXRwdXRGaWxlQmxvY2tfOCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fQkVHSU5OSU5HKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAxOwotCQlvcGVuRmlsZUNoZWNrQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotCQlvcGVuRmlsZUNoZWNrQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCWlmIChvcGVuRmlsZUNoZWNrQnV0dG9uLmdldFNlbGVjdGlvbigpKSB7Ci0JCQkJCWZvcm1hdEZpbGVDaGVja0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotCQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZm9ybWF0RmlsZUNoZWNrQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQkJCQlmb3JtYXRGaWxlQ2hlY2tCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCWZvcm1hdEZpbGVDaGVja0J1dHRvbiA9IGNyZWF0ZUNoZWNrQnV0dG9uKGNoZWNrQ29tcG9zaXRlLAotCQkJCU1lc3NhZ2VzLk91dHB1dEZpbGVCbG9ja18yKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDE7Ci0JCWZvcm1hdEZpbGVDaGVja0J1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKLQkJZm9ybWF0RmlsZUNoZWNrQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCX0KLQkJfSk7Ci0KLQkJQ29tcG9zaXRlIGJ1dHRvbkNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULlRPUCk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJYnV0dG9uQ29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9FTkQKLQkJCQl8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gMTsKLQkJYnV0dG9uQ29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJYnV0dG9uQ29tcC5zZXRGb250KHBhcmVudC5nZXRGb250KCkpOwotCi0JCWZXb3Jrc3BhY2VCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbkNvbXAsCi0JCQkJZ2V0TWVzc2FnZShXT1JLU1BBQ0VfQlVUVE9OKSwgbnVsbCk7Ci0JCWZXb3Jrc3BhY2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIod2lkZ2V0TGlzdGVuZXIpOwotCi0JCWZGaWxlU3lzdGVtQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25Db21wLAotCQkJCWdldE1lc3NhZ2UoRklMRV9TWVNURU1fQlVUVE9OKSwgbnVsbCk7Ci0JCWZGaWxlU3lzdGVtQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQotCQlmVmFyaWFibGVzQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihidXR0b25Db21wLAotCQkJCWdldE1lc3NhZ2UoVkFSSUFCTEVTX0JVVFRPTiksIG51bGwpOwotCQlmVmFyaWFibGVzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHdpZGdldExpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBNZXNzYWdlcy5PdXRwdXRGaWxlQmxvY2tfOTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0JCXRyeSB7Ci0JCQlpbnB1dEZpbGVuYW1lID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9JTlBVVF9GSUxFLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJCXVwZGF0ZURlZmF1bHRPdXRwdXRGaWxlKCk7Ci0KLQkJCWJvb2xlYW4gdXNlRGVmYXVsdCA9IGNvbmZpZ3VyYXRpb24KLQkJCQkJLmdldEF0dHJpYnV0ZSgKLQkJCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUsCi0JCQkJCQkJdHJ1ZSk7Ci0JCQl1c2VEZWZhdWx0Q2hlY2tCdXR0b24uc2V0U2VsZWN0aW9uKHVzZURlZmF1bHQpOwotCi0JCQlvdXRwdXRGaWxlTmFtZSA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX0ZJTEVOQU1FLAotCQkJCQlkZWZhdWx0T3V0cHV0RmlsZU5hbWUpOwotCQkJcmVzb3VyY2UgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GT0xERVIsCi0JCQkJCWRlZmF1bHRSZXNvdXJjZSk7Ci0KLQkJCXVwZGF0ZVJlc291cmNlVGV4dCh1c2VEZWZhdWx0KTsKLQotCQkJYm9vbGVhbiBvcGVuRmlsZU9uQ29tcGxldGlvbiA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1BFTl9GSUxFLCB0cnVlKTsKLQkJCW9wZW5GaWxlQ2hlY2tCdXR0b24uc2V0U2VsZWN0aW9uKG9wZW5GaWxlT25Db21wbGV0aW9uKTsKLQotCQkJYm9vbGVhbiBmb3JtYXRGaWxlT25Db21wbGV0aW9uID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9GT1JNQVRfRklMRSwgZmFsc2UpOwotCQkJZm9ybWF0RmlsZUNoZWNrQnV0dG9uLnNldFNlbGVjdGlvbihmb3JtYXRGaWxlT25Db21wbGV0aW9uKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pIHsKLQkJYm9vbGVhbiB1c2VEZWZhdWx0ID0gdXNlRGVmYXVsdENoZWNrQnV0dG9uLmdldFNlbGVjdGlvbigpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUsCi0JCQkJdXNlRGVmYXVsdCk7Ci0KLQkJU3RyaW5nIG91dHB1dEZpbGUgPSByZXNvdXJjZVRleHQuZ2V0VGV4dCgpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX0ZPTERFUiwgb3V0cHV0RmlsZSk7Ci0KLQkJU3RyaW5nIG91dHB1dEZpbGVOYW1lID0gZmlsZU5hbWVUZXh0LmdldFRleHQoKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GSUxFTkFNRSwKLQkJCQlvdXRwdXRGaWxlTmFtZSk7Ci0KLQkJYm9vbGVhbiBvcGVuRmlsZU9uQ29tcGxldGlvbiA9IG9wZW5GaWxlQ2hlY2tCdXR0b24uZ2V0U2VsZWN0aW9uKCk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PUEVOX0ZJTEUsCi0JCQkJb3BlbkZpbGVPbkNvbXBsZXRpb24pOwotCi0JCWJvb2xlYW4gZm9ybWF0RmlsZU9uQ29tcGxldGlvbiA9IGZvcm1hdEZpbGVDaGVja0J1dHRvbi5nZXRTZWxlY3Rpb24oKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0ZPUk1BVF9GSUxFLAotCQkJCWZvcm1hdEZpbGVPbkNvbXBsZXRpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikgewotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUsCi0JCQkJdHJ1ZSk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfRk9MREVSLAotCQkJCShTdHJpbmcpIG51bGwpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX0ZJTEVOQU1FLAotCQkJCShTdHJpbmcpIG51bGwpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZSgKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1BFTl9GSUxFLCB0cnVlKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0ZPUk1BVF9GSUxFLCBmYWxzZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlUmVzb3VyY2VUZXh0KGJvb2xlYW4gdXNlRGVmYXVsdCkgewotCQlmaWxlTmFtZVRleHQuc2V0RW5hYmxlZCghdXNlRGVmYXVsdCk7Ci0JCWlmICh1c2VEZWZhdWx0KQotCQkJZmlsZU5hbWVUZXh0Ci0JCQkJCS5zZXRUZXh0KGRlZmF1bHRPdXRwdXRGaWxlTmFtZSA9PSBudWxsID8gIiIgOiBkZWZhdWx0T3V0cHV0RmlsZU5hbWUpOyAvLyROT04tTkxTLTEkCi0JCWVsc2UKLQkJCWZpbGVOYW1lVGV4dC5zZXRUZXh0KG91dHB1dEZpbGVOYW1lID09IG51bGwgPyBkZWZhdWx0T3V0cHV0RmlsZU5hbWUKLQkJCQkJOiBvdXRwdXRGaWxlTmFtZSk7Ci0JCXN1cGVyLnVwZGF0ZVJlc291cmNlVGV4dCh1c2VEZWZhdWx0KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlRGVmYXVsdE91dHB1dEZpbGUoKSB7Ci0JCXRyeSB7Ci0JCQlJUGF0aCBwYXRoID0gWFNMVFJ1bnRpbWUKLQkJCQkJLmRlZmF1bHRPdXRwdXRGaWxlRm9ySW5wdXRGaWxlKGlucHV0RmlsZW5hbWUpOwotCQkJLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBwYXRoIGV4aXN0cyBpbiB0aGUgd29ya3NwYWNlCi0JCQlJRmlsZVtdIGZpbGVzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKQotCQkJCQkuZmluZEZpbGVzRm9yTG9jYXRpb24ocGF0aCk7Ci0JCQlpZiAoZmlsZXMubGVuZ3RoID4gMCkgey8vIGluc2lkZSB3b3Jrc3BhY2UKLQkJCQlJUGF0aCBwID0gbmV3IFBhdGgoZmlsZXNbMF0uZ2V0UHJvamVjdCgpLmdldE5hbWUoKSk7Ci0JCQkJcC5hcHBlbmQoZmlsZXNbMF0uZ2V0UGFyZW50KCkuZ2V0UHJvamVjdFJlbGF0aXZlUGF0aCgpKTsKLQkJCQlkZWZhdWx0UmVzb3VyY2UgPSAiJHt3b3Jrc3BhY2VfbG9jOi8iICsgcC50b1N0cmluZygpICsgIn0iOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQkJfSBlbHNlIHsvLyBvdXRzaWRlIHdvcmtzcGFjZQotCQkJCUlQYXRoIHAgPSBwYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKTsKLQkJCQlkZWZhdWx0UmVzb3VyY2UgPSBwLnRvT1NTdHJpbmcoKTsKLQkJCX0KLQkJCWRlZmF1bHRPdXRwdXRGaWxlTmFtZSA9IHBhdGgubGFzdFNlZ21lbnQoKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nCi0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9vdXRwdXQvT3V0cHV0VGFiLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvZGVidWcvdWkvdGFicy9vdXRwdXQvT3V0cHV0VGFiLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NmI4OTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2RlYnVnL3VpL3RhYnMvb3V0cHV0L091dHB1dFRhYi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuV29ya2luZ0RpcmVjdG9yeUJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcuaW50ZXJuYWwudXRpbC5YU0xEZWJ1Z1BsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uWFNMTWFpblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgT3V0cHV0VGFiIGV4dGVuZHMgWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYiB7Ci0JcHJpdmF0ZSBmaW5hbCBPdXRwdXRGaWxlQmxvY2sgb3V0cHV0RmlsZUJsb2NrOwotCXByaXZhdGUgZmluYWwgV29ya2luZ0RpcmVjdG9yeUJsb2NrIHdvcmtpbmdEaXJlY3RvcnlCbG9jazsKLQotCXB1YmxpYyBPdXRwdXRUYWIoWFNMTWFpblRhYiBtYWluKSB7Ci0JCW91dHB1dEZpbGVCbG9jayA9IG5ldyBPdXRwdXRGaWxlQmxvY2soKTsKLQkJd29ya2luZ0RpcmVjdG9yeUJsb2NrID0gbmV3IFdvcmtpbmdEaXJlY3RvcnlCbG9jaygKLQkJCQlYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfV09SS0lOR19ESVIpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIElQcm9qZWN0IGdldFByb2plY3QoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfTsKLQotCQlzZXRCbG9ja3MobmV3IElMYXVuY2hDb25maWd1cmF0aW9uVGFiW10geyBvdXRwdXRGaWxlQmxvY2ssCi0JCQkJd29ya2luZ0RpcmVjdG9yeUJsb2NrIH0pOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0JCUNvbXBvc2l0ZSBjb21wID0gKENvbXBvc2l0ZSkgZ2V0Q29udHJvbCgpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKTsKLQkJY29tcC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQlvdXRwdXRGaWxlQmxvY2suY3JlYXRlQ29udHJvbChjb21wKTsKLQotCQl3b3JraW5nRGlyZWN0b3J5QmxvY2suY3JlYXRlQ29udHJvbChjb21wKTsKLQotCQkvLyBHcm91cCBncm91cCA9IG5ldyBHcm91cChjb21wLCBTV1QuTlVMTCk7Ci0JCS8vIGdyb3VwLnNldFRleHQoTWVzc2FnZXMuT3V0cHV0VGFiXzApOwotCQkvLyBHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQkvLyBncm91cC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJLy8gbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpOwotCQkvLyBncm91cC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQkvLyBvdXRwdXRCbG9jay5jcmVhdGVDb250cm9sKGdyb3VwKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gTWVzc2FnZXMuT3V0cHV0VGFiXzE7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gWFNMUGx1Z2luSW1hZ2VIZWxwZXIuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgKLQkJCQlYU0xEZWJ1Z1BsdWdpbkltYWdlcy5JTUdfT1VUUFVUX1RBQik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzgyZTQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMGIzMjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jRnJpIFNlcCAxOCAyMToxNzo0NyBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmE2NDguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsLkVYU0xUQ29yZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUuaW50ZXJuYWwucmVzb2x2ZXI7eC1pbnRlcm5hbDo9dHJ1ZQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQyMGI2Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzY2hlbWFzLyxcCi0gICAgICAgICAgICAgICBiaW4vLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZTI0ZDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBEYXZpZCBDYXJ2ZXIgLSBJbml0aWFsIEFQSSBhbmQgSW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1wbHVnaW5OYW1lPUVYU0xUIFVJIEV4dGVuc2lvbnMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjczZmJlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLnJlc29sdmVyRXh0ZW5zaW9ucyI+Ci0gICAgICA8cmVzb2x2ZXJFeHRlbnNpb24KLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUuaW50ZXJuYWwucmVzb2x2ZXIuRVhTTFRSZXNvbHZlckV4dGVuc2lvbiIKLSAgICAgICAgICAgIHN0YWdlPSJwcmVub3JtYWxpemF0aW9uIj4KLSAgICAgIDwvcmVzb2x2ZXJFeHRlbnNpb24+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9wb20ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA0OWE0ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQuY29yZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLSAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0gICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmU8L2FydGlmYWN0SWQ+Ci0gICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0gICA8dmVyc2lvbj4xLjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgIDxuYW1lPlhTTFQgRVhTTFQgQ29yZSBQbHVnaW48L25hbWU+Ci0KLSAgIDxwYXJlbnQ+Ci0gICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vZGV2ZWxvcG1lbnQvYXRoZW5hL29yZy5lY2xpcHNlLndzdC54c2wucmVsZW5nPC9yZWxhdGl2ZVBhdGg+Ci0gICA8L3BhcmVudD4KLQotICAgPGJ1aWxkPgotICAgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KLSAgICAgIDxwbHVnaW5zPgotICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi43PC92ZXJzaW9uPgotICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICA8L3BsdWdpbnM+Ci0gICA8L2J1aWxkPgotCi08L3Byb2plY3Q+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+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYTIyNzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI1R1ZSBTZXAgMjIgMjE6MzU6MTIgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZWY5YjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLkVYU0xUVUlQbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dDtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDt4LWludGVybmFsOj10cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2IzOWU2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBiaW4vCi1zcmMuaW5jbHVkZXMgPSBzcmMvLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZjJlYjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgRGF2aWQgQ2FydmVyIC0gSW5pdGlhbCBBUEkgYW5kIEltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotcGx1Z2luTmFtZT1FWFNMVCBDb3JlIEV4dGVuc2lvbnMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYWMwYzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmNvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPgotICAgICAgPHByb2Nlc3NvcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5FWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPgotICAgICAgPC9wcm9jZXNzb3I+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvcG9tLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGUwM2I5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLSAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0gICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpPC9hcnRpZmFjdElkPgotICAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPgotICAgPHZlcnNpb24+MS4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICA8bmFtZT5YU0xUIEVYU0xUIFVJIFBsdWdpbjwvbmFtZT4KLQotICAgPHBhcmVudD4KLSAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9kZXZlbG9wbWVudC9hdGhlbmEvb3JnLmVjbGlwc2Uud3N0LnhzbC5yZWxlbmc8L3JlbGF0aXZlUGF0aD4KLSAgIDwvcGFyZW50PgotCi0gICA8YnVpbGQ+Ci0gICAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgotICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjc8L3ZlcnNpb24+Ci0gICAgICAgICA8L3BsdWdpbj4KLSAgICAgIDwvcGx1Z2lucz4KLSAgIDwvYnVpbGQ+Ci0KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL0VYU0xUVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9FWFNMVFVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NTE0NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL0VYU0xUVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBFWFNMVFVJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBFWFNMVFVJUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgRVhTTFRVSVBsdWdpbigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEVYU0xUVUlQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9Db21tb25TZWxlY3RDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjcyMjQxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkRPTU5hbWVzcGFjZUhlbHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuTmFtZXNwYWNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC5jb3JlLmludGVybmFsLkVYU0xUQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIENvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0IGV4dGVuZHMgU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhTTFRfQ09NTU9OX05BTUVTUEFDRSA9ICJodHRwOi8vZXhzbHQub3JnL2NvbW1vbiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVfU0VUID0gIm5vZGUtc2V0KCApIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUX1RZUEUgPSAib2JqZWN0LXR5cGUoICkiOwotCQotCVN0cmluZyBwcmVmaXggPSAiIjsKLQlwdWJsaWMgQ29tbW9uU2VsZWN0Q29udGVudEFzc2lzdFJlcXVlc3QoTm9kZSBub2RlLAotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiwKLQkJCUlUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24sIGludCBiZWdpbiwgaW50IGxlbmd0aCwgU3RyaW5nIGZpbHRlciwKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIpIHsKLQkJc3VwZXIobm9kZSwgZG9jdW1lbnRSZWdpb24sIGNvbXBsZXRpb25SZWdpb24sIGJlZ2luLCBsZW5ndGgsIGZpbHRlciwKLQkJCQl0ZXh0Vmlld2VyKTsKLQkJCi0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKCkgewotCQlwcm9wb3NhbHMuY2xlYXIoKTsKLQkJCi0JCWFkanVzdFhQYXRoU3RhcnQoU0VMRUNUX0FUVFJJQlVURSk7Ci0KLQkJaW50IG9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IGdldEF0dHJpYnV0ZShTRUxFQ1RfQVRUUklCVVRFKTsKLQotCQl0aGlzLm1hdGNoU3RyaW5nID0gZXh0cmFjdFhQYXRoTWF0Y2hTdHJpbmcoYXR0ck5vZGUsIGdldFJlZ2lvbigpLAotCQkJCWdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpKTsKLQotCQlhZGRTZWxlY3RQcm9wb3NhbHMoKEVsZW1lbnQpIGdldE5vZGUoKS5nZXRQYXJlbnROb2RlKCksIG9mZnNldCk7Ci0KLQkJcmV0dXJuIGdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBhZGRTZWxlY3RQcm9wb3NhbHMoRWxlbWVudCByb290RWxlbWVudCwgaW50IG9mZnNldCkgewotCQlEb2N1bWVudCBkb2MgPSByb290RWxlbWVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0JCU5hbWVzcGFjZVRhYmxlIG5hbWVzcGFjZVRhYmxlID0gbmV3IE5hbWVzcGFjZVRhYmxlKGRvYyk7Ci0JCW5hbWVzcGFjZVRhYmxlLmFkZEVsZW1lbnQoZG9jLmdldERvY3VtZW50RWxlbWVudCgpKTsKLQkJcHJlZml4ID0gbmFtZXNwYWNlVGFibGUuZ2V0UHJlZml4Rm9yVVJJKEVYU0xUQ29yZS5FWFNMVF9DT01NT05fTkFNRVNQQUNFKTsKLQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQlhZGROb2RlU2V0UHJvcG9zYWwoKTsKLQkJCWFkZE9iamVjdFR5cGVQcm9wb3NhbCgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBhZGROb2RlU2V0UHJvcG9zYWwoKSB7Ci0JCVN0cmluZyBub2Rlc2V0ID0gIiI7Ci0JCi0JCWlmIChwcmVmaXggIT0gbnVsbCkgewotCQkJbm9kZXNldCA9IHByZWZpeCArICI6IiArIE5PREVfU0VUOwotCQl9IGVsc2UgewotCQkJbm9kZXNldCA9IE5PREVfU0VUOwotCQl9Ci0JCQotCQlDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgcHJvcG9zYWwgPSBuZXcgQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsKAotCQkJCW5vZGVzZXQsIGdldFN0YXJ0T2Zmc2V0KCkgKyAxLCAwLAotCQkJCW5vZGVzZXQubGVuZ3RoKCksIFhTTFBsdWdpbkltYWdlSGVscGVyCi0JCQkJCQkuZ2V0SW5zdGFuY2UoKS5nZXRJbWFnZSgKLQkJCQkJCQkJWFNMUGx1Z2luSW1hZ2VzLklNR19YUEFUSF9GVU5DVElPTiksIG5vZGVzZXQsIG51bGwsIG51bGwsIDApOwotCQlwcm9wb3NhbHMuYWRkKChJQ29tcGxldGlvblByb3Bvc2FsKXByb3Bvc2FsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGFkZE9iamVjdFR5cGVQcm9wb3NhbCgpIHsKLQkJU3RyaW5nIG5vZGVzZXQgPSAiIjsKLQkKLQkJaWYgKHByZWZpeCAhPSBudWxsKSB7Ci0JCQlub2Rlc2V0ID0gcHJlZml4ICsgIjoiICsgT0JKRUNUX1RZUEU7Ci0JCX0gZWxzZSB7Ci0JCQlub2Rlc2V0ID0gT0JKRUNUX1RZUEU7Ci0JCX0KLQkJCi0JCUN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IG5ldyBDdXN0b21Db21wbGV0aW9uUHJvcG9zYWwoCi0JCQkJbm9kZXNldCwgZ2V0U3RhcnRPZmZzZXQoKSArIDEsIDAsCi0JCQkJbm9kZXNldC5sZW5ndGgoKSwgWFNMUGx1Z2luSW1hZ2VIZWxwZXIKLQkJCQkJCS5nZXRJbnN0YW5jZSgpLmdldEltYWdlKAotCQkJCQkJCQlYU0xQbHVnaW5JbWFnZXMuSU1HX1hQQVRIX0ZVTkNUSU9OKSwgbm9kZXNldCwgbnVsbCwgbnVsbCwgMCk7Ci0JCXByb3Bvc2Fscy5hZGQoKElDb21wbGV0aW9uUHJvcG9zYWwpcHJvcG9zYWwpOwotCX0JCi0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9Db21tb25UZXN0Q29udGVudEFzc2lzdFJlcXVlc3QuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblRlc3RDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTEzMDliLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5leHNsdC51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9leHNsdC91aS9pbnRlcm5hbC9jb250ZW50YXNzaXN0L0NvbW1vblRlc3RDb250ZW50QXNzaXN0UmVxdWVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBDb21tb25UZXN0Q29udGVudEFzc2lzdFJlcXVlc3QgZXh0ZW5kcwotCQlDb21tb25TZWxlY3RDb250ZW50QXNzaXN0UmVxdWVzdCB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgQVRUUl9URVNUID0gInRlc3QiOyAgLy8kTk9OLU5MUy0xJAotCQotCXB1YmxpYyBDb21tb25UZXN0Q29udGVudEFzc2lzdFJlcXVlc3QoTm9kZSBub2RlLAotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiwKLQkJCUlUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24sIGludCBiZWdpbiwgaW50IGxlbmd0aCwgU3RyaW5nIGZpbHRlciwKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIpIHsKLQkJc3VwZXIobm9kZSwgZG9jdW1lbnRSZWdpb24sIGNvbXBsZXRpb25SZWdpb24sIGJlZ2luLCBsZW5ndGgsIGZpbHRlciwgdGV4dFZpZXdlcik7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBBcnJheUxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD4gZ2V0Q29tcGxldGlvblByb3Bvc2FscygpIHsKLQkJcHJvcG9zYWxzLmNsZWFyKCk7Ci0JCQotCQlhZGp1c3RYUGF0aFN0YXJ0KEFUVFJfVEVTVCk7Ci0KLQkJaW50IG9mZnNldCA9IGdldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbigpOwotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IGdldEF0dHJpYnV0ZShBVFRSX1RFU1QpOwotCi0JCXRoaXMubWF0Y2hTdHJpbmcgPSBleHRyYWN0WFBhdGhNYXRjaFN0cmluZyhhdHRyTm9kZSwgZ2V0UmVnaW9uKCksCi0JCQkJZ2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uKCkpOwotCi0JCWFkZFNlbGVjdFByb3Bvc2FscygoRWxlbWVudCkgZ2V0Tm9kZSgpLmdldFBhcmVudE5vZGUoKSwgb2Zmc2V0KTsKLQotCQlyZXR1cm4gZ2V0QWxsQ29tcGxldGlvblByb3Bvc2FscygpOwotCX0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvRVhTTFRDb21tb25Db250ZW50QXNzaXN0UHJvY2Vzc29yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE5MTBiMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgTW9sbGVyIC0gYnVnIDMwMzgyMyAtIE5QRSBpZiBuYW1lc3BhY2Ugd2FzIHVua25vd24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZXh0SW5mb3JtYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBFWFNMVENvbW1vbkNvbnRlbnRBc3Npc3RQcm9jZXNzb3IgZXh0ZW5kcwotCQlBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgaW1wbGVtZW50cyBJQ29udGVudEFzc2lzdFByb2Nlc3NvciB7Ci0KLQlwcml2YXRlIEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBleHNsdFByb3Bvc2FsczsKLQkKLQlwdWJsaWMgRVhTTFRDb21tb25Db250ZW50QXNzaXN0UHJvY2Vzc29yKCkgewotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWF4aW11bVZlcnNpb24oKSB7Ci0JCXJldHVybiAiMS4wIjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1pbmltdW1WZXJzaW9uKCkgewotCQlyZXR1cm4gIjEuMCI7Ci0JfQotCi0JcHVibGljIEFycmF5TGlzdDxTdHJpbmc+IGdldE5hbWVzcGFjZXMoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCi0JcHVibGljIElDb250ZXh0SW5mb3JtYXRpb25bXSBjb21wdXRlQ29udGV4dEluZm9ybWF0aW9uKElUZXh0Vmlld2VyIHZpZXdlciwKLQkJCWludCBvZmZzZXQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0KLQlwdWJsaWMgY2hhcltdIGdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IgZ2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXSBjb21wdXRlQ29tcGxldGlvblByb3Bvc2FscygKLQkJCUlUZXh0Vmlld2VyIHRleHRWaWV3ZXIsIGludCBkb2N1bWVudFBvc2l0aW9uKSB7Ci0JCWluaXRpYWxpemVQcm9wb3NhbFZhcmlhYmxlcyh0ZXh0Vmlld2VyLCBkb2N1bWVudFBvc2l0aW9uKTsKLQkJCi0JCQkJCi0JCS8vIE9ubHkgcHJvdmlkZSBwcm9wb3NhbHMgZm9yIGVsZW1lbnRzIGluIGVpdGhlciB0aGUgWFNMVCBOYW1lc3BhY2Ugb3IgRVhTTFQgbmFtZXNwYWNlLgotCQlTdHJpbmcgbmFtZXNwYWNlVVJJID0geG1sTm9kZS5nZXROYW1lc3BhY2VVUkkoKTsKLQkJaWYgKG5hbWVzcGFjZVVSSSA9PSBudWxsIHx8Ci0JCQkhbmFtZXNwYWNlVVJJLmNvbnRhaW5zKCJodHRwOi8vZXhzbHQub3JnLyIpICYmCi0JCQkhbmFtZXNwYWNlVVJJLmVxdWFscyhYU0xDb3JlLlhTTF9OQU1FU1BBQ0VfVVJJKSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlFWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeSByZXF1ZXN0RmFjdG9yeSA9IG5ldyBFWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeSgKLQkJCQl0ZXh0Vmlld2VyLCBjdXJzb3JQb3NpdGlvbiwgeG1sTm9kZSwgc2RSZWdpb24sCi0JCQkJY29tcGxldGlvblJlZ2lvbiwgbWF0Y2hTdHJpbmcpOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QgY29udGVudEFzc2lzdFJlcXVlc3QgPSByZXF1ZXN0RmFjdG9yeQotCQkJLmdldENvbnRlbnRBc3Npc3RSZXF1ZXN0KCk7Ci0JCQotCQlleHNsdFByb3Bvc2FscyA9IGNvbnRlbnRBc3Npc3RSZXF1ZXN0LmdldENvbXBsZXRpb25Qcm9wb3NhbHMoKTsKLQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IG5ldyBJQ29tcGxldGlvblByb3Bvc2FsW2V4c2x0UHJvcG9zYWxzLnNpemUoKV07Ci0JCWV4c2x0UHJvcG9zYWxzLnRvQXJyYXkocHJvcG9zYWxzKTsKLQkJCi0JCXJldHVybiBwcm9wb3NhbHM7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2V4c2x0L3VpL2ludGVybmFsL2NvbnRlbnRhc3Npc3QvRVhTTFRDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTViZTUxYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuZXhzbHQudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvZXhzbHQvdWkvaW50ZXJuYWwvY29udGVudGFzc2lzdC9FWFNMVENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01BdHRyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Lk51bGxDb250ZW50QXNzaXN0UmVxdWVzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci0KLS8qKgotICogQSBGYWN0b3J5IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBDb250ZW50IEFzc2lzdCBSZXF1ZXN0IGNsYXNzIGlzIG5lZWRlZCBhbmQKLSAqIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIGNsYXNzLgotICogCi0gKiBAYXV0aG9yIERhdmlkIENhcnZlcgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgRVhTTFRDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1NFTEVDVCA9ICJzZWxlY3QiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVEVTVCA9ICJ0ZXN0IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01BVENIID0gIm1hdGNoIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcjsKLQlwcml2YXRlIGludCBkb2N1bWVudFBvc2l0aW9uOwotCXByaXZhdGUgSURPTU5vZGUgeG1sTm9kZTsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2RSZWdpb247Ci0JcHJpdmF0ZSBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uOwotCXByaXZhdGUgU3RyaW5nIG1hdGNoU3RyaW5nOwotCQotCi0JLyoqCi0JICogQHBhcmFtIHRleHRWaWV3ZXIKLQkgKiBAcGFyYW0gZG9jdW1lbnRQb3NpdGlvbgotCSAqIEBwYXJhbSB4bWxOb2RlCi0JICogQHBhcmFtIHNkUmVnaW9uCi0JICogQHBhcmFtIGNvbXBsZXRpb25SZWdpb24KLQkgKiBAcGFyYW0gbWF0Y2hTdHJpbmcKLQkgKi8KLQlwdWJsaWMgRVhTTFRDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkoSVRleHRWaWV3ZXIgdGV4dFZpZXdlciwgaW50IGRvY3VtZW50UG9zaXRpb24sIElET01Ob2RlIHhtbE5vZGUsCi0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNkUmVnaW9uLCBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uLAotCQkJU3RyaW5nIG1hdGNoU3RyaW5nKSB7Ci0JCXRoaXMudGV4dFZpZXdlciA9IHRleHRWaWV3ZXI7Ci0JCXRoaXMuZG9jdW1lbnRQb3NpdGlvbiA9IGRvY3VtZW50UG9zaXRpb247Ci0JCXRoaXMueG1sTm9kZSA9IHhtbE5vZGU7Ci0JCXRoaXMuc2RSZWdpb24gPSBzZFJlZ2lvbjsKLQkJdGhpcy5jb21wbGV0aW9uUmVnaW9uID0gY29tcGxldGlvblJlZ2lvbjsKLQkJdGhpcy5tYXRjaFN0cmluZyA9IG1hdGNoU3RyaW5nOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGNvbnRlbnQgYXNzaXN0IHJlcXVlc3QgY2xhc3MgZm9yIHRoZSBYU0wgcmVxdWVzdC4KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIElDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0IGdldENvbnRlbnRBc3Npc3RSZXF1ZXN0KCkgewotCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCA9IHhtbE5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQlJRE9NRWxlbWVudCBlbGVtZW50ID0gKElET01FbGVtZW50KSB4bWxOb2RlOwotCQlJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBwcm9wb3NhbCA9IGNvbW1vbkF0dHJpYnV0ZVByb3Bvc2Fscyhub2RlTWFwKTsKLQkJCi0JCWlmIChwcm9wb3NhbCBpbnN0YW5jZW9mIE51bGxDb250ZW50QXNzaXN0UmVxdWVzdCkgewotCQkJaWYgKGlzRWxlbWVudFByb3Bvc2FsKGVsZW1lbnQpKSB7Ci0JCQkJcHJvcG9zYWwgPSBnZXROdWxsUHJvcG9zYWwoKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBwcm9wb3NhbDsKLQl9Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudFByb3Bvc2FsKElET01FbGVtZW50IGVsZW1lbnQpIHsKLQkJU3RyaW5nIGxvY2FsTmFtZSA9IGVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHJpdmF0ZSBJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBjb21tb25BdHRyaWJ1dGVQcm9wb3NhbHMoCi0JCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCkgewotCQlpZiAoaGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uKEFUVFJfU0VMRUNULCBub2RlTWFwLAotCQkJCWNvbXBsZXRpb25SZWdpb24pKSB7Ci0JCQlyZXR1cm4gbmV3IENvbW1vblNlbGVjdENvbnRlbnRBc3Npc3RSZXF1ZXN0KHhtbE5vZGUsIHNkUmVnaW9uLAotCQkJCQljb21wbGV0aW9uUmVnaW9uLCBkb2N1bWVudFBvc2l0aW9uLCAwLCBtYXRjaFN0cmluZywKLQkJCQkJdGV4dFZpZXdlcik7Ci0JCX0KLQkKLQkJaWYgKGhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbihBVFRSX1RFU1QsIG5vZGVNYXAsIGNvbXBsZXRpb25SZWdpb24pKSB7Ci0JCQlyZXR1cm4gbmV3IENvbW1vblRlc3RDb250ZW50QXNzaXN0UmVxdWVzdCh4bWxOb2RlLCBzZFJlZ2lvbiwKLQkJCQkJY29tcGxldGlvblJlZ2lvbiwgZG9jdW1lbnRQb3NpdGlvbiwgMCwgbWF0Y2hTdHJpbmcsCi0JCQkJCXRleHRWaWV3ZXIpOwotCQl9Ci0JCQotCQlyZXR1cm4gZ2V0TnVsbFByb3Bvc2FsKCk7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbihTdHJpbmcgYXR0ck5hbWUsCi0JCQlOYW1lZE5vZGVNYXAgbm9kZU1hcCwgSVRleHRSZWdpb24gYVJlZ2lvbikgewotCQlJRE9NQXR0ciBhdHRyTm9kZSA9IChJRE9NQXR0cikgbm9kZU1hcC5nZXROYW1lZEl0ZW0oYXR0ck5hbWUpOwotCQlyZXR1cm4gYXR0ck5vZGUgIT0gbnVsbCAmJiBhdHRyTm9kZS5nZXRWYWx1ZVJlZ2lvbigpICE9IG51bGwKLQkJCQkmJiBhdHRyTm9kZS5nZXRWYWx1ZVJlZ2lvbigpLmdldFN0YXJ0KCkgPT0gYVJlZ2lvbi5nZXRTdGFydCgpOwotCX0JCi0JCi0JcHJpdmF0ZSBJQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdCBnZXROdWxsUHJvcG9zYWwoKSB7Ci0JCXJldHVybiBuZXcgTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0KHhtbE5vZGUsIHNkUmVnaW9uLAotCQkJCWNvbXBsZXRpb25SZWdpb24sIGRvY3VtZW50UG9zaXRpb24sIDAsIG1hdGNoU3RyaW5nLCB0ZXh0Vmlld2VyKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhjOTFhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvKioiLz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC94c2wvdWkvaW50ZXJuYWwvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTZmNzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNmYyMWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotI1RodSBKdW4gMTEgMDE6MzY6NTcgR01UIDIwMDkKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTRiODY4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLkpBWFBEZWJ1Z1VJUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAldmVuZG9yTmFtZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmRlYnVnLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5pZGU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjQwMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aTtidW5kbGUtdmVyc2lvbj0iWzMuMy4wLDQuMC4wKSIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvcjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3czt4LWludGVybmFsOj10cnVlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMDAwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+QXVndXN0LCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDdmY2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9pY29ucy94c2x0X3Byb2Nlc3Nvci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9pY29ucy94c2x0X3Byb2Nlc3Nvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNzEyODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvaWNvbnMveHNsdF9wcm9jZXNzb3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZmYmFkYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpCi12ZW5kb3JOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWUgPSBYU0wgSkFYUCBEZWJ1ZyBVSQotcGFnZU5hbWVKYXZhUHJvY2Vzc29ycyA9IEphdmEgUHJvY2Vzc29ycwotdmlld05hbWVSZXN1bHQgPSBSZXN1bHQKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk3MmRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9uVGFicyI+Ci0JCTx0YWIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IuWFNMUHJvY2Vzc29yVGFiMiIKLQkJCWdyb3VwPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25UYWJHcm91cC54c2x0IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuamF4cC50YWJzLnByb2Nlc3NvciIgbmFtZT0iUHJvY2Vzc29yIj4KLQkJCTxhc3NvY2lhdGVkRGVsZWdhdGUKLQkJCQlkZWxlZ2F0ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuaW50ZXJuYWwuamF4cC5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIj4KLQkJCTwvYXNzb2NpYXRlZERlbGVnYXRlPgotCQkJPHBsYWNlbWVudCBhZnRlcj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dCI+Ci0JCQk8L3BsYWNlbWVudD4KLQkJPC90YWI+Ci0JCTx0YWIgY2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9ucy5KYXZhSlJFVGFiIgotCQkJZ3JvdXA9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwLnhzbHQiCi0JCQlpZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmphdmFKUkVUYWIiIG5hbWU9IkpSRSI+Ci0JCQk8YXNzb2NpYXRlZERlbGVnYXRlCi0JCQkJZGVsZWdhdGU9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmludGVybmFsLmpheHAuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZSI+Ci0JCQk8L2Fzc29jaWF0ZWREZWxlZ2F0ZT4KLQkJCTxwbGFjZW1lbnQgYWZ0ZXI9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuamF4cC50YWJzLnByb2Nlc3NvciI+Ci0JCQk8L3BsYWNlbWVudD4KLQkJPC90YWI+Ci0JCTx0YWIgY2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9ucy5KYXZhQ2xhc3NwYXRoVGFiIgotCQkJZ3JvdXA9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwLnhzbHQiCi0JCQlpZD0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmphdmFDbGFzc3BhdGhUYWIiIG5hbWU9IkNsYXNzcGF0aCI+Ci0JCQk8YXNzb2NpYXRlZERlbGVnYXRlCi0JCQkJZGVsZWdhdGU9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmludGVybmFsLmpheHAuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZSI+Ci0JCQk8L2Fzc29jaWF0ZWREZWxlZ2F0ZT4KLQkJCTxwbGFjZW1lbnQgYWZ0ZXI9Im9yZy5lY2xpcHNlLmpkdC5kZWJ1Zy51aS5qYXZhSlJFVGFiIj4KLQkJCTwvcGxhY2VtZW50PgotCQk8L3RhYj4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotCQk8cGFnZSBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcmVmZXJlbmNlcy5CYXNlUHJlZmVyZW5jZVBhZ2UiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByZWZlcmVuY2VzLmphdmEiIG5hbWU9IiVwYWdlTmFtZUphdmFQcm9jZXNzb3JzIj4KLQkJPC9wYWdlPgotCTwvZXh0ZW5zaW9uPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotICAgIDx2aWV3Ci0gICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3cy5SZXN1bHRWaWV3IgotICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkucmVzdWx0dmlldyIKLSAgICAgICAgICBuYW1lPSIldmlld05hbWVSZXN1bHQiCi0gICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC54bWwiPgotICAgIDwvdmlldz4KLSA8L2V4dGVuc2lvbj4KLSAgPGV4dGVuc2lvbgotICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVFeHRlbnNpb25zIj4KLSAgICAgPHBlcnNwZWN0aXZlRXh0ZW5zaW9uCi0gICAgICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5EZWJ1Z1BlcnNwZWN0aXZlIj4KLSAgICAgICAgPHZpZXcKLSAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS52aWV3MSIKLSAgICAgICAgICAgICAgbWluaW1pemVkPSJmYWxzZSIKLSAgICAgICAgICAgICAgcmVsYXRpb25zaGlwPSJzdGFjayIKLSAgICAgICAgICAgICAgcmVsYXRpdmU9Im9yZy5lY2xpcHNlLnVpLmNvbnNvbGUuQ29uc29sZVZpZXciCi0gICAgICAgICAgICAgIHZpc2libGU9ImZhbHNlIj4KLSAgICAgICAgPC92aWV3PgotICAgICA8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgotICA8L2V4dGVuc2lvbj4KLSAKLSAJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcudWkuY29udGV4dFZpZXdCaW5kaW5ncyI+Ci0JCTxjb250ZXh0Vmlld0JpbmRpbmcKLQkJCWNvbnRleHRJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5jb250ZXh0IgotCQkJdmlld0lkPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkucmVzdWx0dmlldyI+Ci0JCTwvY29udGV4dFZpZXdCaW5kaW5nPgotCTwvZXh0ZW5zaW9uPgotIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wb20ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNmM2YwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLSAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0gICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWk8L2FydGlmYWN0SWQ+Ci0gICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0gICA8dmVyc2lvbj4xLjAuMjAwLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgPG5hbWU+WFNMVCBKQVhQIERlYnVnIFVJIFBsdWdpbjwvbmFtZT4KLQotICAgPHBhcmVudD4KLSAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0gICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjEuMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9kZXZlbG9wbWVudC9hdGhlbmEvb3JnLmVjbGlwc2Uud3N0LnhzbC5yZWxlbmc8L3JlbGF0aXZlUGF0aD4KLSAgIDwvcGFyZW50PgotCi0gICA8YnVpbGQ+Ci0gICAgICA8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5PgotICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjc8L3ZlcnNpb24+Ci0gICAgICAgICA8L3BsdWdpbj4KLSAgICAgIDwvcGx1Z2lucz4KLSAgIDwvYnVpbGQ+Ci0KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9KQVhQRGVidWdVSVBsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9KQVhQRGVidWdVSVBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmU3YWE4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvSkFYUERlYnVnVUlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhQRGVidWdVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpIjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEpBWFBEZWJ1Z1VJUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgSkFYUERlYnVnVUlQbHVnaW4oKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBKQVhQRGVidWdVSVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9BZGRQcm9jZXNzb3JEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQWRkUHJvY2Vzc29yRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YjkyYjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9BZGRQcm9jZXNzb3JEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlN0YXR1c0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbWJvVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvci5JbnN0YWxsU3RhbmRpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklEZWJ1Z2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRQcm9jZXNzb3JEaWFsb2cgZXh0ZW5kcyBTdGF0dXNEaWFsb2cKLXsKLQlwcml2YXRlIGZpbmFsIEluc3RhbGxTdGFuZGluIHN0YW5kaW5Qcm9jZXNzb3I7Ci0JcHJpdmF0ZSBmaW5hbCBJUHJvY2Vzc29yVHlwZVtdIHByb2Nlc3NvclR5cGVzOwotCXByaXZhdGUgSVByb2Nlc3NvclR5cGUgc2VsZWN0ZWRQcm9jZXNzb3JUeXBlOwotCXByaXZhdGUgQ29tYm9WaWV3ZXIgcHJvY2Vzc29yVHlwZUZpZWxkOwotCXByaXZhdGUgUHJvY2Vzc29yTGlicmFyeUJsb2NrIGZMaWJyYXJ5QmxvY2s7Ci0JcHJpdmF0ZSBUZXh0IHByb2Nlc3Nvck5hbWVGaWVsZDsKLQlwcml2YXRlIGZpbmFsIElTdGF0dXNbXSBmU3RhdGk7Ci0JcHJpdmF0ZSBpbnQgZlByZXZJbmRleCA9IC0xOwotCXByaXZhdGUgZmluYWwgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrIGJsb2NrOwotCXByaXZhdGUgYm9vbGVhbiBhZGRpbmc7Ci0KLQlwdWJsaWMgQWRkUHJvY2Vzc29yRGlhbG9nKEluc3RhbGxlZFByb2Nlc3NvcnNCbG9jayBibG9jaywgU2hlbGwgcGFyZW50LCBJUHJvY2Vzc29yVHlwZVtdIHR5cGVzLCBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJc3VwZXIocGFyZW50KTsKLQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQkJdGhpcy5ibG9jayA9IGJsb2NrOwotCQlmU3RhdGkgPSBuZXcgSVN0YXR1c1s1XTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmU3RhdGkubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWZTdGF0aVtpXSA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCX0KLQkJcHJvY2Vzc29yVHlwZXMgPSB0eXBlczsKLQkJc2VsZWN0ZWRQcm9jZXNzb3JUeXBlID0gaW5zdGFsbCAhPSBudWxsID8gaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkgOiB0eXBlc1swXTsKLQkJSW5zdGFsbFN0YW5kaW4gc3RhbmRpbiA9IG51bGw7Ci0JCWlmIChpbnN0YWxsID09IG51bGwpCi0JCXsKLQkJCWFkZGluZyA9IHRydWU7Ci0JCQlzdGFuZGluID0gbmV3IEluc3RhbGxTdGFuZGluKEpBWFBSdW50aW1lLmNyZWF0ZVVuaXF1ZVByb2Nlc3NvcklkKHNlbGVjdGVkUHJvY2Vzc29yVHlwZSksICIiLCBzZWxlY3RlZFByb2Nlc3NvclR5cGUuZ2V0SWQoKSwgbnVsbCwgbmV3IElQcm9jZXNzb3JKYXJbMF0pOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlzdGFuZGluID0gbmV3IEluc3RhbGxTdGFuZGluKGluc3RhbGwpOwotCQl9Ci0JCXN0YW5kaW5Qcm9jZXNzb3IgPSBzdGFuZGluOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIG5ld1NoZWxsKQotCXsKLQkJc3VwZXIuY29uZmlndXJlU2hlbGwobmV3U2hlbGwpOwotCQkvLyBUT0RPIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAuLi4KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVEaWFsb2dGaWVsZHMoQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCUdyaWREYXRhIGdkOwotCQlMYWJlbCBsYWJlbDsKLQotCQlsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfcHJvY2Vzc29yTmFtZSk7Ci0JCXByb2Nlc3Nvck5hbWVGaWVsZCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULkJPUkRFUik7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5OT05FLCBTV1QuTk9ORSwgZmFsc2UsIGZhbHNlKTsKLQkJZ2Qud2lkdGhIaW50ID0gY29udmVydFdpZHRoSW5DaGFyc1RvUGl4ZWxzKDUwKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlwcm9jZXNzb3JOYW1lRmllbGQuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJbGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX3Byb2Nlc3NvclR5cGUpOwotCQlwcm9jZXNzb3JUeXBlRmllbGQgPSBuZXcgQ29tYm9WaWV3ZXIocGFyZW50LCBTV1QuUkVBRF9PTkxZKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlwcm9jZXNzb3JUeXBlRmllbGQuZ2V0Q29tYm8oKS5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcHJvY2Vzc29yVHlwZUZpZWxkLnNldENvbnRlbnRQcm92aWRlcihuZXcgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIoKQotCQl7Ci0KLQkJCXByaXZhdGUgT2JqZWN0IGlucHV0OwotCi0JCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gKElQcm9jZXNzb3JUeXBlW10pIGlucHV0OwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJCXsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQkJewotCQkJCWlucHV0ID0gbmV3SW5wdXQ7Ci0JCQl9Ci0JCX0pOwotCQlwcm9jZXNzb3JUeXBlRmllbGQuc2V0TGFiZWxQcm92aWRlcihuZXcgTGFiZWxQcm92aWRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCXJldHVybiAoKElQcm9jZXNzb3JUeXBlKSBlbGVtZW50KS5nZXRMYWJlbCgpOwotCQkJfQotCQl9KTsKLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUZpZWxkTGlzdGVuZXJzKCkKLQl7Ci0JCXByb2Nlc3NvclR5cGVGaWVsZC5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQl1cGRhdGVQcm9jZXNzb3JUeXBlKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXByb2Nlc3Nvck5hbWVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0JCQl7Ci0JCQkJc2V0UHJvY2Vzc29yTmFtZVN0YXR1cyh2YWxpZGF0ZVByb2Nlc3Nvck5hbWUoKSk7Ci0JCQkJdXBkYXRlU3RhdHVzTGluZSgpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2Nlc3Nvck5hbWUoKQotCXsKLQkJcmV0dXJuIHByb2Nlc3Nvck5hbWVGaWVsZC5nZXRUZXh0KCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgYW5jZXN0b3IpCi0JewotCQlDb21wb3NpdGUgcGFyZW50ID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShhbmNlc3Rvcik7Ci0JCSgoR3JpZExheW91dCkgcGFyZW50LmdldExheW91dCgpKS5udW1Db2x1bW5zID0gMzsKLS8vCQkoKEdyaWREYXRhKSBwYXJlbnQuZ2V0TGF5b3V0RGF0YSgpKS5oZWlnaHRIaW50ID0gNDAwOwotLy8JCSgoR3JpZERhdGEpIHBhcmVudC5nZXRMYXlvdXREYXRhKCkpLndpZHRoSGludCA9IDQwMDsKLQotCQljcmVhdGVEaWFsb2dGaWVsZHMocGFyZW50KTsKLQotCQlMYWJlbCBsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOwotCQlsLnNldFRleHQoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX2phcnMpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDM7Ci0JCWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJZkxpYnJhcnlCbG9jayA9IG5ldyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2sodGhpcyk7Ci0JCUNvbnRyb2wgYmxvY2sgPSBmTGlicmFyeUJsb2NrLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAzOwotCQlibG9jay5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlpbml0aWFsaXplRmllbGRzKCk7Ci0JCWNyZWF0ZUZpZWxkTGlzdGVuZXJzKCk7Ci0JCWFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotCQkKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlUHJvY2Vzc29yVHlwZSgpCi0JewotCQlpbnQgc2VsSW5kZXggPSBwcm9jZXNzb3JUeXBlRmllbGQuZ2V0Q29tYm8oKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotCQlpZiAoc2VsSW5kZXggPT0gZlByZXZJbmRleCkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCWZQcmV2SW5kZXggPSBzZWxJbmRleDsKLQkJaWYgKHNlbEluZGV4ID49IDAgJiYgc2VsSW5kZXggPCBwcm9jZXNzb3JUeXBlcy5sZW5ndGgpCi0JCXsKLQkJCXNlbGVjdGVkUHJvY2Vzc29yVHlwZSA9IHByb2Nlc3NvclR5cGVzW3NlbEluZGV4XTsKLQkJfQotCQlmTGlicmFyeUJsb2NrLmluaXRpYWxpemVGcm9tKHN0YW5kaW5Qcm9jZXNzb3IsIHNlbGVjdGVkUHJvY2Vzc29yVHlwZSk7Ci0JCXVwZGF0ZVN0YXR1c0xpbmUoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGUoKQotCXsKLQkJc3VwZXIuY3JlYXRlKCk7Ci0JCXByb2Nlc3Nvck5hbWVGaWVsZC5zZXRGb2N1cygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplRmllbGRzKCkKLQl7Ci0JCXByb2Nlc3NvclR5cGVGaWVsZC5zZXRJbnB1dChwcm9jZXNzb3JUeXBlcyk7Ci0JCWlmIChhZGRpbmcpCi0JCXsKLQkJCXByb2Nlc3Nvck5hbWVGaWVsZC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvY2Vzc29yVHlwZUZpZWxkLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihwcm9jZXNzb3JUeXBlc1swXSkpOwotCQkJZkxpYnJhcnlCbG9jay5pbml0aWFsaXplRnJvbShzdGFuZGluUHJvY2Vzc29yLCBzZWxlY3RlZFByb2Nlc3NvclR5cGUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJvY2Vzc29yVHlwZUZpZWxkLmdldENvbWJvKCkuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCQlwcm9jZXNzb3JUeXBlRmllbGQuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHN0YW5kaW5Qcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpKSk7Ci0JCQlwcm9jZXNzb3JOYW1lRmllbGQuc2V0VGV4dChzdGFuZGluUHJvY2Vzc29yLmdldE5hbWUoKSk7Ci0KLQkJCWZMaWJyYXJ5QmxvY2suaW5pdGlhbGl6ZUZyb20oc3RhbmRpblByb2Nlc3Nvciwgc2VsZWN0ZWRQcm9jZXNzb3JUeXBlKTsKLQkJfQotCQlzZXRQcm9jZXNzb3JOYW1lU3RhdHVzKHZhbGlkYXRlUHJvY2Vzc29yTmFtZSgpKTsKLQkJdXBkYXRlU3RhdHVzTGluZSgpOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyB2YWxpZGF0ZVByb2Nlc3Nvck5hbWUoKQotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlTdHJpbmcgbmFtZSA9IHByb2Nlc3Nvck5hbWVGaWVsZC5nZXRUZXh0KCk7Ci0JCWlmIChuYW1lID09IG51bGwgfHwgbmFtZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLk9LLCBNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfZW50ZXJOYW1lLCBudWxsKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChibG9jay5pc0R1cGxpY2F0ZU5hbWUobmFtZSkgJiYgKHN0YW5kaW5Qcm9jZXNzb3IgPT0gbnVsbCB8fCAhbmFtZS5lcXVhbHMoc3RhbmRpblByb2Nlc3Nvci5nZXROYW1lKCkpKSkKLQkJCXsKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLk9LLCBNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfZHVwbGljYXRlTmFtZSwgbnVsbCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLy8gSVN0YXR1cyBzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnZhbGlkYXRlTmFtZShuYW1lLAotCQkJCS8vIElSZXNvdXJjZS5GSUxFKTsKLQkJCQkvLyBpZiAoIXMuaXNPSygpKQotCQkJCS8vIHsKLQkJCQkvLyBzdGF0dXMuc2V0RXJyb3IoTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX1Byb2Nlc3Nvcl9uYW1lX211c3RfYmVfYV92YWxpZF9maWxlX25hbWUsCi0JCQkJLy8gbmV3IFN0cmluZ1tdCi0JCQkJLy8geyBzLmdldE1lc3NhZ2UoKSB9KSk7Ci0JCQkJLy8gfQotCQkJfQotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgdmFsaWRhdGVWZXJzaW9uU3RhdHVzKCkKLQl7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVTdGF0dXNMaW5lKCkKLQl7Ci0JCUlTdGF0dXMgbWF4ID0gbnVsbDsKLQkJZm9yIChJU3RhdHVzIGN1cnIgOiBmU3RhdGkpCi0JCXsKLQkJCWlmIChjdXJyLm1hdGNoZXMoSVN0YXR1cy5FUlJPUikpCi0JCQl7Ci0JCQkJdXBkYXRlU3RhdHVzKGN1cnIpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChtYXggPT0gbnVsbCB8fCBjdXJyLmdldFNldmVyaXR5KCkgPiBtYXguZ2V0U2V2ZXJpdHkoKSkKLQkJCXsKLQkJCQltYXggPSBjdXJyOwotCQkJfQotCQl9Ci0JCXVwZGF0ZVN0YXR1cyhtYXgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCgpCi0JewotCQlkb09rUHJlc3NlZCgpOwotCQlzdXBlci5va1ByZXNzZWQoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9Pa1ByZXNzZWQoKQotCXsKLQkJaWYgKGFkZGluZykKLQkJewotCQkJc2V0RmllbGRWYWx1ZXNUb1Byb2Nlc3NvcihzdGFuZGluUHJvY2Vzc29yKTsKLQkJCWJsb2NrLnByb2Nlc3NvckFkZGVkKHN0YW5kaW5Qcm9jZXNzb3IpOwotCQl9Ci0vLwkJZWxzZQotLy8JCQlzZXRGaWVsZFZhbHVlc1RvUHJvY2Vzc29yKChQcm9jZXNzb3JJbnN0YWxsKWVkaXRlZFByb2Nlc3Nvcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0RmllbGRWYWx1ZXNUb1Byb2Nlc3NvcihJbnN0YWxsU3RhbmRpbiBwcm9jZXNzb3IpCi0JewotCQlwcm9jZXNzb3Iuc2V0TmFtZShwcm9jZXNzb3JOYW1lRmllbGQuZ2V0VGV4dCgpKTsKLQkJcHJvY2Vzc29yLnNldFByb2Nlc3NvclR5cGVJZChzZWxlY3RlZFByb2Nlc3NvclR5cGUuZ2V0SWQoKSk7Ci0KLQkJSURlYnVnZ2VyW10gZGVidWdnZXJzID0gSkFYUFJ1bnRpbWUuZ2V0RGVidWdnZXJzKCk7Ci0JCWZvciAoSURlYnVnZ2VyIGVsZW1lbnQgOiBkZWJ1Z2dlcnMpCi0JCXsKLQkJCWlmIChlbGVtZW50LmdldFByb2Nlc3NvclR5cGUoKS5lcXVhbHMoc2VsZWN0ZWRQcm9jZXNzb3JUeXBlKSkKLQkJCQlwcm9jZXNzb3Iuc2V0RGVidWdnZXJJZChlbGVtZW50LmdldElkKCkpOwotCQl9Ci0KLQkJZkxpYnJhcnlCbG9jay5wZXJmb3JtQXBwbHkocHJvY2Vzc29yKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgRmlsZSBnZXRBYnNvbHV0ZUZpbGVPckVtcHR5KFN0cmluZyBwYXRoKQotCXsKLQkJaWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoLmxlbmd0aCgpID09IDApCi0JCXsKLQkJCXJldHVybiBuZXcgRmlsZSgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gbmV3IEZpbGUocGF0aCkuZ2V0QWJzb2x1dGVGaWxlKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFByb2Nlc3Nvck5hbWVTdGF0dXMoSVN0YXR1cyBzdGF0dXMpCi0JewotCQlmU3RhdGlbMF0gPSBzdGF0dXM7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgZ2V0U3lzdGVtTGlicmFyeVN0YXR1cygpCi0JewotCQlyZXR1cm4gZlN0YXRpWzNdOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFN5c3RlbUxpYnJhcnlTdGF0dXMoSVN0YXR1cyBzdGF0dXMpCi0JewotCQlmU3RhdGlbM10gPSBzdGF0dXM7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VmVyc2lvblN0YXR1cyhJU3RhdHVzIHN0YXR1cykKLQl7Ci0JCWZTdGF0aVsyXSA9IHN0YXR1czsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVCdXR0b25zRW5hYmxlU3RhdGUoSVN0YXR1cyBzdGF0dXMpCi0JewotCQlCdXR0b24gb2sgPSBnZXRCdXR0b24oSURpYWxvZ0NvbnN0YW50cy5PS19JRCk7Ci0JCWlmIChvayAhPSBudWxsICYmICFvay5pc0Rpc3Bvc2VkKCkpCi0JCQlvay5zZXRFbmFibGVkKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0spOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHNldEJ1dHRvbkxheW91dERhdGEoQnV0dG9uIGJ1dHRvbikKLQl7Ci0JCXN1cGVyLnNldEJ1dHRvbkxheW91dERhdGEoYnV0dG9uKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKQotCXsKLQkJcmV0dXJuICJBRERfUFJPQ0VTU09SX0RJQUxPR19TRUNUSU9OIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nQm91bmRzU2V0dGluZ3MoKQotCXsKLS8vCQlJRGlhbG9nU2V0dGluZ3Mgc2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotLy8JCUlEaWFsb2dTZXR0aW5ncyBzZWN0aW9uID0gc2V0dGluZ3MuZ2V0U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotLy8JCWlmIChzZWN0aW9uID09IG51bGwpCi0vLwkJewotLy8JCQlzZWN0aW9uID0gc2V0dGluZ3MuYWRkTmV3U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotLy8JCX0KLS8vCQlyZXR1cm4gc2VjdGlvbjsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9CYXNlUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQmFzZVByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGI2YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9CYXNlUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBCYXNlUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotewotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKQotCXsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0luc3RhbGxlZFByb2Nlc3NvcnNCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMzNWY5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0luc3RhbGxlZFByb2Nlc3NvcnNCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkxpc3RlbmVyTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5sYXlvdXQuR3JpZERhdGFGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2hlY2tTdGF0ZUNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNoZWNrYm94VGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNoZWNrU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyU29ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuQWJzdHJhY3RUYWJsZUJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkluc3RhbGxTdGFuZGluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrIGV4dGVuZHMgQWJzdHJhY3RUYWJsZUJsb2NrIGltcGxlbWVudHMgSVNlbGVjdGlvblByb3ZpZGVyCi17Ci0JcHJpdmF0ZSBDb21wb3NpdGUgZkNvbnRyb2w7Ci0JcHJpdmF0ZSBmaW5hbCBMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiBwcm9jZXNzb3JzID0gbmV3IEFycmF5TGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4oKTsKLQlwcml2YXRlIENoZWNrYm94VGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBCdXR0b24gZkFkZEJ1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiBmUmVtb3ZlQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIGZFZGl0QnV0dG9uOwotCXByaXZhdGUgZmluYWwgTGlzdGVuZXJMaXN0IGZTZWxlY3Rpb25MaXN0ZW5lcnMgPSBuZXcgTGlzdGVuZXJMaXN0KCk7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uIGZQcmV2U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKTsKLQotCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJZlNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJZlNlbGVjdGlvbkxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0JewotCQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGFibGVWaWV3ZXIuZ2V0Q2hlY2tlZEVsZW1lbnRzKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLQkJewotCQkJaWYgKCFzZWxlY3Rpb24uZXF1YWxzKGZQcmV2U2VsZWN0aW9uKSkKLQkJCXsKLQkJCQlmUHJldlNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQkJCQlPYmplY3QganJlID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlpZiAoanJlID09IG51bGwpCi0JCQkJewotCQkJCQl0YWJsZVZpZXdlci5zZXRDaGVja2VkRWxlbWVudHMobmV3IE9iamVjdFswXSk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXRhYmxlVmlld2VyLnNldENoZWNrZWRFbGVtZW50cyhuZXcgT2JqZWN0W10KLQkJCQkJeyBqcmUgfSk7Ci0JCQkJCXRhYmxlVmlld2VyLnJldmVhbChqcmUpOwotCQkJCX0KLQkJCQlmaXJlU2VsZWN0aW9uQ2hhbmdlZCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgYW5jZXN0b3IpCi0JewotCi0JCUNvbXBvc2l0ZSBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKGFuY2VzdG9yLCBTV1QuTlVMTCk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJcGFyZW50LnNldExheW91dChsYXlvdXQpOwotCQlGb250IGZvbnQgPSBhbmNlc3Rvci5nZXRGb250KCk7Ci0JCXBhcmVudC5zZXRGb250KGZvbnQpOwotCQlmQ29udHJvbCA9IHBhcmVudDsKLQotCQlHcmlkRGF0YSBkYXRhOwotCi0JCUxhYmVsIHRhYmxlTGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7Ci0JCXRhYmxlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMCk7Ci0JCWRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXRhYmxlTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJdGFibGVMYWJlbC5zZXRGb250KGZvbnQpOwotCi0JCVRhYmxlIGZUYWJsZSA9IG5ldyBUYWJsZShwYXJlbnQsIFNXVC5DSEVDSyB8IFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwpOwotCi0JCWRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJZGF0YS53aWR0aEhpbnQgPSA0NTA7Ci0JCWZUYWJsZS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQlmVGFibGUuc2V0Rm9udChmb250KTsKLQotCQlmVGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJZlRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQotCQlUYWJsZUNvbHVtbiBjb2x1bW4xID0gbmV3IFRhYmxlQ29sdW1uKGZUYWJsZSwgU1dULk5PTkUpOwotCQljb2x1bW4xLnNldFdpZHRoKDE4MCk7Ci0JCWNvbHVtbjEuc2V0UmVzaXphYmxlKHRydWUpOwotCQljb2x1bW4xLnNldFRleHQoTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzEpOwotCQljb2x1bW4xLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXNvcnRCeU5hbWUoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJVGFibGVDb2x1bW4gY29sdW1uMiA9IG5ldyBUYWJsZUNvbHVtbihmVGFibGUsIFNXVC5OT05FKTsKLQkJY29sdW1uMi5zZXRXaWR0aCg5MCk7Ci0JCWNvbHVtbjIuc2V0UmVzaXphYmxlKHRydWUpOwotCQljb2x1bW4yLnNldFRleHQoTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzIpOwotCQljb2x1bW4yLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXNvcnRCeVR5cGUoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJVGFibGVDb2x1bW4gY29sdW1uNCA9IG5ldyBUYWJsZUNvbHVtbihmVGFibGUsIFNXVC5OT05FKTsKLQkJY29sdW1uNC5zZXRXaWR0aCgxODApOwotCQljb2x1bW40LnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJY29sdW1uNC5zZXRUZXh0KE1lc3NhZ2VzLkluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja180KTsKLQkJY29sdW1uNC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlzb3J0QnlWZXJzaW9uKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXRhYmxlVmlld2VyID0gbmV3IENoZWNrYm94VGFibGVWaWV3ZXIoZlRhYmxlKTsKLQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgVk1MYWJlbFByb3ZpZGVyKCkpOwotCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFByb2Nlc3NvcnNDb250ZW50UHJvdmlkZXIoKSk7Ci0KLQkJdGFibGVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZ0KQotCQkJewotCQkJCWVuYWJsZUJ1dHRvbnMoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJdGFibGVWaWV3ZXIuYWRkQ2hlY2tTdGF0ZUxpc3RlbmVyKG5ldyBJQ2hlY2tTdGF0ZUxpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgY2hlY2tTdGF0ZUNoYW5nZWQoQ2hlY2tTdGF0ZUNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQlpZiAoZXZlbnQuZ2V0Q2hlY2tlZCgpKQotCQkJCXsKLQkJCQkJc2V0Q2hlY2tlZEluc3RhbGwoKElQcm9jZXNzb3JJbnN0YWxsKSBldmVudC5nZXRFbGVtZW50KCkpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlzZXRDaGVja2VkSW5zdGFsbChudWxsKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCXRhYmxlVmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBlKQotCQkJewotCQkJCWlmICghdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKQotCQkJCXsKLQkJCQkJZWRpdFByb2Nlc3NvcigpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCWZUYWJsZS5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5QWRhcHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBldmVudCkKLQkJCXsKLQkJCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5ERUwgJiYgZXZlbnQuc3RhdGVNYXNrID09IDApCi0JCQkJewotCQkJCQlyZW1vdmVQcm9jZXNzb3JzKCk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQotCQlDb21wb3NpdGUgYnV0dG9ucyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7Ci0JCWJ1dHRvbnMuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0JCWxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlidXR0b25zLnNldExheW91dChsYXlvdXQpOwotCQlidXR0b25zLnNldEZvbnQoZm9udCk7Ci0KLQkJZkFkZEJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9ucywgTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzUpOwotCQlmQWRkQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2dCkKLQkJCXsKLQkJCQlhZGRQcm9jZXNzb3IoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJZkVkaXRCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnMsIE1lc3NhZ2VzLkluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja182KTsKLQkJZkVkaXRCdXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZ0KQotCQkJewotCQkJCWVkaXRQcm9jZXNzb3IoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJZlJlbW92ZUJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9ucywgTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzcpOwotCQlmUmVtb3ZlQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2dCkKLQkJCXsKLQkJCQlyZW1vdmVQcm9jZXNzb3JzKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCS8vIGNvcGllZCBmcm9tIExpc3REaWFsb2dGaWVsZC5DcmVhdGVTZXBhcmF0b3IoKQotCQlMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoYnV0dG9ucywgU1dULk5PTkUpOwotCQlzZXBhcmF0b3Iuc2V0VmlzaWJsZShmYWxzZSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0JCWdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotCQlnZC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkJFR0lOTklORzsKLQkJZ2QuaGVpZ2h0SGludCA9IDQ7Ci0JCXNlcGFyYXRvci5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlmaWxsV2l0aFdvcmtzcGFjZVByb2Nlc3NvcnMoKTsKLQkJZW5hYmxlQnV0dG9ucygpOwotCi0JCXJlc3RvcmVDb2x1bW5TZXR0aW5ncygpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZpbGxXaXRoV29ya3NwYWNlUHJvY2Vzc29ycygpCi0JewotCQlMaXN0PEluc3RhbGxTdGFuZGluPiBzdGFuZGlucyA9IG5ldyBBcnJheUxpc3Q8SW5zdGFsbFN0YW5kaW4+KCk7Ci0JCUlQcm9jZXNzb3JUeXBlW10gdHlwZXMgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlcygpOwotCQlmb3IgKElQcm9jZXNzb3JUeXBlIHR5cGUgOiB0eXBlcykKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxscyA9IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcnModHlwZS5nZXRJZCgpKTsKLQkJCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA6IGluc3RhbGxzKQotCQkJewotCQkJCXN0YW5kaW5zLmFkZChuZXcgSW5zdGFsbFN0YW5kaW4oaW5zdGFsbCkpOwotCQkJfQotCQl9Ci0JCXNldFByb2Nlc3NvcnMoc3RhbmRpbnMudG9BcnJheShuZXcgSVByb2Nlc3Nvckluc3RhbGxbc3RhbmRpbnMuc2l6ZSgpXSkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBmaXJlU2VsZWN0aW9uQ2hhbmdlZCgpCi0JewotCQlTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIGdldFNlbGVjdGlvbigpKTsKLQkJT2JqZWN0W10gbGlzdGVuZXJzID0gZlNlbGVjdGlvbkxpc3RlbmVycy5nZXRMaXN0ZW5lcnMoKTsKLQkJZm9yIChPYmplY3QgZWxlbWVudCA6IGxpc3RlbmVycykKLQkJewotCQkJSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA9IChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKSBlbGVtZW50OwotCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTb3J0cyBieSB0eXBlLCBhbmQgbmFtZSB3aXRoaW4gdHlwZS4KLQkgKi8KLQlwcml2YXRlIHZvaWQgc29ydEJ5VHlwZSgpCi0JewotCQl0YWJsZVZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBjb21wYXJlKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBlMSwgT2JqZWN0IGUyKQotCQkJewotCQkJCUlQcm9jZXNzb3JJbnN0YWxsIGxlZnQgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGUxOwotCQkJCUlQcm9jZXNzb3JJbnN0YWxsIHJpZ2h0ID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlMjsKLQkJCQlyZXR1cm4gbGVmdC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0TGFiZWwoKS5jb21wYXJlVG9JZ25vcmVDYXNlKHJpZ2h0LmdldFByb2Nlc3NvclR5cGUoKS5nZXRMYWJlbCgpKTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgYm9vbGVhbiBpc1NvcnRlclByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCXByaXZhdGUgdm9pZCBzb3J0QnlWZXJzaW9uKCkKLQl7Ci0JCXRhYmxlVmlld2VyLnNldFNvcnRlcihuZXcgVmlld2VyU29ydGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpCi0JCQl7Ci0JCQkJSVByb2Nlc3Nvckluc3RhbGwgbGVmdCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgZTE7Ci0JCQkJSVByb2Nlc3Nvckluc3RhbGwgcmlnaHQgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGUyOwotCQkJCXJldHVybiBsZWZ0LmdldFN1cHBvcnRzKCkuY29tcGFyZVRvSWdub3JlQ2FzZShyaWdodC5nZXRTdXBwb3J0cygpKTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgYm9vbGVhbiBpc1NvcnRlclByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCS8qKgotCSAqIFNvcnRzIGJ5IG5hbWUuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNvcnRCeU5hbWUoKQotCXsKLQkJdGFibGVWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikKLQkJCXsKLQkJCQlpZiAoKGUxIGluc3RhbmNlb2YgSVByb2Nlc3Nvckluc3RhbGwpICYmIChlMiBpbnN0YW5jZW9mIElQcm9jZXNzb3JJbnN0YWxsKSkKLQkJCQl7Ci0JCQkJCUlQcm9jZXNzb3JJbnN0YWxsIGxlZnQgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGUxOwotCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCByaWdodCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgZTI7Ci0JCQkJCXJldHVybiBsZWZ0LmdldE5hbWUoKS5jb21wYXJlVG9JZ25vcmVDYXNlKHJpZ2h0LmdldE5hbWUoKSk7Ci0JCQkJfQotCQkJCXJldHVybiBzdXBlci5jb21wYXJlKHZpZXdlciwgZTEsIGUyKTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgYm9vbGVhbiBpc1NvcnRlclByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCXByaXZhdGUgdm9pZCBlbmFibGVCdXR0b25zKCkKLQl7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCWludCBzZWxlY3Rpb25Db3VudCA9IHNlbGVjdGlvbi5zaXplKCk7Ci0JCWZFZGl0QnV0dG9uLnNldEVuYWJsZWQoc2VsZWN0aW9uQ291bnQgPT0gMSAmJiAhKChJUHJvY2Vzc29ySW5zdGFsbClzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCkpLmlzQ29udHJpYnV0ZWQoKSk7Ci0JCWlmIChzZWxlY3Rpb25Db3VudCA+IDAgJiYgc2VsZWN0aW9uQ291bnQgPCB0YWJsZVZpZXdlci5nZXRUYWJsZSgpLmdldEl0ZW1Db3VudCgpKQotCQl7Ci0JCQlJdGVyYXRvcjw/PiBpdGVyYXRvciA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkKLQkJCXsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBpdGVyYXRvci5uZXh0KCk7Ci0JCQkJaWYgKGluc3RhbGwuaXNDb250cmlidXRlZCgpKQotCQkJCXsKLQkJCQkJZlJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0KLQkJCWZSZW1vdmVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWZSZW1vdmVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgQnV0dG9uIGNyZWF0ZVB1c2hCdXR0b24oQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsKQotCXsKLQkJQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuUFVTSCk7Ci0JCWJ1dHRvbi5zZXRUZXh0KGxhYmVsKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEoR3JpZERhdGFGYWN0b3J5LmZpbGxEZWZhdWx0cygpLmNyZWF0ZSgpKTsKLQkJcmV0dXJuIGJ1dHRvbjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkKLQl7Ci0JCXJldHVybiBmQ29udHJvbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRQcm9jZXNzb3JzKElQcm9jZXNzb3JJbnN0YWxsW10gdm1zKQotCXsKLQkJcHJvY2Vzc29ycy5jbGVhcigpOwotCQlmb3IgKElQcm9jZXNzb3JJbnN0YWxsIGVsZW1lbnQgOiB2bXMpCi0JCXsKLQkJCXByb2Nlc3NvcnMuYWRkKGVsZW1lbnQpOwotCQl9Ci0JCXRhYmxlVmlld2VyLnNldElucHV0KHByb2Nlc3NvcnMpOwotCQkvLyB0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnN0YWxsW10gZ2V0UHJvY2Vzc29ycygpCi0JewotCQlyZXR1cm4gcHJvY2Vzc29ycy50b0FycmF5KG5ldyBJUHJvY2Vzc29ySW5zdGFsbFtwcm9jZXNzb3JzLnNpemUoKV0pOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRQcm9jZXNzb3IoKQotCXsKLQkJQWRkUHJvY2Vzc29yRGlhbG9nIGRpYWxvZyA9IG5ldyBBZGRQcm9jZXNzb3JEaWFsb2codGhpcywgZ2V0U2hlbGwoKSwgSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZXNFeGNsSlJFRGVmYXVsdCgpLCBudWxsKTsKLQkJZGlhbG9nLnNldFRpdGxlKE1lc3NhZ2VzLkFkZFByb2Nlc3NvckRpYWxvZ19BZGRfVGl0bGUpOwotCQlpZiAoZGlhbG9nLm9wZW4oKSAhPSBXaW5kb3cuT0spCi0JCXsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByb2Nlc3NvckFkZGVkKElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlwcm9jZXNzb3JzLmFkZChpbnN0YWxsKTsKLQkJdGFibGVWaWV3ZXIuYWRkKGluc3RhbGwpOwotCQl0YWJsZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oaW5zdGFsbCksIHRydWUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRHVwbGljYXRlTmFtZShTdHJpbmcgbmFtZSkKLQl7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2Vzc29ycy5zaXplKCk7IGkrKykKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IHByb2Nlc3NvcnMuZ2V0KGkpOwotCQkJaWYgKGluc3RhbGwuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGVkaXRQcm9jZXNzb3IoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQlpZiAoaW5zdGFsbCA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKCFpbnN0YWxsLmlzQ29udHJpYnV0ZWQoKSkKLQkJewotLy8JCQlQcm9jZXNzb3JEZXRhaWxzRGlhbG9nIGRpYWxvZyA9IG5ldyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nKGdldFNoZWxsKCksIGluc3RhbGwpOwotLy8JCQlkaWFsb2cub3BlbigpOwotLy8JCX0KLS8vCQllbHNlCi0vLwkJewotCQkJQWRkUHJvY2Vzc29yRGlhbG9nIGRpYWxvZyA9IG5ldyBBZGRQcm9jZXNzb3JEaWFsb2codGhpcywgZ2V0U2hlbGwoKSwgSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZXNFeGNsSlJFRGVmYXVsdCgpLCBpbnN0YWxsKTsKLQkJCWRpYWxvZy5zZXRUaXRsZShNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfRWRpdF9UaXRsZSk7Ci0JCQlpZiAoZGlhbG9nLm9wZW4oKSAhPSBXaW5kb3cuT0spCi0JCQl7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJLy8gZmlsbFdpdGhXb3Jrc3BhY2VQcm9jZXNzb3JzKCk7Ci0JCQl0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVtb3ZlUHJvY2Vzc29ycygpCi0JewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpOwotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIHZtcyA9IG5ldyBJUHJvY2Vzc29ySW5zdGFsbFtzZWxlY3Rpb24uc2l6ZSgpXTsKLQkJSXRlcmF0b3I8Pz4gaXRlciA9IHNlbGVjdGlvbi5pdGVyYXRvcigpOwotCQlpbnQgaSA9IDA7Ci0JCXdoaWxlIChpdGVyLmhhc05leHQoKSkKLQkJewotCQkJdm1zW2ldID0gKElQcm9jZXNzb3JJbnN0YWxsKSBpdGVyLm5leHQoKTsKLQkJCWkrKzsKLQkJfQotCQlyZW1vdmVQcm9jZXNzb3JzKHZtcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlUHJvY2Vzc29ycyhJUHJvY2Vzc29ySW5zdGFsbFtdIHRoZUluc3RhbGxzKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gcHJldiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZ2V0U2VsZWN0aW9uKCk7Ci0JCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgZWxlbWVudCA6IHRoZUluc3RhbGxzKQotCQl7Ci0JCQlwcm9jZXNzb3JzLnJlbW92ZShlbGVtZW50KTsKLQkJfQotCQl0YWJsZVZpZXdlci5yZWZyZXNoKCk7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIGN1cnIgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFNlbGVjdGlvbigpOwotCQlpZiAoIWN1cnIuZXF1YWxzKHByZXYpKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gZ2V0UHJvY2Vzc29ycygpOwotCQkJaWYgKGN1cnIuc2l6ZSgpID09IDAgJiYgaW5zdGFsbHMubGVuZ3RoID09IDEpCi0JCQl7Ci0JCQkJLy8gcGljayBhIGRlZmF1bHQgaW5zdGFsbCBhdXRvbWF0aWNhbGx5Ci0JCQkJc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGluc3RhbGxzWzBdKSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJZmlyZVNlbGVjdGlvbkNoYW5nZWQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNldENoZWNrZWRJbnN0YWxsKElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlpZiAoaW5zdGFsbCA9PSBudWxsKQotCQl7Ci0JCQlzZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlzZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oaW5zdGFsbCkpOwotCQl9Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnN0YWxsIGdldENoZWNrZWRJbnN0YWxsKCkKLQl7Ci0JCU9iamVjdFtdIG9iamVjdHMgPSB0YWJsZVZpZXdlci5nZXRDaGVja2VkRWxlbWVudHMoKTsKLQkJaWYgKG9iamVjdHMubGVuZ3RoID09IDApCi0JCXsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCXJldHVybiAoSVByb2Nlc3Nvckluc3RhbGwpIG9iamVjdHNbMF07Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc2V0U29ydENvbHVtbihpbnQgY29sdW1uKQotCXsKLQkJc3dpdGNoIChjb2x1bW4pCi0JCXsKLQkJCWNhc2UgMToKLQkJCQlzb3J0QnlOYW1lKCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI6Ci0JCQkJc29ydEJ5VHlwZSgpOwotCQkJCWJyZWFrOwotCQl9Ci0JCXN1cGVyLnNldFNvcnRDb2x1bW4oY29sdW1uKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgVGFibGUgZ2V0VGFibGUoKQotCXsKLQkJcmV0dXJuIHRhYmxlVmlld2VyLmdldFRhYmxlKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElEaWFsb2dTZXR0aW5ncyBnZXREaWFsb2dTZXR0aW5ncygpCi0JewotCQlyZXR1cm4gWFNMRGVidWdVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGlhbG9nU2V0dGluZ3MoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFF1YWxpZmllcigpCi0JewotCQlyZXR1cm4gWFNMRGVidWdVSUNvbnN0YW50cy5QUk9DRVNTT1JfREVUQUlMU19ESUFMT0c7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVGcm9tKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBQcm9jZXNzb3JzQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIKLQl7Ci0JCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXQpCi0JCXsKLQkJCXJldHVybiBwcm9jZXNzb3JzLnRvQXJyYXkoKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQkJewotCQl9Ci0KLQkJcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JCXsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFZNTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyCi0JewotCQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLQkJewotCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJUHJvY2Vzc29ySW5zdGFsbCkKLQkJCXsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlbGVtZW50OwotCQkJCXN3aXRjaCAoY29sdW1uSW5kZXgpCi0JCQkJewotCQkJCQljYXNlIDA6Ci0JCQkJCQlyZXR1cm4gaW5zdGFsbC5nZXROYW1lKCk7Ci0JCQkJCWNhc2UgMToKLQkJCQkJCXJldHVybiBpbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKS5nZXRMYWJlbCgpOwotCQkJCQljYXNlIDI6Ci0JCQkJCQlpZiAoaW5zdGFsbC5nZXREZWJ1Z2dlcigpICE9IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJcmV0dXJuIGluc3RhbGwuZ2V0RGVidWdnZXIoKS5nZXROYW1lKCk7Ci0JCQkJCQl9Ci0JCQkJCQlyZXR1cm4gTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzg7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTsKLQkJfQotCi0JCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQwNGUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQlzdGF0aWMKLQl7Ci0JCS8vIGluaXRpYWxpemUgcmVzb3VyY2UgYnVuZGxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfRWRpdF9UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfQWRkX1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19qYXJzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19hdHRyaWJ1dGVzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JOYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JUeXBlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19lbnRlck5hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUHJvY2Vzc29yRGlhbG9nX2R1cGxpY2F0ZU5hbWU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfQWRkQnV0dG9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckxpYnJhcnlCbG9ja19SZW1vdmVCdXR0b247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZFdvcmtzcGFjZUJ1dHRvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfRmlsZURpYWxvZ19UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19NZXNzYWdlOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzg7Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzI7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkKLQl7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Qcm9jZXNzb3JMaWJyYXJ5QmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvY2Vzc29yTGlicmFyeUJsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNTJkYzguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Qcm9jZXNzb3JMaWJyYXJ5QmxvY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5FbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklTZWxlY3Rpb25TdGF0dXNWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MubmF2aWdhdG9yLlJlc291cmNlQ29tcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkluc3RhbGxTdGFuZGluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvci5KYXJDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkphckxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yTGlicmFyeUJsb2NrIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLXsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQVNUX1BBVEhfU0VUVElORyA9ICJMQVNUX1BBVEhfU0VUVElORyI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQVNUX1dPUktTUEFDRV9QQVRIX1NFVFRJTkcgPSAiTEFTVF9XT1JLU1BBQ0VfUEFUSF9TRVRUSU5HIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERJQUxPR19TRVRUSU5HU19QUkVGSVggPSAiUHJvY2Vzc29yTGlicmFyeUJsb2NrIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJbnN0YWxsU3RhbmRpbiBpbnN0YWxsOwotCXByb3RlY3RlZCBJUHJvY2Vzc29yVHlwZSBpbnN0YWxsVHlwZTsKLQlwcm90ZWN0ZWQgQWRkUHJvY2Vzc29yRGlhbG9nIGFkZERpYWxvZyA9IG51bGw7Ci0JcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOwotCXByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiBhZGRCdXR0b247Ci0JcHJpdmF0ZSBCdXR0b24gYWRkV29ya3NwYWNlQnV0dG9uOwotCi0JcHJpdmF0ZSBmaW5hbCBJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yKCkKLQl7Ci0JCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlKE9iamVjdFtdIHNlbGVjdGlvbikKLQkJewotCQkJaWYgKHNlbGVjdGlvbi5sZW5ndGggPT0gMCkKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwgIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlmb3IgKE9iamVjdCBlbGVtZW50IDogc2VsZWN0aW9uKQotCQkJewotCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZvbGRlcikKLQkJCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsICIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkKLQkJCQl7Ci0JCQkJCS8vIElGaWxlIGZpbGUgPSAoSUZpbGUpIHNlbGVjdGlvbltpXTsKLQkJCQkJLy8gVE9ETyBjaGVjayB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhbHJlYWR5IG9uIHRoZSBjbGFzc3BhdGgKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwgIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9OwotCi0JcHVibGljIFByb2Nlc3NvckxpYnJhcnlCbG9jayhBZGRQcm9jZXNzb3JEaWFsb2cgZGlhbG9nKQotCXsKLQkJYWRkRGlhbG9nID0gZGlhbG9nOwotCX0KLQotCXB1YmxpYyBDb250cm9sIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCUZvbnQgZm9udCA9IHBhcmVudC5nZXRGb250KCk7Ci0KLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IHRvcExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCXRvcExheW91dC5udW1Db2x1bW5zID0gMjsKLQkJdG9wTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXRvcExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWNvbXAuc2V0TGF5b3V0KHRvcExheW91dCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJdGFibGVWaWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIoY29tcCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWdkLmhlaWdodEhpbnQgPSA2OwotCQl0YWJsZVZpZXdlci5nZXRDb250cm9sKCkuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCUphckNvbnRlbnRQcm92aWRlciBmTGlicmFyeUNvbnRlbnRQcm92aWRlciA9IG5ldyBKYXJDb250ZW50UHJvdmlkZXIoKTsKLQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKGZMaWJyYXJ5Q29udGVudFByb3ZpZGVyKTsKLQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgSmFyTGFiZWxQcm92aWRlcigpKTsKLQkJdGFibGVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCi0JCUNvbXBvc2l0ZSBwYXRoQnV0dG9uQ29tcCA9IG5ldyBDb21wb3NpdGUoY29tcCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IHBhdGhCdXR0b25MYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlwYXRoQnV0dG9uTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXBhdGhCdXR0b25MYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlwYXRoQnV0dG9uQ29tcC5zZXRMYXlvdXQocGF0aEJ1dHRvbkxheW91dCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0JCXBhdGhCdXR0b25Db21wLnNldExheW91dERhdGEoZ2QpOwotCQlwYXRoQnV0dG9uQ29tcC5zZXRGb250KGZvbnQpOwotCi0JCWFkZFdvcmtzcGFjZUJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIE1lc3NhZ2VzLlByb2Nlc3NvckxpYnJhcnlCbG9ja19BZGRXb3Jrc3BhY2VCdXR0b24pOwotCQlhZGRXb3Jrc3BhY2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0KLQkJYWRkQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZEJ1dHRvbik7Ci0JCWFkZEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQotCQlyZW1vdmVCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKHBhdGhCdXR0b25Db21wLCBNZXNzYWdlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfUmVtb3ZlQnV0dG9uKTsKLQkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCi0JCXJldHVybiBjb21wOwotCX0KLQotCXByb3RlY3RlZCBCdXR0b24gY3JlYXRlUHVzaEJ1dHRvbihDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwpCi0JewotCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5QVVNIKTsKLQkJYnV0dG9uLnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0JCWJ1dHRvbi5zZXRUZXh0KGxhYmVsKTsKLQkJYWRkRGlhbG9nLnNldEJ1dHRvbkxheW91dERhdGEoYnV0dG9uKTsKLQkJcmV0dXJuIGJ1dHRvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVWZXJ0aWNhbFNwYWNlcihDb21wb3NpdGUgY29tcCwgaW50IGNvbFNwYW4pCi0JewotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLCBTV1QuTk9ORSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gY29sU3BhbjsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSW5zdGFsbFN0YW5kaW4gc3RhbmRpbiwgSVByb2Nlc3NvclR5cGUgdHlwZSkKLQl7Ci0JCWluc3RhbGwgPSBzdGFuZGluOwotCQlpbnN0YWxsVHlwZSA9IHR5cGU7Ci0JCWlmIChpbnN0YWxsICE9IG51bGwpCi0JCQl0YWJsZVZpZXdlci5zZXRJbnB1dChpbnN0YWxsKTsKLQkJdXBkYXRlKCk7Ci0JfQotCi0JLyoqCi0JICogVXBkYXRlcyBidXR0b25zIGFuZCBzdGF0dXMgYmFzZWQgb24gY3VycmVudCBsaWJyYXJpZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB1cGRhdGUoKQotCXsKLQkJdXBkYXRlQnV0dG9ucygpOwotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCWlmIChpbnN0YWxsICE9IG51bGwgJiYgaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkubGVuZ3RoID09IDApCi0JCXsKLQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwgTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrXzYsIG51bGwpOwotCQl9Ci0JCWFkZERpYWxvZy5zZXRTeXN0ZW1MaWJyYXJ5U3RhdHVzKHN0YXR1cyk7Ci0JCWFkZERpYWxvZy51cGRhdGVTdGF0dXNMaW5lKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KEluc3RhbGxTdGFuZGluIHN0YW5kaW4pCi0JewotCQlzdGFuZGluLnNldFByb2Nlc3NvckphcnMoaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkpOwotCX0KLQotCXByb3RlY3RlZCBJUHJvY2Vzc29ySW5zdGFsbCBnZXRWTUluc3RhbGwoKQotCXsKLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCi0JcHJvdGVjdGVkIElQcm9jZXNzb3JUeXBlIGdldFZNSW5zdGFsbFR5cGUoKQotCXsKLQkJcmV0dXJuIGluc3RhbGxUeXBlOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlPYmplY3Qgc291cmNlID0gZS5nZXRTb3VyY2UoKTsKLQkJaWYgKHNvdXJjZSA9PSByZW1vdmVCdXR0b24pCi0JCXsKLQkJCXJlbW92ZSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJfQotCQllbHNlIGlmIChzb3VyY2UgPT0gYWRkQnV0dG9uKQotCQl7Ci0JCQlhZGRFeHRlcm5hbCgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJfQotCQllbHNlIGlmIChzb3VyY2UgPT0gYWRkV29ya3NwYWNlQnV0dG9uKQotCQl7Ci0JCQlhZGRXb3Jrc3BhY2UoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKSk7Ci0JCX0KLQkJdXBkYXRlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRFeHRlcm5hbChJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlJRGlhbG9nU2V0dGluZ3MgZGlhbG9nU2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCQlTdHJpbmcgbGFzdFVzZWRQYXRoID0gZGlhbG9nU2V0dGluZ3MuZ2V0KExBU1RfUEFUSF9TRVRUSU5HKTsKLQkJaWYgKGxhc3RVc2VkUGF0aCA9PSBudWxsKQotCQl7Ci0JCQlsYXN0VXNlZFBhdGggPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2codGFibGVWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCksIFNXVC5NVUxUSSk7Ci0JCWRpYWxvZy5zZXRUZXh0KE1lc3NhZ2VzLlByb2Nlc3NvckxpYnJhcnlCbG9ja19GaWxlRGlhbG9nX1RpdGxlKTsKLQkJZGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMobmV3IFN0cmluZ1tdCi0JCXsgIiouamFyOyouemlwIiB9KTsgLy8kTk9OLU5MUy0xJAotCQlkaWFsb2cuc2V0RmlsdGVyUGF0aChsYXN0VXNlZFBhdGgpOwotCQlTdHJpbmcgcmVzID0gZGlhbG9nLm9wZW4oKTsKLQkJaWYgKHJlcyA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJU3RyaW5nW10gZmlsZU5hbWVzID0gZGlhbG9nLmdldEZpbGVOYW1lcygpOwotCQlpbnQgbkNob3NlbiA9IGZpbGVOYW1lcy5sZW5ndGg7Ci0KLQkJSVBhdGggZmlsdGVyUGF0aCA9IG5ldyBQYXRoKGRpYWxvZy5nZXRGaWx0ZXJQYXRoKCkpOwotCQlJUHJvY2Vzc29ySmFyW10gbGlicyA9IG5ldyBJUHJvY2Vzc29ySmFyW25DaG9zZW5dOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5DaG9zZW47IGkrKykKLQkJewotCQkJbGlic1tpXSA9IEpBWFBSdW50aW1lLmNyZWF0ZVByb2Nlc3NvckphcihmaWx0ZXJQYXRoLmFwcGVuZChmaWxlTmFtZXNbaV0pLm1ha2VBYnNvbHV0ZSgpKTsKLQkJfQotCQlkaWFsb2dTZXR0aW5ncy5wdXQoTEFTVF9QQVRIX1NFVFRJTkcsIGZpbHRlclBhdGgudG9PU1N0cmluZygpKTsKLQotCQlJUHJvY2Vzc29ySmFyW10gY3VycmVudEphcnMgPSBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKTsKLQkJSVByb2Nlc3NvckphcltdIG5ld0phcnMgPSBuZXcgSVByb2Nlc3NvckphcltjdXJyZW50SmFycy5sZW5ndGggKyBsaWJzLmxlbmd0aF07Ci0JCVN5c3RlbS5hcnJheWNvcHkoY3VycmVudEphcnMsIDAsIG5ld0phcnMsIDAsIGN1cnJlbnRKYXJzLmxlbmd0aCk7Ci0JCVN5c3RlbS5hcnJheWNvcHkobGlicywgMCwgbmV3SmFycywgY3VycmVudEphcnMubGVuZ3RoLCBsaWJzLmxlbmd0aCk7Ci0JCWluc3RhbGwuc2V0UHJvY2Vzc29ySmFycyhuZXdKYXJzKTsKLQotCQl0YWJsZVZpZXdlci5hZGQobGlicyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFdvcmtzcGFjZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlJRGlhbG9nU2V0dGluZ3MgZGlhbG9nU2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCQlTdHJpbmcgbGFzdFVzZWRQYXRoID0gZGlhbG9nU2V0dGluZ3MuZ2V0KExBU1RfV09SS1NQQUNFX1BBVEhfU0VUVElORyk7Ci0JCUlQYXRoIGxhc3RQYXRoID0gbnVsbDsKLQkJaWYgKGxhc3RVc2VkUGF0aCAhPSBudWxsKQotCQl7Ci0JCQlsYXN0UGF0aCA9IFBhdGguZnJvbVBvcnRhYmxlU3RyaW5nKGxhc3RVc2VkUGF0aCk7Ci0JCX0KLQotCQkvLyBJUmVzb3VyY2UgY3VycmVudFJlc291cmNlID0gZ2V0UmVzb3VyY2UoKTsKLQkJRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IEVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nKHRhYmxlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpLCBuZXcgV29ya2JlbmNoTGFiZWxQcm92aWRlcigpLCBuZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCkpOwotCQlkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrX1dvcmtzcGFjZUZpbGVEaWFsb2dfVGl0bGUpOwotCQlkaWFsb2cuc2V0TWVzc2FnZShNZXNzYWdlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19NZXNzYWdlKTsKLQkJZGlhbG9nLnNldFZhbGlkYXRvcih2YWxpZGF0b3IpOwotCQlkaWFsb2cuYWRkRmlsdGVyKG5ldyBWaWV3ZXJGaWx0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBib29sZWFuIHNlbGVjdChWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50RWxlbWVudCwgT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0JCQkJewotCQkJCQlJRmlsZSBmaWxlID0gKElGaWxlKSBlbGVtZW50OwotCQkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCkKLQkJCQkJCXJldHVybiBmYWxzZTsKLQkJCQkJcmV0dXJuIGV4dGVuc2lvbi5lcXVhbHMoImphciIpOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfSk7Ci0JCWRpYWxvZy5zZXRJbnB1dChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpKTsKLQkJaWYgKGxhc3RQYXRoICE9IG51bGwpCi0JCQlkaWFsb2cuc2V0SW5pdGlhbFNlbGVjdGlvbihsYXN0UGF0aCk7Ci0JCWRpYWxvZy5zZXRDb21wYXJhdG9yKG5ldyBSZXNvdXJjZUNvbXBhcmF0b3IoUmVzb3VyY2VDb21wYXJhdG9yLk5BTUUpKTsKLQkJZGlhbG9nLnNldEFsbG93TXVsdGlwbGUodHJ1ZSk7Ci0KLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKQotCQl7Ci0JCQlPYmplY3RbXSBlbGVtZW50cyA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLQkJCWlmIChlbGVtZW50cy5sZW5ndGggPiAwKQotCQkJewotCQkJCUlQcm9jZXNzb3JKYXJbXSBsaWJzID0gbmV3IElQcm9jZXNzb3JKYXJbZWxlbWVudHMubGVuZ3RoXTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJSUZpbGUgamFyID0gKElGaWxlKSBlbGVtZW50c1tpXTsKLQkJCQkJbGlic1tpXSA9IEpBWFBSdW50aW1lLmNyZWF0ZVByb2Nlc3NvckphcihqYXIuZ2V0RnVsbFBhdGgoKSk7Ci0JCQkJfQotCQkJCUlQcm9jZXNzb3JKYXJbXSBjdXJyZW50SmFycyA9IGluc3RhbGwuZ2V0UHJvY2Vzc29ySmFycygpOwotCQkJCUlQcm9jZXNzb3JKYXJbXSBuZXdKYXJzID0gbmV3IElQcm9jZXNzb3JKYXJbY3VycmVudEphcnMubGVuZ3RoICsgbGlicy5sZW5ndGhdOwotCQkJCVN5c3RlbS5hcnJheWNvcHkoY3VycmVudEphcnMsIDAsIG5ld0phcnMsIDAsIGN1cnJlbnRKYXJzLmxlbmd0aCk7Ci0JCQkJU3lzdGVtLmFycmF5Y29weShsaWJzLCAwLCBuZXdKYXJzLCBjdXJyZW50SmFycy5sZW5ndGgsIGxpYnMubGVuZ3RoKTsKLQkJCQlpbnN0YWxsLnNldFByb2Nlc3NvckphcnMobmV3SmFycyk7Ci0KLQkJCQl0YWJsZVZpZXdlci5hZGQobGlicyk7Ci0KLQkJCQlsYXN0UGF0aCA9IGxpYnNbMF0uZ2V0UGF0aCgpOwotCQkJCWxhc3RQYXRoID0gbGFzdFBhdGgudXB0b1NlZ21lbnQobGFzdFBhdGguc2VnbWVudENvdW50KCkpOwotCQkJCWRpYWxvZ1NldHRpbmdzLnB1dChMQVNUX1dPUktTUEFDRV9QQVRIX1NFVFRJTkcsIGxhc3RQYXRoLnRvUG9ydGFibGVTdHJpbmcoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVtb3ZlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCUxpc3Q8SVByb2Nlc3Nvckphcj4gY3VycmVudEphcnMgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JKYXI+KEFycmF5cy5hc0xpc3QoaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkpKTsKLQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJY3VycmVudEphcnMucmVtb3ZlKGl0ZXIubmV4dCgpKTsKLQkJfQotCQlpbnN0YWxsLnNldFByb2Nlc3NvckphcnMoY3VycmVudEphcnMudG9BcnJheShuZXcgSVByb2Nlc3NvckphclswXSkpOwotCQl0YWJsZVZpZXdlci5yZW1vdmUoc2VsZWN0aW9uLnRvQXJyYXkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JewotCQl1cGRhdGVCdXR0b25zKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZUJ1dHRvbnMoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJcmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoIXNlbGVjdGlvbi5pc0VtcHR5KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1Byb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2U0ZWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0JcHJpdmF0ZSBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2sgcHJvY2Vzc29yc0Jsb2NrOwotCi0JcHVibGljIFByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSgpCi0JewotCQlzdXBlcigpOwotCQkvLyBvbmx5IHVzZWQgd2hlbiBwYWdlIGlzIHNob3duIHByb2dyYW1hdGljYWxseQotCQlzZXRUaXRsZShNZXNzYWdlcy5Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMCk7Ci0JCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZV8xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKQotCXsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgYW5jZXN0b3IpCi0JewotCQlpbml0aWFsaXplRGlhbG9nVW5pdHMoYW5jZXN0b3IpOwotCi0JCW5vRGVmYXVsdEFuZEFwcGx5QnV0dG9uKCk7Ci0KLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlhbmNlc3Rvci5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQlwcm9jZXNzb3JzQmxvY2sgPSBuZXcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrKCk7Ci0JCXByb2Nlc3NvcnNCbG9jay5jcmVhdGVDb250cm9sKGFuY2VzdG9yKTsKLQkJQ29udHJvbCBjb250cm9sID0gcHJvY2Vzc29yc0Jsb2NrLmdldENvbnRyb2woKTsKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCQlkYXRhLmhvcml6b250YWxTcGFuID0gMTsKLQkJY29udHJvbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCS8vIFRPRE8gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscC4uLgotCi0JCWluaXREZWZhdWx0SW5zdGFsbCgpOwotCQlwcm9jZXNzb3JzQmxvY2suYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGdldEN1cnJlbnREZWZhdWx0UHJvY2Vzc29yKCk7Ci0JCQkJaWYgKGluc3RhbGwgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCXNldFZhbGlkKGZhbHNlKTsKLQkJCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZV8yKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJc2V0VmFsaWQodHJ1ZSk7Ci0JCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQlhcHBseURpYWxvZ0ZvbnQoYW5jZXN0b3IpOwotCQlyZXR1cm4gYW5jZXN0b3I7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLQl7Ci0JCXByb2Nlc3NvcnNCbG9jay5zYXZlQ29sdW1uU2V0dGluZ3MoKTsKLQkJZmluYWwgYm9vbGVhbltdIG9rID0gbmV3IGJvb2xlYW5bMV07Ci0JCXRyeQotCQl7Ci0JCQlmaW5hbCBJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gcHJvY2Vzc29yc0Jsb2NrLmdldFByb2Nlc3NvcnMoKTsKLQkJCWZpbmFsIElQcm9jZXNzb3JJbnN0YWxsIGRlZmF1bHRQcm9jZXNzb3IgPSBnZXRDdXJyZW50RGVmYXVsdFByb2Nlc3NvcigpOwotCQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JCQl7Ci0JCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0JCQkJewotCQkJCQl0cnkKLQkJCQkJewotCQkJCQkJSkFYUFJ1bnRpbWUuc2F2ZVByb2Nlc3NvclByZWZlcmVuY2VzKGluc3RhbGxzLGRlZmF1bHRQcm9jZXNzb3IsbW9uaXRvcik7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQkJewotCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCQkJCX0KLQkJCQkJb2tbMF0gPSAhbW9uaXRvci5pc0NhbmNlbGVkKCk7Ci0JCQkJfQotCQkJfTsKLQkJCVhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLmJ1c3lDdXJzb3JXaGlsZShydW5uYWJsZSk7Ci0JCX0KLQkJY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCXJldHVybiBva1swXTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdERlZmF1bHRJbnN0YWxsKCkKLQl7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIHJlYWxEZWZhdWx0ID0gSkFYUFJ1bnRpbWUuZ2V0RGVmYXVsdFByb2Nlc3NvcigpOwotCQlpZiAocmVhbERlZmF1bHQgIT0gbnVsbCkKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxscyA9IHByb2Nlc3NvcnNCbG9jay5nZXRQcm9jZXNzb3JzKCk7Ci0JCQlmb3IgKElQcm9jZXNzb3JJbnN0YWxsIGZha2VJbnN0YWxsIDogaW5zdGFsbHMpCi0JCQl7Ci0JCQkJaWYgKGZha2VJbnN0YWxsLmdldElkKCkuZXF1YWxzKHJlYWxEZWZhdWx0LmdldElkKCkpKQotCQkJCXsKLQkJCQkJdmVyaWZ5RGVmYXVsdFZNKGZha2VJbnN0YWxsKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeURlZmF1bHRWTShJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJaWYgKGluc3RhbGwgIT0gbnVsbCkKLQkJewotCQkJcHJvY2Vzc29yc0Jsb2NrLnNldENoZWNrZWRJbnN0YWxsKGluc3RhbGwpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJvY2Vzc29yc0Jsb2NrLnNldENoZWNrZWRJbnN0YWxsKG51bGwpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBnZXRDdXJyZW50RGVmYXVsdFByb2Nlc3NvcigpCi0JewotCQlyZXR1cm4gcHJvY2Vzc29yc0Jsb2NrLmdldENoZWNrZWRJbnN0YWxsKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDRlN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotQWRkUHJvY2Vzc29yRGlhbG9nXzE9U3VwcG9ydGVkIHZlcnNpb25zOgotQWRkUHJvY2Vzc29yRGlhbG9nXzc9UHJvY2Vzc29yIG11c3Qgc3VwcG9ydCBhdCBsZWFzdCBvbmUgWFNMVCB2ZXJzaW9uCi1BZGRQcm9jZXNzb3JEaWFsb2dfRWRpdF9UaXRsZT1FZGl0IFByb2Nlc3NvcgotQWRkUHJvY2Vzc29yRGlhbG9nX0FkZF9UaXRsZT1BZGQgUHJvY2Vzc29yCi1BZGRQcm9jZXNzb3JEaWFsb2dfcHJvY2Vzc29yTmFtZT1Qcm9jZXNzb3IgTmFtZToKLUFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JUeXBlPVByb2Nlc3NvciBUeXBlOgotQWRkUHJvY2Vzc29yRGlhbG9nX2phcnM9TGlicmFyaWVzOgotQWRkUHJvY2Vzc29yRGlhbG9nX2F0dHJpYnV0ZXM9QXR0cmlidXRlczoKLUFkZFByb2Nlc3NvckRpYWxvZ19lbnRlck5hbWU9QSBuYW1lIG11c3QgYmUgZW50ZXJlZCBmb3IgdGhpcyBwcm9jZXNzb3IKLUFkZFByb2Nlc3NvckRpYWxvZ19kdXBsaWNhdGVOYW1lPVRoZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gdXNlZAotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzA9SW5zdGFsbGVkIEphdmEgWFNMVCBQcm9jZXNzb3JzOgotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzE9TmFtZQotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzI9VHlwZQotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzM9WFNMVCBWZXJzaW9ucwotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzQ9RGVidWdnZXIKLUluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja181PUFkZAotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzY9RWRpdAotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzc9UmVtb3ZlCi1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfOD1Ob25lCi0KLVByb2Nlc3NvckxpYnJhcnlCbG9ja182PU9uZSBvciBtb3JlIGphciBmaWxlcyBtdXN0IGJlIHNwZWNpZmllZAotUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZEJ1dHRvbj1BZGQgRXh0ZXJuYWwgSkFScwotUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZFdvcmtzcGFjZUJ1dHRvbj1BZGQgV29ya3NwYWNlIEpBUnMKLVByb2Nlc3NvckxpYnJhcnlCbG9ja19SZW1vdmVCdXR0b249UmVtb3ZlCi1Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfRmlsZURpYWxvZ19UaXRsZT1FeHRlcm5hbCBKQVJzCi1Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19UaXRsZT1Xb3Jrc3BhY2UgSkFScwotUHJvY2Vzc29yTGlicmFyeUJsb2NrX1dvcmtzcGFjZUZpbGVEaWFsb2dfTWVzc2FnZT1TZWxlY3QgdGhlIEpBUnMgdGhhdCBtYWtlIHVwIHRoZSBYU0xUIHByb2Nlc3NvcgotCi1Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMD1KYXZhIFhTTFQgUHJvY2Vzc29ycwotUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzE9QWRkLCByZW1vdmUgb3IgZWRpdCBYU0xUIHByb2Nlc3NvciBkZWZpbml0aW9ucy5cbkJ5IGRlZmF1bHQsIHRoZSBjaGVja2VkIFByb2Nlc3NvciBpcyB1c2VkIGZvciBhbGwgdHJhbnNmb3JtYXRpb25zLgotUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzI9U2VsZWN0IGEgZGVmYXVsdCBYU0xUIFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvQXR0cmlidXRlRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYTBjZDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlN0YXR1c0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlclNvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkxhdW5jaEF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLQotcHVibGljIGNsYXNzIEF0dHJpYnV0ZURpYWxvZyBleHRlbmRzIFN0YXR1c0RpYWxvZwotewotCXByaXZhdGUgVGFibGUgdGFibGU7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciB0Vmlld2VyOwotCXByaXZhdGUgVGV4dCB0ZXh0OwotCXByaXZhdGUgTGlzdDxJQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gbmV3IEFycmF5TGlzdDxJQXR0cmlidXRlPigpOwotCXByaXZhdGUgTGlzdDxJQXR0cmlidXRlPiBzZWxlY3RlZEF0dHJpYnV0ZXMgPSBuZXcgQXJyYXlMaXN0PElBdHRyaWJ1dGU+KCk7Ci0KLQlwdWJsaWMgQXR0cmlidXRlRGlhbG9nKFNoZWxsIHBhcmVudCwgTGF1bmNoQXR0cmlidXRlcyBsYXVuY2hBdHRyaWJ1dGVzKQotCXsKLQkJc3VwZXIocGFyZW50KTsKLQkJc2V0VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGVEaWFsb2dfMCIpKTsgLy8kTk9OLU5MUy0xJAotCQkKLQkJU2V0PFN0cmluZz4gYXR0cmlidXRlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCQlmb3IgKExhdW5jaEF0dHJpYnV0ZSBhdHQgOiBsYXVuY2hBdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZXMoKSkKLQkJewotCQkJYXR0cmlidXRlU2V0LmFkZChhdHQudXJpKTsKLQkJfQotCQlmb3IgKElQcm9jZXNzb3JUeXBlIHR5cGUgOiBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlcygpKQotCQl7Ci0JCQlmb3IgKElBdHRyaWJ1dGUgYXR0cmlidXRlIDogdHlwZS5nZXRBdHRyaWJ1dGVzKCkpCi0JCQl7Ci0JCQkJaWYgKCFhdHRyaWJ1dGVTZXQuY29udGFpbnMoYXR0cmlidXRlLmdldFVSSSgpKSkKLQkJCQl7Ci0JCQkJCWF0dHJpYnV0ZVNldC5hZGQoYXR0cmlidXRlLmdldFVSSSgpKTsKLQkJCQkJYXR0cmlidXRlcy5hZGQoYXR0cmlidXRlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSk7Ci0JCWdkLndpZHRoSGludCA9IDQwMDsKLQkJY29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJY29tcC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZURpYWxvZ18xIikpOyAvLyROT04tTkxTLTEkCi0JCQotCQkKLQkJdGFibGUgPSBuZXcgVGFibGUoY29tcCxTV1QuQk9SREVSIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULlZfU0NST0xMIHwgU1dULk1VTFRJKTsKLQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZShmYWxzZSk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSk7Ci0JCWdkLnZlcnRpY2FsSW5kZW50ID0gMTA7Ci0JCWdkLmhlaWdodEhpbnQgPSAyMDA7Ci0JCXRhYmxlLnNldExheW91dERhdGEoZ2QpOwotCQkKLQkJdFZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZSk7Ci0JCXRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcigpCi0JCXsKLQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCQkJewotCQkJCXJldHVybiBhdHRyaWJ1dGVzLnRvQXJyYXkobmV3IElBdHRyaWJ1dGVbMF0pOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJCXsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQkJewotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMYWJlbFByb3ZpZGVyKCl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlJQXR0cmlidXRlIGF0dHJpYnV0ZSA9IChJQXR0cmlidXRlKWVsZW1lbnQ7Ci0JCQkJcmV0dXJuIGF0dHJpYnV0ZS5nZXRVUkkoKTsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikKLQkJCXsKLQkJCQlJQXR0cmlidXRlIGExID0gKElBdHRyaWJ1dGUpIGUxOwotCQkJCUlBdHRyaWJ1dGUgYTIgPSAoSUF0dHJpYnV0ZSkgZTI7Ci0JCQkJcmV0dXJuIGExLmdldFVSSSgpLmNvbXBhcmVUbyhhMi5nZXRVUkkoKSk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKWV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCXNlbGVjdGVkQXR0cmlidXRlcyA9IHNlbC50b0xpc3QoKTsKLQkJCQlpZiAoc2VsLmlzRW1wdHkoKSkKLQkJCQkJdGV4dC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlRGlhbG9nXzIiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQllbHNlCi0JCQkJewotCQkJCQlJQXR0cmlidXRlIGF0dHJpYnV0ZSA9IChJQXR0cmlidXRlKXNlbC5nZXRGaXJzdEVsZW1lbnQoKTsgCi0JCQkJCXRleHQuc2V0VGV4dChhdHRyaWJ1dGUuZ2V0RGVzY3JpcHRpb24oKSk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBJRG91YmxlQ2xpY2tMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBldmVudCkKLQkJCXsKLQkJCQlidXR0b25QcmVzc2VkKElEaWFsb2dDb25zdGFudHMuT0tfSUQpOwotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5zZXRJbnB1dChhdHRyaWJ1dGVzKTsKLQkJCi0JCXRleHQgPSBuZXcgVGV4dChjb21wLFNXVC5CT1JERVIgfCBTV1QuV1JBUCB8IFNXVC5SRUFEX09OTFkgfCBTV1QuVl9TQ1JPTEwpOwotCQl0ZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSxmYWxzZSk7Ci0JCWdkLmhlaWdodEhpbnQgPSA4MDsKLQkJdGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJCi0JCWlmIChhdHRyaWJ1dGVzLnNpemUoKSA+IDApCi0JCXsKLQkJCXRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRWaWV3ZXIuZ2V0RWxlbWVudEF0KDApKSwgdHJ1ZSk7Ci0JCX0KLQkJCi0JCXJldHVybiBjb21wOwotCX0KLQkKLQlwdWJsaWMgTGlzdDxJQXR0cmlidXRlPiBnZXRBdHRyaWJ1dGVzKCkKLQl7Ci0JCXJldHVybiBzZWxlY3RlZEF0dHJpYnV0ZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVzQmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvQXR0cmlidXRlc0Jsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZTUxYTguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVzQmxvY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkVkaXRpbmdTdXBwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlckNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRleHRDZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyQ2VsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlclNvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5BYnN0cmFjdFRhYmxlQmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5KQVhQRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5MYXVuY2hBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVzQmxvY2sgZXh0ZW5kcyBBYnN0cmFjdFRhYmxlQmxvY2sKLXsKLQlwcml2YXRlIFRhYmxlIHRhYmxlOwotCXByaXZhdGUgVGFibGVWaWV3ZXIgdFZpZXdlcjsKLQlwcml2YXRlIExhdW5jaEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLQlwcml2YXRlIEJ1dHRvbiByZW1vdmVCdXR0b247Ci0JcHJpdmF0ZSBNYXA8U3RyaW5nLElBdHRyaWJ1dGU+IGF0dHJpYnV0ZVVyaXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsSUF0dHJpYnV0ZT4oKTsKLQkKLQlwdWJsaWMgQXR0cmlidXRlc0Jsb2NrKCkKLQl7Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvclR5cGVzKCkpCi0JCXsKLQkJCWZvciAoSUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiB0eXBlLmdldEF0dHJpYnV0ZXMoKSkKLQkJCXsKLQkJCQlhdHRyaWJ1dGVVcmlzLnB1dChhdHRyaWJ1dGUuZ2V0VVJJKCksIGF0dHJpYnV0ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkKLQl7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UXVhbGlmaWVyKCkKLQl7Ci0JCXJldHVybiBKQVhQRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQrIi4iK2dldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFRhYmxlIGdldFRhYmxlKCkKLQl7Ci0JCXJldHVybiB0YWJsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlUYWJJdGVtIGl0ZW0gPSBuZXcgVGFiSXRlbSgoVGFiRm9sZGVyKXBhcmVudCxTV1QuTk9ORSk7Ci0JCWl0ZW0uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZXNCbG9jay4wIikpOyAvLyROT04tTkxTLTEkCi0JCQotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsZmFsc2UpOwotCQlsYXlvdXQubWFyZ2luQm90dG9tID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotCQlpdGVtLnNldENvbnRyb2woY29tcG9zaXRlKTsKLQkJCi0JCXRhYmxlID0gbmV3IFRhYmxlKGNvbXBvc2l0ZSxTV1QuQk9SREVSIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULlZfU0NST0xMIHwgU1dULk1VTFRJKTsKLQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJdGFibGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKSk7Ci0JCXRhYmxlLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlBZGFwdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGV2ZW50KSB7Ci0JCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuREVMICYmIGV2ZW50LnN0YXRlTWFzayA9PSAwKSB7Ci0JCQkJCXBlcmZvcm1SZW1vdmUoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQkKLQkJVGFibGVDb2x1bW4gdGMxID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLFNXVC5OT05FKTsKLQkJdGMxLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGVzQmxvY2suMiIpKTsgLy8kTk9OLU5MUy0xJAotCQl0YzEuc2V0V2lkdGgoMzUwKTsKLQkJdGMxLnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJCi0JCVRhYmxlQ29sdW1uIHRjMiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSxTV1QuTk9ORSk7Ci0JCXRjMi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlc0Jsb2NrLjciKSk7IC8vJE5PTi1OTFMtMSQKLQkJdGMyLnNldFdpZHRoKDUwKTsKLQkJdGMyLnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJCi0JCUNvbXBvc2l0ZSBidXR0b25Db21wID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsU1dULkZJTEwpOwotCQlidXR0b25Db21wLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdsLm1hcmdpbldpZHRoID0gMDsKLQkJYnV0dG9uQ29tcC5zZXRMYXlvdXQoZ2wpOwotCQkKLQkJQnV0dG9uIGFkZEJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcCxTV1QuUFVTSCk7Ci0JCWFkZEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlc0Jsb2NrLjgiKSk7IC8vJE5PTi1OTFMtMSQKLQkJYWRkQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJYWRkQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCUF0dHJpYnV0ZURpYWxvZyBkaWFsb2cgPSBuZXcgQXR0cmlidXRlRGlhbG9nKGdldFNoZWxsKCksYXR0cmlidXRlcyk7Ci0JCQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKQotCQkJCXsKLQkJCQkJTGlzdDxJQXR0cmlidXRlPiBuZXdBdHRyaWJ1dGVzID0gZGlhbG9nLmdldEF0dHJpYnV0ZXMoKTsKLQkJCQkJTGF1bmNoQXR0cmlidXRlIGZpcnN0ID0gbnVsbDsKLQkJCQkJZm9yIChJQXR0cmlidXRlIGF0dHJpYnV0ZSA6IG5ld0F0dHJpYnV0ZXMpCi0JCQkJCXsKLQkJCQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHQgPSBuZXcgTGF1bmNoQXR0cmlidXRlKGF0dHJpYnV0ZS5nZXRVUkkoKSwic3RyaW5nIixudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCQkJaWYgKGZpcnN0ID09IG51bGwpCi0JCQkJCQkJZmlyc3QgPSBhdHQ7Ci0JCQkJCQlhdHRyaWJ1dGVzLmFkZEF0dHJpYnV0ZShhdHQpOwotCQkJCQl9Ci0JCQkJCWlmIChuZXdBdHRyaWJ1dGVzLnNpemUoKSA+IDApCi0JCQkJCXsKLQkJCQkJCXRWaWV3ZXIucmVmcmVzaCgpOwotCQkJCQkJdFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZmlyc3QpLCB0cnVlKTsKLQkJCQkJCXRWaWV3ZXIuZWRpdEVsZW1lbnQoZmlyc3QsIDEpOwotCQkJCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJCi0JCXJlbW92ZUJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcCxTV1QuUFVTSCk7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlc0Jsb2NrLjE0IikpOyAvLyROT04tTkxTLTEkCi0JCXJlbW92ZUJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuVE9QLGZhbHNlLGZhbHNlKSk7Ci0JCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJfQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlwZXJmb3JtUmVtb3ZlKCk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJc2V0Q29udHJvbCh0YWJsZSk7Ci0JCQotCQl0Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyKCkKLQkJewotCQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlcygpLnRvQXJyYXkobmV3IExhdW5jaEF0dHJpYnV0ZVswXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQkJYXR0cmlidXRlcyA9IChMYXVuY2hBdHRyaWJ1dGVzKSBuZXdJbnB1dDsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikKLQkJCXsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgYTEgPSAoTGF1bmNoQXR0cmlidXRlKSBlMTsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgYTIgPSAoTGF1bmNoQXR0cmlidXRlKSBlMjsKLQkJCQlyZXR1cm4gYTEudXJpLmNvbXBhcmVUbyhhMi51cmkpOwotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCXVwZGF0ZVJlbW92ZUJ1dHRvbigpOwotCQkJfQotCQl9KTsKLQkJCi0JCVRhYmxlVmlld2VyQ29sdW1uIHR2YzEgPSBuZXcgVGFibGVWaWV3ZXJDb2x1bW4odFZpZXdlcix0YzEpOwotCQl0dmMxLnNldExhYmVsUHJvdmlkZXIobmV3IENlbGxMYWJlbFByb3ZpZGVyKCl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHVwZGF0ZShWaWV3ZXJDZWxsIGNlbGwpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSkgY2VsbC5nZXRFbGVtZW50KCk7Ci0JCQkJY2VsbC5zZXRUZXh0KHR2LnVyaSk7Ci0JCQl9Ci0JCQkKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBnZXRUb29sVGlwVGltZURpc3BsYXllZChPYmplY3Qgb2JqZWN0KQotCQkJewotCQkJCXJldHVybiA1MDAwOwotCQkJfQotCQkJCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSkgZWxlbWVudDsKLQkJCQlyZXR1cm4gYXR0cmlidXRlVXJpcy5nZXQodHYudXJpKS5nZXREZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCX0pOwotCQkKLS8vCQlDb2x1bW5WaWV3ZXJUb29sVGlwU3VwcG9ydC5lbmFibGVGb3IodFZpZXdlcik7Ci0JCQotCQlUYWJsZVZpZXdlckNvbHVtbiB0dmMyID0gbmV3IFRhYmxlVmlld2VyQ29sdW1uKHRWaWV3ZXIsdGMyKTsKLQkJdHZjMi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBDZWxsTGFiZWxQcm92aWRlcigpewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB1cGRhdGUoVmlld2VyQ2VsbCBjZWxsKQotCQkJewotCQkJCUxhdW5jaEF0dHJpYnV0ZSB0diA9IChMYXVuY2hBdHRyaWJ1dGUpIGNlbGwuZ2V0RWxlbWVudCgpOwotCQkJCWNlbGwuc2V0VGV4dCh0di52YWx1ZSk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJdHZjMi5zZXRFZGl0aW5nU3VwcG9ydChuZXcgRWRpdGluZ1N1cHBvcnQodFZpZXdlcil7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGJvb2xlYW4gY2FuRWRpdChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgQ2VsbEVkaXRvciBnZXRDZWxsRWRpdG9yKE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCXJldHVybiBuZXcgVGV4dENlbGxFZGl0b3IodGFibGUpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBPYmplY3QgZ2V0VmFsdWUoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSllbGVtZW50OwotCQkJCXJldHVybiB0di52YWx1ZSA9PSBudWxsID8gIiIgOiB0di52YWx1ZTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlKE9iamVjdCBlbGVtZW50LCBPYmplY3QgdmFsdWUpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSllbGVtZW50OwotCQkJCXR2LnNldFZhbHVlKChTdHJpbmcpdmFsdWUpOwotCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCQl0Vmlld2VyLnVwZGF0ZSh0diwgbnVsbCk7Ci0JCQl9Ci0JCQkKLQkJfSk7Ci0JCQotCQlyZXN0b3JlQ29sdW1uU2V0dGluZ3MoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVSZW1vdmVCdXR0b24oKQotCXsKLQkJcmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoIXRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlc0Jsb2NrLjE2Iik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplQXR0cmlidXRlc0Zyb21TdG9yYWdlKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfQVRUUklCVVRFUywgKFN0cmluZykgbnVsbCk7Ci0JCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApCi0JCXsKLQkJCWF0dHJpYnV0ZXMgPSBMYXVuY2hBdHRyaWJ1dGVzLmZyb21YTUwobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHMuZ2V0Qnl0ZXMoKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJYXR0cmlidXRlcyA9IG5ldyBMYXVuY2hBdHRyaWJ1dGVzKCk7Ci0JCX0KLQkJdFZpZXdlci5zZXRJbnB1dChhdHRyaWJ1dGVzKTsKLQkJdXBkYXRlUmVtb3ZlQnV0dG9uKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlpbml0aWFsaXplQXR0cmlidXRlc0Zyb21TdG9yYWdlKGNvbmZpZ3VyYXRpb24pOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgeG1sID0gYXR0cmlidXRlcy50b1hNTCgpOwotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9BVFRSSUJVVEVTLCB4bWwpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGVyZm9ybVJlbW92ZSgpCi0JewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pdFZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJZm9yIChJdGVyYXRvcjxMYXVuY2hBdHRyaWJ1dGU+IGl0ZXJhdG9yID0gc2VsLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspCi0JCXsKLQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHQgPSBpdGVyYXRvci5uZXh0KCk7Ci0JCQlhdHRyaWJ1dGVzLnJlbW92ZUF0cmlidXRlKGF0dC51cmkpOwotCQl9Ci0JCXRWaWV3ZXIucmVmcmVzaCgpOwotCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9JbnN0YWxsU3RhbmRpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9JbnN0YWxsU3RhbmRpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWIzOTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSW5zdGFsbFN0YW5kaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuUHJvY2Vzc29ySW5zdGFsbDsKLQotcHVibGljIGNsYXNzIEluc3RhbGxTdGFuZGluIGV4dGVuZHMgUHJvY2Vzc29ySW5zdGFsbAotewotCXB1YmxpYyBJbnN0YWxsU3RhbmRpbihJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJc3VwZXIoaW5zdGFsbC5nZXRJZCgpLCBpbnN0YWxsLmdldE5hbWUoKSwgaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0SWQoKSwgaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCksIGluc3RhbGwuZ2V0RGVidWdnZXIoKSAhPSBudWxsID8gaW5zdGFsbC5nZXREZWJ1Z2dlcigpLmdldElkKCkgOiBudWxsLCBpbnN0YWxsCi0JCQkJLmdldFN1cHBvcnRzKCksIGluc3RhbGwuaXNDb250cmlidXRlZCgpKTsKLQl9Ci0KLQlwdWJsaWMgSW5zdGFsbFN0YW5kaW4oU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGVJZCwgU3RyaW5nIGRlYnVnZ2VySWQsIElQcm9jZXNzb3JKYXJbXSBqYXJzKQotCXsKLQkJc3VwZXIoaWQsIG5hbWUsIHR5cGVJZCwgamFycywgZGVidWdnZXJJZCwgIiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyQ29udGVudFByb3ZpZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0phckNvbnRlbnRQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzdhMGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyQ29udGVudFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci0KLXB1YmxpYyBjbGFzcyBKYXJDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotewotCXByaXZhdGUgSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbDsKLQotCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCXsKLQkJcmV0dXJuIGluc3RhbGwuZ2V0UHJvY2Vzc29ySmFycygpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JewotCQlpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBuZXdJbnB1dDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0phckxhYmVsUHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyTGFiZWxQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGVkMzEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyTGFiZWxQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci0KLXB1YmxpYyBjbGFzcyBKYXJMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotewotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkKLQl7Ci0JCUlQcm9jZXNzb3JKYXIgamFyID0gKElQcm9jZXNzb3JKYXIpIGVsZW1lbnQ7Ci0JCUlQYXRoIHBhdGggPSBqYXIuZ2V0UGF0aCgpOwotCQlyZXR1cm4gcGF0aC5sYXN0U2VnbWVudCgpICsgIiAtICIgKyBwYXRoLnJlbW92ZUxhc3RTZWdtZW50cygxKS50b09TU3RyaW5nKCkgKyAiIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk2Y2U2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWNsYXNzIE1lc3NhZ2VzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKLQkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOwotCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgewotCQl0cnkgewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL091dHB1dFByb3BlcnRpZXNCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9PdXRwdXRQcm9wZXJ0aWVzQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5Y2U2Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL091dHB1dFByb3BlcnRpZXNCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRWRpdGluZ1N1cHBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJDZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyU29ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLkFic3RyYWN0VGFibGVCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLkpBWFBEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSU91dHB1dFByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuTGF1bmNoUHJvcGVydGllczsKLQotcHVibGljIGNsYXNzIE91dHB1dFByb3BlcnRpZXNCbG9jayBleHRlbmRzIEFic3RyYWN0VGFibGVCbG9jawotewotCXByaXZhdGUgVGFibGUgdGFibGU7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciB0Vmlld2VyOwotCXByaXZhdGUgTGF1bmNoUHJvcGVydGllcyBwcm9wZXJ0aWVzOwotCXByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbjsKLQlwcml2YXRlIE1hcDxTdHJpbmcsSU91dHB1dFByb3BlcnR5PiBwcm9wZXJ0eVVyaXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsSU91dHB1dFByb3BlcnR5PigpOwotCQotCXB1YmxpYyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2soKQotCXsKLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZXMoKSkKLQkJewotCQkJZm9yIChJT3V0cHV0UHJvcGVydHkgcHJvcGVydHkgOiB0eXBlLmdldE91dHB1dFByb3BlcnRpZXMoKSkKLQkJCXsKLQkJCQlwcm9wZXJ0eVVyaXMucHV0KHByb3BlcnR5LmdldFVSSSgpLCBwcm9wZXJ0eSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkKLQl7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UXVhbGlmaWVyKCkKLQl7Ci0JCXJldHVybiBKQVhQRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQrIi4iK2dldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFRhYmxlIGdldFRhYmxlKCkKLQl7Ci0JCXJldHVybiB0YWJsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlUYWJJdGVtIGl0ZW0gPSBuZXcgVGFiSXRlbSgoVGFiRm9sZGVyKXBhcmVudCxTV1QuTk9ORSk7Ci0JCWl0ZW0uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk91dHB1dFByb3BlcnRpZXNCbG9ja18wIikpOyAvLyROT04tTkxTLTEkCi0JCQotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsZmFsc2UpOwotCQlsYXlvdXQubWFyZ2luQm90dG9tID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotCQlpdGVtLnNldENvbnRyb2woY29tcG9zaXRlKTsKLQkJCi0JCXRhYmxlID0gbmV3IFRhYmxlKGNvbXBvc2l0ZSxTV1QuQk9SREVSIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULlZfU0NST0xMIHwgU1dULk1VTFRJKTsKLQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJdGFibGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKSk7Ci0JCXRhYmxlLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlBZGFwdGVyKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGV2ZW50KSB7Ci0JCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuREVMICYmIGV2ZW50LnN0YXRlTWFzayA9PSAwKSB7Ci0JCQkJCXBlcmZvcm1SZW1vdmUoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCQotCQlUYWJsZUNvbHVtbiB0YzEgPSBuZXcgVGFibGVDb2x1bW4odGFibGUsU1dULk5PTkUpOwotCQl0YzEuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk91dHB1dFByb3BlcnRpZXNCbG9ja18xIikpOyAvLyROT04tTkxTLTEkCi0JCXRjMS5zZXRXaWR0aCgzNTApOwotCQl0YzEuc2V0UmVzaXphYmxlKHRydWUpOwotCQkKLQkJVGFibGVDb2x1bW4gdGMyID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLFNXVC5OT05FKTsKLQkJdGMyLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMiIpKTsgLy8kTk9OLU5MUy0xJAotCQl0YzIuc2V0V2lkdGgoNTApOwotCQl0YzIuc2V0UmVzaXphYmxlKHRydWUpOwotCQkKLQkJQ29tcG9zaXRlIGJ1dHRvbkNvbXAgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSxTV1QuRklMTCk7Ci0JCWJ1dHRvbkNvbXAuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULlRPUCxmYWxzZSxmYWxzZSkpOwotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJZ2wubWFyZ2luV2lkdGggPSAwOwotCQlidXR0b25Db21wLnNldExheW91dChnbCk7Ci0JCQotCQlCdXR0b24gYWRkQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25Db21wLFNXVC5QVVNIKTsKLQkJYWRkQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJPdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMyIpKTsgLy8kTk9OLU5MUy0xJAotCQlhZGRCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULlRPUCxmYWxzZSxmYWxzZSkpOwotCQlhZGRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJT3V0cHV0UHJvcGVydHlEaWFsb2cgZGlhbG9nID0gbmV3IE91dHB1dFByb3BlcnR5RGlhbG9nKGdldFNoZWxsKCkscHJvcGVydGllcyk7Ci0JCQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKQotCQkJCXsKLQkJCQkJTGlzdDxJT3V0cHV0UHJvcGVydHk+IG5ld1Byb3BlcnRpZXMgPSBkaWFsb2cuZ2V0T3V0cHVQcm9wZXJ0aWVzKCk7Ci0JCQkJCVN0cmluZyBmaXJzdCA9IG51bGw7Ci0JCQkJCWZvciAoSU91dHB1dFByb3BlcnR5IHByb3BlcnR5IDogbmV3UHJvcGVydGllcykKLQkJCQkJewotCQkJCQkJU3RyaW5nIGF0dCA9IHByb3BlcnR5LmdldFVSSSgpOwotCQkJCQkJaWYgKGZpcnN0ID09IG51bGwpCi0JCQkJCQkJZmlyc3QgPSBhdHQ7Ci0JCQkJCQlwcm9wZXJ0aWVzLnNldFByb3BlcnR5KHByb3BlcnR5LmdldFVSSSgpLCBudWxsKTsKLQkJCQkJfQotCQkJCQlpZiAobmV3UHJvcGVydGllcy5zaXplKCkgPiAwKQotCQkJCQl7Ci0JCQkJCQl0Vmlld2VyLnJlZnJlc2goKTsKLQkJCQkJCXRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGZpcnN0KSwgdHJ1ZSk7Ci0JCQkJCQl0Vmlld2VyLmVkaXRFbGVtZW50KGZpcnN0LCAxKTsKLQkJCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCQotCQlyZW1vdmVCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXAsU1dULlBVU0gpOwotCQlyZW1vdmVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk91dHB1dFByb3BlcnRpZXNCbG9ja180IikpOyAvLyROT04tTkxTLTEkCi0JCXJlbW92ZUJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuVE9QLGZhbHNlLGZhbHNlKSk7Ci0JCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJfQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlwZXJmb3JtUmVtb3ZlKCk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJc2V0Q29udHJvbCh0YWJsZSk7Ci0JCQotCQl0Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyKCkKLQkJewotCQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIHByb3BlcnRpZXMuZ2V0UHJvcGVydGllcygpLmtleVNldCgpLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldFNvcnRlcihuZXcgVmlld2VyU29ydGVyKCkpOwotCQl0Vmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJdXBkYXRlUmVtb3ZlQnV0dG9uKCk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJVGFibGVWaWV3ZXJDb2x1bW4gdHZjMSA9IG5ldyBUYWJsZVZpZXdlckNvbHVtbih0Vmlld2VyLHRjMSk7Ci0JCXR2YzEuc2V0TGFiZWxQcm92aWRlcihuZXcgQ2VsbExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgdXBkYXRlKFZpZXdlckNlbGwgY2VsbCkKLQkJCXsKLQkJCQlTdHJpbmcgdHYgPSAoU3RyaW5nKSBjZWxsLmdldEVsZW1lbnQoKTsKLQkJCQljZWxsLnNldFRleHQodHYpOwotCQkJfQotCQkJCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgZ2V0VG9vbFRpcFRpbWVEaXNwbGF5ZWQoT2JqZWN0IG9iamVjdCkKLQkJCXsKLQkJCQlyZXR1cm4gNTAwMDsKLQkJCX0KLQkJCQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCVN0cmluZyB0diA9IChTdHJpbmcpIGVsZW1lbnQ7Ci0JCQkJcmV0dXJuIHByb3BlcnR5VXJpcy5nZXQodHYpLmdldERlc2NyaXB0aW9uKCk7Ci0JCQl9Ci0JCQkKLQkJfSk7Ci0JCQotLy8JCUNvbHVtblZpZXdlclRvb2xUaXBTdXBwb3J0LmVuYWJsZUZvcih0Vmlld2VyKTsKLQkJCi0JCVRhYmxlVmlld2VyQ29sdW1uIHR2YzIgPSBuZXcgVGFibGVWaWV3ZXJDb2x1bW4odFZpZXdlcix0YzIpOwotCQl0dmMyLnNldExhYmVsUHJvdmlkZXIobmV3IENlbGxMYWJlbFByb3ZpZGVyKCl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHVwZGF0ZShWaWV3ZXJDZWxsIGNlbGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHR2ID0gKFN0cmluZykgY2VsbC5nZXRFbGVtZW50KCk7Ci0JCQkJU3RyaW5nIHZhbCA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkodHYpOwotCQkJCWNlbGwuc2V0VGV4dCh2YWwgPT0gbnVsbCA/ICIiIDogdmFsKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9KTsKLQkJCi0JCXR2YzIuc2V0RWRpdGluZ1N1cHBvcnQobmV3IEVkaXRpbmdTdXBwb3J0KHRWaWV3ZXIpewotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBib29sZWFuIGNhbkVkaXQoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIENlbGxFZGl0b3IgZ2V0Q2VsbEVkaXRvcihPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IFRleHRDZWxsRWRpdG9yKHRhYmxlKTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgT2JqZWN0IGdldFZhbHVlKE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCVN0cmluZyB0diA9IChTdHJpbmcpZWxlbWVudDsKLQkJCQlTdHJpbmcgdmFsID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0dik7Ci0JCQkJcmV0dXJuIHZhbCA9PSBudWxsID8gIiIgOiB2YWw7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBzZXRWYWx1ZShPYmplY3QgZWxlbWVudCwgT2JqZWN0IHZhbHVlKQotCQkJewotCQkJCVN0cmluZyB0diA9IChTdHJpbmcpZWxlbWVudDsKLQkJCQlwcm9wZXJ0aWVzLnNldFByb3BlcnR5KHR2LCAoU3RyaW5nKXZhbHVlKTsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJdFZpZXdlci51cGRhdGUodHYsIG51bGwpOwotCQkJfQotCQkJCi0JCX0pOwotCQkKLQkJcmVzdG9yZUNvbHVtblNldHRpbmdzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlUmVtb3ZlQnV0dG9uKCkKLQl7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKCF0Vmlld2VyLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZXNCbG9jay4xNiIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLS8vCQlMYXVuY2hQcm9wZXJ0aWVzIHAgPSBuZXcgTGF1bmNoUHJvcGVydGllcygpOwotLy8JCXAuc2V0UHJvcGVydHkoImluZGVudCIsICJ5ZXMiKTsKLS8vCQl0cnkKLS8vCQl7Ci0vLwkJCVN0cmluZyB4bWwgPSBwLnRvWE1MKCk7Ci0vLwkJCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX1BST1BFUlRJRVMsIHhtbCk7Ci0vLwkJfQotLy8JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0vLwkJewotLy8JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0vLwkJewotLy8JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpCi0vLwkJewotLy8JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLS8vCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzRnJvbVN0b3JhZ2UoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfUFJPUEVSVElFUywgKFN0cmluZykgbnVsbCk7Ci0JCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApCi0JCXsKLQkJCXByb3BlcnRpZXMgPSBMYXVuY2hQcm9wZXJ0aWVzLmZyb21YTUwobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHMuZ2V0Qnl0ZXMoKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJvcGVydGllcyA9IG5ldyBMYXVuY2hQcm9wZXJ0aWVzKCk7Ci0JCX0KLQkJdFZpZXdlci5zZXRJbnB1dChwcm9wZXJ0aWVzKTsKLQkJdXBkYXRlUmVtb3ZlQnV0dG9uKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlpbml0aWFsaXplUHJvcGVydGllc0Zyb21TdG9yYWdlKGNvbmZpZ3VyYXRpb24pOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgeG1sID0gcHJvcGVydGllcy50b1hNTCgpOwotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfUFJPUEVSVElFUywgeG1sKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBlcmZvcm1SZW1vdmUoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCWZvciAoSXRlcmF0b3I8U3RyaW5nPiBpdGVyYXRvciA9IHNlbC5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlTdHJpbmcgYXR0ID0gaXRlcmF0b3IubmV4dCgpOwotCQkJcHJvcGVydGllcy5yZW1vdmVQcm9wZXJ0eShhdHQpOwotCQl9Ci0JCXRWaWV3ZXIucmVmcmVzaCgpOwotCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9PdXRwdXRQcm9wZXJ0eURpYWxvZy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9PdXRwdXRQcm9wZXJ0eURpYWxvZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWNlMTI3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvT3V0cHV0UHJvcGVydHlEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlN0YXR1c0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlclNvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JT3V0cHV0UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuTGF1bmNoUHJvcGVydGllczsKLQotcHVibGljIGNsYXNzIE91dHB1dFByb3BlcnR5RGlhbG9nIGV4dGVuZHMgU3RhdHVzRGlhbG9nCi17Ci0JcHJpdmF0ZSBUYWJsZSB0YWJsZTsKLQlwcml2YXRlIFRhYmxlVmlld2VyIHRWaWV3ZXI7Ci0JcHJpdmF0ZSBUZXh0IHRleHQ7Ci0JcHJpdmF0ZSBMaXN0PElPdXRwdXRQcm9wZXJ0eT4gcHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3Q8SU91dHB1dFByb3BlcnR5PigpOwotCXByaXZhdGUgTGlzdDxJT3V0cHV0UHJvcGVydHk+IHNlbGVjdGVkUHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3Q8SU91dHB1dFByb3BlcnR5PigpOwotCi0JcHVibGljIE91dHB1dFByb3BlcnR5RGlhbG9nKFNoZWxsIHBhcmVudCwgTGF1bmNoUHJvcGVydGllcyBsYXVuY2hQcm9wZXJ0aWVzKQotCXsKLQkJc3VwZXIocGFyZW50KTsKLQkJc2V0VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJPdXRwdXRQcm9wZXJ0eURpYWxvZ18wIikpOyAvLyROT04tTkxTLTEkCi0JCQotCQlTZXQ8U3RyaW5nPiBwcm9wZXJ0eVNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQkJZm9yIChTdHJpbmcgYXR0IDogbGF1bmNoUHJvcGVydGllcy5nZXRQcm9wZXJ0aWVzKCkua2V5U2V0KCkpCi0JCXsKLQkJCXByb3BlcnR5U2V0LmFkZChhdHQpOwotCQl9Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvclR5cGVzKCkpCi0JCXsKLQkJCWZvciAoSU91dHB1dFByb3BlcnR5IHByb3BlcnR5IDogdHlwZS5nZXRPdXRwdXRQcm9wZXJ0aWVzKCkpCi0JCQl7Ci0JCQkJaWYgKCFwcm9wZXJ0eVNldC5jb250YWlucyhwcm9wZXJ0eS5nZXRVUkkoKSkpCi0JCQkJewotCQkJCQlwcm9wZXJ0eVNldC5hZGQocHJvcGVydHkuZ2V0VVJJKCkpOwotCQkJCQlwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCUNvbXBvc2l0ZSBjb21wID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsU1dULk5PTkUpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuRklMTCx0cnVlLHRydWUpOwotCQlnZC53aWR0aEhpbnQgPSA0MDA7Ci0JCWNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWNvbXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCQkKLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29tcCxTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJPdXRwdXRQcm9wZXJ0eURpYWxvZ18xIikpOyAvLyROT04tTkxTLTEkCi0JCQotCQkKLQkJdGFibGUgPSBuZXcgVGFibGUoY29tcCxTV1QuQk9SREVSIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULlZfU0NST0xMIHwgU1dULk1VTFRJKTsKLQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZShmYWxzZSk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSk7Ci0JCWdkLnZlcnRpY2FsSW5kZW50ID0gMTA7Ci0JCWdkLmhlaWdodEhpbnQgPSAyMDA7Ci0JCXRhYmxlLnNldExheW91dERhdGEoZ2QpOwotCQkKLQkJdFZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZSk7Ci0JCXRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcigpCi0JCXsKLQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCQkJewotCQkJCXJldHVybiBwcm9wZXJ0aWVzLnRvQXJyYXkobmV3IElPdXRwdXRQcm9wZXJ0eVswXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCUlPdXRwdXRQcm9wZXJ0eSBwcm9wZXJ0eSA9IChJT3V0cHV0UHJvcGVydHkpZWxlbWVudDsKLQkJCQlyZXR1cm4gcHJvcGVydHkuZ2V0VVJJKCk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldFNvcnRlcihuZXcgVmlld2VyU29ydGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpCi0JCQl7Ci0JCQkJSU91dHB1dFByb3BlcnR5IGExID0gKElPdXRwdXRQcm9wZXJ0eSkgZTE7Ci0JCQkJSU91dHB1dFByb3BlcnR5IGEyID0gKElPdXRwdXRQcm9wZXJ0eSkgZTI7Ci0JCQkJcmV0dXJuIGExLmdldFVSSSgpLmNvbXBhcmVUbyhhMi5nZXRVUkkoKSk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKWV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCXNlbGVjdGVkUHJvcGVydGllcyA9IHNlbC50b0xpc3QoKTsKLQkJCQlpZiAoc2VsLmlzRW1wdHkoKSkKLQkJCQkJdGV4dC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCUlPdXRwdXRQcm9wZXJ0eSBwcm9wZXJ0eSA9IChJT3V0cHV0UHJvcGVydHkpc2VsLmdldEZpcnN0RWxlbWVudCgpOyAKLQkJCQkJdGV4dC5zZXRUZXh0KHByb3BlcnR5LmdldERlc2NyaXB0aW9uKCkpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuYWRkRG91YmxlQ2xpY2tMaXN0ZW5lcihuZXcgSURvdWJsZUNsaWNrTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIGRvdWJsZUNsaWNrKERvdWJsZUNsaWNrRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJYnV0dG9uUHJlc3NlZChJRGlhbG9nQ29uc3RhbnRzLk9LX0lEKTsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuc2V0SW5wdXQocHJvcGVydGllcyk7Ci0JCQotCQl0ZXh0ID0gbmV3IFRleHQoY29tcCxTV1QuQk9SREVSIHwgU1dULldSQVAgfCBTV1QuUkVBRF9PTkxZIHwgU1dULlZfU0NST0xMKTsKLQkJdGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsZmFsc2UpOwotCQlnZC5oZWlnaHRIaW50ID0gODA7Ci0JCXRleHQuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCQotCQlpZiAocHJvcGVydGllcy5zaXplKCkgPiAwKQotCQl7Ci0JCQl0Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0Vmlld2VyLmdldEVsZW1lbnRBdCgwKSksIHRydWUpOwotCQl9Ci0JCQotCQlyZXR1cm4gY29tcDsKLQl9Ci0JCi0JcHVibGljIExpc3Q8SU91dHB1dFByb3BlcnR5PiBnZXRPdXRwdVByb3BlcnRpZXMoKQotCXsKLQkJcmV0dXJuIHNlbGVjdGVkUHJvcGVydGllczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckJsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckJsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNDkwN2MuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLnVpLkFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbWJvVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Gb250OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JCbG9jayBleHRlbmRzIEFic3RyYWN0TGF1bmNoQ29uZmlndXJhdGlvblRhYgotewotCXByaXZhdGUgQnV0dG9uIHVzZVByZWZlcmVuY2VzUmFkaW87Ci0JcHJpdmF0ZSBCdXR0b24gYWx0ZXJQcmVmZXJlbmNlc0J1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiBvdmVycmlkZVByZWZlcmVuY2VzUmFkaW87Ci0JcHJpdmF0ZSBDb21ibyBydW5Db21ibzsKLQlwcml2YXRlIEJ1dHRvbiBpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uOwotCXByaXZhdGUgQ29tYm9WaWV3ZXIgcnVuQ29tYm9WaWV3ZXI7Ci0JcHJpdmF0ZSBDb21ib1ZpZXdlciBmYWN0b3J5Q29tYm9WaWV3ZXI7Ci0JcHJpdmF0ZSBJVHJhbnNmb3JtZXJGYWN0b3J5IGN1cnJlbnRGYWN0b3J5OwotCi0JcHVibGljIFByb2Nlc3NvckJsb2NrKCkKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJRm9udCBmb250ID0gcGFyZW50LmdldEZvbnQoKTsKLQotCQlDb21wb3NpdGUgZ3JvdXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5VTEwpOwotCQlzZXRDb250cm9sKGdyb3VwKTsKLQkJZ3JvdXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKSk7Ci0JCWdyb3VwLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCQlncm91cC5zZXRGb250KGZvbnQpOwotLy8JCWdyb3VwLnNldFRleHQoUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yQmxvY2tfMCk7Ci0KLQkJdXNlUHJlZmVyZW5jZXNSYWRpbyA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5SQURJTyk7Ci0JCXVzZVByZWZlcmVuY2VzUmFkaW8uc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JCbG9ja18xKTsKLQkJdXNlUHJlZmVyZW5jZXNSYWRpby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlwcmVmZXJlbmNlc1NlbGVjdGVkKCk7Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJfQotCQl9KTsKLQotCQlhbHRlclByZWZlcmVuY2VzQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlBVU0gpOwotCQlhbHRlclByZWZlcmVuY2VzQnV0dG9uLnNldFRleHQoUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yQmxvY2tfMik7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRU5EKTsKLQkJZ2Qud2lkdGhIaW50ID0gMTUwOwotCQlhbHRlclByZWZlcmVuY2VzQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotCQlhbHRlclByZWZlcmVuY2VzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCUlQcmVmZXJlbmNlUGFnZSBwYWdlID0gbmV3IFByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSgpOwotCQkJCXNob3dQcmVmUGFnZSgib3JnLmVjbGlwc2Uud3N0LnhzbHQubGF1bmNoaW5nLnVpLnByZWZlcmVuY2VzLlByb2Nlc3NvclByZWZlcmVuY2VQYWdlIiwgcGFnZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfSk7Ci0KLQkJb3ZlcnJpZGVQcmVmZXJlbmNlc1JhZGlvID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlJBRElPKTsKLQkJb3ZlcnJpZGVQcmVmZXJlbmNlc1JhZGlvLnNldFRleHQoUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yQmxvY2tfNCk7Ci0JCW92ZXJyaWRlUHJlZmVyZW5jZXNSYWRpby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlvdmVycmlkZVNlbGVjdGVkKCk7Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJfQotCQl9KTsKLQotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlBVU0gpOwotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uLnNldFRleHQoUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yc0NvbWJvQmxvY2tfMSk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRU5EKTsKLQkJZ2Qud2lkdGhIaW50ID0gMTUwOwotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCUlQcmVmZXJlbmNlUGFnZSBwYWdlID0gbmV3IFByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSgpOwotCQkJCXNob3dQcmVmUGFnZSgib3JnLmVjbGlwc2Uud3N0LnhzbHQubGF1bmNoaW5nLnVpLnByZWZlcmVuY2VzLlByb2Nlc3NvclByZWZlcmVuY2VQYWdlIiwgcGFnZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfSk7Ci0KLQkJQ29tcG9zaXRlIHNldHRpbmdzQ29tcCA9IG5ldyBDb21wb3NpdGUoZ3JvdXAsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KDMsIGZhbHNlKTsKLQkJZ2wubWFyZ2luSGVpZ2h0ID0gMjsKLQkJc2V0dGluZ3NDb21wLnNldExheW91dChnbCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWdkLmhvcml6b250YWxJbmRlbnQgPSAxNTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlzZXR0aW5nc0NvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCXNldHRpbmdzQ29tcC5zZXRGb250KGZvbnQpOwotCi0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHNldHRpbmdzQ29tcCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckJsb2NrXzYpOwotCQlydW5Db21ibyA9IG5ldyBDb21ibyhzZXR0aW5nc0NvbXAsIFNXVC5SRUFEX09OTFkgfCBTV1QuU0lOR0xFKTsKLQkJcnVuQ29tYm8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0JCXJ1bkNvbWJvVmlld2VyID0gbmV3IENvbWJvVmlld2VyKHJ1bkNvbWJvKTsKLQkJcnVuQ29tYm9WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBDb21ib0NvbnRlbnRQcm92aWRlcigpKTsKLQkJcnVuQ29tYm9WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQ29tYm9MYWJlbFByb3ZpZGVyKCkpOwotCQlydW5Db21ib1ZpZXdlci5zZXRJbnB1dChKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JzKCkpOwotCQlydW5Db21ib1ZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotCQl7Ci0KLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbCA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJaWYgKCFzZWwuaXNFbXB0eSgpKQotCQkJCXsKLQkJCQkJSVByb2Nlc3Nvckluc3RhbGwgcHJvY2Vzc29yID0gKElQcm9jZXNzb3JJbnN0YWxsKSBzZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJCQotCQkJCQlpZiAocHJvY2Vzc29yLmdldFByb2Nlc3NvclR5cGUoKS5nZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpLmxlbmd0aCA+IDEpCi0JCQkJCQlmYWN0b3J5Q29tYm9WaWV3ZXIuZ2V0Q29tYm8oKS5zZXRWaXNpYmxlKHRydWUpOwotCQkJCQllbHNlCi0JCQkJCQlmYWN0b3J5Q29tYm9WaWV3ZXIuZ2V0Q29tYm8oKS5zZXRWaXNpYmxlKGZhbHNlKTsKLQotCQkJCQlmYWN0b3J5Q29tYm9WaWV3ZXIuc2V0SW5wdXQocHJvY2Vzc29yLmdldFByb2Nlc3NvclR5cGUoKSk7Ci0JCQkJCQotCQkJCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCQkJCWZvciAoSVRyYW5zZm9ybWVyRmFjdG9yeSB0ZiA6IHByb2Nlc3Nvci5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0VHJhbnNmb3JtZXJGYWN0b3JpZXMoKSkKLQkJCQkJewotCQkJCQkJaWYgKHRmLmVxdWFscyhjdXJyZW50RmFjdG9yeSkpCi0JCQkJCQl7Ci0JCQkJCQkJZm91bmQgPSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWlmICghZm91bmQpCi0JCQkJCXsKLQkJCQkJCWN1cnJlbnRGYWN0b3J5ID0gcHJvY2Vzc29yLmdldFByb2Nlc3NvclR5cGUoKS5nZXREZWZhdWx0VHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci0JCQkJCQlpZiAoY3VycmVudEZhY3RvcnkhPW51bGwpCi0JCQkJCQkJZmFjdG9yeUNvbWJvVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihjdXJyZW50RmFjdG9yeSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCX0KLQkJfSk7Ci0KLQkJQ29tYm8gZmFjdG9yeUNvbWJvID0gbmV3IENvbWJvKHNldHRpbmdzQ29tcCwgU1dULlJFQURfT05MWSB8IFNXVC5TSU5HTEUpOwotCQlmYWN0b3J5Q29tYm8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoODAsU1dULkRFRkFVTFQpKTsKLQkJZmFjdG9yeUNvbWJvVmlld2VyID0gbmV3IENvbWJvVmlld2VyKGZhY3RvcnlDb21ibyk7Ci0JCWZhY3RvcnlDb21ib1ZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyKCl7Ci0KLQkJCXByaXZhdGUgSVByb2Nlc3NvclR5cGUgdHlwZTsKLQkJCQotCQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIHR5cGUuZ2V0VHJhbnNmb3JtZXJGYWN0b3JpZXMoKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JCQl7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQkJCXsKLQkJCQl0aGlzLnR5cGUgPSAoSVByb2Nlc3NvclR5cGUpbmV3SW5wdXQ7Ci0JCQl9Ci0JCQkKLQkJfSk7Ci0JCWZhY3RvcnlDb21ib1ZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMYWJlbFByb3ZpZGVyKCl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlJVHJhbnNmb3JtZXJGYWN0b3J5IGYgPSAoSVRyYW5zZm9ybWVyRmFjdG9yeSllbGVtZW50OwotCQkJCXJldHVybiBmLmdldE5hbWUoKTsgLy8gKyAiIC0gIiArIGYuZ2V0RmFjdG9yeUNsYXNzKCk7Ci0JCQl9Ci0JCX0pOwotCQlmYWN0b3J5Q29tYm9WaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLQkJewotCi0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQljdXJyZW50RmFjdG9yeSA9IChJVHJhbnNmb3JtZXJGYWN0b3J5KSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCX0KLQkJfSk7Ci0KLS8vCQlvdmVycmlkZVByZWZlcmVuY2VzQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCxTV1QuQ0hFQ0spOwotLy8JCW92ZXJyaWRlUHJlZmVyZW5jZXNCdXR0b24uc2V0VGV4dCgiT3ZlcnJpZGUgcHJlZmVyZW5jZXMiKTsKLS8vCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuTk9ORSxTV1QuTk9ORSxmYWxzZSxmYWxzZSk7Ci0vLwkJb3ZlcnJpZGVQcmVmZXJlbmNlc0J1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKLS8vCQlvdmVycmlkZVByZWZlcmVuY2VzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotLy8JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLS8vCQkJe30KLS8vCQkJCi0vLwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0vLwkJCXsKLS8vCQkJCWZpcmVQcmVmZXJlbmNlUHJvY2Vzc29yQ2hhbmdlZChvdmVycmlkZVByZWZlcmVuY2VzQnV0dG9uLmdldFNlbGVjdGlvbigpKTsKLS8vCQkJfQotLy8JCX0pOwotCX0KLQkKLQotCXByaXZhdGUgdm9pZCBwcmVmZXJlbmNlc1NlbGVjdGVkKCkKLQl7Ci0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKLQkJaW5zdGFsbGVkUHJvY2Vzc29yc0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLQkJcnVuQ29tYm8uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCWZhY3RvcnlDb21ib1ZpZXdlci5nZXRDb21ibygpLnNldEVuYWJsZWQoZmFsc2UpOwotCQlydW5Db21ib1ZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0UnVuUHJvY2Vzc29yUHJlZmVyZW5jZSgpKSwgdHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIG92ZXJyaWRlU2VsZWN0ZWQoKQotCXsKLQkJYWx0ZXJQcmVmZXJlbmNlc0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKLQkJaW5zdGFsbGVkUHJvY2Vzc29yc0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotCQlmYWN0b3J5Q29tYm9WaWV3ZXIuZ2V0Q29tYm8oKS5zZXRFbmFibGVkKHRydWUpOwotCQlydW5Db21iby5zZXRFbmFibGVkKHRydWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzaG93UHJlZlBhZ2UoU3RyaW5nIGlkLCBJUHJlZmVyZW5jZVBhZ2UgcGFnZSkKLQl7Ci0JCVhTTERlYnVnVUlQbHVnaW4uc2hvd1ByZWZlcmVuY2VQYWdlKGlkLCBwYWdlKTsKLQkJLy8gbm93IHJlZnJlc2ggZXZlcnl0aGluZwotCQlydW5Db21ib1ZpZXdlci5zZXRJbnB1dChKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JzKCkpOwotCQlydW5Db21ib1ZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZ2V0UnVuUHJvY2Vzc29yUHJlZmVyZW5jZSgpKSwgdHJ1ZSk7Ci0JCS8vIHByZWZlcmVuY2VzU2VsZWN0ZWQoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckJsb2NrXzc7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlib29sZWFuIHVzZURlZmF1bHRQcm9jZXNzb3IgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiwgdHJ1ZSk7Ci0JCQlpZiAodXNlRGVmYXVsdFByb2Nlc3NvcikKLQkJCXsKLQkJCQl1c2VQcmVmZXJlbmNlc1JhZGlvLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJCQlvdmVycmlkZVByZWZlcmVuY2VzUmFkaW8uc2V0U2VsZWN0aW9uKGZhbHNlKTsKLQkJCQlwcmVmZXJlbmNlc1NlbGVjdGVkKCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJdXNlUHJlZmVyZW5jZXNSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCW92ZXJyaWRlUHJlZmVyZW5jZXNSYWRpby5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCQkJb3ZlcnJpZGVTZWxlY3RlZCgpOwotCi0JCQkJSVByb2Nlc3Nvckluc3RhbGwgcnVuSW5zdGFsbCA9IG51bGw7Ci0JCQkJU3RyaW5nIHJ1bklkID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QUk9DRVNTT1IsIChTdHJpbmcpIG51bGwpOwotCQkJCWlmIChydW5JZCAhPSBudWxsKQotCQkJCQlydW5JbnN0YWxsID0gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yKHJ1bklkKTsKLQkJCQlpZiAocnVuSW5zdGFsbCA9PSBudWxsKQotCQkJCQlydW5JbnN0YWxsID0gZ2V0UnVuUHJvY2Vzc29yUHJlZmVyZW5jZSgpOwotCQkJCXJ1bkNvbWJvVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihydW5JbnN0YWxsKSk7Ci0JCQkJCi0KLQkJCQlTdHJpbmcgZmFjdG9yeUlkID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9UUkFOU0ZPUk1FUl9GQUNUT1JZLCAoU3RyaW5nKSBudWxsKTsKLQkJCQlpZiAoZmFjdG9yeUlkID09IG51bGwpCi0JCQkJewotCQkJCQljdXJyZW50RmFjdG9yeSA9IHJ1bkluc3RhbGwuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJZm9yIChJVHJhbnNmb3JtZXJGYWN0b3J5IHRmIDogcnVuSW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0VHJhbnNmb3JtZXJGYWN0b3JpZXMoKSkKLQkJCQkJewotCQkJCQkJaWYgKHRmLmdldEZhY3RvcnlDbGFzcygpLmVxdWFscyhmYWN0b3J5SWQpKQotCQkJCQkJewotCQkJCQkJCWN1cnJlbnRGYWN0b3J5ID0gdGY7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJCi0JCQkJaWYgKGN1cnJlbnRGYWN0b3J5ID09IG51bGwpCi0JCQkJewotCQkJCQljdXJyZW50RmFjdG9yeSA9IHJ1bkluc3RhbGwuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCQl9Ci0JCQkJaWYgKGN1cnJlbnRGYWN0b3J5ICE9IG51bGwpCi0JCQkJewotCQkJCQlmYWN0b3J5Q29tYm9WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGN1cnJlbnRGYWN0b3J5KSwgdHJ1ZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBnZXRSdW5Qcm9jZXNzb3JQcmVmZXJlbmNlKCkKLQl7Ci0JCXJldHVybiBKQVhQUnVudGltZS5nZXREZWZhdWx0UHJvY2Vzc29yKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JCWJvb2xlYW4gdXNlUHJlZmVyZW5jZXMgPSB1c2VQcmVmZXJlbmNlc1JhZGlvLmdldFNlbGVjdGlvbigpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiwgdXNlUHJlZmVyZW5jZXMpOwotCQlpZiAoIXVzZVByZWZlcmVuY2VzKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBydW5wcm9jZXNzb3IgPSAoSVByb2Nlc3Nvckluc3RhbGwpICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHJ1bkNvbWJvVmlld2VyLmdldFNlbGVjdGlvbigpKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfUFJPQ0VTU09SLCBydW5wcm9jZXNzb3IuZ2V0SWQoKSk7Ci0JCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1RSQU5TRk9STUVSX0ZBQ1RPUlksIGN1cnJlbnRGYWN0b3J5ID09IG51bGwgPyBudWxsIDogY3VycmVudEZhY3RvcnkuZ2V0RmFjdG9yeUNsYXNzKCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfREVGQVVMVF9QUk9DRVNTT1IsIHRydWUpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BST0NFU1NPUiwgKFN0cmluZykgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ29tYm9Db250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcgotCXsKLQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCXsKLQkJCXJldHVybiBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JzKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJewotCQl9Ci0KLQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQl7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBDb21ib0xhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi0JewotCQlAT3ZlcnJpZGUKLQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlbGVtZW50OwotCQkJcmV0dXJuIGluc3RhbGwuZ2V0TmFtZSgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiZjkyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFByb2Nlc3NvckRlc2NyaXB0b3IKLXsKLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRldGFpbHNEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2MjFmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRldGFpbHNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZyBleHRlbmRzIERpYWxvZwotewotCXByaXZhdGUgZmluYWwgSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbDsKLQotCXB1YmxpYyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nKFNoZWxsIHNoZWxsLCBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJc3VwZXIoc2hlbGwpOwotCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIG5ld1NoZWxsKQotCXsKLQkJc3VwZXIuY29uZmlndXJlU2hlbGwobmV3U2hlbGwpOwotCQluZXdTaGVsbC5zZXRUZXh0KFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckRldGFpbHNEaWFsb2dfVGl0bGUpOwotCQkvLyBUT0RPIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAuLi4KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBhbmNlc3RvcikKLQl7Ci0JCUNvbXBvc2l0ZSBwYXJlbnQgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKGFuY2VzdG9yKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgyLCBmYWxzZSk7Ci0JCXBhcmVudC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQkvLyB0eXBlCi0JCWNyZWF0ZUxhYmVsKHBhcmVudCwgUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsVHlwZSk7Ci0JCWNyZWF0ZUxhYmVsKHBhcmVudCwgaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0TGFiZWwoKSk7Ci0KLQkJLy8gbmFtZQotCQljcmVhdGVMYWJlbChwYXJlbnQsIFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckRldGFpbHNEaWFsb2dfaW5zdGFsbE5hbWUpOwotCQljcmVhdGVMYWJlbChwYXJlbnQsIGluc3RhbGwuZ2V0TmFtZSgpKTsKLQotCQkvLyBqYXJzCi0JCUxhYmVsIGxhYmVsID0gY3JlYXRlTGFiZWwocGFyZW50LCBQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxDbGFzc3BhdGgpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7Ci0JCWxhYmVsLnNldExheW91dERhdGEoZ2QpOwotCQlUYWJsZVZpZXdlciBsaWJyYXJ5Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHBhcmVudCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWdkLmhlaWdodEhpbnQgPSA2OwotCQlsaWJyYXJ5Vmlld2VyLmdldENvbnRyb2woKS5zZXRMYXlvdXREYXRhKGdkKTsKLQkJbGlicmFyeVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEphckNvbnRlbnRQcm92aWRlcigpKTsKLQkJbGlicmFyeVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBKYXJMYWJlbFByb3ZpZGVyKCkpOwotCQlsaWJyYXJ5Vmlld2VyLnNldElucHV0KGluc3RhbGwpOwotCi0JCWFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotCQlyZXR1cm4gcGFyZW50OwotCX0KLQotCXByaXZhdGUgTGFiZWwgY3JlYXRlTGFiZWwoQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRleHQpCi0JewotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dCh0ZXh0KTsKLQkJcmV0dXJuIGxhYmVsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gdGhhdCB0aGlzIGRpYWxvZyBzdG9yZXMgaXRzIHNldHRpbmdzIGluCi0JICogCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKQotCXsKLQkJcmV0dXJuICJYU0xfREVUQUlMU19ESUFMT0dfU0VDVElPTiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ0JvdW5kc1NldHRpbmdzKCkKLQl7Ci0JCUlEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncyA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JCUlEaWFsb2dTZXR0aW5ncyBzZWN0aW9uID0gc2V0dGluZ3MuZ2V0U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotCQlpZiAoc2VjdGlvbiA9PSBudWxsKQotCQl7Ci0JCQlzZWN0aW9uID0gc2V0dGluZ3MuYWRkTmV3U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotCQl9Ci0JCXJldHVybiBzZWN0aW9uOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCS8vIGNyZWF0ZSBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMgYnkgZGVmYXVsdAotCQljcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLk9LX0lELCBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLCB0cnVlKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0ZTE1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3Nvck1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1jbGFzcyBQcm9jZXNzb3JNZXNzYWdlcyBleHRlbmRzIE5MUwotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IuUHJvY2Vzc29yTWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JCbG9ja18wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckJsb2NrXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yQmxvY2tfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JCbG9ja180OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckJsb2NrXzY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yQmxvY2tfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JzQ29tYm9CbG9ja18xOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckRldGFpbHNEaWFsb2dfVGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsTmFtZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxUeXBlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckRldGFpbHNEaWFsb2dfaW5zdGFsbENsYXNzcGF0aDsKLQotCXN0YXRpYwotCXsKLQkJLy8gbG9hZCBtZXNzYWdlIHZhbHVlcyBmcm9tIGJ1bmRsZSBmaWxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFByb2Nlc3Nvck1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FhNzI3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3Nvck1lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1Qcm9jZXNzb3JCbG9ja18wPVhTTFQgUHJvY2Vzc29yCi1Qcm9jZXNzb3JCbG9ja18xPVVzZSBwcm9jZXNzb3IgZnJvbSBwcmVmZXJlbmNlcwotUHJvY2Vzc29yQmxvY2tfMj1DaGFuZ2UgcHJlZmVyZW5jZXMuLi4KLVByb2Nlc3NvckJsb2NrXzQ9VXNlIHNwZWNpZmljIHByb2Nlc3NvcgotUHJvY2Vzc29yQmxvY2tfNj1Qcm9jZXNzb3I6Ci1Qcm9jZXNzb3JCbG9ja183PVByb2Nlc3NvcgotUHJvY2Vzc29yc0NvbWJvQmxvY2tfMT0mSW5zdGFsbGVkIHByb2Nlc3NvcnMuLi4KLQotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19UaXRsZT1CdWlsdC1pbiBYU0xUIFByb2Nlc3NvcgotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsTmFtZT1OYW1lOgotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsVHlwZT1UeXBlOgotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsQ2xhc3NwYXRoPUxpYnJhcmllczoKLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1hTTFByb2Nlc3NvclRhYjIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvWFNMUHJvY2Vzc29yVGFiMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjlhZDM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvWFNMUHJvY2Vzc29yVGFiMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDIyMzU1NyAtIEFkZGVkIGltYWdlcyBjb250cmlidXRlZCBieSBIb2xnZXIgVm9vcm1hbm4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYkZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLkpBWFBEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckludm9rZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgWFNMUHJvY2Vzc29yVGFiMiBleHRlbmRzIFhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIKLXsKLQlwcml2YXRlIGZpbmFsIFByb2Nlc3NvckJsb2NrIHByb2Nlc3NvckJsb2NrOwotCXByaXZhdGUgZmluYWwgQXR0cmlidXRlc0Jsb2NrIGF0dHJpYnV0ZXNCbG9jazsKLQlwcml2YXRlIGZpbmFsIE91dHB1dFByb3BlcnRpZXNCbG9jayBvdXRwdXRQcm9wZXJ0aWVzQmxvY2s7Ci0JcHJpdmF0ZSBJbWFnZSBpbWFnZTsKLQotCXB1YmxpYyBYU0xQcm9jZXNzb3JUYWIyKCkKLQl7Ci0JCWF0dHJpYnV0ZXNCbG9jayA9IG5ldyBBdHRyaWJ1dGVzQmxvY2soKTsKLQkJb3V0cHV0UHJvcGVydGllc0Jsb2NrID0gbmV3IE91dHB1dFByb3BlcnRpZXNCbG9jaygpOwotCQlwcm9jZXNzb3JCbG9jayA9IG5ldyBQcm9jZXNzb3JCbG9jaygpOwotCQkKLQkJc2V0QmxvY2tzKG5ldyBJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdCi0JCXsgcHJvY2Vzc29yQmxvY2sgLCBhdHRyaWJ1dGVzQmxvY2ssIG91dHB1dFByb3BlcnRpZXNCbG9jayB9KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0JCUNvbXBvc2l0ZSBjb21wID0gKENvbXBvc2l0ZSkgZ2V0Q29udHJvbCgpOwotCi0JCXByb2Nlc3NvckJsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0JCQotCQlUYWJGb2xkZXIgdGFiRm9sZGVyID0gbmV3IFRhYkZvbGRlcihjb21wLFNXVC5OT05FKTsKLQkJdGFiRm9sZGVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSkpOwotCi0JCW91dHB1dFByb3BlcnRpZXNCbG9jay5jcmVhdGVDb250cm9sKHRhYkZvbGRlcik7CQkKLQkJYXR0cmlidXRlc0Jsb2NrLmNyZWF0ZUNvbnRyb2wodGFiRm9sZGVyKTsJCQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCQlzdXBlci5wZXJmb3JtQXBwbHkoY29uZmlndXJhdGlvbik7Ci0JCUlQcm9jZXNzb3JJbnZva2VyIGludm9rZXIgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JJbnZva2VycygpWzBdOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5JTlZPS0VSX0RFU0NSSVBUT1IsIGludm9rZXIuZ2V0SWQoKSk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTFByb2Nlc3NvclRhYi4wIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRJZCgpCi0JewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuamF4cC50YWJzLnByb2Nlc3NvciI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoKQotCXsKLQkJaWYgKGltYWdlID09IG51bGwpCi0JCXsKLQkJCUltYWdlRGVzY3JpcHRvciBpZCA9IEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihKQVhQRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsICJpY29ucy94c2x0X3Byb2Nlc3Nvci5naWYiKTsgLy8kTk9OLU5MUy0xJAotCQkJaW1hZ2UgPSBpZC5jcmVhdGVJbWFnZSgpOwotCQl9Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCWlmIChpbWFnZSAhPSBudWxsKQotCQkJaW1hZ2UuZGlzcG9zZSgpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2UxNTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLUF0dHJpYnV0ZURpYWxvZ18wPVNlbGVjdCBQcm9jZXNzb3IgQXR0cmlidXRlcwotQXR0cmlidXRlRGlhbG9nXzE9U2VsZWN0IG9uZSBvciBtb3JlIGF0dHJpYnV0ZXMgdG8gc2V0IG9uIHRoZSBYU0xUIHByb2Nlc3Nvci4KLUF0dHJpYnV0ZURpYWxvZ18yPQotQXR0cmlidXRlc0Jsb2NrLjA9QXR0cmlidXRlcwotQXR0cmlidXRlc0Jsb2NrLjE9Q2hhbmdlIFByZWZlcmVuY2VzLi4uCi1BdHRyaWJ1dGVzQmxvY2suMTA9dHlwZQotQXR0cmlidXRlc0Jsb2NrLjExPXZhbHVlCi1BdHRyaWJ1dGVzQmxvY2suMTI9dmFsdWUKLUF0dHJpYnV0ZXNCbG9jay4xND1SZW1vdmUKLUF0dHJpYnV0ZXNCbG9jay4xNj1Qcm9jZXNzb3IgQXR0cmlidXRlcwotQXR0cmlidXRlc0Jsb2NrLjI9TmFtZQotQXR0cmlidXRlc0Jsb2NrLjM9VXNlIHNwZWNpZmljIGF0dHJpYnV0ZXMKLUF0dHJpYnV0ZXNCbG9jay40PUF0dHJpYnV0ZQotQXR0cmlidXRlc0Jsb2NrLjU9VHlwZQotQXR0cmlidXRlc0Jsb2NrLjY9VmFsdWUKLUF0dHJpYnV0ZXNCbG9jay43PVZhbHVlCi1BdHRyaWJ1dGVzQmxvY2suOD1BZGQKLUF0dHJpYnV0ZXNCbG9jay45PW5hbWUKLU91dHB1dFByb3BlcnRpZXNCbG9ja18wPU91dHB1dCBQcm9wZXJ0aWVzCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMT1OYW1lCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfMj1WYWx1ZQotT3V0cHV0UHJvcGVydGllc0Jsb2NrXzM9QWRkCi1PdXRwdXRQcm9wZXJ0aWVzQmxvY2tfND1SZW1vdmUKLU91dHB1dFByb3BlcnR5RGlhbG9nXzA9U2VsZWN0IE91dHB1dCBQcm9wZXJ0aWVzCi1PdXRwdXRQcm9wZXJ0eURpYWxvZ18xPVNlbGVjdCBvbmUgb3IgbW9yZSBvdXRwdXQgcHJvcGVydGllcyBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uLgotWFNMUHJvY2Vzc29yVGFiLjA9UHJvY2Vzc29yCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZGIwNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudmlld3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudmlld3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUmVzdWx0Vmlld18wOwotCXN0YXRpYyB7Ci0JCS8vIGluaXRpYWxpemUgcmVzb3VyY2UgYnVuZGxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvUmVzdWx0UnVubmFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvUmVzdWx0UnVubmFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkzNDg5OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ZpZXdzL1Jlc3VsdFJ1bm5hYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEtldmluIFNhd2lja2kgYnVnIDI1OTA1MyAtIE5QRSBmb3IgZG9jdW1lbnQgcmVzdWx0cy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudmlld3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFNpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuSm9iU2FmZVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBSZXN1bHRSdW5uYWJsZSBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04gPSAiPD94bWwiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERPQ1RZUEVfSFRNTCA9ICI8IURPQ1RZUEUgaHRtbCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRNTF9DT05URU5UX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfQ09OVEVOVF9UWVBFX0lEID0gIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyByZXN1bHRzOwotCXByaXZhdGUgSVdvcmtiZW5jaFBhcnRTaXRlIHZpZXdTaXRlID0gbnVsbDsKLQkKLQlwdWJsaWMgUmVzdWx0UnVubmFibGUoU291cmNlVmlld2VyIHZpZXdlciwgU3RyaW5nIHJlc3VsdHMsIElXb3JrYmVuY2hQYXJ0U2l0ZSBzaXRlKSB7Ci0JCXNvdXJjZVZpZXdlciA9IHZpZXdlcjsKLQkJdGhpcy5yZXN1bHRzID0gcmVzdWx0czsKLQkJdmlld1NpdGUgPSBzaXRlOwotCX0gCi0KLQlwdWJsaWMgdm9pZCBydW4oKQotCXsKLQkJLy8gaWYgdGhpcyBpcyB0aGUgZmlyc3QgbG90IG9mIGRhdGEsIGRldGVybWluZSB0aGUgY29ycmVjdCBjb250ZW50IHR5cGUgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgZG9jdW1lbnQKLQkJaWYgKHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpICA9PSBudWxsKQotCQl7Ci0JCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBjcmVhdGVEb2N1bWVudCgpOwotCQkJc291cmNlVmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQkJfQotCQl0cnkKLQkJewotCQkJSURvY3VtZW50IGRvY3VtZW50ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCk7Ci0JCQlkb2N1bWVudC5yZXBsYWNlKGRvY3VtZW50LmdldExlbmd0aCgpLCAwLCByZXN1bHRzKTsKLQkJfQotCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJc291cmNlVmlld2VyLnJldmVhbFJhbmdlKHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldExlbmd0aCgpLDApOwotCQl2aWV3U2l0ZS5nZXRQYWdlKCkuYWN0aXZhdGUodmlld1NpdGUuZ2V0UGFydCgpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSURvY3VtZW50IGNyZWF0ZURvY3VtZW50KCkgewotCQlJRG9jdW1lbnQgZG9jdW1lbnQ7Ci0JCWlmIChyZXN1bHRzLnN0YXJ0c1dpdGgoRE9DVFlQRV9IVE1MKSkKLQkJewotCQkJZG9jdW1lbnQgPSBjcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnQoSFRNTF9DT05URU5UX1RZUEVfSUQpOwotCQl9Ci0JCWVsc2UgaWYgKHJlc3VsdHMuc3RhcnRzV2l0aChYTUxfUFJPQ0VTU0lOR19JTlNUUlVDVElPTikpCi0JCXsKLQkJCWRvY3VtZW50ID0gY3JlYXRlU3RydWN0dXJlZERvY3VtZW50KFhNTF9DT05URU5UX1RZUEVfSUQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJZG9jdW1lbnQgPSBuZXcgSm9iU2FmZVN0cnVjdHVyZWREb2N1bWVudCgpOwotCQl9Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQlwcm90ZWN0ZWQgSURvY3VtZW50IGNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudChTdHJpbmcgY29udGVudFR5cGUpIHsKLQkJSURvY3VtZW50IGRvY3VtZW50OwotCQlJU3RydWN0dXJlZE1vZGVsIHNjcmF0Y2hNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKGNvbnRlbnRUeXBlKTsKLQkJZG9jdW1lbnQgPSBzY3JhdGNoTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvUmVzdWx0Vmlldy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNTY5NjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JRGVidWdFdmVudFNldExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5JV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5tb2RlbC5KQVhQRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0w7Ci0KLS8qKgotICogVE9ETyBoYW5kbGUgbXVsdGlwbGUgY29uY3VycmVudCBkZWJ1Z2dpbmcgcHJvY2Vzc2VzIChhbmQgYnJpbmcgdGhlIGN1cnJlbnQgcmVzdWx0cyB0byB0aGUgdG9wIGRlcGVuZGluZyBvbiB3aGljaCBzZWxlY3RlZCBpbiBEZWJ1ZyB2aWV3KQotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRWaWV3IGV4dGVuZHMgVmlld1BhcnQgaW1wbGVtZW50cyBJRGVidWdFdmVudFNldExpc3RlbmVyCi17Ci0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgc3Y7Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5yZW1vdmVEZWJ1Z0V2ZW50TGlzdGVuZXIodGhpcyk7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJdGhpcy5zdiA9IGNyZWF0ZVZpZXdlcihwYXJlbnQpOwotCQkKLQkJLy8gaGFuZGxlIGFueSBsYXVuY2hlcyBhbHJlYWR5IGFkZGVkCi0JCUlEZWJ1Z1RhcmdldFtdIHRhcmdldHMgPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TGF1bmNoTWFuYWdlcigpLmdldERlYnVnVGFyZ2V0cygpOwotCQlmb3IgKElEZWJ1Z1RhcmdldCBkZWJ1Z1RhcmdldCA6IHRhcmdldHMpCi0JCXsKLQkJCWlmIChkZWJ1Z1RhcmdldCBpbnN0YW5jZW9mIEpBWFBEZWJ1Z1RhcmdldCkKLQkJCXsKLQkJCQloYW5kbGVEZWJ1Z1RhcmdldCgoSkFYUERlYnVnVGFyZ2V0KWRlYnVnVGFyZ2V0KTsKLQkJCX0JCQkKLQkJfQotCQkvLyBsaXN0ZW4gdG8gZnVydGhlciBsYXVuY2hlcwotCQlEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuYWRkRGVidWdFdmVudExpc3RlbmVyKHRoaXMpOwotCX0KLQotCXByaXZhdGUgU291cmNlVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBzb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBiYXNlQ29uZmlndXJhdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0woKTsKLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgU3RyaW5nW10gZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcikgewotCQkJCXJldHVybiBiYXNlQ29uZmlndXJhdGlvbi5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKHNvdXJjZVZpZXdlcik7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIExpbmVTdHlsZVByb3ZpZGVyW10gZ2V0TGluZVN0eWxlUHJvdmlkZXJzKElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyLCBTdHJpbmcgcGFydGl0aW9uVHlwZSkgewotCQkJCXJldHVybiBiYXNlQ29uZmlndXJhdGlvbi5nZXRMaW5lU3R5bGVQcm92aWRlcnMoc291cmNlVmlld2VyLCBwYXJ0aXRpb25UeXBlKTsKLQkJCX0KLQkJfTsKLQkJU291cmNlVmlld2VyIHZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuQk9SREVSIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLQkJKChTdHJ1Y3R1cmVkVGV4dFZpZXdlcikgdmlld2VyKS5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KCJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IikpOyAvLyROT04tTkxTLTEkCi0JCXZpZXdlci5jb25maWd1cmUoc291cmNlVmlld2VyQ29uZmlndXJhdGlvbik7Ci0JCXZpZXdlci5zZXRFZGl0YWJsZShmYWxzZSk7Ci0JCXJldHVybiB2aWV3ZXI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKQotCXt9Ci0KLQlwdWJsaWMgdm9pZCBoYW5kbGVEZWJ1Z0V2ZW50cyhEZWJ1Z0V2ZW50W10gZXZlbnRzKQotCXsKLQkJZm9yIChEZWJ1Z0V2ZW50IGRlYnVnRXZlbnQgOiBldmVudHMpCi0JCXsKLQkJCWlmIChkZWJ1Z0V2ZW50LmdldEtpbmQoKSA9PSBEZWJ1Z0V2ZW50LkNSRUFURSAmJiBkZWJ1Z0V2ZW50LmdldFNvdXJjZSgpIGluc3RhbmNlb2YgSkFYUERlYnVnVGFyZ2V0KQotCQkJewotCQkJCWhhbmRsZURlYnVnVGFyZ2V0KChKQVhQRGVidWdUYXJnZXQpZGVidWdFdmVudC5nZXRTb3VyY2UoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGhhbmRsZURlYnVnVGFyZ2V0KEpBWFBEZWJ1Z1RhcmdldCB4ZHQpCi0JewotCQkvLyBmaXJzdCwgY2xlYXIgdGhlIHZpZXdlcgotCQlzdi5zZXREb2N1bWVudChudWxsKTsKLQkJSVdvcmtiZW5jaFNpdGVQcm9ncmVzc1NlcnZpY2Ugc2VydmljZSA9IChJV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZSlnZXRTaXRlKCkuZ2V0U2VydmljZShJV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZS5jbGFzcyk7Ci0JCXNlcnZpY2Uuc2NoZWR1bGUobmV3IFJlc3VsdFZpZXdKb2IoTWVzc2FnZXMuUmVzdWx0Vmlld18wLCBnZXRTaXRlKCksIHhkdCwgc3YpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvUmVzdWx0Vmlld0pvYi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3Sm9iLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGYzYzUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3Sm9iLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIHJlZmFjdG9yZWQgZnJvbSBSZXN1bHRWaWV3LgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC52aWV3czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydFNpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5tb2RlbC5KQVhQRGVidWdUYXJnZXQ7Ci0KLXB1YmxpYyBjbGFzcyBSZXN1bHRWaWV3Sm9iIGV4dGVuZHMgSm9iIHsKLQotCXByaXZhdGUgSVdvcmtiZW5jaFBhcnRTaXRlIHZpZXdTaXRlID0gbnVsbDsKLQlmaW5hbCBSZWFkZXIgcmVhZGVyOwotCXByaXZhdGUgU291cmNlVmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0KLQlwdWJsaWMgUmVzdWx0Vmlld0pvYihTdHJpbmcgbmFtZSwgSVdvcmtiZW5jaFBhcnRTaXRlIHNpdGUsCi0JCQlKQVhQRGVidWdUYXJnZXQgeGR0LCBTb3VyY2VWaWV3ZXIgdmlld2VyKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQl2aWV3U2l0ZSA9IHNpdGU7Ci0JCXJlYWRlciA9IHhkdC5nZXRHZW5lcmF0ZVJlYWRlcigpOwotCQlzb3VyY2VWaWV3ZXIgPSB2aWV3ZXI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCXRyeSB7Ci0JCQkvLyB0aGlzIGlzIHRoZSBkZWZhdWx0IEJ1ZmZlcmVkV3JpdGVyCi0JCQkvLyBzaXplLCBzbyB3ZSB3aWxsIHVzdWFsbHkgZ2V0IGNodW5rcwotCQkJLy8gb2YgdGhpcyBzaXplCi0JCQkKLQkJCWNoYXJbXSBjID0gbmV3IGNoYXJbODE5Ml07Ci0JCQlpbnQgc2l6ZTsKLQkJCXdoaWxlICgoc2l6ZSA9IHJlYWRlci5yZWFkKGMpKSAhPSAtMSkgewotCQkJCXdyaXRlU3RyaW5nKG5ldyBTdHJpbmcoYywgMCwgc2l6ZSkpOwotCQkJfQotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfSBmaW5hbGx5IHsKLQkJCW1vbml0b3IuZG9uZSgpOwotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHdyaXRlU3RyaW5nKGZpbmFsIFN0cmluZyBzKSB7Ci0JCVNoZWxsIHNoZWxsID0gdmlld1NpdGUuZ2V0U2hlbGwoKTsKLQkJRGlzcGxheSBkaXNwbGF5ID0gc2hlbGwuZ2V0RGlzcGxheSgpOwotCQlkaXNwbGF5LnN5bmNFeGVjKG5ldyBSZXN1bHRSdW5uYWJsZShzb3VyY2VWaWV3ZXIsIHMsIHZpZXdTaXRlKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWYyMTEzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVJlc3VsdFZpZXdfMD1SZXN1bHQgdmlldyBqb2IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTRjMWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYzNThjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2YzYjZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNTYXQgSmFuIDAyIDE4OjU1OjU5IEdNVC0wNTowMCAyMDEwCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzJjNDU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZwotQnVuZGxlLVZlcnNpb246IDEuMC4yMDAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAldmVuZG9yTmFtZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1SZXF1aXJlLUJ1bmRsZTogb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmc7YnVuZGxlLXZlcnNpb249IjEuMC40Ijt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKLSBvcmcuYXBhY2hlLnhtbC5yZXNvbHZlcjtidW5kbGUtdmVyc2lvbj0iMS4xLjAiO3Jlc29sdXRpb246PW9wdGlvbmFsCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzAwMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0NDY3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3MWQzOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnCi12ZW5kb3JOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXBsdWdpbk5hbWUgPSBYU0wgSkFYUCBEZWJ1Z2dlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvcG9tLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZjc4YjguLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnPC9hcnRpZmFjdElkPgotICAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPgotICAgPHZlcnNpb24+MS4wLjIwMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgIDxuYW1lPlhTTFQgSkFYUCBEZWJ1ZyBQbHVnaW48L25hbWU+Ci0KLSAgIDxwYXJlbnQ+Ci0gICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vZGV2ZWxvcG1lbnQvYXRoZW5hL29yZy5lY2xpcHNlLndzdC54c2wucmVsZW5nPC9yZWxhdGl2ZVBhdGg+Ci0gICA8L3BhcmVudD4KLQotICAgPGJ1aWxkPgotICAgICAgPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4KLSAgICAgIDxwbHVnaW5zPgotICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi43PC92ZXJzaW9uPgotICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICA8L3BsdWdpbnM+Ci0gICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvbG9nNGoucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9sb2c0ai5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWJiNTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9sb2c0ai5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIyBTZXQgcm9vdCBsb2dnZXIgbGV2ZWwgdG8gREVCVUcgYW5kIGl0cyBhcHBlbmRlcnMgYXJlIEExIGFuZCBBMgotbG9nNGoucm9vdExvZ2dlcj1ERUJVRywgQTIKLQotIyBBMiBpcyBzZXQgdG8gYmUgYSBDb25zb2xlQXBwZW5kZXIKLWxvZzRqLmFwcGVuZGVyLkEyPW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyCi0KLSMgQTIgdXNlcyBQYXR0ZXJuTGF5b3V0LgotbG9nNGouYXBwZW5kZXIuQTIubGF5b3V0PW9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dAotbG9nNGouYXBwZW5kZXIuQTIubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVke0hIOm1tOnNzLFNTU30gJS01cCBbJXRdICVjezF9ICV4IC0gJW0lbgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0Fic3RyYWN0RGVidWdnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvQWJzdHJhY3REZWJ1Z2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGUxZTA3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvQWJzdHJhY3REZWJ1Z2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoSW50YWxpbykgLSBjbGVhbnVwIGZpbmRidWcgZXJyb3JzLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5JWFNMRGVidWdnZXI8L2NvZGU+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+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjEyMjk2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jVGh1IEp1biAxMSAwMTozNzoyOCBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5jb21wYXJpbmdJZGVudGljYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZWFkQ29kZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdEF0dHJpYnV0ZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyNDRkMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdEF0dHJpYnV0ZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdE91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQyM2U5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvSlJFRGVmYXVsdE91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLW1ldGhvZD1tZXRob2QKLW1ldGhvZC5ERVNDPSJ4bWwiIHwgImh0bWwiIHwgInRleHQiIHwgcW5hbWUtYnV0LW5vdC1uY25hbWUgCi0KLXZlcnNpb249dmVyc2lvbgotdmVyc2lvbi5ERVNDPXNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgb3V0cHV0IG1ldGhvZAotCi1pbmRlbnQ9aW5kZW50Ci1pbmRlbnQuREVTQz1zcGVjaWZpZXMgd2hldGhlciB0aGUgWFNMVCBwcm9jZXNzb3IgbWF5IGFkZCBhZGRpdGlvbmFsIHdoaXRlc3BhY2Ugd2hlbiBvdXRwdXR0aW5nIHRoZSByZXN1bHQgdHJlZTsgdGhlIHZhbHVlIG11c3QgYmUgeWVzIG9yIG5vCi0KLWVuY29kaW5nPWVuY29kaW5nCi1lbmNvZGluZy5ERVNDPXNwZWNpZmllcyB0aGUgcHJlZmVycmVkIGNoYXJhY3RlciBlbmNvZGluZyB0aGF0IHRoZSBYU0xUIHByb2Nlc3NvciBzaG91bGQgdXNlIHRvIGVuY29kZSBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyBhcyBzZXF1ZW5jZXMgb2YgYnl0ZXM7IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSB0cmVhdGVkIGNhc2UtaW5zZW5zaXRpdmVseTsgdGhlIHZhbHVlIG11c3QgY29udGFpbiBvbmx5IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlICN4MjEgdG8gI3g3RSAoaS5lLiBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyk7IHRoZSB2YWx1ZSBzaG91bGQgZWl0aGVyIGJlIGEgY2hhcnNldCByZWdpc3RlcmVkIHdpdGggdGhlIEludGVybmV0IEFzc2lnbmVkIE51bWJlcnMgQXV0aG9yaXR5IFtJQU5BXSwgW1JGQzIyNzhdIG9yIHN0YXJ0IHdpdGggWC0KLQotbWVkaWEtdHlwZT1tZWRpYS10eXBlCi1tZWRpYS10eXBlLkRFU0M9c3BlY2lmaWVzIHRoZSBtZWRpYSB0eXBlIChNSU1FIGNvbnRlbnQgdHlwZSkgb2YgdGhlIGRhdGEgdGhhdCByZXN1bHRzIGZyb20gb3V0cHV0dGluZyB0aGUgcmVzdWx0IHRyZWU7IHRoZSBjaGFyc2V0IHBhcmFtZXRlciBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBleHBsaWNpdGx5OyBpbnN0ZWFkLCB3aGVuIHRoZSB0b3AtbGV2ZWwgbWVkaWEgdHlwZSBpcyB0ZXh0LCBhIGNoYXJzZXQgcGFyYW1ldGVyIHNob3VsZCBiZSBhZGRlZCBhY2NvcmRpbmcgdG8gdGhlIGNoYXJhY3RlciBlbmNvZGluZyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBvdXRwdXQgbWV0aG9kCi0KLWRvY3R5cGUtc3lzdGVtPWRvY3R5cGUtc3lzdGVtCi1kb2N0eXBlLXN5c3RlbS5ERVNDPXNwZWNpZmllcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBpbiB0aGUgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbgotCi1kb2N0eXBlLXB1YmxpYz1kb2N0eXBlLXB1YmxpYwotZG9jdHlwZS1wdWJsaWMuREVTQz1zcGVjaWZpZXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyIHRvIGJlIHVzZWQgaW4gdGhlIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24KLQotb21pdC14bWwtZGVjbGFyYXRpb249b21pdC14bWwtZGVjbGFyYXRpb24KLW9taXQteG1sLWRlY2xhcmF0aW9uLkRFU0M9c3BlY2lmaWVzIHdoZXRoZXIgdGhlIFhTTFQgcHJvY2Vzc29yIHNob3VsZCBvdXRwdXQgYW4gWE1MIGRlY2xhcmF0aW9uOyB0aGUgdmFsdWUgbXVzdCBiZSB5ZXMgb3Igbm8KLQotc3RhbmRhbG9uZT1zdGFuZGFsb25lCi1zdGFuZGFsb25lLkRFU0M9c3BlY2lmaWVzIHdoZXRoZXIgdGhlIFhTTFQgcHJvY2Vzc29yIHNob3VsZCBvdXRwdXQgYSBzdGFuZGFsb25lIGRvY3VtZW50IGRlY2xhcmF0aW9uOyB0aGUgdmFsdWUgbXVzdCBiZSB5ZXMgb3Igbm8KLQotY2RhdGEtc2VjdGlvbi1lbGVtZW50cz1jZGF0YS1zZWN0aW9uLWVsZW1lbnRzCi1jZGF0YS1zZWN0aW9uLWVsZW1lbnRzLkRFU0M9c3BlY2lmaWVzIGEgbGlzdCBvZiB0aGUgbmFtZXMgb2YgZWxlbWVudHMgd2hvc2UgdGV4dCBub2RlIGNoaWxkcmVuIHNob3VsZCBiZSBvdXRwdXQgdXNpbmcgQ0RBVEEgc2VjdGlvbnMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNzM4YTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXM7YnVuZGxlLXZlcnNpb249IlszLjIuMTAwLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZztidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamZhY2U7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5vc2dpLnV0aWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZywKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcubW9kZWwKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMDAwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmMzNmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBzY2hlbWEvLFwKLSAgICAgICAgICAgICAgIEpSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgSlJFRGVmYXVsdE91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2xvZzRqLmRlYnVnLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvbG9nNGouZGVidWcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkZmI2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvbG9nNGouZGVidWcucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMgU2V0IHJvb3QgbG9nZ2VyIGxldmVsIHRvIERFQlVHIGFuZCBpdHMgYXBwZW5kZXJzIGFyZSBBMSBhbmQgQTIKLWxvZzRqLnJvb3RMb2dnZXI9RVJST1IsIEEyCi0KLSMgQTIgaXMgc2V0IHRvIGJlIGEgQ29uc29sZUFwcGVuZGVyCi1sb2c0ai5hcHBlbmRlci5BMj1vcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlcgotCi0jIEEyIHVzZXMgUGF0dGVybkxheW91dC4KLWxvZzRqLmFwcGVuZGVyLkEyLmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKLWxvZzRqLmFwcGVuZGVyLkEyLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHtISDptbTpzcyxTU1N9ICUtNXAgWyV0XSAlY3sxfSAleCAtICVtJW4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjY2YjI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLUJ1bmRsZS1OYW1lLjAgPSBYU0wgSkFYUCBMYXVuY2hpbmcKLWxhdW5jaERlbGVnYXRlLm5hbWUuMCA9IEphdmEKLXByb2Nlc3NvclR5cGUubGFiZWwuMSA9IEpSRSBEZWZhdWx0Ci1wcm9jZXNzb3IubGFiZWwuMSA9IEpSRSBJbnN0YW5jZSBEZWZhdWx0Ci1kZWJ1Z2dlciA9IGRlYnVnZ2VyCi1pbnZva2UgPSBpbnZva2UKLXByb2Nlc3NvciA9IHByb2Nlc3NvcgotcHJvY2Vzc29yVHlwZSA9IHByb2Nlc3NvclR5cGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjU0OWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImRlYnVnZ2VyIiBuYW1lPSIlZGVidWdnZXIiIHNjaGVtYT0ic2NoZW1hL2RlYnVnZ2VyLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9Imludm9rZSIgbmFtZT0iJWludm9rZSIgc2NoZW1hPSJzY2hlbWEvaW52b2tlLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InByb2Nlc3NvciIgbmFtZT0iJXByb2Nlc3NvciIgc2NoZW1hPSJzY2hlbWEvcHJvY2Vzc29yLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InByb2Nlc3NvclR5cGUiIG5hbWU9IiVwcm9jZXNzb3JUeXBlIiBzY2hlbWE9InNjaGVtYS9wcm9jZXNzb3JUeXBlLmV4c2QiLz4KLSA8ZXh0ZW5zaW9uCi0gICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubGF1bmNoRGVsZWdhdGVzIj4KLSAgICA8bGF1bmNoRGVsZWdhdGUKLSAgICAgICAgICBkZWxlZ2F0ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZSIKLSAgICAgICAgICBkZWxlZ2F0ZURlc2NyaXB0aW9uPSJUaGUgWFNMVCBMYXVuY2hlciBmb3IgSkFYUCBzdXBwb3J0cyBydW5uaW5nIGFuZCBkZWJ1Z2dpbmcgdHJhbnNmb3JtYXRpb25zIHVzaW5nIEpBWFAtY29tcGxpYW50IFhTTFQgcHJvY2Vzc29ycyIKLSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuaW50ZXJuYWwuamF4cC5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIgotICAgICAgICAgIG1vZGVzPSJydW4sIGRlYnVnIgotICAgICAgICAgIG5hbWU9IiVsYXVuY2hEZWxlZ2F0ZS5uYW1lLjAiCi0gICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiPgotICAgIDwvbGF1bmNoRGVsZWdhdGU+ICAgIAotIDwvZXh0ZW5zaW9uPgotICAgICAJCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KLQkJPGluaXRpYWxpemVyCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPgotCQk8L2luaXRpYWxpemVyPgotCTwvZXh0ZW5zaW9uPgotIAotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW52b2tlIj4KLQkJPGludm9rZXIgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAuaW52b2tlIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyIgotCQkJY2xhc3NwYXRoPSIke2VjbGlwc2Vfb3JiaXQ6b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnfTske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmd9OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLmxvZzRqfSIgLz4KLQk8L2V4dGVuc2lvbj4KLQotICAJPGV4dGVuc2lvbgotCSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlIj4KLSAgICAgPHByb2Nlc3NvclR5cGUKLSAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXM9IkpSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZS5qcmVEZWZhdWx0IgotICAgICAgICAgICAgbGFiZWw9IiVwcm9jZXNzb3JUeXBlLmxhYmVsLjEiCi0gICAgICAgICAgICBvdXRwdXRQcm9wZXJ0aWVzPSJKUkVEZWZhdWx0T3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIiAvPgotCSA8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3IiPgotICAgICAgICA8cHJvY2Vzc29yCi0gICAgICAgICAgICAgIGNsYXNzcGF0aD0iIgotICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuanJlLmRlZmF1bHQiCi0gICAgICAgICAgICAgIGxhYmVsPSIlcHJvY2Vzc29yLmxhYmVsLjEiCi0gICAgICAgICAgICAgIHByb2Nlc3NvclR5cGVJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZS5qcmVEZWZhdWx0IgotICAgICAgICAgICAgICBzdXBwb3J0cz0iMS4wIi8+Ci0JIDwvZXh0ZW5zaW9uPgotIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvcG9tLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjUwMGRlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLSAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgIDxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0gICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nPC9hcnRpZmFjdElkPgotICAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPgotICAgPHZlcnNpb24+MS4wLjIwMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgIDxuYW1lPlhTTFQgSkFYUCBMYXVuY2hpbmcgVUkgUGx1Z2luPC9uYW1lPgotCi0gICA8cGFyZW50PgotICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhzbDwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54c2wtcGFyZW50PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2RldmVsb3BtZW50L2F0aGVuYS9vcmcuZWNsaXBzZS53c3QueHNsLnJlbGVuZzwvcmVsYXRpdmVQYXRoPgotICAgPC9wYXJlbnQ+Ci0KLSAgIDxidWlsZD4KLSAgICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+Ci0gICAgICA8cGx1Z2lucz4KLSAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNzwvdmVyc2lvbj4KLSAgICAgICAgIDwvcGx1Z2luPgotICAgICAgPC9wbHVnaW5zPgotICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9kZWJ1Z2dlci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9kZWJ1Z2dlci5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjgwZjA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvZGVidWdnZXIuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIGlkPSJkZWJ1Z2dlciIgbmFtZT0iWFNMVCBEZWJ1Z2dlciIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb250cmlidXRlIGEgZGVidWdnZXIgZm9yIGEgcGFydGljdWxhciBKQVhQIHByb2Nlc3NvciB0eXBlIChlLmcuIFNheG9uKS4gVGhlIGV4dGVuc2lvbiBwb2ludCBwcmltYXJpbHkgZGVmaW5lcyB0aGUgY2xhc3NwYXRoIGFuZCB0cmFuc2Zvcm1lciBmYWN0b3J5IHRvIGJlIHVzZWQgd2hlbiBkZWJ1Z2dpbmcuCi0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgPG1ldGEuZWxlbWVudCAvPgotICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkZWJ1Z2dlciIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJkZWJ1Z2dlciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgQSBkZWJ1Z2dlciBmb3IgYSBwcm9jZXNzb3IgdHlwZQotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHVuaXF1ZSBpZCBmb3IgdGhpcyBkZWJ1Z2dlcgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBuYW1lIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgVUkKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzc3BhdGgiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSAmYXBvczs7JmFwb3M7LXNlcGFyYXRlZCBjbGFzc3BhdGggcmVxdWlyZWQgdG8gcnVuIHRoZSBkZWJ1Z2dlciAoaW4gYWRkaXRpb24gdG8gdGhhdCBhbHJlYWR5IGFkZGVkIGJ5IHRoZSBwcm9jZXNzb3IgaXRzZWxmKS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwcm9jZXNzb3JUeXBlSWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIHByb2Nlc3NvciB0eXBlIHRoYXQgdGhpcyBkZWJ1Z2dlciB3b3JrcyB3aXRoCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3NOYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgZnVsbHktcXVhbGlmaWVkIGNsYXNzIHRoYXQgaW1wbGVtZW50IHRoZSBJWFNMRGVidWdnZXIgaW50ZXJmYWNlLiBJdCBpcyBlYXNpZXIgdG8gZXh0ZW5kIEFic3RyYWN0WFNMRGVidWdnZXIuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSI6b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLklYU0xEZWJ1Z2dlciIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBmdWxseS1xdWFsaWZpZWQgY2xhc3MgbmFtZSBvZiB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yeSB0byB1c2UgZm9yIGRlYnVnZ2luZy4gVGhpcyBtdXN0IGJlIG9uZSBvZiB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yaWVzIGJlbG9uZ2luZyB0byB0aGUgcHJvY2Vzc29yIHR5cGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeToiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5kZWJ1Z2dlciZxdW90OyZndDsKLSAgICAgICZsdDtkZWJ1Z2dlcgotICAgICAgICAgICAgY2xhc3NOYW1lPSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlciZxdW90OwotICAgICAgICAgICAgY2xhc3NwYXRoPSZxdW90OyR7ZWNsaXBzZV9vcmJpdDpvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFufSZxdW90OwotICAgICAgICAgICAgaWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlciZxdW90OwotICAgICAgICAgICAgbmFtZT0mcXVvdDtYYWxhbiAyLjUuMSBvciBncmVhdGVyJnF1b3Q7Ci0gICAgICAgICAgICBwcm9jZXNzb3JUeXBlSWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlJnF1b3Q7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1lckZhY3RvcnlDbGFzcz0mcXVvdDtvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsJnF1b3Q7Jmd0OwotICAgICAgJmx0Oy9kZWJ1Z2dlciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZxdW90OyZndDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZsdDsvYSZndDsuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvaW52b2tlLmV4c2QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL2ludm9rZS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjBjMWYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvaW52b2tlLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIGlkPSJpbnZva2UiIG5hbWU9IlhTTFQgUHJvY2Vzc29yIEludm9rZXIiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O2ImZ3Q7VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy4mbHQ7L2ImZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgPG1ldGEuZWxlbWVudCBpbnRlcm5hbD0idHJ1ZSIgLz4KLSAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iaW52b2tlciIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJpbnZva2VyIj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVW5pcXVlIGlkIGZvciB0aGlzIGludm9rZXIKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgSVByb2Nlc3Nvckludm9rZXIgaW50ZXJmYWNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3NwYXRoIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgc2VtaS1jb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBqYXJzIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBjb250cmlidXRpbmcgcGx1Z2luLiBPbmUgb2YgdGhlIGphcnMgbXVzdCBjb250YWluIHRoZSBJbnZva2VyIGNsYXNzIG5hbWVkIGluIHRoZSBjbGFzcyBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLQotCi0KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmcXVvdDsmZ3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmbHQ7L2EmZ3Q7LiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL3Byb2Nlc3Nvci5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9wcm9jZXNzb3IuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU5ZTA4Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL3Byb2Nlc3Nvci5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgaWQ9InByb2Nlc3NvciIgbmFtZT0iWFNMVCBQcm9jZXNzb3IiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29udHJpYnV0ZSBhIEphdmEgWFNMVCBwcm9jZXNzb3IgaW5zdGFuY2UgKGUuZy4gWGFsYW4gMi43LjApLiBUaGUgZXh0ZW5zaW9uIHBvaW50IHByaW1hcmlseSBkZWZpbmVzIHRoZSBjbGFzc3BhdGggdG8gYmUgdXNlZCB3aGVuIGxhdW5jaGluZyBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KLSAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icHJvY2Vzc29yIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLSAgIDxlbGVtZW50IG5hbWU9InByb2Nlc3NvciI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgPG1ldGEuZWxlbWVudCBsYWJlbEF0dHJpYnV0ZT0ibGFiZWwiLz4KLSAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgQW4gaW5zdGFuY2Ugb2YgYSBKQVhQLWNvbXBsaWFudCBYU0xUIHByb2Nlc3NvcgotICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHVuaXF1ZSBpZCBmb3IgdGhpcyBwcm9jZXNzb3IgaW5zdGFuY2UKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGxhYmVsIGZvciB0aGlzIGluc3RhbmNlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgVUkKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InByb2Nlc3NvclR5cGVJZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgaWQgZm9yIHRoZSBwcm9jZXNzb3IgdHlwZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzcGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgY2xhc3NwYXRoIHRvIHVzZSB3aGVuIHRoaXMgcHJvY2Vzc29yIGlzIGxhdW5jaGVkCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVidWdnZXJJZCIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgaWQgb2YgYSBkZWJ1Z2dlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgcHJvY2Vzc29yCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic3VwcG9ydHMiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgWFNMVCB2ZXJzaW9ucyBlLmcuIDEuMCwyLjAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3ImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7IS0tIEFuIGFkb3B0ZXIgY2FuIHNwZWNpZnkgdGhlICR7ZWNsaXBzZV9vcmJpdDogfSB2YXJpYWJsZSB0byBpbmRpY2F0ZSB3aGljaCBlY2xpcHNlCi0gICAgICAgICAgIGJ1bmRsZSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHBhdGguIC0tJmd0OwotICAgICAgJmx0O3Byb2Nlc3NvcgotICAgICAgY2xhc3NwYXRoPSZxdW90OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLnhhbGFufTske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS54bWwuc2VyaWFsaXplcn07JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUuYmNlbH07JHtlY2xpcHNlX29yYml0OmphdmFfY3VwLnJ1bnRpbWV9JnF1b3Q7Ci0gICAgICAgICAgICBpZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3ImcXVvdDsKLSAgICAgICAgICAgIGxhYmVsPSZxdW90OyVwcm9jZXNzb3IubGFiZWwuMSZxdW90OwotICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4ucHJvY2Vzc29yVHlwZSZxdW90OwotICAgICAgICAgICAgZGVidWdnZXJJZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyJnF1b3Q7Ci0gICAgICAgICAgICBzdXBwb3J0cz0mcXVvdDsxLjAmcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7L3Byb2Nlc3NvciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZxdW90OyZndDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZsdDsvYSZndDsuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvcHJvY2Vzc29yVHlwZS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9wcm9jZXNzb3JUeXBlLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYWRhNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9wcm9jZXNzb3JUeXBlLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiBpZD0icHJvY2Vzc29yVHlwZSIgbmFtZT0iWFNMVCBQcm9jZXNzb3IgVHlwZSIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb250cmlidXRlIGEgSmF2YSBYU0xUIHByb2Nlc3NvciB0eXBlIChlLmcuIFhhbGFuLCBTYXhvbikuIFRoZSBwcm9jZXNzb3IgdHlwZSBkZWZpbmVzIHdoaWNoIEpBWFAgYXR0cmlidXRlcyBhbmQgb3V0cHV0IHByb3BlcmllcyBhcmUgc3VwcG9ydGVkLCBhbmQgYWxzbyB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yeSBjbGFzc2VzIGl0IGNvbnRhaW5zLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KLSAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icHJvY2Vzc29yVHlwZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJwcm9jZXNzb3JUeXBlIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IGxhYmVsQXR0cmlidXRlPSJsYWJlbCIvPgotICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJ0cmFuc2Zvcm1lckZhY3RvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFVuaXF1ZSBpZCBmb3IgdGhlIHByb2Nlc3NvciB0eXBlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgTmFtZSBmb3IgZGlzcGxheSBpbiB0aGUgVUkKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im91dHB1dFByb3BlcnRpZXMiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgTG9jYXRpb24gb2YgYSBwcm9wZXJ0aWVzIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiB0aGUgcHJvY2Vzc29ycyBvdXRwdXQgcHJvcGVydGllcy4gTXVzdCBiZSBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGJ1bmRsZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJhdHRyaWJ1dGVQcm9wZXJ0aWVzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIExvY2F0aW9uIG9mIGEgcHJvcGVydGllcyBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGJ5IHRoaXMgcHJvY2Vzc29yLiBNdXN0IGJlIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgYnVuZGxlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJ0cmFuc2Zvcm1lckZhY3RvcnkiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIEEgVHJhbnNmb3JtZXJGYWN0b3J5IGZvciB0aGlzIHR5cGUKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZmFjdG9yeUNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBmdWxseS1xdWFsaWZpZWQgdHJhbnNmb3JtZXIgZmFjdG9yeSBjbGFzcwotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk6Ii8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIG5hbWUgZm9yIHRoaXMgdHJhbnNmb3JtZXIgZmFjdG9yeSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIFVJCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAmbHQ7cHJlJmd0OwotICAgJmx0O2V4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlJnF1b3Q7Jmd0OwotICAgICAgJmx0O3Byb2Nlc3NvclR5cGUKLSAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXM9JnF1b3Q7WGFsYW5BdHRyaWJ1dGVzLnByb3BlcnRpZXMmcXVvdDsKLSAgICAgICAgICAgIGlkPSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4ucHJvY2Vzc29yVHlwZSZxdW90OwotICAgICAgICAgICAgbGFiZWw9JnF1b3Q7JXByb2Nlc3NvclR5cGUubGFiZWwuMCZxdW90OwotICAgICAgICAgICAgb3V0cHV0UHJvcGVydGllcz0mcXVvdDtYYWxhbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyZxdW90OyZndDsKLSAgICAgICAgICZsdDt0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0mcXVvdDtvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsJnF1b3Q7Ci0gICAgICAgICAgICAgICBuYW1lPSZxdW90O0ludGVycHJldGl2ZSZxdW90OyZndDsKLSAgICAgICAgICZsdDsvdHJhbnNmb3JtZXJGYWN0b3J5Jmd0OwotICAgICAgICAgJmx0O3RyYW5zZm9ybWVyRmFjdG9yeQotICAgICAgICAgICAgICAgZmFjdG9yeUNsYXNzPSZxdW90O29yZy5hcGFjaGUueGFsYW4ueHNsdGMudHJheC5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsJnF1b3Q7Ci0gICAgICAgICAgICAgICBuYW1lPSZxdW90O0NvbXBpbGluZyZxdW90OyZndDsKLSAgICAgICAgICZsdDsvdHJhbnNmb3JtZXJGYWN0b3J5Jmd0OwotICAgICAgJmx0Oy9wcm9jZXNzb3JUeXBlJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci0mbHQ7L3ByZSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJmx0Oy9hJmd0Oy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lBdHRyaWJ1dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JQXR0cmlidXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NzkxNGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lBdHRyaWJ1dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLQotLyoqCi0gKiBBIGF0dHJpYnV0ZSBzdXBwb3J0ZWQgYnkgYW4gWFNMVCBwcm9jZXNzb3IuIAotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSUF0dHJpYnV0ZQotewotCS8qKgotCSAqIENvbnN0YW50IGZvciBhdHRyaWJ1dGVzIG9mIHR5cGUgPGNvZGU+c3RyaW5nPC9jb2RlPgotCSAqIEBzZWUgI2dldFR5cGUoKQotCSAqLwotCVN0cmluZyBUWVBFX1NUUklORyA9ICJzdHJpbmciOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQ29uc3RhbnQgZm9yIGF0dHJpYnV0ZXMgb2YgdHlwZSA8Y29kZT5ib29sZWFuPC9jb2RlPgotCSAqIEBzZWUgI2dldFR5cGUoKQotCSAqLwotCVN0cmluZyBUWVBFX0JPT0xFQU4gPSAiYm9vbGVhbiI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBDb25zdGFudCBmb3IgYXR0cmlidXRlcyBvZiB0eXBlIDxjb2RlPmludDwvY29kZT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKLQkgKi8KLQlTdHJpbmcgVFlQRV9JTlQgPSAiaW50IjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIENvbnN0YW50IGZvciBhdHRyaWJ1dGVzIG9mIHR5cGUgPGNvZGU+ZG91YmxlPC9jb2RlPgotCSAqIEBzZWUgI2dldFR5cGUoKQotCSAqLwotCVN0cmluZyBUWVBFX0RPVUJMRSA9ICJkb3VibGUiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQ29uc3RhbnQgZm9yIGF0dHJpYnV0ZXMgb2YgdHlwZSA8Y29kZT5mbG9hdDwvY29kZT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKLQkgKi8KLQlTdHJpbmcgVFlQRV9GTE9BVCA9ICJmbG9hdCI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBDb25zdGFudCBmb3IgYXR0cmlidXRlcyBvZiB0eXBlIDxjb2RlPmNsYXNzPC9jb2RlPgotCSAqIEBzZWUgI2dldFR5cGUoKQotCSAqLwotCVN0cmluZyBUWVBFX0NMQVNTID0gImNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIENvbnN0YW50IGZvciBhdHRyaWJ1dGVzIG9mIHR5cGUgPGNvZGU+b2JqZWN0PC9jb2RlPgotCSAqIEBzZWUgI2dldFR5cGUoKQotCSAqLwotCVN0cmluZyBUWVBFX09CSkVDVCA9ICJvYmplY3QiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBHZXQgdGhlIFVSSSBmb3IgdGhpcyBhdHRyaWJ1dGUKLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgVVJJCi0JICovCi0JU3RyaW5nIGdldFVSSSgpOwotCi0JLyoqCi0JICogR2V0IGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgYXR0cmlidXRlCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIGRlc2NyaXB0aW9uCi0JICovCi0JU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHR5cGUgb2YgdGhpcyBhdHRyaWJ1dGUuIFdpbGwgbWF0Y2ggb25lIG9mIHRoZSBUWVBFIGNvbnN0YW50cyBpbiB0aGlzIGludGVyZmFjZS4KLQkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGUgdHlwZTogb25lIG9mIDxjb2RlPlRZUEVfU1RSSU5HPC9jb2RlPiwgPGNvZGU+VFlQRV9CT09MRUFOPC9jb2RlPiwgCi0JICogPGNvZGU+VFlQRV9JTlQ8L2NvZGU+LCA8Y29kZT5UWVBFX0RPVUJMRTwvY29kZT4sIDxjb2RlPlRZUEVfRkxPQVQ8L2NvZGU+LCA8Y29kZT5UWVBFX0NMQVNTPC9jb2RlPiwgCi0JICogb3IgPGNvZGU+VFlQRV9PQkpFQ1Q8L2NvZGU+Ci0JICovCi0JU3RyaW5nIGdldFR5cGUoKTsKLQotCS8qKgotCSAqIERldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIHZhbGlkIG9uZSBmb3IgdGhpcyBhdHRyaWJ1dGUuCi0JICogQHJldHVybiBhbiA8Y29kZT5JU3RhdHVzPC9jb2RlPiB3aXRoIHNldmVyaXR5IDxjb2RlPk9LPC9jb2RlPiBpZiB2YWxpZCwgb3IgPGNvZGU+RVJST1I8L2NvZGU+IGlmIGludmFsaWQuCi0JICovCi0JSVN0YXR1cyB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWx1ZSk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSURlYnVnZ2VyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSURlYnVnZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MDJmOTUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lEZWJ1Z2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotLyoqCi0gKiBBbiBYU0xUIGRlYnVnZ2VyLiBUeXBpY2FsbHkgdGhpcyB3aWxsIGhhdmUgYmVlbiAKLSAqIGNvbnRyaWJ1dGVkIHZpYSB0aGUgPGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuZGVidWdnZXI8L2NvZGU+IGV4dGVuc2lvbiBwb2ludC4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElEZWJ1Z2dlcgotewotCS8qKgotCSAqIEdldCB0aGUgdW5pcXVlIGlkIGZvciB0aGlzIGRlYnVnZ2VyLgotCSAqIEByZXR1cm4gZGVidWdnZXIgaWQKLQkgKi8KLQlTdHJpbmcgZ2V0SWQoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgc2V0IG9mIGJ1bmRsZS1yZWxhdGl2ZSBqYXIgZmlsZXMgdG8gYWRkIHRvIHRoZSBjbGFzc3BhdGguIAotCSAqIEByZXR1cm4gYXJyYXkgb2YgYnVuZGxlLXJlbGF0aXZlIGphcnMKLQkgKi8KLQlTdHJpbmdbXSBnZXRDbGFzc1BhdGgoKTsKLQotCS8qKgotCSAqIEdldCBhIHVuaXF1ZSBuYW1lIGZvciB0aGlzIGRlYnVnZ2VyCi0JICogQHJldHVybiB0aGUgbmFtZSBmb3IgdGhlIGRlYnVnZ2VyCi0JICovCi0JU3RyaW5nIGdldE5hbWUoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgcHJvY2Vzc29yIHR5cGUgdGhhdCB0aGlzIGRlYnVnZ2VyIGlzIGFzc29jaWF0ZWQgd2l0aAotCSAqIEByZXR1cm4gdGhlIHByb2Nlc3NvciB0eXBlCi0JICovCi0JSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZSgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBjbGFzcyBuYW1lIGZvciB0aGlzIGRlYnVnZ2VyCi0JICogQHJldHVybiB0aGUgY2xhc3MgbmFtZQotCSAqLwotCVN0cmluZyBnZXRDbGFzc05hbWUoKTsKLQkKLQkvKioKLQkgKiBHZXQgdGhlIHRyYW5zZm9ybWVyIGZhY3RvcnkgdGhpcyBkZWJ1Z2dlciBpcyBhc3NvY2lhdGVkIHdpdGgKLQkgKiBAcmV0dXJuIHRoZSB0cmFuc2Zvcm1lciBmYWN0b3J5Ci0JICovCi0JU3RyaW5nIGdldFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lPdXRwdXRQcm9wZXJ0eS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lPdXRwdXRQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmQyYzc2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JT3V0cHV0UHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLS8qKgotICogQW4gb3V0cHV0IHByb3BlcnR5IHN1cHBvcnRlZCBieSBhbiBYU0xUIHByb2Nlc3Nvci4gCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGludGVyZmFjZSBJT3V0cHV0UHJvcGVydHkKLXsKLQkvKioKLQkgKiBHZXQgdGhlIFVSSSBvZiB0aGlzIG91dHB1dCBwcm9wZXJ0eS4gCi0JICogQHJldHVybiBhIHVuaXF1ZSBVUkkKLQkgKi8KLQlTdHJpbmcgZ2V0VVJJKCk7Ci0KLQkvKioKLQkgKiBHZXQgYSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBvdXRwdXQgcHJvcGVydHkuIAotCSAqIEByZXR1cm4gYSBkZXNjcmlwdGlvbgotCSAqLwotCVN0cmluZyBnZXREZXNjcmlwdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JJbnN0YWxsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckluc3RhbGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNhYjI3Yi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckluc3RhbGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLS8qKgotICogQW4gaW5zdGFuY2Ugb2YgYW4gWFNMVCBwcm9jZXNzb3IgKGUuZy4gWGFsYW4gMi43LjApLgotICogCi0gKiBAc2VlIElQcm9jZXNzb3JJbnN0YWxsCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVByb2Nlc3Nvckluc3RhbGwKLXsKLQkvKioKLQkgKiBHZXQgdGhlIHVucWl1ZSBpZCBvZiB0aGlzIGluc3RhbGwKLQkgKiBAcmV0dXJuIHRoZSB1bmlxdWUgaWQKLQkgKi8KLQlTdHJpbmcgZ2V0SWQoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIGluc3RhbGwKLQkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgaW5zdGFsbAotCSAqLwotCVN0cmluZyBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHRoZSBwcm9jZXNzb3IgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YWxsCi0JICogQHJldHVybiB0aGUgcHJvY2Vzc29yIHR5cGUgaWQKLQkgKi8KLQlJUHJvY2Vzc29yVHlwZSBnZXRQcm9jZXNzb3JUeXBlKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGphciBmaWxlcyBmb3IgdGhpcyBwcm9jZXNzb3IKLQkgKiBAcmV0dXJuIGEgc2V0IG9mIGphciBmaWxlcwotCSAqLwotCUlQcm9jZXNzb3JKYXJbXSBnZXRQcm9jZXNzb3JKYXJzKCk7Ci0KLQkvKioKLQkgKiBHZXQgd2hldGhlciB0aGlzIGluc3RhbGwgaGFzIGJlZW4gY29udHJpYnV0ZWQgdmlhIHRoZSA8Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5wcm9jZXNzb3I8L2NvZGU+IGV4dGVuc2lvbiBwb2ludC4KLQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGNvbnRyaWJ1dGVkIHZpYSB0aGUgZXh0ZW5zaW9uIHBvaW50LCBvdGhlcndpc2UgPGNvZGU+ZmFsc2U8L2NvZGU+LgotCSAqLwotCWJvb2xlYW4gaXNDb250cmlidXRlZCgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBYU0xUIHZlcnNpb25zCi0JICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGluc3RhbGwgaGFzIGEgZGVidWdnZXIsIG90aGVyd2lzZSA8Y29kZT5mYWxzZTwvY29kZT4uCi0JICovCi0JLy8gVE9ETyBkZXByZWNhdGUgYW5kIHVzZSBib29sZWFuIHN1cHBvcnRzIGluc3RhZWQKLQlTdHJpbmcgZ2V0U3VwcG9ydHMoKTsKLQotCS8qKgotCSAqIEdldCB3aGV0aGVyIHRoaXMgaW5zdGFsbCBzdXBwb3J0cyB0aGUgc3BlY2lmaWVkIHhzbHQgdmVyc2lvbi4KLQkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgaW5zdGFsbCBzdXBwb3J0cyB0aGUgdmVyc2lvbiwgb3RoZXJ3aXNlIDxjb2RlPmZhbHNlPC9jb2RlPi4KLQkgKi8KLQlib29sZWFuIHN1cHBvcnRzKFN0cmluZyB4c2x0VmVyc2lvbik7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGRlYnVnZ2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbGwKLQkgKiBAcmV0dXJuIHRoZSBkZWJ1Z2dlciwgb3IgbnVsbCBpZiBubyBkZWJ1Z2dlciBoYXMgYmVlbiBzZXQKLQkgKi8KLQlJRGVidWdnZXIgZ2V0RGVidWdnZXIoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySW52b2tlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JJbnZva2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MDEwMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JJbnZva2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1wdWJsaWMgaW50ZXJmYWNlIElQcm9jZXNzb3JJbnZva2VyCi17Ci0JU3RyaW5nIGdldElkKCk7Ci0KLQlTdHJpbmcgZ2V0SW52b2tlckNsYXNzTmFtZSgpOwotCi0JU3RyaW5nW10gZ2V0Q2xhc3NwYXRoRW50cmllcygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JKYXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySmFyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMDUyYmIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JKYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci0KLS8qKgotICogQSBqYXIgZmlsZSBmb3IgYW4gWFNMVCBwcm9jZXNzb3IKLSAqIAotICogQHNlZSBJUHJvY2Vzc29ySW5zdGFsbAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQcm9jZXNzb3JKYXIKLXsKLQkvKioKLQkgKiBUaGUgcGF0aCBtYXkgYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGU7IGluIHRoZSB3b3Jrc3BhY2Ugb3IgZXh0ZXJuYWwuCi0JICogQHJldHVybiB0aGUgcGF0aCB0byB0aGlzIGphcgotCSAqLwotCUlQYXRoIGdldFBhdGgoKTsKLQotCS8qKgotCSAqIFRoZSBVUkwgd2lsbCBhbHdheXMgYmUgYWJzb2x1dGUgYW5kIGNhbiBiZSBvcGVuZWQuCi0JICogQHJldHVybiBhIFVSTCB0byB0aGUgamFyCi0JICovCi0JVVJMIGFzVVJMKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3NvclR5cGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29yVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTNlNzAwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29yVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogQSBwYXJ0aWN1bGFyIHR5cGUgb2YgWFNMVCBQcm9jZXNzb3IgKGUuZy4gWGFsYW4pIGZvciB3aGljaCB0aGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBpbnN0YWxscy4KLSAqIAotICogQHNlZSBJUHJvY2Vzc29ySW5zdGFsbAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQcm9jZXNzb3JUeXBlCi17Ci0JU3RyaW5nIGdldElkKCk7Ci0KLQlTdHJpbmcgZ2V0TGFiZWwoKTsKLQotCWJvb2xlYW4gaXNKUkVEZWZhdWx0KCk7Ci0KLQlJVHJhbnNmb3JtZXJGYWN0b3J5W10gZ2V0VHJhbnNmb3JtZXJGYWN0b3JpZXMoKTsKLQotCUlBdHRyaWJ1dGVbXSBnZXRBdHRyaWJ1dGVzKCk7Ci0KLQlNYXA8U3RyaW5nLCBTdHJpbmc+IGdldEF0dHJpYnV0ZVZhbHVlcygpOwotCi0JSU91dHB1dFByb3BlcnR5W10gZ2V0T3V0cHV0UHJvcGVydGllcygpOwotCi0JTWFwPFN0cmluZywgU3RyaW5nPiBnZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcygpOwotCi0JSVRyYW5zZm9ybWVyRmFjdG9yeSBnZXREZWZhdWx0VHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVRyYW5zZm9ybWVyRmFjdG9yeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lUcmFuc2Zvcm1lckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ3MTZhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVRyYW5zZm9ybWVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVRyYW5zZm9ybWVyRmFjdG9yeQotewotCVN0cmluZyBnZXROYW1lKCk7Ci0JU3RyaW5nIGdldEZhY3RvcnlDbGFzcygpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0pBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmZGZlMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cwotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOVk9LRVJfREVTQ1JJUFRPUiA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5JTlZPS0VSX0RFU0NSSVBUT1IiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9QUk9DRVNTT1IgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9QUk9DRVNTT1IiOyAvLyROT04tTkxTLTEkCQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfT1VUUFVUX1BST1BFUlRJRVMgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9PVVRQVVRfUFJPUEVSVElFUyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FUVFJJQlVURVMgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9BVFRSSUJVVEVTIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfREVGQVVMVF9ERUJVR0dJTkdfSU5TVEFMTF9JRCA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX0RFRkFVTFRfREVCVUdHSU5HX0lOU1RBTExfSUQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9VU0VfREVGQVVMVF9QUk9DRVNTT1IgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9VU0VfREVGQVVMVF9QUk9DRVNTT1IiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9UUkFOU0ZPUk1FUl9GQUNUT1JZID0gSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfVFJBTlNGT1JNRVJfRkFDVE9SWSI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhBTEFOX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBWE9OX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi5wcm9jZXNzb3JUeXBlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBWE9OXzFfMF9UWVBFX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wuc2F4b25fMV8wLnByb2Nlc3NvclR5cGUiOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSkFYUFJ1bnRpbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9KQVhQUnVudGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWNlOWZlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9KQVhQUnVudGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkZlYXR1cmVQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLk91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5LkRlYnVnZ2VyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeS5JbnZva2VyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeS5Qcm9jZXNzb3JSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5LlByb2Nlc3NvclR5cGVSZWdpc3RyeTsKLQotcHVibGljIGNsYXNzIEpBWFBSdW50aW1lCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRl9QUk9DRVNTT1JfWE1MID0gIlBSRUZfUFJPQ0VTU09SX1hNTCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGX0ZFQVRVUkVfWE1MID0gIlBSRUZfRkVBVFVSRV9YTUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwgPSAiUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlJFX0RFRkFVTFRfUFJPQ0VTU09SX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpyZS5kZWZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpSRV9ERUZBVUxUX1BST0NFU1NPUl9UWVBFX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnByb2Nlc3NvclR5cGUuanJlRGVmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBORVhUX0lEX0xPQ0sgPSBuZXcgYnl0ZVswXTsKLQlwcml2YXRlIHN0YXRpYyBieXRlW10gUkVHSVNUUllfTE9DSyA9IG5ldyBieXRlWzBdOwotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGxhc3RTdGFuZGluSUQ7Ci0JcHJpdmF0ZSBzdGF0aWMgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5IHByb2Nlc3NvclR5cGVSZWdpc3RyeTsKLQlwcml2YXRlIHN0YXRpYyBQcm9jZXNzb3JSZWdpc3RyeSBwcm9jZXNzb3JSZWdpc3RyeTsKLQlwcml2YXRlIHN0YXRpYyBJbnZva2VyUmVnaXN0cnkgaW52b2tlclJlZ2lzdHJ5OwotCXByaXZhdGUgc3RhdGljIERlYnVnZ2VyUmVnaXN0cnkgZGVidWdnZXJSZWdpc3RyeTsKLQotCXByaXZhdGUgc3RhdGljIFByb2Nlc3NvclR5cGVSZWdpc3RyeSBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKQotCXsKLQkJc3luY2hyb25pemVkIChSRUdJU1RSWV9MT0NLKQotCQl7Ci0JCQlpZiAocHJvY2Vzc29yVHlwZVJlZ2lzdHJ5ID09IG51bGwpCi0JCQkJcHJvY2Vzc29yVHlwZVJlZ2lzdHJ5ID0gbmV3IFByb2Nlc3NvclR5cGVSZWdpc3RyeSgpOwotCQl9Ci0JCXJldHVybiBwcm9jZXNzb3JUeXBlUmVnaXN0cnk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgUHJvY2Vzc29yUmVnaXN0cnkgZ2V0UHJvY2Vzc29yUmVnaXN0cnkoKQotCXsKLQkJc3luY2hyb25pemVkIChSRUdJU1RSWV9MT0NLKQotCQl7Ci0JCQlpZiAocHJvY2Vzc29yUmVnaXN0cnkgPT0gbnVsbCkKLQkJCQlwcm9jZXNzb3JSZWdpc3RyeSA9IG5ldyBQcm9jZXNzb3JSZWdpc3RyeSgpOwotCQl9Ci0JCXJldHVybiBwcm9jZXNzb3JSZWdpc3RyeTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJbnZva2VyUmVnaXN0cnkgZ2V0SW52b2tlclJlZ2lzdHJ5KCkKLQl7Ci0JCXN5bmNocm9uaXplZCAoUkVHSVNUUllfTE9DSykKLQkJewotCQkJaWYgKGludm9rZXJSZWdpc3RyeSA9PSBudWxsKQotCQkJCWludm9rZXJSZWdpc3RyeSA9IG5ldyBJbnZva2VyUmVnaXN0cnkoKTsKLQkJfQotCQlyZXR1cm4gaW52b2tlclJlZ2lzdHJ5OwotCX0KLQotCXByaXZhdGUgc3RhdGljIERlYnVnZ2VyUmVnaXN0cnkgZ2V0RGVidWdnZXJSZWdpc3RyeSgpCi0JewotCQlzeW5jaHJvbml6ZWQgKFJFR0lTVFJZX0xPQ0spCi0JCXsKLQkJCWlmIChkZWJ1Z2dlclJlZ2lzdHJ5ID09IG51bGwpCi0JCQkJZGVidWdnZXJSZWdpc3RyeSA9IG5ldyBEZWJ1Z2dlclJlZ2lzdHJ5KCk7Ci0JCX0KLQkJcmV0dXJuIGRlYnVnZ2VyUmVnaXN0cnk7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIHZvaWQgc2F2ZVByZWZlcmVuY2VzKCkKLQl7Ci0JCUpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlzeW5jaHJvbml6ZWQgKFJFR0lTVFJZX0xPQ0spCi0JCXsKLQkJCS8vIGZvcmNlIHRoZSByZWdpc3RyaWVzIHRvIGJlIHJlLWluaXRpYWxpc2VkIG5leHQgdGltZSBpdCBpcyByZXF1aXJlZAotCQkJcHJvY2Vzc29yUmVnaXN0cnkgPSBudWxsOwotCQkJcHJvY2Vzc29yVHlwZVJlZ2lzdHJ5ID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIEZpbmQgYSB1bmlxdWUgcHJvY2Vzc29yIGluc3RhbGwgaWQuIENoZWNrIGV4aXN0aW5nICdyZWFsJyBwcm9jZXNzb3JzLCBhcwotCSAqIHdlbGwgYXMgdGhlIGxhc3QgaWQgdXNlZCBmb3IgYSBzdGFuZGluLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1ZVByb2Nlc3NvcklkKElQcm9jZXNzb3JUeXBlIHR5cGUpCi0JewotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29ycyh0eXBlLmdldElkKCkpOwotCQlTdHJpbmcgaWQgPSBudWxsOwotCQlzeW5jaHJvbml6ZWQgKE5FWFRfSURfTE9DSykKLQkJewotCQkJZG8KLQkJCXsKLQkJCQlpZCA9IFN0cmluZy52YWx1ZU9mKCsrbGFzdFN0YW5kaW5JRCk7Ci0JCQl9Ci0JCQl3aGlsZSAoaXNUYWtlbihpZCwgaW5zdGFsbHMpKTsKLQkJfQotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySmFyIGNyZWF0ZVByb2Nlc3NvckphcihJUGF0aCBwYXRoKQotCXsKLQkJcmV0dXJuIG5ldyBQcm9jZXNzb3JKYXIocGF0aCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1Rha2VuKFN0cmluZyBpZCwgSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxscykKLQl7Ci0JCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA6IGluc3RhbGxzKQotCQl7Ci0JCQlpZiAoaW5zdGFsbC5nZXRJZCgpLmVxdWFscyhpZCkpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSURlYnVnZ2VyW10gZ2V0RGVidWdnZXJzKCkKLQl7Ci0JCXJldHVybiBnZXREZWJ1Z2dlclJlZ2lzdHJ5KCkuZ2V0RGVidWdnZXJzKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRGVidWdnZXIgZ2V0RGVidWdnZXIoU3RyaW5nIGlkKQotCXsKLQkJcmV0dXJuIGdldERlYnVnZ2VyUmVnaXN0cnkoKS5nZXREZWJ1Z2dlcihpZCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW5zdGFsbFtdIGdldFByb2Nlc3NvcnMoKQotCXsKLQkJcmV0dXJuIGdldFByb2Nlc3NvclJlZ2lzdHJ5KCkuZ2V0UHJvY2Vzc29ycygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3Nvckluc3RhbGxbXSBnZXRQcm9jZXNzb3JzKFN0cmluZyB0eXBlSWQpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JzKHR5cGVJZCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW5zdGFsbCBnZXRQcm9jZXNzb3IoU3RyaW5nIHByb2Nlc3NvcklkKQotCXsKLQkJSVByb2Nlc3Nvckluc3RhbGxbXSBwcm9jZXNzb3JzID0gZ2V0UHJvY2Vzc29ycygpOwotCQlmb3IgKElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgOiBwcm9jZXNzb3JzKQotCQl7Ci0JCQlpZiAoaW5zdGFsbC5nZXRJZCgpLmVxdWFscyhwcm9jZXNzb3JJZCkpCi0JCQkJcmV0dXJuIGluc3RhbGw7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW5zdGFsbCBnZXREZWZhdWx0UHJvY2Vzc29yKCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JSZWdpc3RyeSgpLmdldERlZmF1bHRQcm9jZXNzb3IoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldEpSRURlZmF1bHRQcm9jZXNzb3IoKQotCXsKLQkJcmV0dXJuIGdldFByb2Nlc3NvclJlZ2lzdHJ5KCkuZ2V0SlJFRGVmYXVsdFByb2Nlc3NvcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3NvclR5cGVbXSBnZXRQcm9jZXNzb3JUeXBlcygpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yVHlwZVJlZ2lzdHJ5KCkuZ2V0UHJvY2Vzc29yVHlwZXMoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JUeXBlW10gZ2V0UHJvY2Vzc29yVHlwZXNFeGNsSlJFRGVmYXVsdCgpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yVHlwZVJlZ2lzdHJ5KCkuZ2V0UHJvY2Vzc29yVHlwZXNFeGNsSlJFRGVmYXVsdCgpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZShTdHJpbmcgaWQpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yVHlwZVJlZ2lzdHJ5KCkuZ2V0UHJvY2Vzc29yVHlwZShpZCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW52b2tlciBnZXRQcm9jZXNzb3JJbnZva2VyKFN0cmluZyBpbnZva2VySWQpCi0JewotCQlyZXR1cm4gZ2V0SW52b2tlclJlZ2lzdHJ5KCkuZ2V0UHJvY2Vzc29ySW52b2tlcihpbnZva2VySWQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3Nvckludm9rZXJbXSBnZXRQcm9jZXNzb3JJbnZva2VycygpCi0JewotCQlyZXR1cm4gZ2V0SW52b2tlclJlZ2lzdHJ5KCkuZ2V0UHJvY2Vzc29ySW52b2tlcnMoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcygpCi0JewotCQlyZXR1cm4gSkFYUExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2F2ZUZlYXR1cmVQcmVmZXJlbmNlcyhNYXA8SVByb2Nlc3NvclR5cGUsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHR5cGVGZWF0dXJlcywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJcmV0dXJuOwotCQl0cnkKLQkJewotCQkJbW9uaXRvci5iZWdpblRhc2soTWVzc2FnZXMuWFNMVFJ1bnRpbWVfNSwgMTAwKTsgCi0JCQlGZWF0dXJlUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgRmVhdHVyZVByZWZlcmVuY2VzKCk7Ci0JCQlNYXA8U3RyaW5nLE1hcDxTdHJpbmcsU3RyaW5nPj4gdHlwZUlkRmVhdHVyZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTWFwPFN0cmluZyxTdHJpbmc+Pih0eXBlRmVhdHVyZXMuc2l6ZSgpKTsKLQkJCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IHR5cGVGZWF0dXJlcy5rZXlTZXQoKSkKLQkJCXsKLQkJCQlNYXA8U3RyaW5nLFN0cmluZz4gdmFsdWVzID0gdHlwZUZlYXR1cmVzLmdldCh0eXBlKTsKLQkJCQl0eXBlSWRGZWF0dXJlcy5wdXQodHlwZS5nZXRJZCgpLCB2YWx1ZXMpOwotCQkJfQotCQkJcHJlZnMuc2V0VHlwZUZlYXR1cmVzKHR5cGVJZEZlYXR1cmVzKTsKLQkJCVN0cmluZyB4bWwgPSBwcmVmcy5nZXRBc1hNTCgpOwotCQkJbW9uaXRvci53b3JrZWQoNDApOwotCQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJCXJldHVybjsKLQkJCUpBWFBSdW50aW1lLmdldFByZWZlcmVuY2VzKCkuc2V0VmFsdWUoSkFYUFJ1bnRpbWUuUFJFRl9GRUFUVVJFX1hNTCwgeG1sKTsKLQkJCW1vbml0b3Iud29ya2VkKDMwKTsKLQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCQlyZXR1cm47Ci0JCQlKQVhQUnVudGltZS5zYXZlUHJlZmVyZW5jZXMoKTsKLQkJCW1vbml0b3Iud29ya2VkKDMwKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCxNZXNzYWdlcy5YU0xUUnVudGltZV82LGUpKTsgCi0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQltb25pdG9yLmRvbmUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyhNYXA8SVByb2Nlc3NvclR5cGUsIE1hcDxTdHJpbmcsU3RyaW5nPj4gdHlwZVByb3BlcnRpZXMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCXJldHVybjsKLQkJdHJ5Ci0JCXsKLQkJCW1vbml0b3IuYmVnaW5UYXNrKE1lc3NhZ2VzLlhTTFRSdW50aW1lXzcsIDEwMCk7IAotCQkJT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzKCk7Ci0JCQlmb3IgKElQcm9jZXNzb3JUeXBlIHR5cGUgOiB0eXBlUHJvcGVydGllcy5rZXlTZXQoKSkKLQkJCXsKLQkJCQlwcmVmcy5zZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyh0eXBlLmdldElkKCksIHR5cGVQcm9wZXJ0aWVzLmdldCh0eXBlKSk7Ci0JCQl9Ci0JCQlTdHJpbmcgeG1sID0gcHJlZnMuZ2V0QXNYTUwoKTsKLQkJCW1vbml0b3Iud29ya2VkKDQwKTsKLQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCQlyZXR1cm47Ci0JCQlKQVhQUnVudGltZS5nZXRQcmVmZXJlbmNlcygpLnNldFZhbHVlKEpBWFBSdW50aW1lLlBSRUZfT1VUUFVUX1BST1BFUlRJRVNfWE1MLCB4bWwpOwotCQkJbW9uaXRvci53b3JrZWQoMzApOwotCQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJCXJldHVybjsKLQkJCUpBWFBSdW50aW1lLnNhdmVQcmVmZXJlbmNlcygpOwotCQkJbW9uaXRvci53b3JrZWQoMzApOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELE1lc3NhZ2VzLlhTTFRSdW50aW1lXzgsZSkpOyAKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCW1vbml0b3IuZG9uZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNhdmVQcm9jZXNzb3JQcmVmZXJlbmNlcyhJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzLCBJUHJvY2Vzc29ySW5zdGFsbCBkZWZhdWx0SW5zdGFsbCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJcmV0dXJuOwotCQl0cnkKLQkJewotCQkJbW9uaXRvci5iZWdpblRhc2soTWVzc2FnZXMuWFNMVFJ1bnRpbWVfOSwgMTAwKTsgCi0JCQlQcm9jZXNzb3JQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBQcm9jZXNzb3JQcmVmZXJlbmNlcygpOwotCQkJaWYgKGRlZmF1bHRJbnN0YWxsICE9IG51bGwpCi0JCQkJcHJlZnMuc2V0RGVmYXVsdFByb2Nlc3NvcklkKGRlZmF1bHRJbnN0YWxsLmdldElkKCkpOwotCQkJcHJlZnMuc2V0UHJvY2Vzc29ycyhuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPihBcnJheXMuYXNMaXN0KGluc3RhbGxzKSkpOwotCQkJU3RyaW5nIHhtbCA9IHByZWZzLmdldEFzWE1MKCk7Ci0JCQltb25pdG9yLndvcmtlZCg0MCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuZ2V0UHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShKQVhQUnVudGltZS5QUkVGX1BST0NFU1NPUl9YTUwsIHhtbCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuc2F2ZVByZWZlcmVuY2VzKCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsTWVzc2FnZXMuWFNMVFJ1bnRpbWVfMTAsZSkpOyAKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCW1vbml0b3IuZG9uZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gY3JlYXRlRGVmYXVsdE91dHB1dFByb3BlcnRpZXMoU3RyaW5nIHR5cGVJZCkKLQl7Ci0JCU1hcDxTdHJpbmcsU3RyaW5nPiBwcm9wcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7Ci0JCWlmIChKUkVfREVGQVVMVF9QUk9DRVNTT1JfVFlQRV9JRC5lcXVhbHModHlwZUlkKSkKLQkJCXByb3BzLnB1dCgiaW5kZW50IiwgInllcyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJZWxzZSBpZiAoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuWEFMQU5fVFlQRV9JRC5lcXVhbHModHlwZUlkKSkKLQkJewotCQkJcHJvcHMucHV0KCJpbmRlbnQiLCAieWVzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcHJvcHMucHV0KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICI0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JCWVsc2UgaWYgKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OX1RZUEVfSUQuZXF1YWxzKHR5cGVJZCkpCi0JCXsKLQkJCXByb3BzLnB1dCgiaW5kZW50IiwgInllcyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCXByb3BzLnB1dCgie2h0dHA6Ly9zYXhvbi5zZi5uZXQvfWluZGVudC1zcGFjZXMiLCAiNCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfQotCQllbHNlIGlmIChKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5TQVhPTl8xXzBfVFlQRV9JRC5lcXVhbHModHlwZUlkKSkKLQkJewotCQkJcHJvcHMucHV0KCJpbmRlbnQiLCAieWVzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcHJvcHMucHV0KCJ7aHR0cDovL3NheG9uLnNmLm5ldC99aW5kZW50LXNwYWNlcyIsICI0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JCXJldHVybiBwcm9wczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoQXR0cmlidXRlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0xhdW5jaEF0dHJpYnV0ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkODY5MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoQXR0cmlidXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5QcmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgTGF1bmNoQXR0cmlidXRlcwotewotCXByaXZhdGUgZmluYWwgU2V0PExhdW5jaEF0dHJpYnV0ZT4gYXR0cmlidXRlcyA9IG5ldyBIYXNoU2V0PExhdW5jaEF0dHJpYnV0ZT4oKTsKLQotCXB1YmxpYyBTZXQ8TGF1bmNoQXR0cmlidXRlPiBnZXRBdHRyaWJ1dGVzKCkKLQl7Ci0JCXJldHVybiBhdHRyaWJ1dGVzOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZEF0dHJpYnV0ZShMYXVuY2hBdHRyaWJ1dGUgYXR0cmlidXRlKQotCXsKLQkJYXR0cmlidXRlcy5hZGQoYXR0cmlidXRlKTsKLQl9Ci0KLQlwdWJsaWMgTGF1bmNoQXR0cmlidXRlIGdldEF0dHJpYnV0ZShTdHJpbmcgdXJpKQotCXsKLQkJZm9yIChJdGVyYXRvcjxMYXVuY2hBdHRyaWJ1dGU+IGl0ZXIgPSBhdHRyaWJ1dGVzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gaXRlci5uZXh0KCk7Ci0JCQlpZiAodHYudXJpLmVxdWFscyh1cmkpKQotCQkJCXJldHVybiB0djsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVBdHJpYnV0ZShTdHJpbmcgdXJpKQotCXsKLQkJZm9yIChJdGVyYXRvcjxMYXVuY2hBdHRyaWJ1dGU+IGl0ZXIgPSBhdHRyaWJ1dGVzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJTGF1bmNoQXR0cmlidXRlIGF0dHJpYnV0ZSA9IGl0ZXIubmV4dCgpOwotCQkJaWYgKGF0dHJpYnV0ZS51cmkuZXF1YWxzKHVyaSkpCi0JCQkJaXRlci5yZW1vdmUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBTdHJpbmcgdG9YTUwoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudCgpOwotCi0JCUVsZW1lbnQgYXR0cmlidXRlc0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIkF0dHJpYnV0ZXMiKTsgLy8kTk9OLU5MUy0xJAotCQlkb2MuYXBwZW5kQ2hpbGQoYXR0cmlidXRlc0VsKTsKLQotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlciA9IGF0dHJpYnV0ZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgYXR0cmlidXRlID0gaXRlci5uZXh0KCk7Ci0JCQlFbGVtZW50IGF0dHJpYnV0ZUVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIkF0dHJpYnV0ZSIpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVFbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBhdHRyaWJ1dGUudXJpKTsgLy8kTk9OLU5MUy0xJAotCQkJYXR0cmlidXRlRWwuc2V0QXR0cmlidXRlKCJ0eXBlIiwgYXR0cmlidXRlLnR5cGUpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVFbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgYXR0cmlidXRlLnZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCQkJYXR0cmlidXRlc0VsLmFwcGVuZENoaWxkKGF0dHJpYnV0ZUVsKTsKLQkJfQotCi0JCXJldHVybiBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGF1bmNoQXR0cmlidXRlcyBmcm9tWE1MKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoaW5wdXRTdHJlYW0pOwotCi0JCUxhdW5jaEF0dHJpYnV0ZXMgcGRlZiA9IG5ldyBMYXVuY2hBdHRyaWJ1dGVzKCk7Ci0KLQkJRWxlbWVudCBhdHRyaWJ1dGVzRWwgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJTm9kZUxpc3QgYXR0cmlidXRlRWxzID0gYXR0cmlidXRlc0VsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZUVscy5nZXRMZW5ndGgoKTsgaSsrKQotCQl7Ci0JCQlFbGVtZW50IGF0dHJpYnV0ZUVsID0gKEVsZW1lbnQpIGF0dHJpYnV0ZUVscy5pdGVtKGkpOwotCQkJU3RyaW5nIG5hbWUgPSBhdHRyaWJ1dGVFbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHR5cGUgPSBhdHRyaWJ1dGVFbC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHZhbHVlID0gYXR0cmlidXRlRWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCi0JCQlwZGVmLmFkZEF0dHJpYnV0ZShuZXcgTGF1bmNoQXR0cmlidXRlKG5hbWUsIHR5cGUsIHZhbHVlKSk7Ci0JCX0KLQotCQlyZXR1cm4gcGRlZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoUHJvcGVydGllcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0xhdW5jaFByb3BlcnRpZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY5NjE0Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoUHJvcGVydGllcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLlByZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hQcm9wZXJ0aWVzCi17Ci0JcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldFByb3BlcnRpZXMoKQotCXsKLQkJcmV0dXJuIHByb3BlcnRpZXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkKLQl7Ci0JCXByb3BlcnRpZXMucHV0KG5hbWUsIHZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KFN0cmluZyBuYW1lKQotCXsKLQkJcmV0dXJuIHByb3BlcnRpZXMuZ2V0KG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVByb3BlcnR5KFN0cmluZyBuYW1lKQotCXsKLQkJcHJvcGVydGllcy5yZW1vdmUobmFtZSk7Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1hNTCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBwcm9wZXJ0eXNFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJQcm9wZXJ0aWVzIik7IC8vJE5PTi1OTFMtMSQKLQkJZG9jLmFwcGVuZENoaWxkKHByb3BlcnR5c0VsKTsKLQotCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gcHJvcGVydHkgOiBwcm9wZXJ0aWVzLmVudHJ5U2V0KCkpCi0JCXsKLQkJCVN0cmluZyBuYW1lID0gcHJvcGVydHkuZ2V0S2V5KCk7Ci0JCQlTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZSgpOwotCQkJRWxlbWVudCBwcm9wZXJ0eUVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlByb3BlcnR5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCXByb3BlcnR5RWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCXByb3BlcnR5RWwuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcGVydHlzRWwuYXBwZW5kQ2hpbGQocHJvcGVydHlFbCk7Ci0JCX0KLQotCQlyZXR1cm4gUHJlZmVyZW5jZVV0aWwuc2VyaWFsaXplRG9jdW1lbnQoZG9jKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExhdW5jaFByb3BlcnRpZXMgZnJvbVhNTChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KGlucHV0U3RyZWFtKTsKLQotCQlMYXVuY2hQcm9wZXJ0aWVzIHBkZWYgPSBuZXcgTGF1bmNoUHJvcGVydGllcygpOwotCi0JCUVsZW1lbnQgcHJvcGVydHlzRWwgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJTm9kZUxpc3QgcHJvcGVydHlFbHMgPSBwcm9wZXJ0eXNFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUHJvcGVydHkiKTsgLy8kTk9OLU5MUy0xJAotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb3BlcnR5RWxzLmdldExlbmd0aCgpOyBpKyspCi0JCXsKLQkJCUVsZW1lbnQgcHJvcGVydHlFbCA9IChFbGVtZW50KSBwcm9wZXJ0eUVscy5pdGVtKGkpOwotCQkJU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eUVsLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eUVsLmdldEF0dHJpYnV0ZSgidmFsdWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJcGRlZi5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0JCX0KLQotCQlyZXR1cm4gcGRlZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvUHJvY2Vzc29ySW5zdGFsbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL1Byb2Nlc3Nvckluc3RhbGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVlODcxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvUHJvY2Vzc29ySW5zdGFsbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlBsdWdpblByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlV0aWxzOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29ySW5zdGFsbCBpbXBsZW1lbnRzIElQcm9jZXNzb3JJbnN0YWxsCi17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIFN0cmluZyB0eXBlOwotCXByaXZhdGUgSVByb2Nlc3NvckphcltdIGphcnM7Ci0JcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNvbnRyaWJ1dGVkOwotCXByaXZhdGUgU3RyaW5nIGRlYnVnZ2VySWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgc3VwcG9ydHM7Ci0KLQlwdWJsaWMgUHJvY2Vzc29ySW5zdGFsbChTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCwgU3RyaW5nIHR5cGVJZCwgSVByb2Nlc3NvckphcltdIGphcnMsIFN0cmluZyBkZWJ1Z2dlcklkLCBTdHJpbmcgc3VwcG9ydHMsIGJvb2xlYW4gY29udHJpYnV0ZWQpCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCW5hbWUgPSBsYWJlbDsKLQkJdHlwZSA9IHR5cGVJZDsKLQkJdGhpcy5kZWJ1Z2dlcklkID0gZGVidWdnZXJJZDsKLQkJdGhpcy5jb250cmlidXRlZCA9IGNvbnRyaWJ1dGVkOwotCQl0aGlzLmphcnMgPSBqYXJzOwotCQl0aGlzLnN1cHBvcnRzID0gc3VwcG9ydHM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRJZCgpCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0JewotCQl0aGlzLm5hbWUgPSBuYW1lOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySmFyW10gZ2V0UHJvY2Vzc29ySmFycygpCi0JewotCQlyZXR1cm4gamFyczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9jZXNzb3JKYXJzKElQcm9jZXNzb3JKYXJbXSBqYXJzKQotCXsKLQkJdGhpcy5qYXJzID0gamFyczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFByb2Nlc3NvclR5cGVJZCgpCi0JewotCQlyZXR1cm4gdHlwZTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZSgpCi0JewotCQlyZXR1cm4gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZSh0eXBlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9jZXNzb3JUeXBlSWQoU3RyaW5nIGlkKQotCXsKLQkJdHlwZSA9IGlkOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ29udHJpYnV0ZWQoKQotCXsKLQkJcmV0dXJuIGNvbnRyaWJ1dGVkOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3NvckphcltdIGNyZWF0ZUphcnMoU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmcgY2xhc3NwYXRoKQotCXsKLQkJSVByb2Nlc3NvckphcltdIGphcnM7Ci0JCWlmIChjbGFzc3BhdGggPT0gbnVsbCkKLQkJCXJldHVybiBuZXcgSVByb2Nlc3NvckphclswXTsKLQkJU3RyaW5nW10gamFyc3RyaW5nID0gY2xhc3NwYXRoLnNwbGl0KCI7Iik7IC8vJE5PTi1OTFMtMSQKLQkJamFycyA9IG5ldyBJUHJvY2Vzc29ySmFyW2phcnN0cmluZy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGphcnN0cmluZy5sZW5ndGg7IGkrKykKLQkJewotCQkJU3RyaW5nIGphciA9IGphcnN0cmluZ1tpXTsKLQkJCXRyeQotCQkJewotCQkJCWlmIChqYXIuc3RhcnRzV2l0aCgiJHtlY2xpcHNlX29yYml0OiIpICYmIGphci5lbmRzV2l0aCgifSIpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl7Ci0JCQkJCWphciA9IGphci5zdWJzdHJpbmcoIiR7ZWNsaXBzZV9vcmJpdDoiLmxlbmd0aCgpKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlqYXIgPSBqYXIuc3Vic3RyaW5nKDAsamFyLmxlbmd0aCgpLTEpOwotCQkJCQkvL2phciA9IFV0aWxzLmdldEZpbGVMb2NhdGlvbihqYXIsIiIpOwotCQkJCQlqYXJzW2ldID0gbmV3IFBsdWdpblByb2Nlc3NvckphcihqYXIsIG51bGwpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlqYXIgPSBVdGlscy5nZXRGaWxlTG9jYXRpb24oYnVuZGxlSWQsamFyKTsKLQkJCQkJamFyc1tpXSA9IG5ldyBQbHVnaW5Qcm9jZXNzb3JKYXIoYnVuZGxlSWQsIG5ldyBQYXRoKGphcikpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGphcnM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzRGVidWdnZXIoKQotCXsKLQkJcmV0dXJuIGRlYnVnZ2VySWQgIT0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0cyhTdHJpbmcgeHNsdFZlcnNpb24pCi0JewotCQlyZXR1cm4gc3VwcG9ydHMuaW5kZXhPZih4c2x0VmVyc2lvbikgPj0gMDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN1cHBvcnRzKCkKLQl7Ci0JCXJldHVybiBzdXBwb3J0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdXBwb3J0cyhTdHJpbmcgc3VwcG9ydHMpCi0JewotCQl0aGlzLnN1cHBvcnRzID0gc3VwcG9ydHM7Ci0JfQotCi0JcHVibGljIElEZWJ1Z2dlciBnZXREZWJ1Z2dlcigpCi0JewotCQlyZXR1cm4gSkFYUFJ1bnRpbWUuZ2V0RGVidWdnZXIoZGVidWdnZXJJZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVidWdnZXJJZChTdHJpbmcgZGVidWdnZXJJZCkKLQl7Ci0JCXRoaXMuZGVidWdnZXJJZCA9IGRlYnVnZ2VySWQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0F0dHJpYnV0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0F0dHJpYnV0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2NhY2NhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9BdHRyaWJ1dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSUF0dHJpYnV0ZTsKLQotcHVibGljIGNsYXNzIEF0dHJpYnV0ZSBpbXBsZW1lbnRzIElBdHRyaWJ1dGUsIENvbXBhcmFibGU8T2JqZWN0PiB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXJpOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIHR5cGU7Ci0KLQlwdWJsaWMgQXR0cmlidXRlKFN0cmluZyB1cmksIFN0cmluZyB0eXBlLCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLQkJdGhpcy51cmkgPSB1cmk7Ci0JCXRoaXMudHlwZSA9IHR5cGU7Ci0JCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRUeXBlKCkgewotCQlyZXR1cm4gdHlwZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFVSSSgpIHsKLQkJcmV0dXJuIHVyaTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWx1ZSkgewotCQlJU3RhdHVzIHN0YXR1cyA9IG51bGw7Ci0JCWlmIChUWVBFX0JPT0xFQU4uZXF1YWxzKHR5cGUpKSB7Ci0JCQlib29sZWFuIHZhbGlkID0gInRydWUiLmVxdWFscyh2YWx1ZSkgfHwgImZhbHNlIi5lcXVhbHModmFsdWUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCWlmICghdmFsaWQpCi0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIE1lc3NhZ2VzLkF0dHJpYnV0ZV8yLAotCQkJCQkJbnVsbCk7Ci0JCX0gZWxzZSBpZiAoVFlQRV9JTlQuZXF1YWxzKHR5cGUpKSB7Ci0JCQl0cnkgewotCQkJCUludGVnZXIucGFyc2VJbnQodmFsdWUpOwotCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgTWVzc2FnZXMuQXR0cmlidXRlXzEsCi0JCQkJCQludWxsKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChUWVBFX0RPVUJMRS5lcXVhbHModHlwZSkpIHsKLQkJCXRyeSB7Ci0JCQkJRG91YmxlLnBhcnNlRG91YmxlKHZhbHVlKTsKLQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIE1lc3NhZ2VzLkF0dHJpYnV0ZV8wLAotCQkJCQkJbnVsbCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoVFlQRV9GTE9BVC5lcXVhbHModHlwZSkpIHsKLQkJCXRyeSB7Ci0JCQkJRmxvYXQucGFyc2VGbG9hdCh2YWx1ZSk7Ci0JCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBNZXNzYWdlcy5BdHRyaWJ1dGVfNSwKLQkJCQkJCW51bGwpOwotCQkJfQotCQl9IGVsc2UgaWYgKFRZUEVfQ0xBU1MuZXF1YWxzKHR5cGUpIHx8IFRZUEVfT0JKRUNULmVxdWFscyh0eXBlKSkgewotCQkJLy8gc3RhdHVzID0gSmF2YUNvbnZlbnRpb25zLnZhbGlkYXRlSmF2YVR5cGVOYW1lKHZhbHVlKTsKLQkJfQotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCXB1YmxpYyBpbnQgY29tcGFyZVRvKE9iamVjdCBvKSB7Ci0JCWlmIChvIGluc3RhbmNlb2YgSUF0dHJpYnV0ZSkgewotCQkJSUF0dHJpYnV0ZSBmID0gKElBdHRyaWJ1dGUpIG87Ci0JCQlyZXR1cm4gZi5nZXRVUkkoKS5jb21wYXJlVG8oZ2V0VVJJKCkpOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9EZWJ1Z2dlckRlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9EZWJ1Z2dlckRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxZGM3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvRGVidWdnZXJEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JRGVidWdnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgRGVidWdnZXJEZXNjcmlwdG9yIGltcGxlbWVudHMgSURlYnVnZ2VyCi17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBjbGFzc3BhdGg7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYnVuZGxlSWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBwcm9jZXNzb3JUeXBlSWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIHRyYW5zZm9ybWVyRmFjdG9yeTsKLQotCXB1YmxpYyBEZWJ1Z2dlckRlc2NyaXB0b3IoU3RyaW5nIGlkLCBTdHJpbmcgYnVuZGxlSWQsIFN0cmluZyBjbGFzc05hbWUsIFN0cmluZ1tdIGNsYXNzcGF0aCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwcm9jZXNzb3JUeXBlSWQsIFN0cmluZyB0cmFuc2Zvcm1lckZhY3RvcnkpCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMuY2xhc3NwYXRoID0gY2xhc3NwYXRoOwotCQl0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JCXRoaXMucHJvY2Vzc29yVHlwZUlkID0gcHJvY2Vzc29yVHlwZUlkOwotCQl0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLQkJdGhpcy50cmFuc2Zvcm1lckZhY3RvcnkgPSB0cmFuc2Zvcm1lckZhY3Rvcnk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKQotCXsKLQkJcmV0dXJuIGNsYXNzTmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nW10gZ2V0Q2xhc3NQYXRoKCkKLQl7Ci0JCXJldHVybiBQcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci5jcmVhdGVFbnRyaWVzKGJ1bmRsZUlkLCBjbGFzc3BhdGgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZSgpCi0JewotCQlyZXR1cm4gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZShwcm9jZXNzb3JUeXBlSWQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCkKLQl7Ci0JCXJldHVybiB0cmFuc2Zvcm1lckZhY3Rvcnk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0ZlYXR1cmVQcmVmZXJlbmNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0ZlYXR1cmVQcmVmZXJlbmNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmRjNWY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9GZWF0dXJlUHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEZlYXR1cmVQcmVmZXJlbmNlcwotewotCXByaXZhdGUgTWFwPFN0cmluZywgTWFwPFN0cmluZywgU3RyaW5nPj4gdHlwZUZlYXR1cmVzOwotCi0JcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0RmVhdHVyZXNWYWx1ZXMoU3RyaW5nIHR5cGVJZCkKLQl7Ci0JCXJldHVybiB0eXBlRmVhdHVyZXMuZ2V0KHR5cGVJZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VHlwZUZlYXR1cmVzKE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHR5cGVGZWF0dXJlcykKLQl7Ci0JCXRoaXMudHlwZUZlYXR1cmVzID0gdHlwZUZlYXR1cmVzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0QXNYTUwoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5jcmVhdGVFbGVtZW50KCJmZWF0dXJlUHJlZmVyZW5jZXMiKTsgIC8vJE5PTi1OTFMtMSQKLQkJZG9jLmFwcGVuZENoaWxkKGNvbmZpZyk7Ci0JCQotCQlmb3IgKFN0cmluZyB0eXBlSWQgOiB0eXBlRmVhdHVyZXMua2V5U2V0KCkpCi0JCXsKLQkJCUVsZW1lbnQgcHJvY2Vzc29yVHlwZUVsZW1lbnQgPSB0eXBlQXNFbGVtZW50KGRvYywgdHlwZUlkKTsKLQkJCU1hcDxTdHJpbmcsIFN0cmluZz4gZmVhdHVyZVZhbHVlcyA9IHR5cGVGZWF0dXJlcy5nZXQodHlwZUlkKTsKLQkJCWZlYXR1cmVWYWx1ZXNBc0VsZW1lbnQoZG9jLCBwcm9jZXNzb3JUeXBlRWxlbWVudCwgZmVhdHVyZVZhbHVlcyk7Ci0JCQljb25maWcuYXBwZW5kQ2hpbGQocHJvY2Vzc29yVHlwZUVsZW1lbnQpOwotCQl9Ci0KLQkJLy8gU2VyaWFsaXplIHRoZSBEb2N1bWVudCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgU3RyaW5nCi0JCXJldHVybiBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmVhdHVyZVByZWZlcmVuY2VzIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlGZWF0dXJlUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgRmVhdHVyZVByZWZlcmVuY2VzKCk7Ci0KLQkJLy8gRG8gdGhlIHBhcnNpbmcgYW5kIG9idGFpbiB0aGUgdG9wLWxldmVsIG5vZGUKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoaW5wdXRTdHJlYW0pOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQlNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0eXBlRmVhdHVyZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIFN0cmluZz4+KCk7Ci0JCUVsZW1lbnRbXSBwcm9jZXNzb3JUeXBlRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhjb25maWcsICJwcm9jZXNzb3JUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZXNzb3JUeXBlRWxzLmxlbmd0aDsgKytpKQotCQl7Ci0JCQlFbGVtZW50IHByb2Nlc3NvclR5cGVFbCA9IHByb2Nlc3NvclR5cGVFbHNbaV07Ci0JCQlTdHJpbmcgdHlwZSA9IGVsZW1lbnRBc1R5cGUocHJvY2Vzc29yVHlwZUVsKTsKLQkJCU1hcDxTdHJpbmcsIFN0cmluZz4gZmVhdHVyZVZhbHVlcyA9IGVsZW1lbnRBc0ZlYXR1cmVWYWx1ZXMocHJvY2Vzc29yVHlwZUVsKTsKLQkJCXR5cGVGZWF0dXJlcy5wdXQodHlwZSwgZmVhdHVyZVZhbHVlcyk7Ci0JCX0KLQotCQlwcmVmcy5zZXRUeXBlRmVhdHVyZXModHlwZUZlYXR1cmVzKTsKLQotCQlyZXR1cm4gcHJlZnM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGVsZW1lbnRBc1R5cGUoRWxlbWVudCBwYXJlbnQpCi0JewotCQlTdHJpbmcgaWQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJpZCIpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBpZDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBFbGVtZW50IHR5cGVBc0VsZW1lbnQoRG9jdW1lbnQgZG9jLCBTdHJpbmcgdHlwZSkKLQl7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJwcm9jZXNzb3JUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIiwgdHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBlbGVtZW50QXNGZWF0dXJlVmFsdWVzKEVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCUVsZW1lbnRbXSBmZWF0dXJlRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhlbGVtZW50LCAiZmVhdHVyZSIpOyAvLyROT04tTkxTLTEkCi0JCU1hcDxTdHJpbmcsIFN0cmluZz4gZmVhdHVyZVZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPihmZWF0dXJlRWxzLmxlbmd0aCk7Ci0JCWZvciAoRWxlbWVudCBmZWF0dXJlRWwgOiBmZWF0dXJlRWxzKQotCQl7Ci0JCQlTdHJpbmcgdXJpID0gZmVhdHVyZUVsLmdldEF0dHJpYnV0ZSgidXJpIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyB2YWx1ZSA9IGZlYXR1cmVFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCWZlYXR1cmVWYWx1ZXMucHV0KHVyaSwgdmFsdWUpOwotCQl9Ci0JCXJldHVybiBmZWF0dXJlVmFsdWVzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZmVhdHVyZVZhbHVlc0FzRWxlbWVudChEb2N1bWVudCBkb2MsIEVsZW1lbnQgZmVhdHVyZXNFbCwgTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJlVmFsdWVzKQotCXsKLQkJaWYgKGZlYXR1cmVWYWx1ZXMgIT0gbnVsbCkKLQkJewotCQkJZm9yIChNYXAuRW50cnk8U3RyaW5nLFN0cmluZz4gZW50cnkyIDogZmVhdHVyZVZhbHVlcy5lbnRyeVNldCgpKQotCQkJewotCQkJCVN0cmluZyB1cmkgPSBlbnRyeTIuZ2V0S2V5KCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gZW50cnkyLmdldFZhbHVlKCk7Ci0JCQkJRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImZlYXR1cmUiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ1cmkiLCB1cmkpOyAvLyROT04tTkxTLTEkCi0JCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQkJZmVhdHVyZXNFbC5hcHBlbmRDaGlsZChlbGVtZW50KTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YTk4YWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUJyZWFrcG9pbnRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSURlYnVnRXZlbnRTZXRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JU291cmNlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklTdGFja0ZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSVZNUnVubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSmF2YUxhdW5jaERlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSURlYnVnZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLm1vZGVsLkpBWFBEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5JWFNMQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUgZXh0ZW5kcyBKYXZhTGF1bmNoRGVsZWdhdGUKLQkJaW1wbGVtZW50cyBJRGVidWdFdmVudFNldExpc3RlbmVyIHsKLQlwcml2YXRlIFN0cmluZyBtb2RlOwotCUxhdW5jaEhlbHBlciBsYXVuY2hIZWxwZXI7Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgbGF1bmNoKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sCi0JCQlmaW5hbCBTdHJpbmcgbW9kZSwgZmluYWwgSUxhdW5jaCBsYXVuY2gsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdGhpcy5tb2RlID0gbW9kZTsKLQkJbGF1bmNoSGVscGVyLnNhdmUoZ2V0TGF1bmNoQ29uZmlnRmlsZSgpKTsKLQotCQkvLyBzZXQgdGhlIGxhdW5jaCBuYW1lCi0JCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24sIG1vZGUpOwotCQlTdHJpbmcgdGZhY3RvcnkgPSBnZXRUcmFuc2Zvcm1lckZhY3RvcnkoaW5zdGFsbCk7Ci0JCVN0cmluZyBuYW1lID0gaW5zdGFsbC5nZXROYW1lKCk7Ci0JCWlmICh0ZmFjdG9yeSAhPSBudWxsKQotCQkJbmFtZSArPSAiWyIgKyB0ZmFjdG9yeSArICJdIjsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQkJbGF1bmNoLnNldEF0dHJpYnV0ZSgibGF1bmNoTmFtZSIsIG5hbWUpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gdGhlIHN1cGVyLmxhdW5jaCB3aWxsIGFkZCBhIEphdmEgc291cmNlIGRpcmVjdG9yIGlmIHdlIHNldCBpdCB0byBudWxsCi0JCS8vIGhlcmUKLQkJZmluYWwgSVNvdXJjZUxvY2F0b3IgY29uZmlndXJlZExvY2F0b3IgPSBsYXVuY2guZ2V0U291cmNlTG9jYXRvcigpOwotCQlsYXVuY2guc2V0U291cmNlTG9jYXRvcihudWxsKTsKLQotCQlzdXBlci5sYXVuY2goY29uZmlndXJhdGlvbiwgbW9kZSwgbGF1bmNoLCBtb25pdG9yKTsKLQotCQkvLyBub3cgZ2V0IHRoZSBqYXZhIHNvdXJjZSBsb2NhdG9yCi0JCWZpbmFsIElTb3VyY2VMb2NhdG9yIGphdmFTb3VyY2VMb29rdXBEaXJlY3RvciA9IGxhdW5jaAotCQkJCS5nZXRTb3VyY2VMb2NhdG9yKCk7Ci0JCS8vIG5vdyBhZGQgb3VyIG93biBwYXJ0aWNpcGFudCB0byB0aGUgamF2YSBkaXJlY3RvcgotCQlsYXVuY2guc2V0U291cmNlTG9jYXRvcihuZXcgSVNvdXJjZUxvY2F0b3IoKSB7Ci0KLQkJCXB1YmxpYyBPYmplY3QgZ2V0U291cmNlRWxlbWVudChJU3RhY2tGcmFtZSBzdGFja0ZyYW1lKSB7Ci0JCQkJLy8gc2ltcGx5IGxvb2sgYXQgb25lIGFuZCB0aGVuIHRoZSBvdGhlcgotCQkJCU9iamVjdCBzb3VyY2VFbGVtZW50ID0gamF2YVNvdXJjZUxvb2t1cERpcmVjdG9yCi0JCQkJCQkuZ2V0U291cmNlRWxlbWVudChzdGFja0ZyYW1lKTsKLQkJCQlpZiAoc291cmNlRWxlbWVudCA9PSBudWxsKQotCQkJCQlzb3VyY2VFbGVtZW50ID0gY29uZmlndXJlZExvY2F0b3IKLQkJCQkJCQkuZ2V0U291cmNlRWxlbWVudChzdGFja0ZyYW1lKTsKLQkJCQlyZXR1cm4gc291cmNlRWxlbWVudDsKLQkJCX0KLQkJfSk7Ci0KLQkJLy8gSUphdmFEZWJ1Z1RhcmdldCBqYXZhVGFyZ2V0ID0KLQkJLy8gKElKYXZhRGVidWdUYXJnZXQpbGF1bmNoLmdldERlYnVnVGFyZ2V0KCk7Ci0JCS8vIGxhdW5jaC5yZW1vdmVEZWJ1Z1RhcmdldChqYXZhVGFyZ2V0KTsKLQotCQlJRGVidWdUYXJnZXQgamF2YVRhcmdldCA9IGxhdW5jaC5nZXREZWJ1Z1RhcmdldCgpOwotCQlJRGVidWdUYXJnZXQgeHNsVGFyZ2V0ID0gbmV3IEpBWFBEZWJ1Z1RhcmdldChsYXVuY2gsIGxhdW5jaAotCQkJCS5nZXRQcm9jZXNzZXMoKVswXSwgbGF1bmNoSGVscGVyKTsKLQotCQkvLyByZW1vdmUgamF2YSBhcyB0aGUgcHJpbWFyeSB0YXJnZXQgYW5kIG1ha2UgeHNsIHRoZSBwcmltYXJ5IHRhcmdldAotCQlsYXVuY2gucmVtb3ZlRGVidWdUYXJnZXQoamF2YVRhcmdldCk7Ci0JCWxhdW5jaC5hZGREZWJ1Z1RhcmdldCh4c2xUYXJnZXQpOwotCQkvLyBhZGQgdGhpcyBoZXJlIHRvIG1ha2UgamF2YSB0aGUgbm9uLXByaW1hcnkgdGFyZ2V0Ci0JCS8vIGxhdW5jaC5hZGREZWJ1Z1RhcmdldChqYXZhVGFyZ2V0KTsKLQotCQkvLyBsYXVuY2guYWRkRGVidWdUYXJnZXQobmV3IEphdmFYU0xEZWJ1Z1RhcmdldChsYXVuY2gsCi0JCS8vIGxhdW5jaC5nZXRQcm9jZXNzZXMoKVswXSwgbGF1bmNoSGVscGVyLCBqYXZhVGFyZ2V0KSk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIEphdmEgYnJlYWtwb2ludCBhbmQgdGhlIFhTTCBicmVha3BvaW50cwotCSAqLwotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJQnJlYWtwb2ludFtdIGdldEJyZWFrcG9pbnRzKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLQkJSUJyZWFrcG9pbnRNYW5hZ2VyIGJyZWFrcG9pbnRNYW5hZ2VyID0gRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCk7Ci0JCWlmICghYnJlYWtwb2ludE1hbmFnZXIuaXNFbmFibGVkKCkpCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlJQnJlYWtwb2ludFtdIGphdmFCcmVha3BvaW50cyA9IHN1cGVyLmdldEJyZWFrcG9pbnRzKGNvbmZpZ3VyYXRpb24pOwotCQlJQnJlYWtwb2ludFtdIHhzbEJyZWFrcG9pbnRzID0gYnJlYWtwb2ludE1hbmFnZXIKLQkJCQkuZ2V0QnJlYWtwb2ludHMoSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUwpOwotCQlJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzID0gbmV3IElCcmVha3BvaW50W2phdmFCcmVha3BvaW50cy5sZW5ndGgKLQkJCQkrIHhzbEJyZWFrcG9pbnRzLmxlbmd0aF07Ci0JCVN5c3RlbS5hcnJheWNvcHkoamF2YUJyZWFrcG9pbnRzLCAwLCBicmVha3BvaW50cywgMCwKLQkJCQlqYXZhQnJlYWtwb2ludHMubGVuZ3RoKTsKLQkJU3lzdGVtLmFycmF5Y29weSh4c2xCcmVha3BvaW50cywgMCwgYnJlYWtwb2ludHMsCi0JCQkJamF2YUJyZWFrcG9pbnRzLmxlbmd0aCwgeHNsQnJlYWtwb2ludHMubGVuZ3RoKTsKLQotCQlyZXR1cm4gYnJlYWtwb2ludHM7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcHJlTGF1bmNoQ2hlY2soSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwKLQkJCVN0cmluZyBtb2RlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJdGhpcy5sYXVuY2hIZWxwZXIgPSBuZXcgTGF1bmNoSGVscGVyKGNvbmZpZ3VyYXRpb24pOwotCQlpZiAobW9kZS5lcXVhbHMoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERSkpIHsKLQkJCS8vIFRPRE8gZG9uJ3QgbGlrZSBoYXZpbmcgVUkgY29kZSBpbiB0aGUgbGF1bmNoaW5nIHBsdWdpbi4uLndoZXJlCi0JCQkvLyBlbHNlIGNhbiBpdCBnbz8KLQkJCWZpbmFsIElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKAotCQkJCQljb25maWd1cmF0aW9uLCBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSk7Ci0JCQlpZiAoaW5zdGFsbC5nZXREZWJ1Z2dlcigpID09IG51bGwpIHsKLQkJCQlmaW5hbCBib29sZWFuW10gcmVzdWx0ID0gbmV3IGJvb2xlYW5bXSB7IGZhbHNlIH07Ci0JCQkJLy8gb3BlbiBhIGRpYWxvZyBmb3IgY2hvb3NpbmcgYSBkaWZmZXJlbnQgaW5zdGFsbCB0aGF0IGRvZXMgaGF2ZQotCQkJCS8vIGFuIGFzc29jaWF0ZWQgZGVidWdnZXIKLQkJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5zeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCVN0cmluZyBkZWJ1Z2dpbmdJbnN0YWxsSWQgPSBKQVhQTGF1bmNoaW5nUGx1Z2luCi0JCQkJCQkJCS5nZXREZWZhdWx0KCkKLQkJCQkJCQkJLmdldFBsdWdpblByZWZlcmVuY2VzKCkKLQkJCQkJCQkJLmdldFN0cmluZygKLQkJCQkJCQkJCQlKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0RFRkFVTFRfREVCVUdHSU5HX0lOU1RBTExfSUQpOwotCQkJCQkJSVByb2Nlc3Nvckluc3RhbGwgcHJvY2Vzc29yID0gSkFYUFJ1bnRpbWUKLQkJCQkJCQkJLmdldFByb2Nlc3NvcihkZWJ1Z2dpbmdJbnN0YWxsSWQpOwotCi0JCQkJCQlJV29ya2JlbmNoV2luZG93IGR3ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKQotCQkJCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0KLQkJCQkJCVN0cmluZyB0aXRsZSA9IE1lc3NhZ2VzLlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMDsKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTWVzc2FnZXMuWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8xCi0JCQkJCQkJCSsgaW5zdGFsbC5nZXROYW1lKCkKLQkJCQkJCQkJKyBNZXNzYWdlcy5YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzIKLQkJCQkJCQkJKyBNZXNzYWdlcy5YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzMKLQkJCQkJCQkJKyBwcm9jZXNzb3IuZ2V0TmFtZSgpCi0JCQkJCQkJCSsgTWVzc2FnZXMuWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV80OwotCi0JCQkJCQlNZXNzYWdlRGlhbG9nIGRpYWxvZyA9IG5ldyBNZXNzYWdlRGlhbG9nKGR3LmdldFNoZWxsKCksCi0JCQkJCQkJCXRpdGxlLCBudWxsLCBtZXNzYWdlLCBNZXNzYWdlRGlhbG9nLlFVRVNUSU9OLAotCQkJCQkJCQluZXcgU3RyaW5nW10geyBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLAotCQkJCQkJCQkJCUlEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMIH0sIDApOyAvLyB5ZXMKLQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gaXMKLQkJCQkJCQkJCQkJCQkJCQkJCQkJLy8gdGhlCi0JCQkJCQkJCQkJCQkJCQkJCQkJCS8vIGRlZmF1bHQKLQotCQkJCQkJcmVzdWx0WzBdID0gZGlhbG9nLm9wZW4oKSA9PSAwOwotCQkJCQl9Ci0JCQkJfSk7Ci0JCQkJcmV0dXJuIHJlc3VsdFswXTsKLQkJCX0gZWxzZSB7Ci0JCQkJU3RyaW5nIGRlYnVnZ2VyVEYgPSBpbnN0YWxsLmdldERlYnVnZ2VyKCkKLQkJCQkJCS5nZXRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCQlTdHJpbmcgaW5zdGFsbFRGID0gbGF1bmNoSGVscGVyLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpID09IG51bGwgPyBudWxsCi0JCQkJCQk6IGxhdW5jaEhlbHBlci5nZXRUcmFuc2Zvcm1lckZhY3RvcnkoKQotCQkJCQkJCQkuZ2V0RmFjdG9yeUNsYXNzKCk7Ci0JCQkJaWYgKCFkZWJ1Z2dlclRGLmVxdWFscyhpbnN0YWxsVEYpKSB7Ci0JCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLnN5bmNFeGVjKAotCQkJCQkJCW5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCQkJSVdvcmtiZW5jaFdpbmRvdyBkdyA9IFBsYXRmb3JtVUkKLQkJCQkJCQkJCQkJLmdldFdvcmtiZW5jaCgpCi0JCQkJCQkJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQotCQkJCQkJCQkJU3RyaW5nIHRpdGxlID0gTWVzc2FnZXMuSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMDsKLQkJCQkJCQkJCVN0cmluZyBtZXNzYWdlID0gaW5zdGFsbC5nZXROYW1lKCkKLQkJCQkJCQkJCQkJKyBNZXNzYWdlcy5KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8xCi0JCQkJCQkJCQkJCSsgbGF1bmNoSGVscGVyCi0JCQkJCQkJCQkJCQkJLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpCi0JCQkJCQkJCQkJCQkJLmdldE5hbWUoKQotCQkJCQkJCQkJCQkrIE1lc3NhZ2VzLkpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzIKLQkJCQkJCQkJCQkJKyBNZXNzYWdlcy5KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8zCi0JCQkJCQkJCQkJCSsgbGF1bmNoSGVscGVyCi0JCQkJCQkJCQkJCQkJLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpCi0JCQkJCQkJCQkJCQkJLmdldE5hbWUoKQotCQkJCQkJCQkJCQkrIE1lc3NhZ2VzLkpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzQ7Ci0KLQkJCQkJCQkJCU1lc3NhZ2VEaWFsb2cgZGlhbG9nID0gbmV3IE1lc3NhZ2VEaWFsb2coCi0JCQkJCQkJCQkJCWR3LmdldFNoZWxsKCksCi0JCQkJCQkJCQkJCXRpdGxlLAotCQkJCQkJCQkJCQludWxsLAotCQkJCQkJCQkJCQltZXNzYWdlLAotCQkJCQkJCQkJCQlNZXNzYWdlRGlhbG9nLldBUk5JTkcsCi0JCQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7Ci0JCQkJCQkJCQkJCQkJSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCwKLQkJCQkJCQkJCQkJCQlJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCB9LAotCQkJCQkJCQkJCQkwKTsgLy8geWVzIGlzIHRoZSBkZWZhdWx0Ci0JCQkJCQkJCQlkaWFsb2cub3BlbigpOwotCQkJCQkJCQl9Ci0JCQkJCQkJfSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBzdXBlci5wcmVMYXVuY2hDaGVjayhjb25maWd1cmF0aW9uLCBtb2RlLCBtb25pdG9yKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSVZNUnVubmVyIGdldFZNUnVubmVyKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIFN0cmluZyBtb2RlKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyBjb21tZW50IHRoaXMgb3V0IGluIG9yZGVyIHRvIGdldCBqYXZhIGRlYnVnZ2luZyBhcyB3ZWxsIGFzIFhTTAotCQkvLyBkZWJ1Z2dpbmcKLQkJLy8gaWYgKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUuZXF1YWxzKG1vZGUpKQotCQkvLyByZXR1cm4gc3VwZXIuZ2V0Vk1SdW5uZXIoY29uZmlndXJhdGlvbiwgSUxhdW5jaE1hbmFnZXIuUlVOX01PREUpOwotCQlyZXR1cm4gc3VwZXIuZ2V0Vk1SdW5uZXIoY29uZmlndXJhdGlvbiwgbW9kZSk7Ci0JfQotCi0JcHJpdmF0ZSBGaWxlIGdldExhdW5jaENvbmZpZ0ZpbGUoKSB7Ci0JCUlQYXRoIGxhdW5jaFBhdGggPSBQbGF0Zm9ybS5nZXRTdGF0ZUxvY2F0aW9uKAotCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpKS5hcHBlbmQoImxhdW5jaCIpOyAvLyROT04tTkxTLTEkCi0JCUZpbGUgbGF1bmNoRGlyID0gbGF1bmNoUGF0aC50b0ZpbGUoKTsKLQkJaWYgKCFsYXVuY2hEaXIuZXhpc3RzKCkpIHsKLQkJCSBsYXVuY2hEaXIubWtkaXIoKTsKLQkJfQotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShsYXVuY2hEaXIsICJsYXVuY2gueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIElQYXRoIGdldFdvcmtpbmdEaXJlY3RvcnlQYXRoKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCXJldHVybiBsYXVuY2hIZWxwZXIuZ2V0V29ya2luZ0RpcigpOwotCX0KLQotCXByaXZhdGUgSVByb2Nlc3Nvckludm9rZXIgZ2V0UHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IoCi0JCQlJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBpbnZva2VySWQgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQlKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5JTlZPS0VSX0RFU0NSSVBUT1IsCi0JCQkJTWVzc2FnZXMuSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNSk7Ci0JCXJldHVybiBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JJbnZva2VyKGludm9rZXJJZCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW5zdGFsbCBnZXRQcm9jZXNzb3JJbnN0YWxsKAotCQkJSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgU3RyaW5nIG1vZGUpCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBMYXVuY2hIZWxwZXIKLQkJCQkuZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uKTsKLQkJaWYgKG1vZGUuZXF1YWxzKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUpCi0JCQkJJiYgaW5zdGFsbC5nZXREZWJ1Z2dlcigpID09IG51bGwpIHsKLQkJCVN0cmluZyBkZWJ1Z2dpbmdJbnN0YWxsSWQgPSBKQVhQTGF1bmNoaW5nUGx1Z2luCi0JCQkJCS5nZXREZWZhdWx0KCkKLQkJCQkJLmdldFBsdWdpblByZWZlcmVuY2VzKCkKLQkJCQkJLmdldFN0cmluZygKLQkJCQkJCQlKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0RFRkFVTFRfREVCVUdHSU5HX0lOU1RBTExfSUQpOwotCQkJaW5zdGFsbCA9IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcihkZWJ1Z2dpbmdJbnN0YWxsSWQpOwotCQl9Ci0JCXJldHVybiBpbnN0YWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0TWFpblR5cGVOYW1lKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFLmVxdWFscyhtb2RlKSkKLQkJCXJldHVybiAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLkRlYnVnUnVubmVyIjsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLk1haW4iOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRQcm9ncmFtQXJndW1lbnRzKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIGNsYXNzbmFtZSwgc291cmNldXJsLCBvdXRwdXQgZmlsZQotCQlJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyID0gZ2V0UHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IoY29uZmlndXJhdGlvbik7Ci0JCVN0cmluZyBjbGF6eiA9IGludm9rZXIuZ2V0SW52b2tlckNsYXNzTmFtZSgpOwotCi0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc2IuYXBwZW5kKGNsYXp6KTsKLQkJc2IuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJc2IuYXBwZW5kKCJcIiIgKyBnZXRMYXVuY2hDb25maWdGaWxlKCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXNiLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCi0JCXNiLmFwcGVuZCgiXCIiICsgbGF1bmNoSGVscGVyLmdldFNvdXJjZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlzYi5hcHBlbmQoIiAiKTsgLy8kTk9OLU5MUy0xJAotCQlzYi5hcHBlbmQoIlwiIiArIGxhdW5jaEhlbHBlci5nZXRUYXJnZXQoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJaWYgKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUuZXF1YWxzKG1vZGUpKSB7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uLCBtb2RlKTsKLQkJCWlmIChpbnN0YWxsLmdldERlYnVnZ2VyKCkgIT0gbnVsbCkgewotCQkJCUlEZWJ1Z2dlciBkZWJ1Z2dlciA9IGluc3RhbGwuZ2V0RGVidWdnZXIoKTsKLQkJCQlTdHJpbmcgY2xhc3NOYW1lID0gZGVidWdnZXIuZ2V0Q2xhc3NOYW1lKCk7Ci0JCQkJc2IuYXBwZW5kKCIgLWRlYnVnICIpLmFwcGVuZChjbGFzc05hbWUpLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQlzYi5hcHBlbmQobGF1bmNoSGVscGVyLmdldFJlcXVlc3RQb3J0KCkpOwotCQkJCXNiLmFwcGVuZCgiICIpLmFwcGVuZChsYXVuY2hIZWxwZXIuZ2V0RXZlbnRQb3J0KCkpOyAvLyROT04tTkxTLTEkCi0JCQkJc2IuYXBwZW5kKCIgIikuYXBwZW5kKGxhdW5jaEhlbHBlci5nZXRHZW5lcmF0ZVBvcnQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCi0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmdbXSBnZXRDbGFzc3BhdGgoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IHRoZSBjbGFzc3BhdGggZGVmaW5lZCBieSB0aGUgdXNlcgotCQlTdHJpbmdbXSB1c2VyQ2xhc3NwYXRoID0gc3VwZXIuZ2V0Q2xhc3NwYXRoKGNvbmZpZ3VyYXRpb24pOwotCi0JCS8vIGdldCB0aGUgY2xhc3NwYXRoIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNmb3JtYXRpb24KLQkJSVByb2Nlc3Nvckludm9rZXIgaW52b2tlciA9IGdldFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKGNvbmZpZ3VyYXRpb24pOwotCQlMaXN0PFN0cmluZz4gaW52b2tlckNQID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCWZvciAoU3RyaW5nIGVudHJ5IDogaW52b2tlci5nZXRDbGFzc3BhdGhFbnRyaWVzKCkpIHsKLQkJCWludm9rZXJDUC5hZGQoZW50cnkpOwotCQl9Ci0KLQkJLy8gYWRkIHRoZSBkZWJ1Z2dlci4uLgotCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uLCBtb2RlKTsKLQkJaWYgKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUuZXF1YWxzKG1vZGUpCi0JCQkJJiYgaW5zdGFsbC5nZXREZWJ1Z2dlcigpICE9IG51bGwpIHsKLQkJCVN0cmluZ1tdIGphcnMgPSBpbnN0YWxsLmdldERlYnVnZ2VyKCkuZ2V0Q2xhc3NQYXRoKCk7Ci0JCQlmb3IgKFN0cmluZyBqYXIgOiBqYXJzKSB7Ci0JCQkJaW52b2tlckNQLmFkZChqYXIpOwotCQkJfQotCQl9Ci0KLQkJU3RyaW5nW10gaW52b2tlckNsYXNzcGF0aCA9IGludm9rZXJDUC50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCi0JCS8vIGFkZCB0aGVtIHRvZ2V0aGVyCi0JCVN0cmluZ1tdIGNsYXNzcGF0aCA9IG5ldyBTdHJpbmdbdXNlckNsYXNzcGF0aC5sZW5ndGgKLQkJCQkrIGludm9rZXJDbGFzc3BhdGgubGVuZ3RoXTsKLQkJU3lzdGVtLmFycmF5Y29weShpbnZva2VyQ2xhc3NwYXRoLCAwLCBjbGFzc3BhdGgsIDAsCi0JCQkJaW52b2tlckNsYXNzcGF0aC5sZW5ndGgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KHVzZXJDbGFzc3BhdGgsIDAsIGNsYXNzcGF0aCwgaW52b2tlckNsYXNzcGF0aC5sZW5ndGgsCi0JCQkJdXNlckNsYXNzcGF0aC5sZW5ndGgpOwotCi0JCXJldHVybiBjbGFzc3BhdGg7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRWTUFyZ3VtZW50cyhJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgdm1hcmdzID0gc3VwZXIuZ2V0Vk1Bcmd1bWVudHMoY29uZmlndXJhdGlvbik7Ci0KLQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbiwgbW9kZSk7Ci0JCWlmIChpbnN0YWxsICE9IG51bGwgJiYgIWluc3RhbGwuZ2V0UHJvY2Vzc29yVHlwZSgpLmlzSlJFRGVmYXVsdCgpKSB7Ci0JCQkvLyBjbGVhciB0aGUgZW5kb3JzZWQgZGlyCi0JCQlGaWxlIHRlbXBEaXIgPSBnZXRFbmRvcnNlZERpcigpOwotCQkJaWYgKHRlbXBEaXIuZXhpc3RzKCkpIHsKLQkJCQlGaWxlW10gY2hpbGRyZW4gPSB0ZW1wRGlyLmxpc3RGaWxlcygpOwotCQkJCWZvciAoRmlsZSBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0JCQkJCWNoaWxkLmRlbGV0ZSgpOwotCQkJCX0KLQkJCQl0ZW1wRGlyLmRlbGV0ZSgpOwotCQkJfQotCQkJdGVtcERpci5ta2RpcigpOwotCi0JCQkvLyBtb3ZlIHRoZSByZXF1aXJlZCBqYXJzIHRvIHRoZSBlbmRvcnNlZCBkaXIKLQkJCUlQcm9jZXNzb3JKYXJbXSBqYXJzID0gaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGphcnMubGVuZ3RoOyBpKyspIHsKLQkJCQlVUkwgZW50cnkgPSBqYXJzW2ldLmFzVVJMKCk7Ci0JCQkJaWYgKGVudHJ5ID09IG51bGwpCi0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwKLQkJCQkJCQlNZXNzYWdlcy5YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzIzCi0JCQkJCQkJCQkrIGphcnNbaV0sIG51bGwpKTsKLQkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh0ZW1wRGlyLCAiRU5EXyIgKyBpICsgIi5qYXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJbW92ZUZpbGUoZW50cnksIGZpbGUpOwotCQkJfQotCQkJLy8gYWRkIHRoZSBlbmRvcnNlZCBkaXIKLQkJCXZtYXJncyArPSAiIC1EamF2YS5lbmRvcnNlZC5kaXJzPVwiIiArIHRlbXBEaXIuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiXCIiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotCQkJU3RyaW5nIHRmYWN0b3J5ID0gZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KGluc3RhbGwpOwotCQkJaWYgKHRmYWN0b3J5ICE9IG51bGwpCi0JCQkJdm1hcmdzICs9ICIgLURqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeT0iICsgdGZhY3Rvcnk7IC8vJE5PTi1OTFMtMSQKLQotCQkJLy8gaWYgKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUuZXF1YWxzKG1vZGUpKQotCQkJLy8gewotCQkJLy8gLy8gaW4gZGVidWcgbW9kZSwgc2V0IHRoZSBsb2dnaW5nIHRvIEVSUk9SLiBUaGlzIHByZXZlbnRzIHRoZQotCQkJLy8gY29uc29sZSBmcm9tIHBvcHBpbmcgdXAgb24gdG9wIG9mIHRoZSByZXN1bHQgdmlldyEKLQkJCS8vIHRyeQotCQkJLy8gewotCQkJLy8gVVJMIHVybCA9Ci0JCQkvLyBGaWxlTG9jYXRvci5yZXNvbHZlKEZpbGVMb2NhdG9yLmZpbmQoUGxhdGZvcm0uZ2V0QnVuZGxlKEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEKSwKLQkJCS8vIG5ldyBQYXRoKCIvbG9nNGouZGVidWcucHJvcGVydGllcyIpLCBudWxsKSk7Ci0JCQkvLwkJCQkJdm1hcmdzICs9ICIgLURsb2c0ai5jb25maWd1cmF0aW9uPVwiIit1cmwudG9FeHRlcm5hbEZvcm0oKSsiXCIiOyAvLyROT04tTkxTLTEkCi0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCS8vIHsKLQkJCS8vIEpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJLy8gfQotCQkJLy8gfQotCQl9Ci0JCXJldHVybiB2bWFyZ3M7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpIHsKLQkJU3RyaW5nIHRmYWN0b3J5ID0gbnVsbDsKLQkJaWYgKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUuZXF1YWxzKG1vZGUpKQotCQkJdGZhY3RvcnkgPSBpbnN0YWxsLmdldERlYnVnZ2VyKCkuZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci0JCWVsc2UgewotCQkJSVRyYW5zZm9ybWVyRmFjdG9yeSB0ID0gbGF1bmNoSGVscGVyLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQkJaWYgKHQgIT0gbnVsbCkKLQkJCQl0ZmFjdG9yeSA9IHQuZ2V0RmFjdG9yeUNsYXNzKCk7Ci0JCX0KLQkJcmV0dXJuIHRmYWN0b3J5OwotCX0KLQotCXByaXZhdGUgRmlsZSBnZXRFbmRvcnNlZERpcigpIHsKLQkJSVBhdGggdGVtcExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0U3RhdGVMb2NhdGlvbigKLQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKSkKLQkJCQkuYXBwZW5kKCJlbmRvcnNlZCIpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiB0ZW1wTG9jYXRpb24udG9GaWxlKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBtb3ZlRmlsZShVUkwgc3JjLCBGaWxlIHRhcmdldCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlCdWZmZXJlZE91dHB1dFN0cmVhbSBib3MgPSBudWxsOwotCQlCdWZmZXJlZElucHV0U3RyZWFtIGJpcyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlib3MgPSBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0obmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0KSk7Ci0JCQliaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShzcmMub3BlblN0cmVhbSgpKTsKLQkJCXdoaWxlIChiaXMuYXZhaWxhYmxlKCkgPiAwKSB7Ci0JCQkJaW50IHNpemUgPSBiaXMuYXZhaWxhYmxlKCk7Ci0JCQkJaWYgKHNpemUgPiAxMDI0KQotCQkJCQlzaXplID0gMTAyNDsKLQkJCQlieXRlW10gYiA9IG5ldyBieXRlW3NpemVdOwotCQkJCWJpcy5yZWFkKGIsIDAsIGIubGVuZ3RoKTsKLQkJCQlib3Mud3JpdGUoYik7Ci0JCQl9Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsCi0JCQkJCU1lc3NhZ2VzLlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNyArIHNyYwotCQkJCQkJCSsgTWVzc2FnZXMuWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8zMQotCQkJCQkJCSsgdGFyZ2V0LCBlKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAoYmlzICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQliaXMuY2xvc2UoKTsKLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChib3MgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWJvcy5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBMYXVuY2hpbmdQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9KQVhQTGF1bmNoaW5nUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4OTZiYzYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBMYXVuY2hpbmdQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEpBWFBMYXVuY2hpbmdQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBKQVhQTGF1bmNoaW5nUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgSkFYUExhdW5jaGluZ1BsdWdpbigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpBWFBMYXVuY2hpbmdQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKEV4Y2VwdGlvbiBlKQotCXsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFBMVUdJTl9JRCwgMCwgIiIsIGUpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coQ29yZUV4Y2VwdGlvbiBlKQotCXsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhlLmdldFN0YXR1cygpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvTGF1bmNoSGVscGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvTGF1bmNoSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYzlkZWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0xhdW5jaEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5QaXBlbGluZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuVHJhbnNmb3JtRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5UeXBlZFZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkxhdW5jaEF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5MYXVuY2hQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5CYXNlTGF1bmNoSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hIZWxwZXIgZXh0ZW5kcyBCYXNlTGF1bmNoSGVscGVyIHsKLQlwcml2YXRlIGZpbmFsIExhdW5jaEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLQlwcml2YXRlIGZpbmFsIExhdW5jaFByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllczsKLQlwcml2YXRlIGZpbmFsIElUcmFuc2Zvcm1lckZhY3RvcnkgdHJhbnNmb3JtZXJGYWN0b3J5OwotCi0JcHVibGljIExhdW5jaEhlbHBlcihJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlzdXBlcihjb25maWd1cmF0aW9uKTsKLQkJYXR0cmlidXRlcyA9IGh5ZHJhdGVBdHRyaWJ1dGVzKGNvbmZpZ3VyYXRpb24pOwotCQlvdXRwdXRQcm9wZXJ0aWVzID0gaHlkcmF0ZU91dHB1dFByb3BlcnRpZXMoY29uZmlndXJhdGlvbik7Ci0JCXRyYW5zZm9ybWVyRmFjdG9yeSA9IGh5ZHJhdGVUcmFuc2Zvcm1lckZhY3RvcnkoY29uZmlndXJhdGlvbik7Ci0JfQotCi0JcHVibGljIExhdW5jaFByb3BlcnRpZXMgZ2V0UHJvcGVydGllcygpIHsKLQkJcmV0dXJuIG91dHB1dFByb3BlcnRpZXM7Ci0JfQotCi0JcHVibGljIExhdW5jaEF0dHJpYnV0ZXMgZ2V0QXR0cmlidXRlcygpIHsKLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2F2ZShGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJQnVmZmVyZWRXcml0ZXIgd3JpdGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCS8vIGVuc3VyZSBpdCBleGlzdHMKLQkJCWZpbGUuY3JlYXRlTmV3RmlsZSgpOwotCQkJd3JpdGVyID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKGZpbGUpKTsKLQkJCVBpcGVsaW5lRGVmaW5pdGlvbiBwZGVmID0gbmV3IFBpcGVsaW5lRGVmaW5pdGlvbigpOwotCQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyID0gYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVzKCkuaXRlcmF0b3IoKTsgaXRlcgotCQkJCQkuaGFzTmV4dCgpOykgewotCQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHQgPSAoTGF1bmNoQXR0cmlidXRlKSBpdGVyLm5leHQoKTsKLQkJCQlwZGVmLmFkZEF0dHJpYnV0ZShuZXcgVHlwZWRWYWx1ZShhdHQudXJpLAotCQkJCQkJVHlwZWRWYWx1ZS5UWVBFX1NUUklORywgYXR0LnZhbHVlKSk7Ci0JCQl9Ci0JCQlmb3IgKEl0ZXJhdG9yPD8+IGl0ZXIgPSBwaXBlbGluZS5nZXRUcmFuc2Zvcm1EZWZzKCkuaXRlcmF0b3IoKTsgaXRlcgotCQkJCQkuaGFzTmV4dCgpOykgewotCQkJCUxhdW5jaFRyYW5zZm9ybSBsdCA9IChMYXVuY2hUcmFuc2Zvcm0pIGl0ZXIubmV4dCgpOwotCQkJCVRyYW5zZm9ybURlZmluaXRpb24gdGRlZiA9IG5ldyBUcmFuc2Zvcm1EZWZpbml0aW9uKCk7Ci0JCQkJVVJMIHVybCA9IHBhdGhUb1VSTChsdC5nZXRMb2NhdGlvbigpKTsKLQkJCQl0ZGVmLnNldFN0eWxlc2hlZXRVUkwodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotCQkJCXRkZWYuc2V0UmVzb2x2ZXJDbGFzcyhsdC5nZXRSZXNvbHZlcigpKTsKLQkJCQlmb3IgKEl0ZXJhdG9yPD8+IGl0ZXJhdG9yID0gbHQuZ2V0UGFyYW1ldGVycygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yCi0JCQkJCQkuaGFzTmV4dCgpOykgewotCQkJCQlMYXVuY2hBdHRyaWJ1dGUgYXR0ID0gKExhdW5jaEF0dHJpYnV0ZSkgaXRlcmF0b3IubmV4dCgpOwotCQkJCQl0ZGVmLmFkZFBhcmFtZXRlcihuZXcgVHlwZWRWYWx1ZShhdHQudXJpLAotCQkJCQkJCVR5cGVkVmFsdWUuVFlQRV9TVFJJTkcsIGF0dC5nZXRSZXNvbHZlZFZhbHVlKCkpKTsKLQkJCQl9Ci0JCQkJLy8gc2V0IHRoZSBvdXRwdXQgcHJvcHMgZm9yIHRoZSBMQVNUIHRyYW5zZm9ybSBvbmx5Ci0JCQkJaWYgKCFpdGVyLmhhc05leHQoKSkgewotCQkJCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBvdXRwdXRQcm9wZXJ0aWVzCi0JCQkJCQkJLmdldFByb3BlcnRpZXMoKS5lbnRyeVNldCgpKSB7Ci0JCQkJCQlTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwotCQkJCQkJU3RyaW5nIHZhbHVlID0gZW50cnkuZ2V0VmFsdWUoKTsKLQkJCQkJCWlmIChuYW1lICE9IG51bGwgJiYgdmFsdWUgIT0gbnVsbCkKLQkJCQkJCQl0ZGVmLnNldE91dHB1dFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlwZGVmLmFkZFRyYW5zZm9ybURlZih0ZGVmKTsKLQkJCX0KLQotCQkJRG9jdW1lbnQgZG9jID0gcGRlZi50b1hNTCgpOwotCQkJU3RyaW5nIHMgPSBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCQkJd3JpdGVyLndyaXRlKHMpOwotCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwKLQkJCQkJTWVzc2FnZXMuTGF1bmNoSGVscGVyXzAsIGUpKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwKLQkJCQkJTWVzc2FnZXMuTGF1bmNoSGVscGVyXzEsIGUpKTsKLQkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLAotCQkJCQkiUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiIsIGUpKTsgLy8kTk9OLU5MUy0xJAotCQl9IGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLAotCQkJCQkiVHJhbnNmb3JtZXJFeGNlcHRpb24iLCBlKSk7IC8vJE5PTi1OTFMtMSQKLQkJfSBmaW5hbGx5IHsKLQkJCWlmICh3cml0ZXIgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCXdyaXRlci5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMYXVuY2hQcm9wZXJ0aWVzIGh5ZHJhdGVPdXRwdXRQcm9wZXJ0aWVzKAotCQkJSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlMYXVuY2hQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgTGF1bmNoUHJvcGVydGllcygpOwotCQlib29sZWFuIHVzZVByZWZlcmVuY2VQcm9wZXJ0aWVzID0gZmFsc2U7IC8vIGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX1BST1BFUlRJRVNfRlJPTV9QUkVGRVJFTkNFUywKLQkJCQkJCQkJCQkJCQkvLyB0cnVlKTsKLQkJSVByb2Nlc3NvclR5cGUgcHQgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24pCi0JCQkJLmdldFByb2Nlc3NvclR5cGUoKTsKLQkJaWYgKHVzZVByZWZlcmVuY2VQcm9wZXJ0aWVzKSB7Ci0JCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBwdC5nZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcygpCi0JCQkJCS5lbnRyeVNldCgpKSB7Ci0JCQkJU3RyaW5nIG5hbWUgPSBlbnRyeS5nZXRLZXkoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpOwotCQkJCXByb3BlcnRpZXMuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJU3RyaW5nIHMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfUFJPUEVSVElFUywKLQkJCQkJKFN0cmluZykgbnVsbCk7Ci0JCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocwotCQkJCQkJLmdldEJ5dGVzKCkpOwotCQkJCXByb3BlcnRpZXMgPSBMYXVuY2hQcm9wZXJ0aWVzLmZyb21YTUwoaW5wdXRTdHJlYW0pOwotCQkJfQotCQl9Ci0JCXJldHVybiBwcm9wZXJ0aWVzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIExhdW5jaEF0dHJpYnV0ZXMgaHlkcmF0ZUF0dHJpYnV0ZXMoCi0JCQlJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUxhdW5jaEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IG5ldyBMYXVuY2hBdHRyaWJ1dGVzKCk7Ci0JCWJvb2xlYW4gdXNlRGVmYXVsdEF0dHJpYnV0ZXMgPSBmYWxzZTsgLy8gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfRkVBVFVSRVNfRlJPTV9QUkVGRVJFTkNFUywKLQkJCQkJCQkJCQkJCS8vIHRydWUpOwotCQlpZiAodXNlRGVmYXVsdEF0dHJpYnV0ZXMpIHsKLQkJCUlQcm9jZXNzb3JUeXBlIHB0ID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uKQotCQkJCQkuZ2V0UHJvY2Vzc29yVHlwZSgpOwotCQkJTWFwPFN0cmluZywgU3RyaW5nPiBmdmFscyA9IHB0LmdldEF0dHJpYnV0ZVZhbHVlcygpOwotCQkJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5IDogZnZhbHMuZW50cnlTZXQoKSkgewotCQkJCVN0cmluZyB1cmkgPSBlbnRyeS5nZXRLZXkoKTsKLQkJCQlnZXRBdHRyaWJ1dGUocHQuZ2V0QXR0cmlidXRlcygpLCB1cmkpOwotCQkJCWF0dHJpYnV0ZXMuYWRkQXR0cmlidXRlKG5ldyBMYXVuY2hBdHRyaWJ1dGUodXJpLAotCQkJCQkJInN0cmluZyIsIGVudHJ5LmdldFZhbHVlKCkpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9IGVsc2UgewotCQkJU3RyaW5nIHMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9BVFRSSUJVVEVTLAotCQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShzCi0JCQkJCQkuZ2V0Qnl0ZXMoKSk7Ci0JCQkJYXR0cmlidXRlcyA9IExhdW5jaEF0dHJpYnV0ZXMuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSUF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUoSUF0dHJpYnV0ZVtdIGF0dHJpYnV0ZXMsIFN0cmluZyB1cmkpIHsKLQkJZm9yIChJQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpIHsKLQkJCWlmIChhdHRyaWJ1dGUuZ2V0VVJJKCkuZXF1YWxzKHVyaSkpCi0JCQkJcmV0dXJuIGF0dHJpYnV0ZTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldFByb2Nlc3Nvckluc3RhbGwoCi0JCQlJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gdXNlRGVmYXVsdFByb2Nlc3NvciA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCUpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SLAotCQkJCXRydWUpOwotCQlpZiAodXNlRGVmYXVsdFByb2Nlc3NvcikKLQkJCXJldHVybiBKQVhQUnVudGltZS5nZXREZWZhdWx0UHJvY2Vzc29yKCk7Ci0JCVN0cmluZyBwcm9jZXNzb3JJZCA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCUpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfUFJPQ0VTU09SLCAiIik7IC8vJE5PTi1OTFMtMSQKLQkJSVByb2Nlc3Nvckluc3RhbGwgcHJvY2Vzc29yID0gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yKHByb2Nlc3NvcklkKTsKLQkJcmV0dXJuIHByb2Nlc3NvcjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJVHJhbnNmb3JtZXJGYWN0b3J5IGh5ZHJhdGVUcmFuc2Zvcm1lckZhY3RvcnkoCi0JCQlJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlQcm9jZXNzb3JUeXBlIHR5cGUgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24pCi0JCQkJLmdldFByb2Nlc3NvclR5cGUoKTsKLQkJYm9vbGVhbiB1c2VEZWZhdWx0RmFjdG9yeSA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCUpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SLAotCQkJCXRydWUpOwotCQlpZiAodXNlRGVmYXVsdEZhY3RvcnkpCi0JCQlyZXR1cm4gdHlwZS5nZXREZWZhdWx0VHJhbnNmb3JtZXJGYWN0b3J5KCk7Ci0KLQkJU3RyaW5nIGZhY3RvcnlJZCA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCUpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVFJBTlNGT1JNRVJfRkFDVE9SWSwKLQkJCQkoU3RyaW5nKSBudWxsKTsKLQkJaWYgKGZhY3RvcnlJZCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJZm9yIChJVHJhbnNmb3JtZXJGYWN0b3J5IGZhY3RvcnkgOiB0eXBlLmdldFRyYW5zZm9ybWVyRmFjdG9yaWVzKCkpIHsKLQkJCWlmIChmYWN0b3J5LmdldEZhY3RvcnlDbGFzcygpLmVxdWFscyhmYWN0b3J5SWQpKQotCQkJCXJldHVybiBmYWN0b3J5OwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJVHJhbnNmb3JtZXJGYWN0b3J5IGdldFRyYW5zZm9ybWVyRmFjdG9yeSgpIHsKLQkJcmV0dXJuIHRyYW5zZm9ybWVyRmFjdG9yeTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzA0MDUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRSdW50aW1lXzEwOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRSdW50aW1lXzU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVFJ1bnRpbWVfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUUnVudGltZV83OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRSdW50aW1lXzg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVFJ1bnRpbWVfOTsKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBdHRyaWJ1dGVfMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBdHRyaWJ1dGVfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBdHRyaWJ1dGVfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBdHRyaWJ1dGVfNTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQbHVnaW5Qcm9jZXNzb3JKYXJfMDsgCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yVHlwZV8yOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JUeXBlXzM7IAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvclR5cGVfNDsgCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yVHlwZV81OyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBVdGlsc18wOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBVdGlsc18xOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8xOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8yMzsgCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8zOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzMxOyAKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV81OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzc7IAotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFic3RyYWN0UmVnaXN0cnlSZWFkZXJfMzsgCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl81OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFic3RyYWN0UmVnaXN0cnlSZWFkZXJfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl84OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFic3RyYWN0UmVnaXN0cnlSZWFkZXJfOTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzA7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8xOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMjsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzM7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBKQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV80OwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNTsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBMYXVuY2hIZWxwZXJfMDsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBMYXVuY2hIZWxwZXJfMTsKLQkKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xEZWJ1Z1RhcmdldF8wOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTERlYnVnVGFyZ2V0XzE7Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgWFNMRGVidWdUYXJnZXRfMTk7IAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTERlYnVnVGFyZ2V0XzI7IAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTERlYnVnVGFyZ2V0XzIwOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTERlYnVnVGFyZ2V0XzM7IAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFhTTERlYnVnVGFyZ2V0XzQ7Ci0gICAgCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQl9Ci0KLQlzdGF0aWMgewotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvT3V0cHV0UHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9PdXRwdXRQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDBjOTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9PdXRwdXRQcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSU91dHB1dFByb3BlcnR5OwotCi1wdWJsaWMgY2xhc3MgT3V0cHV0UHJvcGVydHkgaW1wbGVtZW50cyBJT3V0cHV0UHJvcGVydHkKLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGRlc2M7Ci0KLQlwdWJsaWMgT3V0cHV0UHJvcGVydHkoU3RyaW5nIGtleSwgU3RyaW5nIGRlc2MpCi0JewotCQl0aGlzLm5hbWUgPSBrZXk7Ci0JCXRoaXMuZGVzYyA9IGRlc2M7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpCi0JewotCQlyZXR1cm4gZGVzYzsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0JewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9PdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDczMTMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9PdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLlByZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzCi17Ci0JcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLFN0cmluZz4+IHR5cGVQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLFN0cmluZz4+KCk7Ci0KLQlwdWJsaWMgTWFwPFN0cmluZyxTdHJpbmc+IGdldE91dHB1dFByb3BlcnR5VmFsdWVzKFN0cmluZyB0eXBlSWQpCi0JewotCQlyZXR1cm4gdHlwZVByb3BlcnRpZXMuZ2V0KHR5cGVJZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoU3RyaW5nIHR5cGVJZCwgTWFwPFN0cmluZyxTdHJpbmc+IHByb3BlcnRpZXMpCi0JewotCQl0eXBlUHJvcGVydGllcy5wdXQodHlwZUlkLCBwcm9wZXJ0aWVzKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEFzWE1MKCkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCBjb25maWcgPSBkb2MuY3JlYXRlRWxlbWVudCgib3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyIpOyAvLyROT04tTkxTLTEkCi0JCWRvYy5hcHBlbmRDaGlsZChjb25maWcpOwotCi0JCWZvciAoU3RyaW5nIHR5cGUgOiB0eXBlUHJvcGVydGllcy5rZXlTZXQoKSkKLQkJewotCQkJRWxlbWVudCBwcm9jZXNzb3JUeXBlRWxlbWVudCA9IHR5cGVBc0VsZW1lbnQoZG9jLCB0eXBlKTsKLQkJCU1hcDxTdHJpbmcsU3RyaW5nPiBwcm9wZXJ0eVZhbHVlcyA9IHR5cGVQcm9wZXJ0aWVzLmdldCh0eXBlKTsKLQkJCWZlYXR1cmVWYWx1ZXNBc0VsZW1lbnQoZG9jLCBwcm9jZXNzb3JUeXBlRWxlbWVudCwgcHJvcGVydHlWYWx1ZXMpOwotCQkJY29uZmlnLmFwcGVuZENoaWxkKHByb2Nlc3NvclR5cGVFbGVtZW50KTsKLQkJfQotCi0JCS8vIFNlcmlhbGl6ZSB0aGUgRG9jdW1lbnQgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIFN0cmluZwotCQlyZXR1cm4gUHJlZmVyZW5jZVV0aWwuc2VyaWFsaXplRG9jdW1lbnQoZG9jKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIE91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMgZnJvbVhNTChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCU91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcygpOwotCi0JCS8vIERvIHRoZSBwYXJzaW5nIGFuZCBvYnRhaW4gdGhlIHRvcC1sZXZlbCBub2RlCi0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KGlucHV0U3RyZWFtKTsKLQkJRWxlbWVudCBjb25maWcgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJRWxlbWVudFtdIHByb2Nlc3NvclR5cGVFbHMgPSBQcmVmZXJlbmNlVXRpbC5nZXRDaGlsZEVsZW1lbnRzKGNvbmZpZywgInByb2Nlc3NvclR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2Nlc3NvclR5cGVFbHMubGVuZ3RoOyArK2kpCi0JCXsKLQkJCUVsZW1lbnQgcHJvY2Vzc29yVHlwZUVsID0gcHJvY2Vzc29yVHlwZUVsc1tpXTsKLQkJCVN0cmluZyB0eXBlID0gZWxlbWVudEFzVHlwZShwcm9jZXNzb3JUeXBlRWwpOwotCQkJTWFwPFN0cmluZyxTdHJpbmc+IGZlYXR1cmVWYWx1ZXMgPSBlbGVtZW50QXNQcm9wZXJ0eVZhbHVlcyhwcm9jZXNzb3JUeXBlRWwpOwotCQkJcHJlZnMuc2V0T3V0cHV0UHJvcGVydHlWYWx1ZXModHlwZSwgZmVhdHVyZVZhbHVlcyk7Ci0JCX0KLQotCQlyZXR1cm4gcHJlZnM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGVsZW1lbnRBc1R5cGUoRWxlbWVudCBwYXJlbnQpCi0JewotCQlTdHJpbmcgaWQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJpZCIpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBpZDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBFbGVtZW50IHR5cGVBc0VsZW1lbnQoRG9jdW1lbnQgZG9jLCBTdHJpbmcgdHlwZSkKLQl7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJwcm9jZXNzb3JUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIiwgdHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBlbGVtZW50QXNQcm9wZXJ0eVZhbHVlcyhFbGVtZW50IGVsZW1lbnQpCi0JewotCQlFbGVtZW50W10gcHJvcGVydHlFbHMgPSBQcmVmZXJlbmNlVXRpbC5nZXRDaGlsZEVsZW1lbnRzKGVsZW1lbnQsICJwcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCU1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydHlWYWx1ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOwotCQlmb3IgKEVsZW1lbnQgZmVhdHVyZUVsIDogcHJvcGVydHlFbHMpCi0JCXsKLQkJCVN0cmluZyBuYW1lID0gZmVhdHVyZUVsLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdmFsdWUgPSBmZWF0dXJlRWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wZXJ0eVZhbHVlcy5wdXQobmFtZSwgdmFsdWUpOwotCQl9Ci0JCXJldHVybiBwcm9wZXJ0eVZhbHVlczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGZlYXR1cmVWYWx1ZXNBc0VsZW1lbnQoRG9jdW1lbnQgZG9jLCBFbGVtZW50IGZlYXR1cmVzRWwsIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydHlWYWx1ZXMpCi0JewotCQlpZiAocHJvcGVydHlWYWx1ZXMgIT0gbnVsbCkKLQkJewotCQkJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5IDogcHJvcGVydHlWYWx1ZXMuZW50cnlTZXQoKSkKLQkJCXsKLQkJCQlTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCk7Ci0JCQkJRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInByb3BlcnR5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOyAvLyROT04tTkxTLTEkCi0JCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQkJZmVhdHVyZXNFbC5hcHBlbmRDaGlsZChlbGVtZW50KTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9QbHVnaW5Qcm9jZXNzb3JKYXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9QbHVnaW5Qcm9jZXNzb3JKYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZjZTNmZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUGx1Z2luUHJvY2Vzc29ySmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIFBsdWdpblByb2Nlc3NvckphciBpbXBsZW1lbnRzIElQcm9jZXNzb3JKYXIKLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBwbHVnaW5JZDsKLQlwcml2YXRlIGZpbmFsIElQYXRoIHBhdGg7Ci0KLQlwdWJsaWMgUGx1Z2luUHJvY2Vzc29ySmFyKFN0cmluZyBwbHVnaW5JZCwgSVBhdGggcGF0aCkKLQl7Ci0JCXRoaXMucGx1Z2luSWQgPSBwbHVnaW5JZDsKLQkJdGhpcy5wYXRoID0gcGF0aDsKLQl9Ci0KLQlwdWJsaWMgVVJMIGFzVVJMKCkKLQl7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkKLQkJewotCQkJLy8gRklYTUUgdmVyeSBjbHVtc3kgd2F5IHRvIGdldCBsb2NhdGlvbiBvcmJpdCBqYXIgZmlsZQotCQkJLy8gVGhlcmUgaXMgc3VyZWx5IGEgYmV0dGVyIHdheSwgYnV0IEkgY2FuJ2QgZmluZCBpdC4KLQkJCWlmIChwYXRoID09IG51bGwpCi0JCQl7Ci0JCQkJdXJsID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKS5nZXRFbnRyeSgiLyIpOyAvLyROT04tTkxTLTEkCi0JCQkJdXJsID0gRmlsZUxvY2F0b3IucmVzb2x2ZSh1cmwpOwotCQkJCVN0cmluZyBzID0gdXJsLmdldFBhdGgoKTsKLQkJCQlpZiAocy5lbmRzV2l0aCgiIS8iKSkgLy8kTk9OLU5MUy0xJAotCQkJCXsKLQkJCQkJcyA9IHMuc3Vic3RyaW5nKDAscy5sZW5ndGgoKS0yKTsKLQkJCQl9Ci0JCQkJdXJsID0gbmV3IFVSTChzKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKTsKLQkJCQlJUGF0aCBqYXJQYXRoID0gbmV3IFBhdGgoIi8iICsgcGF0aCk7IC8vJE5PTi1OTFMtMSQKLQkJCQl1cmwgPSBGaWxlTG9jYXRvci5maW5kKGJ1bmRsZSwgamFyUGF0aCwgbnVsbCk7Ci0JCQkJaWYgKHVybCAhPSBudWxsKQotCQkJCQl1cmwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHVybCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCXJldHVybiB1cmw7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldFBhdGgoKQotCXsKLQkJcmV0dXJuIHBhdGg7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0JewotCQlyZXR1cm4gIlBsdWdpbiAiICsgcGx1Z2luSWQgKyBNZXNzYWdlcy5QbHVnaW5Qcm9jZXNzb3JKYXJfMCArIHBhdGg7IC8vJE5PTi1OTFMtMSQgCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmYxYmNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi0vKioKLSAqIENsYXNzIHVzZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWVzLgotICovCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKLXsKLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQotCXsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQpOwotCi0JCVByb2Nlc3NvclByZWZlcmVuY2VzIHByZWZzID0gbmV3IFByb2Nlc3NvclByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldERlZmF1bHRQcm9jZXNzb3JJZChKQVhQUnVudGltZS5KUkVfREVGQVVMVF9QUk9DRVNTT1JfSUQpOwotCi0JCU91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMgb3V0cHV0UHJlZnMgPSBuZXcgT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcygpOwotCQlvdXRwdXRQcmVmcy5zZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhKQVhQUnVudGltZS5KUkVfREVGQVVMVF9QUk9DRVNTT1JfVFlQRV9JRCwgSkFYUFJ1bnRpbWUuY3JlYXRlRGVmYXVsdE91dHB1dFByb3BlcnRpZXMoSkFYUFJ1bnRpbWUuSlJFX0RFRkFVTFRfUFJPQ0VTU09SX1RZUEVfSUQpKTsKLQkJb3V0cHV0UHJlZnMuc2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuWEFMQU5fVFlQRV9JRCwgSkFYUFJ1bnRpbWUuY3JlYXRlRGVmYXVsdE91dHB1dFByb3BlcnRpZXMoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuWEFMQU5fVFlQRV9JRCkpOwotCQlvdXRwdXRQcmVmcy5zZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5TQVhPTl9UWVBFX0lELCBKQVhQUnVudGltZS5jcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5TQVhPTl9UWVBFX0lEKSk7Ci0JCW91dHB1dFByZWZzLnNldE91dHB1dFByb3BlcnR5VmFsdWVzKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OXzFfMF9UWVBFX0lELCBKQVhQUnVudGltZS5jcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5TQVhPTl8xXzBfVFlQRV9JRCkpOwotCi0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgeG1sID0gcHJlZnMuZ2V0QXNYTUwoKTsKLQkJCW5vZGUucHV0KEpBWFBSdW50aW1lLlBSRUZfUFJPQ0VTU09SX1hNTCwgeG1sKTsKLQotCQkJeG1sID0gb3V0cHV0UHJlZnMuZ2V0QXNYTUwoKTsKLQkJCW5vZGUucHV0KEpBWFBSdW50aW1lLlBSRUZfT1VUUFVUX1BST1BFUlRJRVNfWE1MLCB4bWwpOwotCi0JCQlub2RlLnB1dChKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0RFRkFVTFRfREVCVUdHSU5HX0lOU1RBTExfSUQsICJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3IiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0JCXsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkKLQkJewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzhmYTllLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckludm9rZXI7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvciBpbXBsZW1lbnRzIElQcm9jZXNzb3JJbnZva2VyIHsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGludm9rZXJDbGFzczsKLQlwcml2YXRlIGZpbmFsIFN0cmluZ1tdIGNsYXNzcGF0aDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBpZDsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBidW5kbGVJZDsKLQotCXB1YmxpYyBQcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvcihTdHJpbmcgaWQsIFN0cmluZyBidW5kbGVJZCwKLQkJCVN0cmluZyBpbnZva2VyQ2xhc3MsIFN0cmluZ1tdIGNsYXNzcGF0aCkgewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDsKLQkJdGhpcy5pbnZva2VyQ2xhc3MgPSBpbnZva2VyQ2xhc3M7Ci0JCXRoaXMuY2xhc3NwYXRoID0gY2xhc3NwYXRoOwotCX0KLQotCXB1YmxpYyBTdHJpbmdbXSBnZXRDbGFzc3BhdGhFbnRyaWVzKCkgewotCQlyZXR1cm4gY3JlYXRlRW50cmllcyhidW5kbGVJZCwgY2xhc3NwYXRoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGNyZWF0ZUVudHJpZXMoU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmdbXSBjbGFzc3BhdGgpIHsKLQkJTGlzdDxTdHJpbmc+IGVudHJpZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJdHJ5IHsKLQkJCS8vIGlmIGluIGRldiBtb2RlLCB1c2UgdGhlIGJpbiBkaXIKLQkJCWlmIChQbGF0Zm9ybS5pbkRldmVsb3BtZW50TW9kZSgpKQotCQkJCWVudHJpZXMuYWRkKFV0aWxzLmdldEZpbGVMb2NhdGlvbihidW5kbGVJZCwgIi9iaW4iKSk7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoU3RyaW5nIGphciA6IGNsYXNzcGF0aCkgewotCQkJCVN0cmluZyBlbnRyeSA9IG51bGw7Ci0JCQkJaWYgKGphci5zdGFydHNXaXRoKCIke2VjbGlwc2Vfb3JiaXQ6IikgJiYgamFyLmVuZHNXaXRoKCJ9IikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCXsKLQkJCQkJamFyID0gamFyLnN1YnN0cmluZygiJHtlY2xpcHNlX29yYml0OiIubGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJCWphciA9IGphci5zdWJzdHJpbmcoMCwgamFyLmxlbmd0aCgpIC0gMSk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlGaWxlIGJ1bmRsZUZpbGUgPSBGaWxlTG9jYXRvci5nZXRCdW5kbGVGaWxlKFBsYXRmb3JtCi0JCQkJCQkJCS5nZXRCdW5kbGUoamFyKSk7Ci0JCQkJCQlpZiAoYnVuZGxlRmlsZS5pc0RpcmVjdG9yeSgpKQotCQkJCQkJCWVudHJ5ID0gVXRpbHMuZ2V0UGx1Z2luTG9jYXRpb24oamFyKSArICIvYmluIjsgLy8kTk9OLU5MUy0xJAotCQkJCQkJZWxzZQotCQkJCQkJCWVudHJ5ID0gVXRpbHMuZ2V0UGx1Z2luTG9jYXRpb24oamFyKTsKLQkJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZW50cnkgPSBVdGlscy5nZXRGaWxlTG9jYXRpb24oYnVuZGxlSWQsIGphcik7Ci0JCQkJfQotCQkJCWlmIChlbnRyeSAhPSBudWxsKQotCQkJCQllbnRyaWVzLmFkZChlbnRyeSk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0KLQkJcmV0dXJuIGVudHJpZXMudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIElQcm9jZXNzb3JJbnZva2VyCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJbnZva2VyQ2xhc3NOYW1lKCkgewotCQlyZXR1cm4gaW52b2tlckNsYXNzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0JCXJldHVybiBpZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29ySmFyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29ySmFyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0M2Q5Y2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3Nvckphci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JKYXIgaW1wbGVtZW50cyBJUHJvY2Vzc29ySmFyIHsKLQlwcml2YXRlIGZpbmFsIElQYXRoIHBhdGg7Ci0KLQlwdWJsaWMgUHJvY2Vzc29ySmFyKElQYXRoIHBhdGgpIHsKLQkJdGhpcy5wYXRoID0gcGF0aDsKLQl9Ci0KLQlwdWJsaWMgVVJMIGFzVVJMKCkgewotCQlVUkwgdXJsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCS8vIGZpcnN0IHRyeSB0byByZXNvbHZlIGFzIHdvcmtzcGFjZS1yZWxhdGl2ZSBwYXRoCi0JCQlJUGF0aCByb290UGF0aCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkKLQkJCQkJLmdldExvY2F0aW9uKCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShyb290UGF0aC5hcHBlbmQocGF0aCkudG9PU1N0cmluZygpKTsKLQkJCWlmIChmaWxlLmV4aXN0cygpKQotCQkJCXVybCA9IGZpbGUudG9VUkkoKS50b1VSTCgpOwotCQkJZWxzZSB7Ci0JCQkJLy8gbm93IHRyeSB0byByZXNvbHZlIGFzIGFuIGFic29sdXRlIHBhdGgKLQkJCQlmaWxlID0gbmV3IEZpbGUocGF0aC50b09TU3RyaW5nKCkpOwotCQkJCXVybCA9IGZpbGUudG9VUkkoKS50b1VSTCgpOwotCQkJfQotCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQlwdWJsaWMgSVBhdGggZ2V0UGF0aCgpIHsKLQkJcmV0dXJuIHBhdGg7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIHBhdGgudG9TdHJpbmcoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yUHJlZmVyZW5jZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JQcmVmZXJlbmNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGMxMmIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLlByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLlByZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yUHJlZmVyZW5jZXMKLXsKLQlwcml2YXRlIFN0cmluZyBkZWZhdWx0UHJvY2Vzc29ySWQ7Ci0JcHJpdmF0ZSBMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiBwcm9jZXNzb3JzID0gbmV3IEFycmF5TGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4oKTsKLQotCXB1YmxpYyB2b2lkIHNldFByb2Nlc3NvcnMoTGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4gcHJvY2Vzc29ycykKLQl7Ci0JCXRoaXMucHJvY2Vzc29ycyA9IHByb2Nlc3NvcnM7Ci0JfQotCi0JcHVibGljIExpc3Q8SVByb2Nlc3Nvckluc3RhbGw+IGdldFByb2Nlc3NvcnMoKQotCXsKLQkJcmV0dXJuIHByb2Nlc3NvcnM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0UHJvY2Vzc29ySWQoKQotCXsKLQkJcmV0dXJuIGRlZmF1bHRQcm9jZXNzb3JJZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0UHJvY2Vzc29ySWQoU3RyaW5nIGRlZmF1bHRQcm9jZXNzb3JJZCkKLQl7Ci0JCXRoaXMuZGVmYXVsdFByb2Nlc3NvcklkID0gZGVmYXVsdFByb2Nlc3NvcklkOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0QXNYTUwoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5jcmVhdGVFbGVtZW50KCJwcm9jZXNzb3JTZXR0aW5ncyIpOyAgLy8kTk9OLU5MUy0xJAotCQlkb2MuYXBwZW5kQ2hpbGQoY29uZmlnKTsKLQotCQkvLyBTZXQgdGhlIGRlZmF1bHRWTSBhdHRyaWJ1dGUgb24gdGhlIHRvcC1sZXZlbCBub2RlCi0JCWlmIChkZWZhdWx0UHJvY2Vzc29ySWQgIT0gbnVsbCkKLQkJewotCQkJY29uZmlnLnNldEF0dHJpYnV0ZSgiZGVmYXVsdFByb2Nlc3NvciIsIGRlZmF1bHRQcm9jZXNzb3JJZCk7ICAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlmb3IgKEl0ZXJhdG9yPElQcm9jZXNzb3JJbnN0YWxsPiBpdGVyID0gcHJvY2Vzc29ycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBpdGVyLm5leHQoKTsKLQkJCWlmICghaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpCi0JCQl7Ci0JCQkJRWxlbWVudCB2bVR5cGVFbGVtZW50ID0gaW5zdGFsbEFzRWxlbWVudChkb2MsIGluc3RhbGwpOwotCQkJCWNvbmZpZy5hcHBlbmRDaGlsZCh2bVR5cGVFbGVtZW50KTsKLQkJCX0KLQkJfQotCi0JCS8vIFNlcmlhbGl6ZSB0aGUgRG9jdW1lbnQgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIFN0cmluZwotCQlyZXR1cm4gUHJlZmVyZW5jZVV0aWwuc2VyaWFsaXplRG9jdW1lbnQoZG9jKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFByb2Nlc3NvclByZWZlcmVuY2VzIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlQcm9jZXNzb3JQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBQcm9jZXNzb3JQcmVmZXJlbmNlcygpOwotCi0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KGlucHV0U3RyZWFtKTsKLQkJRWxlbWVudCBjb25maWcgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJLy8gUG9wdWxhdGUgdGhlIGRlZmF1bHQgVk0tcmVsYXRlZCBmaWVsZHMKLQkJcHJlZnMuc2V0RGVmYXVsdFByb2Nlc3NvcklkKGNvbmZpZy5nZXRBdHRyaWJ1dGUoImRlZmF1bHRQcm9jZXNzb3IiKSk7IC8vJE5PTi1OTFMtMSQKLQotCQlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiBwcm9jZXNzb3JzID0gbmV3IEFycmF5TGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4oKTsKLQkJLy8gVHJhdmVyc2UgdGhlIHBhcnNlZCBzdHJ1Y3R1cmUgYW5kIHBvcHVsYXRlIHRoZSBWTVR5cGUgdG8gVk0gTWFwCi0JCUVsZW1lbnRbXSBwcm9jZXNzb3JFbHMgPSBQcmVmZXJlbmNlVXRpbC5nZXRDaGlsZEVsZW1lbnRzKGNvbmZpZywgInByb2Nlc3NvciIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2Vzc29yRWxzLmxlbmd0aDsgKytpKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBwcm9jZXNzb3IgPSBlbGVtZW50QXNJbnN0YWxsKHByb2Nlc3NvckVsc1tpXSk7Ci0JCQlwcm9jZXNzb3JzLmFkZChwcm9jZXNzb3IpOwotCQl9Ci0KLQkJcHJlZnMuc2V0UHJvY2Vzc29ycyhwcm9jZXNzb3JzKTsKLQotCQlyZXR1cm4gcHJlZnM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2Nlc3Nvckluc3RhbGwgZWxlbWVudEFzSW5zdGFsbChFbGVtZW50IHBhcmVudCkKLQl7Ci0JCVN0cmluZyBpZCA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoImlkIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIGxhYmVsID0gcGFyZW50LmdldEF0dHJpYnV0ZSgibGFiZWwiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgdHlwZUlkID0gcGFyZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyBzdXBwb3J0cyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoInN1cHBvcnRzIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIGRlYnVnZ2VySWQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJkZWJ1Z2dlcklkIik7IC8vJE5PTi1OTFMtMSQKLQotCQlJUHJvY2Vzc29ySmFyW10gamFycyA9IG51bGw7Ci0JCUVsZW1lbnRbXSBqYXJzRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhwYXJlbnQsICJqYXJzIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGphcnNFbHMubGVuZ3RoID09IDEpCi0JCXsKLQkJCWphcnMgPSBlbGVtZW50QXNKYXJzKGphcnNFbHNbMF0pOwotCQl9Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBuZXcgUHJvY2Vzc29ySW5zdGFsbChpZCwgbGFiZWwsIHR5cGVJZCwgamFycywgZGVidWdnZXJJZCwgc3VwcG9ydHMsIGZhbHNlKTsKLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRWxlbWVudCBpbnN0YWxsQXNFbGVtZW50KERvY3VtZW50IGRvYywgSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJwcm9jZXNzb3IiKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCBpbnN0YWxsLmdldElkKCkpOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJsYWJlbCIsIGluc3RhbGwuZ2V0TmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsIGluc3RhbGwuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldElkKCkpOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdXBwb3J0cyIsIGluc3RhbGwuZ2V0U3VwcG9ydHMoKSk7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRlYnVnZ2VySWQiLCBpbnN0YWxsLmdldERlYnVnZ2VyKCkgIT0gbnVsbCA/IGluc3RhbGwuZ2V0RGVidWdnZXIoKS5nZXRJZCgpIDogbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5hcHBlbmRDaGlsZChqYXJzQXNFbGVtZW50KGRvYywgaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkpKTsKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2Nlc3NvckphcltdIGVsZW1lbnRBc0phcnMoRWxlbWVudCBlbGVtZW50KQotCXsKLQkJRWxlbWVudFtdIGphckVscyA9IFByZWZlcmVuY2VVdGlsLmdldENoaWxkRWxlbWVudHMoZWxlbWVudCwgImphciIpOyAvLyROT04tTkxTLTEkCi0JCUxpc3Q8UHJvY2Vzc29ySmFyPiBqYXJzID0gbmV3IEFycmF5TGlzdDxQcm9jZXNzb3JKYXI+KGphckVscy5sZW5ndGgpOwotCQlmb3IgKEVsZW1lbnQgamFyRWwgOiBqYXJFbHMpCi0JCXsKLQkJCU5vZGUgbm9kZSA9IGphckVsLmdldEZpcnN0Q2hpbGQoKTsKLQkJCWlmIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuVEVYVF9OT0RFKQotCQkJewotCQkJCVN0cmluZyBwYXRoID0gKChUZXh0KSBub2RlKS5nZXROb2RlVmFsdWUoKTsKLQkJCQlqYXJzLmFkZChuZXcgUHJvY2Vzc29ySmFyKFBhdGguZnJvbVBvcnRhYmxlU3RyaW5nKHBhdGgpKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGphcnMudG9BcnJheShuZXcgSVByb2Nlc3NvckphclswXSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRWxlbWVudCBqYXJzQXNFbGVtZW50KERvY3VtZW50IGRvYywgSVByb2Nlc3NvckphcltdIGphcnMpCi0JewotCQlFbGVtZW50IGphcnNFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJqYXJzIik7ICAvLyROT04tTkxTLTEkCi0JCWZvciAoSVByb2Nlc3NvckphciBqYXIgOiBqYXJzKQotCQl7Ci0JCQlpZiAoamFyICE9IG51bGwgJiYgamFyLmdldFBhdGgoKSAhPSBudWxsKQotCQkJewotCQkJCUVsZW1lbnQgamFyRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiamFyIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlUZXh0IHRleHQgPSBkb2MuY3JlYXRlVGV4dE5vZGUoamFyLmdldFBhdGgoKS50b1BvcnRhYmxlU3RyaW5nKCkpOwotCQkJCWphckVsLmFwcGVuZENoaWxkKHRleHQpOwotCQkJCWphcnNFbC5hcHBlbmRDaGlsZChqYXJFbCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGphcnNFbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3NvclR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiYzVhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklPdXRwdXRQcm9wZXJ0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yVHlwZSBpbXBsZW1lbnRzIElQcm9jZXNzb3JUeXBlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ19TVUZGSVggPSAiLkRFU0MiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfU1VGRklYID0gIi5UWVBFIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIGZpbmFsIElUcmFuc2Zvcm1lckZhY3RvcnlbXSB0cmFuc2Zvcm1lckZhY3RvcmllczsKLQlwcml2YXRlIGZpbmFsIFVSTCBhdHRyaWJ1dGVQcm9wZXJ0aWVzVVJMOwotCXByaXZhdGUgZmluYWwgVVJMIG91dHB1dFByb3BlcnRpZXNVUkw7Ci0KLQlwcml2YXRlIElBdHRyaWJ1dGVbXSBhdHRyaWJ1dGVzOwotCXByaXZhdGUgSU91dHB1dFByb3BlcnR5W10gb3V0cHV0UHJvcGVydGllczsKLQlwcml2YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gb3V0cHV0UHJvcGVydHlWYWx1ZXM7Ci0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZVZhbHVlczsKLQotCXB1YmxpYyBQcm9jZXNzb3JUeXBlKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIFVSTCBhdHRyaWJ1dGVQcm9wZXJ0aWVzVVJMLAotCQkJVVJMIG91dHB1dFByb3BlcnRpZXNVUkwsIE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlVmFsdWVzLAotCQkJTWFwPFN0cmluZywgU3RyaW5nPiBvdXRwdXRQcm9wZXJ0eVZhbHVlcywKLQkJCUlUcmFuc2Zvcm1lckZhY3RvcnlbXSB0cmFuc2Zvcm1lckZhY3RvcmllcykgewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JCXRoaXMuYXR0cmlidXRlUHJvcGVydGllc1VSTCA9IGF0dHJpYnV0ZVByb3BlcnRpZXNVUkw7Ci0JCXRoaXMub3V0cHV0UHJvcGVydGllc1VSTCA9IG91dHB1dFByb3BlcnRpZXNVUkw7Ci0JCXRoaXMuYXR0cmlidXRlVmFsdWVzID0gYXR0cmlidXRlVmFsdWVzOwotCQl0aGlzLnRyYW5zZm9ybWVyRmFjdG9yaWVzID0gdHJhbnNmb3JtZXJGYWN0b3JpZXM7Ci0JCXRoaXMub3V0cHV0UHJvcGVydHlWYWx1ZXMgPSBvdXRwdXRQcm9wZXJ0eVZhbHVlczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldElkKCkgewotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0QXR0cmlidXRlVmFsdWVzKCkgewotCQlyZXR1cm4gYXR0cmlidXRlVmFsdWVzOwotCX0KLQotCXB1YmxpYyBJQXR0cmlidXRlW10gZ2V0QXR0cmlidXRlcygpIHsKLQkJaWYgKGF0dHJpYnV0ZXMgPT0gbnVsbCkgewotCQkJaWYgKGF0dHJpYnV0ZVByb3BlcnRpZXNVUkwgIT0gbnVsbCkKLQkJCQlhdHRyaWJ1dGVzID0gbG9hZEF0dHJpYnV0ZXMoKTsKLQkJCWVsc2UKLQkJCQlhdHRyaWJ1dGVzID0gbmV3IElBdHRyaWJ1dGVbMF07Ci0JCX0KLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoKSB7Ci0JCXJldHVybiBvdXRwdXRQcm9wZXJ0eVZhbHVlczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0pSRURlZmF1bHQoKSB7Ci0JCXJldHVybiBKQVhQUnVudGltZS5KUkVfREVGQVVMVF9QUk9DRVNTT1JfVFlQRV9JRC5lcXVhbHMoaWQpOwotCX0KLQotCXB1YmxpYyBJVHJhbnNmb3JtZXJGYWN0b3J5W10gZ2V0VHJhbnNmb3JtZXJGYWN0b3JpZXMoKSB7Ci0JCXJldHVybiB0cmFuc2Zvcm1lckZhY3RvcmllczsKLQl9Ci0KLQlwdWJsaWMgSVRyYW5zZm9ybWVyRmFjdG9yeSBnZXREZWZhdWx0VHJhbnNmb3JtZXJGYWN0b3J5KCkgewotCQlpZiAodHJhbnNmb3JtZXJGYWN0b3JpZXMubGVuZ3RoID4gMCkKLQkJCXJldHVybiB0cmFuc2Zvcm1lckZhY3Rvcmllc1swXTsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIElPdXRwdXRQcm9wZXJ0eVtdIGdldE91dHB1dFByb3BlcnRpZXMoKSB7Ci0JCWlmIChvdXRwdXRQcm9wZXJ0aWVzID09IG51bGwpIHsKLQkJCWlmIChvdXRwdXRQcm9wZXJ0aWVzVVJMICE9IG51bGwpCi0JCQkJb3V0cHV0UHJvcGVydGllcyA9IGxvYWRPdXRwdXRQcm9wZXJ0aWVzKCk7Ci0JCQllbHNlCi0JCQkJb3V0cHV0UHJvcGVydGllcyA9IG5ldyBJT3V0cHV0UHJvcGVydHlbMF07Ci0JCX0KLQkJcmV0dXJuIG91dHB1dFByb3BlcnRpZXM7Ci0JfQotCi0JcHJpdmF0ZSBJT3V0cHV0UHJvcGVydHlbXSBsb2FkT3V0cHV0UHJvcGVydGllcygpIHsKLQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCUxpc3Q8T3V0cHV0UHJvcGVydHk+IG91dHB1dHMgPSBuZXcgQXJyYXlMaXN0PE91dHB1dFByb3BlcnR5PigpOwotCQlQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJdHJ5IHsKLQotCQkJaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvdXRwdXRQcm9wZXJ0aWVzVVJMLm9wZW5TdHJlYW0oKSk7Ci0JCQlwcm9wcy5sb2FkKGlzKTsKLQkJCWZvciAoT2JqZWN0IGVsZW1lbnQgOiBwcm9wcy5rZXlTZXQoKSkgewotCQkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBlbGVtZW50OwotCQkJCWlmICgha2V5LmVuZHNXaXRoKERFU0NfU1VGRklYKSkgewotCQkJCQlTdHJpbmcgbmFtZSA9IGtleTsKLQkJCQkJU3RyaW5nIHVyaSA9IHByb3BzLmdldFByb3BlcnR5KGtleSk7Ci0JCQkJCVN0cmluZyBkZXNjID0gcHJvcHMuZ2V0UHJvcGVydHkoa2V5ICsgREVTQ19TVUZGSVgpOwotCQkJCQlpZiAodXJpICE9IG51bGwgJiYgbmFtZSAhPSBudWxsICYmIGRlc2MgIT0gbnVsbCkgewotCQkJCQkJT3V0cHV0UHJvcGVydHkgcHJvcCA9IG5ldyBPdXRwdXRQcm9wZXJ0eSh1cmkudHJpbSgpLAotCQkJCQkJCQlkZXNjKTsKLQkJCQkJCW91dHB1dHMuYWRkKHByb3ApOwotCQkJCQl9IGVsc2UgewotCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2cobmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cygKLQkJCQkJCQkJSVN0YXR1cy5XQVJOSU5HLCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJCQkJTWVzc2FnZXMuUHJvY2Vzc29yVHlwZV8yICsgb3V0cHV0UHJvcGVydGllc1VSTAotCQkJCQkJCQkJCSsgTWVzc2FnZXMuUHJvY2Vzc29yVHlwZV8zICsga2V5KSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChpcyAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJaXMuY2xvc2UoKTsKLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gb3V0cHV0cy50b0FycmF5KG5ldyBJT3V0cHV0UHJvcGVydHlbMF0pOwotCX0KLQotCXByaXZhdGUgSUF0dHJpYnV0ZVtdIGxvYWRBdHRyaWJ1dGVzKCkgewotCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbnVsbDsKLQkJTGlzdDxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXNMaXN0ID0gbmV3IEFycmF5TGlzdDxBdHRyaWJ1dGU+KCk7Ci0JCXRyeSB7Ci0JCQlpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGF0dHJpYnV0ZVByb3BlcnRpZXNVUkwub3BlblN0cmVhbSgpKTsKLQkJCVByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCQkJcHJvcHMubG9hZChpcyk7Ci0KLQkJCWZvciAoT2JqZWN0IGVsZW1lbnQgOiBwcm9wcy5rZXlTZXQoKSkgewotCQkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBlbGVtZW50OwotCQkJCWlmICgha2V5LmVuZHNXaXRoKERFU0NfU1VGRklYKSAmJiAha2V5LmVuZHNXaXRoKFRZUEVfU1VGRklYKSkgewotCQkJCQlTdHJpbmcgdXJpID0gcHJvcHMuZ2V0UHJvcGVydHkoa2V5KTsKLQkJCQkJU3RyaW5nIHR5cGUgPSBwcm9wcy5nZXRQcm9wZXJ0eShrZXkgKyBUWVBFX1NVRkZJWCk7Ci0JCQkJCVN0cmluZyBkZXNjID0gcHJvcHMuZ2V0UHJvcGVydHkoa2V5ICsgREVTQ19TVUZGSVgpOwotCQkJCQlpZiAodXJpICE9IG51bGwgJiYgdHlwZSAhPSBudWxsICYmIGRlc2MgIT0gbnVsbCkgewotCQkJCQkJQXR0cmlidXRlIGF0dHJpYnV0ZSA9IG5ldyBBdHRyaWJ1dGUodXJpLnRyaW0oKSwgdHlwZQotCQkJCQkJCQkudHJpbSgpLCBkZXNjKTsKLQkJCQkJCWF0dHJpYnV0ZXNMaXN0LmFkZChhdHRyaWJ1dGUpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2cobmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cygKLQkJCQkJCQkJSVN0YXR1cy5XQVJOSU5HLCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJCQkJTWVzc2FnZXMuUHJvY2Vzc29yVHlwZV80Ci0JCQkJCQkJCQkJKyBhdHRyaWJ1dGVQcm9wZXJ0aWVzVVJMCi0JCQkJCQkJCQkJKyBNZXNzYWdlcy5Qcm9jZXNzb3JUeXBlXzUgKyBrZXkpKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAoaXMgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWlzLmNsb3NlKCk7Ci0JCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJSUF0dHJpYnV0ZVtdIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzTGlzdC50b0FycmF5KG5ldyBJQXR0cmlidXRlWzBdKTsKLQkJQXJyYXlzLnNvcnQoYXR0cmlidXRlcyk7Ci0JCXJldHVybiBhdHRyaWJ1dGVzOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVHJhbnNmb3JtZXJGYWN0b3J5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVHJhbnNmb3JtZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNDlkNDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1RyYW5zZm9ybWVyRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JVHJhbnNmb3JtZXJGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgVHJhbnNmb3JtZXJGYWN0b3J5IGltcGxlbWVudHMgSVRyYW5zZm9ybWVyRmFjdG9yeQotewotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZhY3RvcnlDbGFzczsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwotCQotCXB1YmxpYyBUcmFuc2Zvcm1lckZhY3RvcnkoU3RyaW5nIG5hbWUsU3RyaW5nIGZhY3RvcnlDbGFzcykKLQl7Ci0JCXN1cGVyKCk7Ci0JCXRoaXMuZmFjdG9yeUNsYXNzID0gZmFjdG9yeUNsYXNzOwotCQl0aGlzLm5hbWUgPSBuYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeUNsYXNzKCkKLQl7Ci0JCXJldHVybiBmYWN0b3J5Q2xhc3M7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5OTc2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLQotcHVibGljIGNsYXNzIFV0aWxzCi17Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaWxlTG9jYXRpb24oU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmcgcGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlVUkwgdXJsID0gRmlsZUxvY2F0b3IuZmluZChQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlSWQpLCBuZXcgUGF0aChwYXRoKSwgbnVsbCk7Ci0JCQlpZiAodXJsICE9IG51bGwpCi0JCQl7Ci0JCQkJVVJMIGZpbGVVcmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlVXJsLmdldEZpbGUoKSk7Ci0JCQkJbG9jYXRpb24gPSBmaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5VdGlsc18wICsgcGF0aCArIE1lc3NhZ2VzLlV0aWxzXzEgKyBidW5kbGVJZCwgZSkpOyAKLQkJfSAKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsdWdpbkxvY2F0aW9uKFN0cmluZyBidW5kbGVJZCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlVUkwgdXJsID0gbmV3IFVSTCgicGxhdGZvcm06L3BsdWdpbi8iK2J1bmRsZUlkKTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHVybCAhPSBudWxsKQotCQkJewotCQkJCVVSTCBmaWxlVXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZVVybC5nZXRGaWxlKCkpOwotCQkJCWxvY2F0aW9uID0gZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwgTWVzc2FnZXMuVXRpbHNfMCArIGJ1bmRsZUlkICsgTWVzc2FnZXMuVXRpbHNfMSArIGJ1bmRsZUlkLCBlKSk7IAotCQl9IAotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWNjYzA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotWFNMVFJ1bnRpbWVfMTA9RmFpbGVkIHRvIHNhdmUgcHJvY2VzcyBwcmVmZXJlbmNlcwotWFNMVFJ1bnRpbWVfNT1TYXZpbmcgYXR0cmlidXRlcy4uLgotWFNMVFJ1bnRpbWVfNj1GYWlsZWQgdG8gc2F2ZSBhdHRyaWJ1dGUgcHJlZmVyZW5jZXMKLVhTTFRSdW50aW1lXzc9U2F2aW5nIHByb3BlcnRpZXMuLi4KLVhTTFRSdW50aW1lXzg9RmFpbGVkIHRvIHNhdmUgb3V0cHV0IHByb3BlcnR5IHByZWZlcmVuY2VzCi1YU0xUUnVudGltZV85PVNhdmluZyBwcm9jZXNzb3JzLi4uCi0KLUF0dHJpYnV0ZV8wPVZhbHVlIG11c3QgYmUgYSBkb3VibGUKLUF0dHJpYnV0ZV8xPVZhbHVlIG11c3QgYmUgYW4gaW50ZWdlcgotQXR0cmlidXRlXzI9VmFsaWQgdmFsdWVzIGFyZSAndHJ1ZScgb3IgJ2ZhbHNlJwotQXR0cmlidXRlXzU9VmFsdWUgbXVzdCBiZSBhIGZsb2F0Ci1QbHVnaW5Qcm9jZXNzb3JKYXJfMD0sIHBhdGggCi1Qcm9jZXNzb3JUeXBlXzI9T3V0cHV0IHByb3BlcnRpZXMgZmlsZSAKLVByb2Nlc3NvclR5cGVfMz1cIG5vdCBjb25maWd1cmVkIHByb3Blcmx5IGZvciBrZXkgCi1Qcm9jZXNzb3JUeXBlXzQ9QXR0cmlidXRlIHByb3BlcnRpZXMgZmlsZSAKLVByb2Nlc3NvclR5cGVfNT1cIG5vdCBjb25maWd1cmVkIHByb3Blcmx5IGZvciBrZXkgCi1VdGlsc18wPUVycm9yIGRldGVybWluaW5nIGphciBmaWxlIGxvY2F0aW9uOiAKLVV0aWxzXzE9XCBmcm9tIGJ1bmRsZTogCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzA9U3dpdGNoIHRvIERlZmF1bHQgRGVidWdnZXIKLVhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMT1UaGUgCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzI9XCBYU0xUIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IGRlYnVnZ2luZ19cbgotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8yMz1Db3VsZCBub3QgbG9jYXRlIGphciBmaWxlIAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8zPVdvdWxkIHlvdSBsaWtlIHRvIGRlYnVnIHVzaW5nIHRoZSBkZWZhdWx0IAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8zMT1cIHRvIAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV80PVwgcHJvY2Vzc29yIGluc3RlYWQ/Ci1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzU9bGF1bmNoCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzY9bGF1bmNoLnhtbAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV83PUVycm9yIGNvcHlpbmcgdXJsIAotCi1BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzM9LCBleHRlbnNpb24gCi1BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzU9UmVxdWlyZWQgYXR0cmlidXRlICcKLUFic3RyYWN0UmVnaXN0cnlSZWFkZXJfNj0nIG5vdCBkZWZpbmVkCi1BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzc9UmVxdWlyZWQgc3ViIGVsZW1lbnQgJwotQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl84PScgbm90IGRlZmluZWQKLUFic3RyYWN0UmVnaXN0cnlSZWFkZXJfOT1Vbmtub3duIGV4dGVuc2lvbiB0YWcgZm91bmQ6IAotSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMD1DaGFuZ2UgVHJhbnNmb3JtZXIgRmFjdG9yeQotSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfMT1cIG11c3QgdXNlIHRoZSAKLUpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlXzI9XCB0cmFuc2Zvcm1lciBmYWN0b3J5IHdoZW4gZGVidWdnaW5nLlxuCi1KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV8zPUJlIGF3YXJlIHRoYXQgdGhpcyBtYXkgZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyB0byB0aGUgCi1KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZV80PVwgdHJhbnNmb3JtZXIgZmFjdG9yeSBjb25maWd1cmVkIGZvciB0aGlzIGxhdW5jaCBjb25maWd1cmF0aW9uLgotSkFYUEphdmFMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGVfNT1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwLmludm9rZQotCi1MYXVuY2hIZWxwZXJfMD1GaWxlIG5vdCBmb3VuZAotTGF1bmNoSGVscGVyXzE9SU8gRXhjZXB0aW9uCi0KLVhTTERlYnVnVGFyZ2V0XzA9VW5hYmxlIHRvIGNvbm5lY3QgdG8gZGVidWdnZXIKLVhTTERlYnVnVGFyZ2V0XzE9bG9jYWxob3N0Ci1YU0xEZWJ1Z1RhcmdldF8xOT1SZXF1ZXN0IGZhaWxlZDogCi1YU0xEZWJ1Z1RhcmdldF8yPUNvdWxkIG5vdCBjb25uZWN0IHRvIHNvY2tldCAKLVhTTERlYnVnVGFyZ2V0XzIwPUV2ZW50IERpc3BhdGNoCi1YU0xEZWJ1Z1RhcmdldF8zPVwgYWZ0ZXIgCi1YU0xEZWJ1Z1RhcmdldF80PVwgYXR0ZW1wdHMKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0Fic3RyYWN0UmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YTVmNjAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0Fic3RyYWN0UmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLk1lc3NhZ2VzOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcgotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOyAvLyROT04tTkxTLTEkCi0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nRXJyb3IoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIFN0cmluZyB0ZXh0KQotCXsKLQkJSUV4dGVuc2lvbiBleHRlbnNpb24gPSBlbGVtZW50LmdldERlY2xhcmluZ0V4dGVuc2lvbigpOwotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlidWYuYXBwZW5kKCJQbHVnaW4gIiArIGV4dGVuc2lvbi5nZXROYW1lc3BhY2VJZGVudGlmaWVyKCkgKyBNZXNzYWdlcy5BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzMgKyBleHRlbnNpb24uZ2V0RXh0ZW5zaW9uUG9pbnRVbmlxdWVJZGVudGlmaWVyKCkpOyAvLyROT04tTkxTLTEkIAotCQlidWYuYXBwZW5kKCJcbiIgKyB0ZXh0KTsgLy8kTk9OLU5MUy0xJAotCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLk9LLCBidWYudG9TdHJpbmcoKSwgbnVsbCkpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nTWlzc2luZ0F0dHJpYnV0ZShJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0JewotCQlsb2dFcnJvcihlbGVtZW50LCBNZXNzYWdlcy5BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzUgKyBhdHRyaWJ1dGVOYW1lICsgTWVzc2FnZXMuQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl82KTsgCi0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGxvZ01pc3NpbmdFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgZWxlbWVudE5hbWUpCi0JewotCQlsb2dFcnJvcihlbGVtZW50LCBNZXNzYWdlcy5BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyXzcgKyBlbGVtZW50TmFtZSArIE1lc3NhZ2VzLkFic3RyYWN0UmVnaXN0cnlSZWFkZXJfOCk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGxvZ1Vua25vd25FbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJbG9nRXJyb3IoZWxlbWVudCwgTWVzc2FnZXMuQWJzdHJhY3RSZWdpc3RyeVJlYWRlcl85ICsgZWxlbWVudC5nZXROYW1lKCkpOyAKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElFeHRlbnNpb25bXSBvcmRlckV4dGVuc2lvbnMoSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMpCi0JewotCQlJRXh0ZW5zaW9uW10gc29ydGVkRXh0ZW5zaW9uID0gbmV3IElFeHRlbnNpb25bZXh0ZW5zaW9ucy5sZW5ndGhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGV4dGVuc2lvbnMsIDAsIHNvcnRlZEV4dGVuc2lvbiwgMCwgZXh0ZW5zaW9ucy5sZW5ndGgpOwotCQlDb21wYXJhdG9yPElFeHRlbnNpb24+IGNvbXBhcmVyID0gbmV3IENvbXBhcmF0b3I8SUV4dGVuc2lvbj4oKQotCQl7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoSUV4dGVuc2lvbiBhcmcwLCBJRXh0ZW5zaW9uIGFyZzEpCi0JCQl7Ci0JCQkJU3RyaW5nIHMxID0gYXJnMC5nZXROYW1lc3BhY2VJZGVudGlmaWVyKCk7Ci0JCQkJU3RyaW5nIHMyID0gYXJnMS5nZXROYW1lc3BhY2VJZGVudGlmaWVyKCk7Ci0JCQkJcmV0dXJuIHMxLmNvbXBhcmVUb0lnbm9yZUNhc2UoczIpOwotCQkJfQotCQl9OwotCQlDb2xsZWN0aW9ucy5zb3J0KEFycmF5cy5hc0xpc3Qoc29ydGVkRXh0ZW5zaW9uKSwgY29tcGFyZXIpOwotCQlyZXR1cm4gc29ydGVkRXh0ZW5zaW9uOwotCX0KLQotCXByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KTsKLQotCXByb3RlY3RlZCB2b2lkIHJlYWRFbGVtZW50Q2hpbGRyZW4oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlyZWFkRWxlbWVudHMoZWxlbWVudC5nZXRDaGlsZHJlbigpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudHMoSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZWxlbWVudHMpCi0JewotCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlpZiAoIXJlYWRFbGVtZW50KGVsZW1lbnRzW2ldKSkKLQkJCQlsb2dVbmtub3duRWxlbWVudChlbGVtZW50c1tpXSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCByZWFkRXh0ZW5zaW9uKElFeHRlbnNpb24gZXh0ZW5zaW9uKQotCXsKLQkJcmVhZEVsZW1lbnRzKGV4dGVuc2lvbi5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVhZFJlZ2lzdHJ5KElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSwgU3RyaW5nIHBsdWdpbklkLCBTdHJpbmcgZXh0ZW5zaW9uUG9pbnQpCi0JewotCQlJRXh0ZW5zaW9uUG9pbnQgcG9pbnQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChwbHVnaW5JZCwgZXh0ZW5zaW9uUG9pbnQpOwotCQlpZiAocG9pbnQgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBwb2ludC5nZXRFeHRlbnNpb25zKCk7Ci0JCWV4dGVuc2lvbnMgPSBvcmRlckV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7Ci0JCWZvciAoSUV4dGVuc2lvbiBlbGVtZW50IDogZXh0ZW5zaW9ucykKLQkJCXJlYWRFeHRlbnNpb24oZWxlbWVudCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQpCi0JewotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjaGlsZHJlbiA9IGNvbmZpZ0VsZW1lbnQuZ2V0Q2hpbGRyZW4oVEFHX0RFU0NSSVBUSU9OKTsKLQkJaWYgKGNoaWxkcmVuLmxlbmd0aCA+PSAxKQotCQl7Ci0JCQlyZXR1cm4gY2hpbGRyZW5bMF0uZ2V0VmFsdWUoKTsKLQkJfQotCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRDbGFzc1ZhbHVlKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50LCBTdHJpbmcgY2xhc3NBdHRyaWJ1dGVOYW1lKQotCXsKLQkJU3RyaW5nIGNsYXNzTmFtZSA9IGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKGNsYXNzQXR0cmlidXRlTmFtZSk7Ci0JCWlmIChjbGFzc05hbWUgIT0gbnVsbCkKLQkJCXJldHVybiBjbGFzc05hbWU7Ci0JCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIGNhbmRpZGF0ZUNoaWxkcmVuID0gY29uZmlnRWxlbWVudC5nZXRDaGlsZHJlbihjbGFzc0F0dHJpYnV0ZU5hbWUpOwotCQlpZiAoY2FuZGlkYXRlQ2hpbGRyZW4ubGVuZ3RoID09IDApCi0JCQlyZXR1cm4gbnVsbDsKLQotCQlyZXR1cm4gY2FuZGlkYXRlQ2hpbGRyZW5bMF0uZ2V0QXR0cmlidXRlKEFUVF9DTEFTUyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvRGVidWdnZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGEwYmJkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSURlYnVnZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuRGVidWdnZXJEZXNjcmlwdG9yOwotCi1wdWJsaWMgY2xhc3MgRGVidWdnZXJSZWdpc3RyeQotewotCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgRGVidWdnZXJEZXNjcmlwdG9yPiBkZWJ1Z2dlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIERlYnVnZ2VyRGVzY3JpcHRvcj4oKTsKLQotCXB1YmxpYyBEZWJ1Z2dlclJlZ2lzdHJ5KCkKLQl7Ci0JCURlYnVnZ2VyUmVnaXN0cnlSZWFkZXIgcmVnaXN0cnlSZWFkZXIgPSBuZXcgRGVidWdnZXJSZWdpc3RyeVJlYWRlcigpOwotCQlyZWdpc3RyeVJlYWRlci5hZGRDb25maWdzKHRoaXMpOwotCX0KLQotCXB1YmxpYyBJRGVidWdnZXIgZ2V0RGVidWdnZXIoU3RyaW5nIGlkKQotCXsKLQkJcmV0dXJuIGRlYnVnZ2Vycy5nZXQoaWQpOwotCX0KLQotCXB1YmxpYyBJRGVidWdnZXJbXSBnZXREZWJ1Z2dlcnMoKQotCXsKLQkJcmV0dXJuIGRlYnVnZ2Vycy52YWx1ZXMoKS50b0FycmF5KG5ldyBJRGVidWdnZXJbMF0pOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZERlYnVnZ2VyKERlYnVnZ2VyRGVzY3JpcHRvciBkZXNjKQotCXsKLQkJZGVidWdnZXJzLnB1dChkZXNjLmdldElkKCksIGRlc2MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvRGVidWdnZXJSZWdpc3RyeVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI5ZWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkRlYnVnZ2VyRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBEZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcgotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19ERUJVR0dFUiA9ICJkZWJ1Z2dlciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTTkFNRSA9ICJjbGFzc05hbWUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTUEFUSCA9ICJjbGFzc3BhdGgiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfUFJPQ0VTU09SX1RZUEVfSUQgPSAicHJvY2Vzc29yVHlwZUlkIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZID0gInRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBEZWJ1Z2dlclJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlpZiAoIWVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhUQUdfREVCVUdHRVIpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9JRCk7Ci0JCWlmIChpZCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9JRCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBjbGFzc05hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1NOQU1FKTsKLQkJaWYgKGNsYXNzTmFtZSA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9DTEFTU05BTUUpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgY2xhc3NwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTUEFUSCk7Ci0JCWlmIChjbGFzc3BhdGggPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfQ0xBU1NQQVRIKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nW10gZW50cmllcyA9IGNsYXNzcGF0aC5zcGxpdCgiOyIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykKLQkJewotCQkJU3RyaW5nIHN0cmluZyA9IGVudHJpZXNbaV07Ci0JCQllbnRyaWVzW2ldID0gc3RyaW5nLnRyaW0oKTsKLQkJfQotCi0JCVN0cmluZyBuYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUUpOwotCQlpZiAobmFtZSA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9OQU1FKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIHByb2Nlc3NvclR5cGVJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9QUk9DRVNTT1JfVFlQRV9JRCk7Ci0JCWlmIChwcm9jZXNzb3JUeXBlSWQgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfUFJPQ0VTU09SX1RZUEVfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJU3RyaW5nIHRGYWN0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX1RSQU5TRk9STUVSX0ZBQ1RPUlkpOwotCi0JCXJlZ2lzdHJ5LmFkZERlYnVnZ2VyKG5ldyBEZWJ1Z2dlckRlc2NyaXB0b3IoaWQsIGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCksIGNsYXNzTmFtZSwgZW50cmllcywgbmFtZSwgcHJvY2Vzc29yVHlwZUlkLCB0RmFjdCkpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRFbGVtZW50KERlYnVnZ2VyUmVnaXN0cnkgcmVnaXN0cnksIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQlyZWFkRWxlbWVudChlbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRDb25maWdzKERlYnVnZ2VyUmVnaXN0cnkgcmVnaXN0cnkpCi0JewotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRSZWdpc3RyeShleHRlbnNpb25SZWdpc3RyeSwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsICJkZWJ1Z2dlciIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0ludm9rZXJSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0ludm9rZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2I4MTZmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9JbnZva2VyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW52b2tlcjsKLQotcHVibGljIGNsYXNzIEludm9rZXJSZWdpc3RyeQotewotCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgSVByb2Nlc3Nvckludm9rZXI+IGludm9rZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJUHJvY2Vzc29ySW52b2tlcj4oKTsKLQotCXB1YmxpYyBJbnZva2VyUmVnaXN0cnkoKQotCXsKLQkJSW52b2tlclJlZ2lzdHJ5UmVhZGVyIHJlZ2lzdHJ5UmVhZGVyID0gbmV3IEludm9rZXJSZWdpc3RyeVJlYWRlcigpOwotCQlyZWdpc3RyeVJlYWRlci5hZGRDb25maWdzKHRoaXMpOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW52b2tlciBnZXRQcm9jZXNzb3JJbnZva2VyKFN0cmluZyBpZCkKLQl7Ci0JCXJldHVybiBpbnZva2Vycy5nZXQoaWQpOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW52b2tlcltdIGdldFByb2Nlc3Nvckludm9rZXJzKCkKLQl7Ci0JCXJldHVybiBpbnZva2Vycy52YWx1ZXMoKS50b0FycmF5KG5ldyBJUHJvY2Vzc29ySW52b2tlclswXSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkSW52b2tlckRlc2NyaXB0b3IoSVByb2Nlc3Nvckludm9rZXIgZGVzYykKLQl7Ci0JCWludm9rZXJzLnB1dChkZXNjLmdldElkKCksIGRlc2MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9JbnZva2VyUmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9JbnZva2VyUmVnaXN0cnlSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllNjEzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvSW52b2tlclJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvcjsKLQotcHVibGljIGNsYXNzIEludm9rZXJSZWdpc3RyeVJlYWRlciBleHRlbmRzIEFic3RyYWN0UmVnaXN0cnlSZWFkZXIKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfSU5WT0tFID0gImludm9rZXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0lEID0gImlkIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1NQQVRIID0gImNsYXNzcGF0aCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgSW52b2tlclJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlpZiAoIWVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhUQUdfSU5WT0tFKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfSUQpOwotCQlpZiAoaWQgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgY2xhc3NuYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLQkJaWYgKGNsYXNzbmFtZSA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9DTEFTUyk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBjbGFzc3BhdGggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1NQQVRIKTsKLQkJaWYgKGNsYXNzcGF0aCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9DTEFTU1BBVEgpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmdbXSBlbnRyaWVzID0gY2xhc3NwYXRoLnNwbGl0KCI7Iik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgc3RyaW5nID0gZW50cmllc1tpXTsKLQkJCWVudHJpZXNbaV0gPSBzdHJpbmcudHJpbSgpOwotCQl9Ci0KLQkJcmVnaXN0cnkuYWRkSW52b2tlckRlc2NyaXB0b3IobmV3IFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKGlkLCBlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpLCBjbGFzc25hbWUsIGVudHJpZXMpKTsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZWFkRWxlbWVudChJbnZva2VyUmVnaXN0cnkgcmVnaXN0cnksIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQlyZWFkRWxlbWVudChlbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRDb25maWdzKEludm9rZXJSZWdpc3RyeSByZWdpc3RyeSkKLQl7Ci0JCUlFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZFJlZ2lzdHJ5KGV4dGVuc2lvblJlZ2lzdHJ5LCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgImludm9rZSIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclJlZ2lzdHJ5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RkNDAwOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5Qcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlByb2Nlc3NvclByZWZlcmVuY2VzOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yUmVnaXN0cnkKLXsKLQlwcml2YXRlIGZpbmFsIExpc3Q8UHJvY2Vzc29ySW5zdGFsbD4gY29udHJpYnV0ZWRJbnN0YWxscyA9IG5ldyBBcnJheUxpc3Q8UHJvY2Vzc29ySW5zdGFsbD4oKTsKLQlwcml2YXRlIExpc3Q8SVByb2Nlc3Nvckluc3RhbGw+IHVzZXJJbnN0YWxscyA9IG5ldyBBcnJheUxpc3Q8SVByb2Nlc3Nvckluc3RhbGw+KCk7Ci0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBkZWZhdWx0UHJvY2Vzc29yOwotCXByaXZhdGUgSVByb2Nlc3Nvckluc3RhbGwganJlRGVmYXVsdFByb2Nlc3NvcjsKLQlwcml2YXRlIElQcm9jZXNzb3JJbnN0YWxsW10gaW5zdGFsbHM7Ci0KLQlwdWJsaWMgUHJvY2Vzc29yUmVnaXN0cnkoKQotCXsKLQkJaW5pdGlhbGl6ZUZyb21TdG9yYWdlKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVGcm9tU3RvcmFnZSgpCi0JewotCQkvLyByZWFkIGZyb20gdGhlIHJlZ2lzdHJ5Ci0JCVByb2Nlc3NvclJlZ2lzdHJ5UmVhZGVyIHJlZ2lzdHJ5UmVhZGVyID0gbmV3IFByb2Nlc3NvclJlZ2lzdHJ5UmVhZGVyKCk7Ci0JCXJlZ2lzdHJ5UmVhZGVyLmFkZENvbmZpZ3ModGhpcyk7Ci0JCS8vIGZpbmQgdGhlIGpyZSBkZWZhdWx0Ci0JCWZvciAoSXRlcmF0b3I8UHJvY2Vzc29ySW5zdGFsbD4gaXRlciA9IGNvbnRyaWJ1dGVkSW5zdGFsbHMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gaXRlci5uZXh0KCk7Ci0JCQlpZiAoaW5zdGFsbC5nZXRJZCgpLmVxdWFscyhKQVhQUnVudGltZS5KUkVfREVGQVVMVF9QUk9DRVNTT1JfSUQpKQotCQkJewotCQkJCWpyZURlZmF1bHRQcm9jZXNzb3IgPSBpbnN0YWxsOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8vIHJlYWQgZnJvbSB0aGUgcHJlZmVyZW5jZXMKLQkJYWRkUGVyc2lzdGVkVk1zKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFBlcnNpc3RlZFZNcygpCi0JewotCQkvLyBUcnkgcmV0cmlldmluZyB0aGUgVk0gcHJlZmVyZW5jZXMgZnJvbSB0aGUgcHJlZmVyZW5jZSBzdG9yZQotCQlTdHJpbmcgdm1YTUxTdHJpbmcgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhKQVhQUnVudGltZS5QUkVGX1BST0NFU1NPUl9YTUwpOwotCi0JCS8vIElmIHRoZSBwcmVmZXJlbmNlIHdhcyBmb3VuZCwgbG9hZCBWTXMgZnJvbSBpdCBpbnRvIG1lbW9yeQotCQlpZiAodm1YTUxTdHJpbmcubGVuZ3RoKCkgPiAwKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSh2bVhNTFN0cmluZy5nZXRCeXRlcygpKTsKLQkJCQlQcm9jZXNzb3JQcmVmZXJlbmNlcyBwcmVmcyA9IFByb2Nlc3NvclByZWZlcmVuY2VzLmZyb21YTUwoaW5wdXRTdHJlYW0pOwotCQkJCVN0cmluZyBkZWZhdWx0UHJvY2Vzc29ySWQgPSBwcmVmcy5nZXREZWZhdWx0UHJvY2Vzc29ySWQoKTsKLQkJCQl1c2VySW5zdGFsbHMgPSBwcmVmcy5nZXRQcm9jZXNzb3JzKCk7Ci0JCQkJZm9yIChJdGVyYXRvcjxJUHJvY2Vzc29ySW5zdGFsbD4gaXRlciA9IHVzZXJJbnN0YWxscy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCQkJewotCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gaXRlci5uZXh0KCk7Ci0JCQkJCWlmIChpbnN0YWxsLmdldElkKCkuZXF1YWxzKGRlZmF1bHRQcm9jZXNzb3JJZCkpCi0JCQkJCXsKLQkJCQkJCWRlZmF1bHRQcm9jZXNzb3IgPSBpbnN0YWxsOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChkZWZhdWx0UHJvY2Vzc29yID09IG51bGwpCi0JCQkJewotCQkJCQlmb3IgKEl0ZXJhdG9yPFByb2Nlc3Nvckluc3RhbGw+IGl0ZXIgPSBjb250cmlidXRlZEluc3RhbGxzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJCQkJewotCQkJCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGl0ZXIubmV4dCgpOwotCQkJCQkJaWYgKGRlZmF1bHRQcm9jZXNzb3IgPT0gbnVsbCAmJiBpbnN0YWxsLmdldElkKCkuZXF1YWxzKGRlZmF1bHRQcm9jZXNzb3JJZCkpCi0JCQkJCQl7Ci0JCQkJCQkJZGVmYXVsdFByb2Nlc3NvciA9IGluc3RhbGw7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJewotCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJfQotCQl9Ci0JCS8vIG1ha2UgdGhlIEpSRSB0aGUgZGVmYXVsdCBkZWZhdWx0Ci0JCWlmIChkZWZhdWx0UHJvY2Vzc29yID09IG51bGwpCi0JCXsKLQkJCWRlZmF1bHRQcm9jZXNzb3IgPSBqcmVEZWZhdWx0UHJvY2Vzc29yOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkUHJvY2Vzc29yKFN0cmluZyBidW5kbGVJZCwgU3RyaW5nIGlkLCBTdHJpbmcgbGFiZWwsIFN0cmluZyBwcm9jZXNzb3JUeXBlSWQsIFN0cmluZyBjbGFzc3BhdGgsIFN0cmluZyBkZWJ1Z2dlcklkLCBTdHJpbmcgc3VwcG9ydHMpCi0JewotCQlJUHJvY2Vzc29ySmFyW10gamFycyA9IFByb2Nlc3Nvckluc3RhbGwuY3JlYXRlSmFycyhidW5kbGVJZCwgY2xhc3NwYXRoKTsKLQkJY29udHJpYnV0ZWRJbnN0YWxscy5hZGQobmV3IFByb2Nlc3Nvckluc3RhbGwoaWQsIGxhYmVsLCBwcm9jZXNzb3JUeXBlSWQsIGphcnMsIGRlYnVnZ2VySWQsIHN1cHBvcnRzLCB0cnVlKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkUHJvY2Vzc29yKElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlpZiAoIWluc3RhbGwuaXNDb250cmlidXRlZCgpKQotCQkJdXNlckluc3RhbGxzLmFkZChpbnN0YWxsKTsKLQkJSVByb2Nlc3Nvckluc3RhbGxbXSBuZXdpbnN0YWxscyA9IG5ldyBJUHJvY2Vzc29ySW5zdGFsbFtpbnN0YWxscy5sZW5ndGggKyAxXTsKLQkJU3lzdGVtLmFycmF5Y29weShpbnN0YWxscywgMCwgbmV3aW5zdGFsbHMsIDAsIGluc3RhbGxzLmxlbmd0aCk7Ci0JCW5ld2luc3RhbGxzW2luc3RhbGxzLmxlbmd0aF0gPSBpbnN0YWxsOwotCQlpbnN0YWxscyA9IG5ld2luc3RhbGxzOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVByb2Nlc3NvcihpbnQgaW5kZXgpCi0JewotCQlJUHJvY2Vzc29ySW5zdGFsbCByZW1vdmVkID0gaW5zdGFsbHNbaW5kZXhdOwotCQlpZiAoIXJlbW92ZWQuaXNDb250cmlidXRlZCgpKQotCQkJdXNlckluc3RhbGxzLnJlbW92ZShyZW1vdmVkKTsKLQkJSVByb2Nlc3Nvckluc3RhbGxbXSBuZXdpbnN0YWxscyA9IG5ldyBJUHJvY2Vzc29ySW5zdGFsbFtpbnN0YWxscy5sZW5ndGggLSAxXTsKLQkJU3lzdGVtLmFycmF5Y29weShpbnN0YWxscywgMCwgbmV3aW5zdGFsbHMsIDAsIGluZGV4KTsKLQkJU3lzdGVtLmFycmF5Y29weShpbnN0YWxscywgaW5kZXggKyAxLCBuZXdpbnN0YWxscywgaW5kZXgsIG5ld2luc3RhbGxzLmxlbmd0aCAtIGluZGV4KTsKLQkJaW5zdGFsbHMgPSBuZXdpbnN0YWxsczsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3Nvckluc3RhbGxbXSBnZXRQcm9jZXNzb3JzKCkKLQl7Ci0JCWlmIChpbnN0YWxscyA9PSBudWxsKQotCQl7Ci0JCQlpbnN0YWxscyA9IG5ldyBJUHJvY2Vzc29ySW5zdGFsbFtjb250cmlidXRlZEluc3RhbGxzLnNpemUoKSArIHVzZXJJbnN0YWxscy5zaXplKCldOwotCQkJaW50IHN0YXJ0SW5kZXggPSAwOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250cmlidXRlZEluc3RhbGxzLnNpemUoKTsgaSsrKQotCQkJewotCQkJCWluc3RhbGxzW2ldID0gY29udHJpYnV0ZWRJbnN0YWxscy5nZXQoaSk7Ci0JCQkJc3RhcnRJbmRleCA9IGkgKyAxOwotCQkJfQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VySW5zdGFsbHMuc2l6ZSgpOyBpKyspCi0JCQl7Ci0JCQkJaW5zdGFsbHNbc3RhcnRJbmRleCArIGldID0gdXNlckluc3RhbGxzLmdldChpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW5zdGFsbHM7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnN0YWxsW10gZ2V0UHJvY2Vzc29ycyhTdHJpbmcgaWQpCi0JewotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gZ2V0UHJvY2Vzc29ycygpOwotCQlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPigpOwotCQlmb3IgKElQcm9jZXNzb3JJbnN0YWxsIHR5cGUgOiBpbnN0YWxscykKLQkJewotCQkJaWYgKHR5cGUuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldElkKCkuZXF1YWxzKGlkKSkKLQkJCQlyZXN1bHQuYWRkKHR5cGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQudG9BcnJheShuZXcgSVByb2Nlc3Nvckluc3RhbGxbMF0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRQcm9jZXNzb3IoSVByb2Nlc3Nvckluc3RhbGwgZGVmYXVsdEluc3RhbGwpCi0JewotCQlkZWZhdWx0UHJvY2Vzc29yID0gZGVmYXVsdEluc3RhbGw7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnN0YWxsIGdldERlZmF1bHRQcm9jZXNzb3IoKQotCXsKLQkJcmV0dXJuIGRlZmF1bHRQcm9jZXNzb3I7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnN0YWxsIGdldEpSRURlZmF1bHRQcm9jZXNzb3IoKQotCXsKLQkJcmV0dXJuIGpyZURlZmF1bHRQcm9jZXNzb3I7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnN0YWxsW10gZ2V0Q29udHJpYnV0ZWRQcm9jZXNzb3JzKCkKLQl7Ci0JCXJldHVybiBjb250cmlidXRlZEluc3RhbGxzLnRvQXJyYXkobmV3IElQcm9jZXNzb3JJbnN0YWxsWzBdKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yUmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmUzZDMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeVJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX3Byb2Nlc3NvciA9ICJwcm9jZXNzb3IiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0lEID0gImlkIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9MQUJFTCA9ICJsYWJlbCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfVFlQRV9JRCA9ICJwcm9jZXNzb3JUeXBlSWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0RFQlVHR0VSX0lEID0gImRlYnVnZ2VySWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTUEFUSCA9ICJjbGFzc3BhdGgiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX1NVUFBPUlRTID0gInN1cHBvcnRzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBQcm9jZXNzb3JSZWdpc3RyeSByZWdpc3RyeTsKLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJaWYgKCFlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoVEFHX3Byb2Nlc3NvcikpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0lEKTsKLQkJaWYgKGlkID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0lEKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIGxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0xBQkVMKTsKLQkJaWYgKGxhYmVsID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0xBQkVMKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIHByb2Nlc3NvclR5cGVJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9UWVBFX0lEKTsKLQkJaWYgKHByb2Nlc3NvclR5cGVJZCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9UWVBFX0lEKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIGNsYXNzcGF0aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9DTEFTU1BBVEgpOwotCQlpZiAoY2xhc3NwYXRoID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX0NMQVNTUEFUSCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBkZWJ1Z2dlcklkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0RFQlVHR0VSX0lEKTsKLQotCQlTdHJpbmcgc3VwcG9ydHMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfU1VQUE9SVFMpOwotCQlpZiAoY2xhc3NwYXRoID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX1NVUFBPUlRTKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJcmVnaXN0cnkuYWRkUHJvY2Vzc29yKGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCksIGlkLCBsYWJlbCwgcHJvY2Vzc29yVHlwZUlkLCBjbGFzc3BhdGgsIGRlYnVnZ2VySWQsIHN1cHBvcnRzKTsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZWFkRWxlbWVudChQcm9jZXNzb3JSZWdpc3RyeSByZWdpc3RyeSwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRFbGVtZW50KGVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZENvbmZpZ3MoUHJvY2Vzc29yUmVnaXN0cnkgcmVnaXN0cnkpCi0JewotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRSZWdpc3RyeShleHRlbnNpb25SZWdpc3RyeSwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsICJwcm9jZXNzb3IiKTsgLy8kTk9OLU5MUy0xJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVmZjQ0Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklUcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkZlYXR1cmVQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5PdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlRyYW5zZm9ybWVyRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvclR5cGVSZWdpc3RyeQotewotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NfU1VGRklYID0gIi5ERVNDIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfU1VGRklYID0gIi5UWVBFIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBMaXN0PElDb25maWd1cmF0aW9uRWxlbWVudD4gZWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PElDb25maWd1cmF0aW9uRWxlbWVudD4oKTsKLQlwcml2YXRlIElQcm9jZXNzb3JUeXBlW10gaW5zdGFsbFR5cGVzOwotCi0JcHVibGljIFByb2Nlc3NvclR5cGVSZWdpc3RyeSgpCi0JewotCQlQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIgcmVnaXN0cnlSZWFkZXIgPSBuZXcgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyKCk7Ci0JCXJlZ2lzdHJ5UmVhZGVyLmFkZENvbmZpZ3ModGhpcyk7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JUeXBlW10gZ2V0UHJvY2Vzc29yVHlwZXMoKQotCXsKLQkJaWYgKGluc3RhbGxUeXBlcyA9PSBudWxsKQotCQl7Ci0JCQlMaXN0PFByb2Nlc3NvclR5cGU+IHR5cGVzID0gbmV3IEFycmF5TGlzdDxQcm9jZXNzb3JUeXBlPigpOwotCQkJU3RyaW5nIGZlYXR1cmVYTUxTdHJpbmcgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhKQVhQUnVudGltZS5QUkVGX0ZFQVRVUkVfWE1MKTsKLQkJCS8vIElmIHRoZSBwcmVmZXJlbmNlIHdhcyBmb3VuZCwgbG9hZCBWTXMgZnJvbSBpdCBpbnRvIG1lbW9yeQotCQkJRmVhdHVyZVByZWZlcmVuY2VzIHByZWZzID0gbnVsbDsKLQkJCWlmIChmZWF0dXJlWE1MU3RyaW5nLmxlbmd0aCgpID4gMCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGZlYXR1cmVYTUxTdHJpbmcuZ2V0Qnl0ZXMoKSk7Ci0JCQkJCXByZWZzID0gRmVhdHVyZVByZWZlcmVuY2VzLmZyb21YTUwoaW5wdXRTdHJlYW0pOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCi0JCQlTdHJpbmcgcHJvcFhNTFN0cmluZyA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKEpBWFBSdW50aW1lLlBSRUZfT1VUUFVUX1BST1BFUlRJRVNfWE1MKTsKLQkJCS8vIElmIHRoZSBwcmVmZXJlbmNlIHdhcyBmb3VuZCwgbG9hZCBWTXMgZnJvbSBpdCBpbnRvIG1lbW9yeQotCQkJT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyBvdXRwdXRwcmVmcyA9IG51bGw7Ci0JCQlpZiAocHJvcFhNTFN0cmluZy5sZW5ndGgoKSA+IDApCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShwcm9wWE1MU3RyaW5nLmdldEJ5dGVzKCkpOwotCQkJCQlvdXRwdXRwcmVmcyA9IE91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWZvciAoSXRlcmF0b3I8SUNvbmZpZ3VyYXRpb25FbGVtZW50PiBpdGVyID0gZWxlbWVudHMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQkJewotCQkJCUlDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gaXRlci5uZXh0KCk7Ci0JCQkJU3RyaW5nIGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9JRCk7Ci0JCQkJU3RyaW5nIGxhYmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9MQUJFTCk7Ci0JCQkJTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJlVmFsdWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0JCQkJTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0eVZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCQkJCWlmIChwcmVmcyAhPSBudWxsICYmIHByZWZzLmdldEZlYXR1cmVzVmFsdWVzKGlkKSAhPSBudWxsKQotCQkJCQlmZWF0dXJlVmFsdWVzLnB1dEFsbChwcmVmcy5nZXRGZWF0dXJlc1ZhbHVlcyhpZCkpOwotCQkJCWlmIChvdXRwdXRwcmVmcyAhPSBudWxsICYmIG91dHB1dHByZWZzLmdldE91dHB1dFByb3BlcnR5VmFsdWVzKGlkKSAhPSBudWxsKQotCQkJCQlwcm9wZXJ0eVZhbHVlcy5wdXRBbGwob3V0cHV0cHJlZnMuZ2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoaWQpKTsKLQotCQkJCVN0cmluZyBvdXRwdXRQcm9wZXJ0aWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9PVVRQVVRfUFJPUEVSVElFUyk7Ci0JCQkJVVJMIG91dHB1dFByb3BlcnRpZXNVUkwgPSBGaWxlTG9jYXRvci5maW5kKFBsYXRmb3JtLmdldEJ1bmRsZShlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpKSwgbmV3IFBhdGgob3V0cHV0UHJvcGVydGllcyksIG51bGwpOwotCQkJCVN0cmluZyBmZWF0dXJlUHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlci5BVFRfQVRUUklCVVRFX1BST1BFUlRJRVMpOwotCQkJCVVSTCBmZWF0dXJlUHJvcGVydGllc1VSTCA9IEZpbGVMb2NhdG9yLmZpbmQoUGxhdGZvcm0uZ2V0QnVuZGxlKGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkpLCBuZXcgUGF0aChmZWF0dXJlUHJvcGVydGllcyksIG51bGwpOwotCQkJCQotCQkJCUxpc3Q8SVRyYW5zZm9ybWVyRmFjdG9yeT4gdHJhbnNGYWN0b3J5TGlzdCA9IG5ldyBBcnJheUxpc3Q8SVRyYW5zZm9ybWVyRmFjdG9yeT4oKTsKLQkJCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSB0cmFuc0ZhY3RFbHMgPSBlbGVtZW50LmdldENoaWxkcmVuKFByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlci5FTF9UUkFOU0ZPUk1FUl9GQUNUT1JZKTsKLQkJCQlmb3IgKElDb25maWd1cmF0aW9uRWxlbWVudCB0cmFuc0ZhY3RFbCA6IHRyYW5zRmFjdEVscykKLQkJCQl7Ci0JCQkJCVN0cmluZyB0cmFuc0ZhY3RvcnlOYW1lID0gdHJhbnNGYWN0RWwuZ2V0QXR0cmlidXRlKFByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlci5BVFRfVFJBTlNGT1JNRVJfRkFDVE9SWV9OQU1FKTsKLQkJCQkJU3RyaW5nIHRyYW5zRmFjdG9yeUNsYXNzID0gdHJhbnNGYWN0RWwuZ2V0QXR0cmlidXRlKFByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlci5BVFRfVFJBTlNGT1JNRVJfRkFDVE9SWV9DTEFTUyk7Ci0JCQkJCXRyYW5zRmFjdG9yeUxpc3QuYWRkKG5ldyBUcmFuc2Zvcm1lckZhY3RvcnkodHJhbnNGYWN0b3J5TmFtZSx0cmFuc0ZhY3RvcnlDbGFzcykpOwotCQkJCX0KLQkJCQkKLQkJCQl0eXBlcy5hZGQobmV3IFByb2Nlc3NvclR5cGUoaWQsIGxhYmVsLCBmZWF0dXJlUHJvcGVydGllc1VSTCwgb3V0cHV0UHJvcGVydGllc1VSTCwgZmVhdHVyZVZhbHVlcywgcHJvcGVydHlWYWx1ZXMsIHRyYW5zRmFjdG9yeUxpc3QudG9BcnJheShuZXcgSVRyYW5zZm9ybWVyRmFjdG9yeVswXSkpKTsKLQkJCX0KLQkJCWluc3RhbGxUeXBlcyA9IHR5cGVzLnRvQXJyYXkobmV3IElQcm9jZXNzb3JUeXBlWzBdKTsKLQkJfQotCQlyZXR1cm4gaW5zdGFsbFR5cGVzOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29yVHlwZVtdIGdldFByb2Nlc3NvclR5cGVzRXhjbEpSRURlZmF1bHQoKQotCXsKLQkJSVByb2Nlc3NvclR5cGVbXSBpbnN0YWxsVHlwZXMgPSBnZXRQcm9jZXNzb3JUeXBlcygpOwotCQlMaXN0PElQcm9jZXNzb3JUeXBlPiBleGNsVHlwZXMgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JUeXBlPihpbnN0YWxsVHlwZXMubGVuZ3RoIC0gMSk7Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IGluc3RhbGxUeXBlcykKLQkJewotCQkJaWYgKCF0eXBlLmlzSlJFRGVmYXVsdCgpKQotCQkJCWV4Y2xUeXBlcy5hZGQodHlwZSk7Ci0JCX0KLQkJcmV0dXJuIGV4Y2xUeXBlcy50b0FycmF5KG5ldyBJUHJvY2Vzc29yVHlwZVswXSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVHlwZShJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCWVsZW1lbnRzLmFkZChlbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZShTdHJpbmcgaWQpCi0JewotCQlJUHJvY2Vzc29yVHlwZVtdIGluc3RhbGxUeXBlcyA9IGdldFByb2Nlc3NvclR5cGVzKCk7Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IGluc3RhbGxUeXBlcykKLQkJewotCQkJaWYgKHR5cGUuZ2V0SWQoKS5lcXVhbHMoaWQpKQotCQkJCXJldHVybiB0eXBlOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAzMGM0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX3Byb2Nlc3NvclR5cGUgPSAicHJvY2Vzc29yVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9PVVRQVVRfUFJPUEVSVElFUyA9ICJvdXRwdXRQcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9BVFRSSUJVVEVfUFJPUEVSVElFUyA9ICJhdHRyaWJ1dGVQcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMX1RSQU5TRk9STUVSX0ZBQ1RPUlkgPSAidHJhbnNmb3JtZXJGYWN0b3J5IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZX05BTUUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfVFJBTlNGT1JNRVJfRkFDVE9SWV9DTEFTUyA9ICJmYWN0b3J5Q2xhc3MiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFByb2Nlc3NvclR5cGVSZWdpc3RyeSByZWdpc3RyeTsKLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJaWYgKCFlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoVEFHX3Byb2Nlc3NvclR5cGUpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9JRCk7Ci0JCWlmIChpZCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9JRCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBsYWJlbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9MQUJFTCk7Ci0JCWlmIChsYWJlbCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9MQUJFTCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBvdXRwdXRQcm9wZXJ0aWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX09VVFBVVF9QUk9QRVJUSUVTKTsKLQkJaWYgKG91dHB1dFByb3BlcnRpZXMgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfT1VUUFVUX1BST1BFUlRJRVMpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgZmVhdHVyZVByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQVRUUklCVVRFX1BST1BFUlRJRVMpOwotCQlpZiAoZmVhdHVyZVByb3BlcnRpZXMgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfQVRUUklCVVRFX1BST1BFUlRJRVMpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZWdpc3RyeS5hZGRUeXBlKGVsZW1lbnQpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRFbGVtZW50KFByb2Nlc3NvclR5cGVSZWdpc3RyeSByZWdpc3RyeSwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRFbGVtZW50KGVsZW1lbnQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZENvbmZpZ3MoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5KQotCXsKLQkJSUV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQlyZWFkUmVnaXN0cnkoZXh0ZW5zaW9uUmVnaXN0cnksIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAicHJvY2Vzc29yVHlwZSIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL21vZGVsL0pBWFBEZWJ1Z1RhcmdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL21vZGVsL0pBWFBEZWJ1Z1RhcmdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjcwNjQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9tb2RlbC9KQVhQRGVidWdUYXJnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5Db25uZWN0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlckRlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JTGluZUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JTWVtb3J5QmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklTdGFja0ZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVRocmVhZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuRGVidWdDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkJhc2VMYXVuY2hIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuSVhTTENvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5JWFNMRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMRGVidWdFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFN0YWNrRnJhbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMVGhyZWFkOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFZhcmlhYmxlOwotCi1wdWJsaWMgY2xhc3MgSkFYUERlYnVnVGFyZ2V0IGV4dGVuZHMgWFNMRGVidWdFbGVtZW50IGltcGxlbWVudHMgSVhTTERlYnVnVGFyZ2V0IHsKLQlwcml2YXRlIGZpbmFsIGJ5dGVbXSBTVEFDS19GUkFNRVNfTE9DSyA9IG5ldyBieXRlWzBdOwotCXByaXZhdGUgZmluYWwgYnl0ZVtdIFZBTFVFX01BUF9MT0NLID0gbmV3IGJ5dGVbMF07Ci0JcHJpdmF0ZSBmaW5hbCBieXRlW10gV1JJVEVfTE9DSyA9IG5ldyBieXRlWzBdOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RfQVRURU1QVFMgPSA2MDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVF9XQUlUID0gMTAwMDsKLQotCXByaXZhdGUgZmluYWwgSVByb2Nlc3MgcHJvY2VzczsKLQlwcml2YXRlIGZpbmFsIElMYXVuY2ggbGF1bmNoOwotCXByaXZhdGUgWFNMVGhyZWFkIHRocmVhZDsKLQlwcml2YXRlIElUaHJlYWRbXSB0aHJlYWRzID0gbmV3IElUaHJlYWRbMF07Ci0JcHJpdmF0ZSBJU3RhY2tGcmFtZVtdIHN0YWNrRnJhbWVzQ2FjaGUgPSBuZXcgSVN0YWNrRnJhbWVbMF07Ci0KLQlwcml2YXRlIEV2ZW50RGlzcGF0Y2hKb2IgZXZlbnREaXNwYXRjaDsKLQotCXByaXZhdGUgZmluYWwgTWFwPEludGVnZXIsIFhTTFZhcmlhYmxlPiB2YXJpYWJsZU1hcENhY2hlID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgWFNMVmFyaWFibGU+KCk7Ci0JcHJpdmF0ZSBmaW5hbCBNYXA8WFNMVmFyaWFibGUsIFhTTFZhbHVlPiB2YWx1ZU1hcENhY2hlID0gbmV3IEhhc2hNYXA8WFNMVmFyaWFibGUsIFhTTFZhbHVlPigpOwotCXByaXZhdGUgU3RyaW5nIG5hbWU7Ci0JcHJpdmF0ZSBib29sZWFuIHN1c3BlbmRlZDsKLQotCXByaXZhdGUgU29ja2V0IHJlcXVlc3RTb2NrZXQ7Ci0JcHJpdmF0ZSBTb2NrZXQgZXZlbnRTb2NrZXQ7Ci0JcHJpdmF0ZSBTb2NrZXQgZ2VuZXJhdGVTb2NrZXQ7Ci0JcHJpdmF0ZSBCdWZmZXJlZFJlYWRlciByZXF1ZXN0UmVhZGVyOwotCXByaXZhdGUgQnVmZmVyZWRSZWFkZXIgZXZlbnRSZWFkZXI7Ci0JcHJpdmF0ZSBQcmludFdyaXRlciByZXF1ZXN0V3JpdGVyOwotCXByaXZhdGUgUmVhZGVyIGdlbmVyYXRlUmVhZGVyOwotCXByaXZhdGUgYm9vbGVhbiBzdGFsZTsKLQotCXB1YmxpYyBKQVhQRGVidWdUYXJnZXQoSUxhdW5jaCBsYXVuY2gsIElQcm9jZXNzIHByb2Nlc3MsCi0JCQlCYXNlTGF1bmNoSGVscGVyIEJhc2VMYXVuY2hIZWxwZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJc3VwZXIobnVsbCk7Ci0JCXRoaXMubGF1bmNoID0gbGF1bmNoOwotCQl0aGlzLnByb2Nlc3MgPSBwcm9jZXNzOwotCQl0aGlzLnJlcXVlc3RTb2NrZXQgPSBhdHRlbXB0Q29ubmVjdChCYXNlTGF1bmNoSGVscGVyLmdldFJlcXVlc3RQb3J0KCkpOwotCQl0aGlzLmV2ZW50U29ja2V0ID0gYXR0ZW1wdENvbm5lY3QoQmFzZUxhdW5jaEhlbHBlci5nZXRFdmVudFBvcnQoKSk7Ci0JCXRoaXMuZ2VuZXJhdGVTb2NrZXQgPSBhdHRlbXB0Q29ubmVjdChCYXNlTGF1bmNoSGVscGVyLmdldEdlbmVyYXRlUG9ydCgpKTsKLQotCQlpZiAoIXByb2Nlc3MuaXNUZXJtaW5hdGVkKCkpIHsKLQkJCXRyeSB7Ci0JCQkJdGhpcy5ldmVudFJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZXZlbnRTb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKSkpOwotCQkJCXRoaXMucmVxdWVzdFdyaXRlciA9IG5ldyBQcmludFdyaXRlcihyZXF1ZXN0U29ja2V0LmdldE91dHB1dFN0cmVhbSgpKTsKLQkJCQl0aGlzLnJlcXVlc3RSZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHJlcXVlc3RTb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKSkpOwotCQkJCXRoaXMuZ2VuZXJhdGVSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZ2VuZXJhdGVTb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKSk7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJYWJvcnQoTWVzc2FnZXMuWFNMRGVidWdUYXJnZXRfMCwgZSk7IAotCQkJfQotCQkJdGhpcy50aHJlYWQgPSBuZXcgWFNMVGhyZWFkKHRoaXMpOwotCQkJdGhpcy50aHJlYWRzID0gbmV3IElUaHJlYWRbXSB7IHRocmVhZCB9OwotCQkJdGhpcy5ldmVudERpc3BhdGNoID0gbmV3IEV2ZW50RGlzcGF0Y2hKb2IoKTsKLQkJCXRoaXMuZXZlbnREaXNwYXRjaC5zY2hlZHVsZSgpOwotCQkJCi0JCQlEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnJlYWtwb2ludE1hbmFnZXIoKS5hZGRCcmVha3BvaW50TGlzdGVuZXIodGhpcyk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIFJlYWRlciBnZXRHZW5lcmF0ZVJlYWRlcigpCi0JewotCQlyZXR1cm4gZ2VuZXJhdGVSZWFkZXI7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFib3J0KFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZSkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJaWYgKCFnZXREZWJ1Z1RhcmdldCgpLmlzVGVybWluYXRlZCgpKQotCQkJZ2V0RGVidWdUYXJnZXQoKS5nZXRQcm9jZXNzKCkudGVybWluYXRlKCk7Ci0JCXRocm93IG5ldyBEZWJ1Z0V4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIERlYnVnUGx1Z2luLklOVEVSTkFMX0VSUk9SLCBtZXNzYWdlLAotCQkJCWUpKTsKLQl9Ci0KLQlwcml2YXRlIFNvY2tldCBhdHRlbXB0Q29ubmVjdChpbnQgcG9ydCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlTb2NrZXQgc29ja2V0ID0gbnVsbDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBDT05ORUNUX0FUVEVNUFRTOyBpKyspIHsKLQkJCS8vIGJyZWFrIG91dCBpZiBwcm9jZXNzIGlzIHRlcm1pbmF0ZWQKLQkJCWlmIChwcm9jZXNzLmlzVGVybWluYXRlZCgpKQotCQkJCWJyZWFrOwotCQkJdHJ5IHsKLQkJCQlzb2NrZXQgPSBuZXcgU29ja2V0KAotCQkJCQkJTWVzc2FnZXMuWFNMRGVidWdUYXJnZXRfMSwgcG9ydCk7IAotCQkJfSBjYXRjaCAoQ29ubmVjdEV4Y2VwdGlvbiBlKSB7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCQlpZiAoc29ja2V0ICE9IG51bGwpCi0JCQkJYnJlYWs7Ci0JCQl0cnkgewotCQkJCVRocmVhZC5zbGVlcChDT05ORUNUX1dBSVQpOwotCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JCWlmIChzb2NrZXQgPT0gbnVsbCAmJiAhcHJvY2Vzcy5pc1Rlcm1pbmF0ZWQoKSkKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCQluZXcgU3RhdHVzKAotCQkJCQkJCUlTdGF0dXMuRVJST1IsCi0JCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsCi0JCQkJCQkJTWVzc2FnZXMuWFNMRGVidWdUYXJnZXRfMiArIHBvcnQgKyBNZXNzYWdlcy5YU0xEZWJ1Z1RhcmdldF8zICsgQ09OTkVDVF9BVFRFTVBUUyArIE1lc3NhZ2VzLlhTTERlYnVnVGFyZ2V0XzQpKTsgCi0JCXJldHVybiBzb2NrZXQ7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzIGdldFByb2Nlc3MoKSB7Ci0JCXJldHVybiBwcm9jZXNzOwotCX0KLQotCXB1YmxpYyBJVGhyZWFkW10gZ2V0VGhyZWFkcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXJldHVybiB0aHJlYWRzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc1RocmVhZHMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlyZXR1cm4gdGhyZWFkcyAhPSBudWxsICYmIHRocmVhZHMubGVuZ3RoID4gMDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gbGF1bmNoLmdldEF0dHJpYnV0ZSgibGF1bmNoTmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gc3VwcG9ydHNCcmVha3BvaW50KElCcmVha3BvaW50IGJyZWFrcG9pbnQpIHsKLQkJaWYgKGJyZWFrcG9pbnQuZ2V0TW9kZWxJZGVudGlmaWVyKCkuZXF1YWxzKAotCQkJCUlYU0xDb25zdGFudHMuSURfWFNMX0RFQlVHX01PREVMKQotCQkJCSYmIGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBJTGluZUJyZWFrcG9pbnQpIHsKLQkJCS8vIHRyeQotCQkJLy8gewotCQkJLy8gSUxpbmVCcmVha3BvaW50IGxiID0gKElMaW5lQnJlYWtwb2ludCkgYnJlYWtwb2ludDsKLQkJCS8vIElNYXJrZXIgbWFya2VyID0gbGIuZ2V0TWFya2VyKCk7Ci0JCQkvLyBmb3IgKEl0ZXJhdG9yPD8+IGl0ZXIgPQotCQkJLy8gQmFzZUxhdW5jaEhlbHBlci5nZXRQaXBlbGluZSgpLmdldFRyYW5zZm9ybURlZnMoKS5pdGVyYXRvcigpOwotCQkJLy8gaXRlci5oYXNOZXh0KCk7KQotCQkJLy8gewotCQkJLy8gTGF1bmNoVHJhbnNmb3JtIGx0ID0gKExhdW5jaFRyYW5zZm9ybSkgaXRlci5uZXh0KCk7Ci0JCQkvLyBpZiAobWFya2VyLmdldFJlc291cmNlKCkuZ2V0TG9jYXRpb24oKS5lcXVhbHMobHQuZ2V0TG9jYXRpb24oKSkpCi0JCQkvLyByZXR1cm4gdHJ1ZTsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQkvLyB7Ci0JCQkvLyBKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCS8vIH0KLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSURlYnVnVGFyZ2V0IGdldERlYnVnVGFyZ2V0KCkgewotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSUxhdW5jaCBnZXRMYXVuY2goKSB7Ci0JCXJldHVybiBsYXVuY2g7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuVGVybWluYXRlKCkgewotCQlyZXR1cm4gZ2V0UHJvY2VzcygpLmNhblRlcm1pbmF0ZSgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzVGVybWluYXRlZCgpIHsKLQkJcmV0dXJuIGdldFByb2Nlc3MoKS5pc1Rlcm1pbmF0ZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXJtaW5hdGUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzeW5jaHJvbml6ZWQgKFdSSVRFX0xPQ0spIHsKLQkJCWdldFByb2Nlc3MoKS50ZXJtaW5hdGUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblJlc3VtZSgpIHsKLQkJcmV0dXJuICFpc1Rlcm1pbmF0ZWQoKSAmJiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN1c3BlbmQoKSB7Ci0JCXJldHVybiAhaXNUZXJtaW5hdGVkKCkgJiYgIWlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNTdXNwZW5kZWQoKSB7Ci0JCXJldHVybiBzdXNwZW5kZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVzdW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9SRVNVTUUpOwotCX0KLQotCXByaXZhdGUgdm9pZCByZXN1bWVkKGludCBkZXRhaWwpIHsKLQkJc3VzcGVuZGVkID0gZmFsc2U7Ci0JCXRocmVhZC5maXJlUmVzdW1lRXZlbnQoZGV0YWlsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3VzcGVuZGVkKGludCBkZXRhaWwpIHsKLQkJc3VzcGVuZGVkID0gdHJ1ZTsKLQkJdGhyZWFkLmZpcmVTdXNwZW5kRXZlbnQoZGV0YWlsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdXNwZW5kKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVVNQRU5EKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBicmVha3BvaW50QWRkZWQoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCkgewotCQlpZiAoc3VwcG9ydHNCcmVha3BvaW50KGJyZWFrcG9pbnQpKSB7Ci0JCQl0cnkgewotCQkJCUlMaW5lQnJlYWtwb2ludCBsYiA9IChJTGluZUJyZWFrcG9pbnQpIGJyZWFrcG9pbnQ7Ci0JCQkJaWYgKGJyZWFrcG9pbnQuaXNFbmFibGVkKCkpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCUlNYXJrZXIgbWFya2VyID0gbGIuZ2V0TWFya2VyKCk7Ci0JCQkJCQlpZiAobWFya2VyICE9IG51bGwpIHsKLQkJCQkJCQlVUkwgZmlsZSA9IG1hcmtlci5nZXRSZXNvdXJjZSgpLmdldExvY2F0aW9uKCkKLQkJCQkJCQkJCS50b0ZpbGUoKS50b1VSSSgpLnRvVVJMKCk7Ci0JCQkJCQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9BRERfQlJFQUtQT0lOVAotCQkJCQkJCQkJKyAiICIgKyBmaWxlICsgIiAiICsgbGIuZ2V0TGluZU51bWJlcigpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgYnJlYWtwb2ludFJlbW92ZWQoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCwgSU1hcmtlckRlbHRhIGRlbHRhKSB7Ci0JCWlmIChzdXBwb3J0c0JyZWFrcG9pbnQoYnJlYWtwb2ludCkpIHsKLQkJCXRyeSB7Ci0JCQkJSUxpbmVCcmVha3BvaW50IGxiID0gKElMaW5lQnJlYWtwb2ludCkgYnJlYWtwb2ludDsKLQkJCQlJTWFya2VyIG1hcmtlciA9IGxiLmdldE1hcmtlcigpOwotCQkJCWlmIChtYXJrZXIgIT0gbnVsbCkgewotCQkJCQlVUkwgZmlsZSA9IG1hcmtlci5nZXRSZXNvdXJjZSgpLmdldExvY2F0aW9uKCkudG9GaWxlKCkKLQkJCQkJCQkudG9VUkkoKS50b1VSTCgpOwotCQkJCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1JFTU9WRV9CUkVBS1BPSU5UCi0JCQkJCQkJKyAiICIgKyBmaWxlICsgIiAiICsgbGIuZ2V0TGluZU51bWJlcigpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgYnJlYWtwb2ludENoYW5nZWQoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCwgSU1hcmtlckRlbHRhIGRlbHRhKSB7Ci0JCWlmIChzdXBwb3J0c0JyZWFrcG9pbnQoYnJlYWtwb2ludCkpIHsKLQkJCXRyeSB7Ci0JCQkJaWYgKGJyZWFrcG9pbnQuaXNFbmFibGVkKCkpIHsKLQkJCQkJYnJlYWtwb2ludEFkZGVkKGJyZWFrcG9pbnQpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWJyZWFrcG9pbnRSZW1vdmVkKGJyZWFrcG9pbnQsIG51bGwpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gY2FuRGlzY29ubmVjdCgpIHsKLQkJLy8gVE9ETyBpbXBsZW1lbnQgZGlzY29ubmVjdAotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE8gaW1wbGVtZW50IGRpc2Nvbm5lY3QKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBpc0Rpc2Nvbm5lY3RlZCgpIHsKLQkJLy8gVE9ETyBpbXBsZW1lbnQgZGlzY29ubmVjdAotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gc3VwcG9ydHNTdG9yYWdlUmV0cmlldmFsKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIElNZW1vcnlCbG9jayBnZXRNZW1vcnlCbG9jayhsb25nIHN0YXJ0QWRkcmVzcywgbG9uZyBsZW5ndGgpCi0JCQl0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVhZHkoKSB7Ci0JCWZpcmVDcmVhdGlvbkV2ZW50KCk7Ci0JCWluc3RhbGxEZWZlcnJlZEJyZWFrcG9pbnRzKCk7Ci0JCXRyeSB7Ci0JCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NUQVJUKTsKLQkJfSBjYXRjaCAoRGVidWdFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEluc3RhbGwgYnJlYWtwb2ludHMgdGhhdCBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggdGhlIGJyZWFrcG9pbnQKLQkgKiBtYW5hZ2VyLgotCSAqLwotCXByaXZhdGUgdm9pZCBpbnN0YWxsRGVmZXJyZWRCcmVha3BvaW50cygpIHsKLQkJSUJyZWFrcG9pbnRbXSBicmVha3BvaW50cyA9IERlYnVnUGx1Z2luLmdldERlZmF1bHQoKQotCQkJCS5nZXRCcmVha3BvaW50TWFuYWdlcigpLmdldEJyZWFrcG9pbnRzKAotCQkJCQkJSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUwpOwotCQlmb3IgKElCcmVha3BvaW50IGVsZW1lbnQgOiBicmVha3BvaW50cykgewotCQkJYnJlYWtwb2ludEFkZGVkKGVsZW1lbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlcm1pbmF0ZWQoKSB7Ci0JCXN1c3BlbmRlZCA9IHRydWU7Ci0JCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCcmVha3BvaW50TWFuYWdlcigpLnJlbW92ZUJyZWFrcG9pbnRMaXN0ZW5lcih0aGlzKTsKLQkJdGhyZWFkcyA9IG5ldyBJVGhyZWFkWzBdOwotCQlmaXJlVGVybWluYXRlRXZlbnQoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lcyBpbiB0aGUgdGFyZ2V0LgotCSAqLwotCXB1YmxpYyBJU3RhY2tGcmFtZVtdIGdldFN0YWNrRnJhbWVzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc3luY2hyb25pemVkIChTVEFDS19GUkFNRVNfTE9DSykgewotCQkJaWYgKHN0YWxlKSB7Ci0JCQkJc3RhbGUgPSBmYWxzZTsKLQkJCQlTdHJpbmcgZnJhbWVzRGF0YSA9IHNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RBQ0spOwotCQkJCVN0cmluZ1tdIGZyYW1lcyA9IGZyYW1lc0RhdGEuc3BsaXQoIlxcJFxcJFxcJCIpOyAvLyROT04tTkxTLTEkCi0JCQkJSVN0YWNrRnJhbWVbXSBzZiA9IG5ldyBJU3RhY2tGcmFtZVtmcmFtZXMubGVuZ3RoXTsKLQkJCQlMaXN0PElTdGFja0ZyYW1lPiBjdXJyZW50RnJhbWVzID0gQXJyYXlzCi0JCQkJCQkuYXNMaXN0KHN0YWNrRnJhbWVzQ2FjaGUpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCVN0cmluZyBkYXRhID0gZnJhbWVzW2ldOwotCQkJCQlYU0xTdGFja0ZyYW1lIGZyYW1lID0gbmV3IFhTTFN0YWNrRnJhbWUodGhyZWFkLCBkYXRhLCBpKTsKLQkJCQkJaW50IGluZGV4OwotCQkJCQlpZiAoKGluZGV4ID0gY3VycmVudEZyYW1lcy5pbmRleE9mKGZyYW1lKSkgIT0gLTEpIHsKLQkJCQkJCVhTTFN0YWNrRnJhbWUgY3VyciA9IChYU0xTdGFja0ZyYW1lKSBjdXJyZW50RnJhbWVzCi0JCQkJCQkJCS5nZXQoaW5kZXgpOwotCQkJCQkJY3Vyci5zZXRMaW5lTnVtYmVyKGZyYW1lLmdldExpbmVOdW1iZXIoKSk7Ci0JCQkJCQljdXJyLnNldFZhcmlhYmxlcyhmcmFtZS5nZXRWYXJpYWJsZXMoKSk7Ci0JCQkJCQlmcmFtZSA9IGN1cnI7Ci0JCQkJCX0KLQkJCQkJc2ZbZnJhbWVzLmxlbmd0aCAtIGkgLSAxXSA9IGZyYW1lOwotCQkJCX0KLQkJCQlzdGFja0ZyYW1lc0NhY2hlID0gc2Y7Ci0JCQl9Ci0JCQlyZXR1cm4gc3RhY2tGcmFtZXNDYWNoZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZXNzZXRTdGFja0ZyYW1lc0NhY2hlKCkgewotCQlzdGFsZSA9IHRydWU7Ci0JCXN5bmNocm9uaXplZCAoVkFMVUVfTUFQX0xPQ0spIHsKLQkJCXZhbHVlTWFwQ2FjaGUuY2xlYXIoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFNpbmdsZSBzdGVwIHRoZSBpbnRlcnByZXRlci4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGVwT3ZlcigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RFUF9PVkVSKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwSW50bygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RFUF9JTlRPKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwUmV0dXJuKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEVQX1JFVFVSTik7Ci0JfQotCi0JcHVibGljIFhTTFZhcmlhYmxlIGdldFZhcmlhYmxlKGludCB2YXJJZCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc3luY2hyb25pemVkICh2YXJpYWJsZU1hcENhY2hlKSB7Ci0JCQlYU0xWYXJpYWJsZSB2YXIgPSB2YXJpYWJsZU1hcENhY2hlLmdldCh2YXJJZCk7Ci0JCQlpZiAodmFyID09IG51bGwpIHsKLQkJCQl2YXIgPSBuZXcgWFNMVmFyaWFibGUodGhpcywgdmFySWQpOwotCQkJCVN0cmluZyByZXMgPSBzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1ZBUklBQkxFCi0JCQkJCQkrICIgIiArIHZhcklkKTsgLy8kTk9OLU5MUy0xJAotCQkJCVN0cmluZ1tdIGRhdGEgPSByZXMuc3BsaXQoIiYiKTsgLy8kTk9OLU5MUy0xJAotCQkJCXZhci5zZXRTY29wZShkYXRhWzBdKTsKLQkJCQl2YXIuc2V0TmFtZShkYXRhWzFdKTsKLQkJCQl2YXJpYWJsZU1hcENhY2hlLnB1dCh2YXJJZCwgdmFyKTsKLQkJCX0KLQkJCXJldHVybiB2YXI7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgSVZhbHVlIGdldFZhcmlhYmxlVmFsdWUoWFNMVmFyaWFibGUgdmFyaWFibGUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXN5bmNocm9uaXplZCAoVkFMVUVfTUFQX0xPQ0spIHsKLQkJCVhTTFZhbHVlIHZhbHVlID0gdmFsdWVNYXBDYWNoZS5nZXQodmFyaWFibGUpOwotCQkJaWYgKHZhbHVlID09IG51bGwpIHsKLQkJCQlpZiAoaXNTdXNwZW5kZWQoKSkgewotCQkJCQlTdHJpbmcgcmVzID0gc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9WQUxVRQotCQkJCQkJCSsgIiAiICsgdmFyaWFibGUuZ2V0SWQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJU3RyaW5nW10gZGF0YSA9IHJlcy5zcGxpdCgiJiIpOyAvLyROT04tTkxTLTEkCi0JCQkJCVN0cmluZyB0eXBlID0gZGF0YVswXTsKLQkJCQkJU3RyaW5nIHRoZXZhbDsKLQkJCQkJaWYgKGRhdGEubGVuZ3RoID4gMSkKLQkJCQkJCXRoZXZhbCA9IGRhdGFbMV07Ci0JCQkJCWVsc2UKLQkJCQkJCXRoZXZhbCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCXZhbHVlID0gbmV3IFhTTFZhbHVlKHRoaXMsIHR5cGUsIHRoZXZhbCk7Ci0JCQkJCXZhbHVlTWFwQ2FjaGUucHV0KHZhcmlhYmxlLCB2YWx1ZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gYW55dGhpbmcgYXMgbG9uZyBhcyBub3QgbnVsbCEKLQkJCQkJdmFsdWUgPSBuZXcgWFNMVmFsdWUodGhpcywgIkciLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCX0KLQkJCX0KLQkJCXJldHVybiB2YWx1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nIHNlbmRSZXF1ZXN0KFN0cmluZyByZXF1ZXN0KSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlTdHJpbmcgcmVzcG9uc2UgPSBudWxsOwotCQlzeW5jaHJvbml6ZWQgKFdSSVRFX0xPQ0spIHsKLS8vCQkJaWYgKERlYnVnLmRlYnVnTGF1bmNoZXIpIHsKLS8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUkVRVUVTVDogIiArIHJlcXVlc3QpOwotLy8JCQl9Ci0JCQlyZXF1ZXN0V3JpdGVyLnByaW50bG4ocmVxdWVzdCk7Ci0JCQlyZXF1ZXN0V3JpdGVyLmZsdXNoKCk7Ci0JCQl0cnkgewotCQkJCS8vIHdhaXQgZm9yIHJlc3BvbnNlCi0JCQkJcmVzcG9uc2UgPSByZXF1ZXN0UmVhZGVyLnJlYWRMaW5lKCk7Ci0vLwkJCQlpZiAoRGVidWcuZGVidWdMYXVuY2hlcikgewotLy8JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUkVTUE9OU0U6ICIgKyByZXNwb25zZSk7Ci0vLwkJCQl9Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJYWJvcnQoTWVzc2FnZXMuWFNMRGVidWdUYXJnZXRfMTkgKyByZXF1ZXN0LCBlKTsgCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3BvbnNlOwotCX0KLQotCXByaXZhdGUgdm9pZCBicmVha3BvaW50SGl0KFN0cmluZyBldmVudCkgewotCQkvLyBkZXRlcm1pbmUgd2hpY2ggYnJlYWtwb2ludCB3YXMgaGl0LCBhbmQgc2V0IHRoZSB0aHJlYWQncyBicmVha3BvaW50Ci0JCWludCBsYXN0U3BhY2UgPSBldmVudC5sYXN0SW5kZXhPZignICcpOwotCQlpZiAobGFzdFNwYWNlID4gMCkgewotCQkJU3RyaW5nIGxpbmUgPSBldmVudC5zdWJzdHJpbmcobGFzdFNwYWNlICsgMSk7Ci0JCQlpbnQgbGluZU51bWJlciA9IEludGVnZXIucGFyc2VJbnQobGluZSk7Ci0JCQlJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzID0gRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJCS5nZXRCcmVha3BvaW50TWFuYWdlcigpLmdldEJyZWFrcG9pbnRzKAotCQkJCQkJCUlYU0xDb25zdGFudHMuSURfWFNMX0RFQlVHX01PREVMKTsKLQkJCWZvciAoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCA6IGJyZWFrcG9pbnRzKSB7Ci0JCQkJaWYgKHN1cHBvcnRzQnJlYWtwb2ludChicmVha3BvaW50KSkgewotCQkJCQlpZiAoYnJlYWtwb2ludCBpbnN0YW5jZW9mIElMaW5lQnJlYWtwb2ludCkgewotCQkJCQkJSUxpbmVCcmVha3BvaW50IGxpbmVCcmVha3BvaW50ID0gKElMaW5lQnJlYWtwb2ludCkgYnJlYWtwb2ludDsKLQkJCQkJCXRyeSB7Ci0JCQkJCQkJaWYgKGxpbmVCcmVha3BvaW50LmdldExpbmVOdW1iZXIoKSA9PSBsaW5lTnVtYmVyKSB7Ci0JCQkJCQkJCXRocmVhZAotCQkJCQkJCQkJCS5zZXRCcmVha3BvaW50cyhuZXcgSUJyZWFrcG9pbnRbXSB7IGJyZWFrcG9pbnQgfSk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0KLQkJCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXN1c3BlbmRlZChEZWJ1Z0V2ZW50LkJSRUFLUE9JTlQpOwotCX0KLQotCXByaXZhdGUgY2xhc3MgRXZlbnREaXNwYXRjaEpvYiBleHRlbmRzIEpvYiB7Ci0KLQkJcHVibGljIEV2ZW50RGlzcGF0Y2hKb2IoKSB7Ci0JCQlzdXBlcihNZXNzYWdlcy5YU0xEZWJ1Z1RhcmdldF8yMCk7IAotCQkJc2V0U3lzdGVtKHRydWUpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJCVN0cmluZyBldmVudCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAoIWlzVGVybWluYXRlZCgpICYmIGV2ZW50ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlldmVudCA9IGV2ZW50UmVhZGVyLnJlYWRMaW5lKCk7Ci0JCQkJCWlmIChldmVudCAhPSBudWxsKSB7Ci0JCQkJCQl0aHJlYWQuc2V0QnJlYWtwb2ludHMobnVsbCk7Ci0JCQkJCQl0aHJlYWQuc2V0U3RlcHBpbmcoZmFsc2UpOwotCQkJCQkJaWYgKGV2ZW50LmVxdWFscygicmVhZHkiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJewotCQkJCQkJCXJlYWR5KCk7Ci0JCQkJCQl9IGVsc2UgaWYgKGV2ZW50LmVxdWFscygic3RvcHBlZCIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQl7Ci0JCQkJCQkJdHJ5IHsKLQkJCQkJCQkJdGVybWluYXRlKCk7Ci0JCQkJCQkJfSBjYXRjaCAoRGVidWdFeGNlcHRpb24gZSkgewotCQkJCQkJCX0KLQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuZXF1YWxzKCJ0ZXJtaW5hdGVkIikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCXsKLQkJCQkJCQl0ZXJtaW5hdGVkKCk7Ci0JCQkJCQl9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0c1dpdGgoInJlc3VtZWQiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJewotCQkJCQkJCWlmIChldmVudC5lbmRzV2l0aCgic3RlcCIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQkJewotCQkJCQkJCQl0aHJlYWQuc2V0U3RlcHBpbmcodHJ1ZSk7Ci0JCQkJCQkJCXJlc3VtZWQoRGVidWdFdmVudC5TVEVQX09WRVIpOwotCQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuZW5kc1dpdGgoImNsaWVudCIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQkJewotCQkJCQkJCQlyZXN1bWVkKERlYnVnRXZlbnQuQ0xJRU5UX1JFUVVFU1QpOwotCQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJCWRlYnVnRXZlbnRNc2coZXZlbnQpOwotCQkJCQkJCX0KLQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuc3RhcnRzV2l0aCgic3VzcGVuZGVkIikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCXsKLQkJCQkJCQkvLyBjbGVhciBkb3duIHRoZSBmcmFtZXMgc28gdGhhdCB0aGV5IGFyZSByZS1mZXRjaGVkCi0JCQkJCQkJcmVzc2V0U3RhY2tGcmFtZXNDYWNoZSgpOwotCQkJCQkJCWlmIChldmVudC5lbmRzV2l0aCgiY2xpZW50IikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCXN1c3BlbmRlZChEZWJ1Z0V2ZW50LkNMSUVOVF9SRVFVRVNUKTsKLQkJCQkJCQl9IGVsc2UgaWYgKGV2ZW50LmVuZHNXaXRoKCJzdGVwIikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCXN1c3BlbmRlZChEZWJ1Z0V2ZW50LlNURVBfRU5EKTsKLQkJCQkJCQl9IGVsc2UgaWYgKGV2ZW50LmluZGV4T2YoImJyZWFrcG9pbnQiKSA+PSAwKSAvLyROT04tTkxTLTEkCi0JCQkJCQkJewotCQkJCQkJCQlicmVha3BvaW50SGl0KGV2ZW50KTsKLQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQlkZWJ1Z0V2ZW50TXNnKGV2ZW50KTsKLQkJCQkJCQl9Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCWRlYnVnRXZlbnRNc2coZXZlbnQpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQl0ZXJtaW5hdGVkKCk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCX0KLQotCQlwcml2YXRlIHZvaWQgZGVidWdFdmVudE1zZyhTdHJpbmcgZXZlbnQpIHsKLS8vCQkJaWYgKERlYnVnLmRlYnVnTGF1bmNoZXIpIHsKLS8vCQkJCSBTeXN0ZW0ub3V0LnByaW50bG4oIkRpZCBub3QgdW5kZXJzdGFuZCBldmVudDoiICsgZXZlbnQpOwotLy8JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmN2c2lnbm9yZSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRhMjU1ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJ1aWxkLnhtbAotamF2YUNvbXBpbGVyLi4uYXJncwotdGVtcC5mb2xkZXIKLUBkb3QKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTIzYWNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JhY2M4Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RodSBKYW4gMDMgMjI6MjQ6MjUgRVNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE3NjBjMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNUaHUgSnVuIDExIDAxOjM3OjU0IEdNVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZmMzZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotI1dlZCBKdWwgMzAgMjA6NTY6NTYgQlNUIDIwMDgKLWNvbXBpbGVycy5mLnVucmVzb2x2ZWQtZmVhdHVyZXM9MQotY29tcGlsZXJzLmYudW5yZXNvbHZlZC1wbHVnaW5zPTEKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MQotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5kaXNjb3VyYWdlZC1jbGFzcz0xCi1jb21waWxlcnMucC5pbnRlcm5hbD0xCi1jb21waWxlcnMucC5taXNzaW5nLWJ1bmRsZS1jbGFzc3BhdGgtZW50cmllcz0wCi1jb21waWxlcnMucC5taXNzaW5nLXBhY2thZ2VzPTIKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTEKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLWlkZW50aWZpZXI9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0xCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucy5jcmVhdGUtZG9jcz1mYWxzZQotY29tcGlsZXJzLnMuZG9jLWZvbGRlcj1kb2MKLWNvbXBpbGVycy5zLm9wZW4tdGFncz0xCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTE4Y2VhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5vc2dpLnV0aWw7YnVuZGxlLXZlcnNpb249IlszLjIuMCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtQ2xhc3NQYXRoOiAuCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZzt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLAotIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZywKLSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTc4MzRhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotamFycy5jb21waWxlLm9yZGVyID0gLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjkwMmQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nCi1CdW5kbGUtTmFtZS4wID0gWFNMIFRyYW5zZm9ybSBMYXVuY2hpbmcKLWxhdW5jaENvbmZpZ3VyYXRpb25UeXBlLm5hbWUuMCA9IFhTTAotc291cmNlTG9jYXRvci5uYW1lLjAgPSBYU0xUIFNvdXJjZSBMb29rdXAgRGlyZWN0b3IKLWV4dGVuc2lvbi1wb2ludC5uYW1lLjAgPSBYU0xUIFByb2Nlc3NvciBJbnZva2VyCi1leHRlbnNpb24tcG9pbnQubmFtZS4xID0gWFNMVCBQcm9jZXNzb3IgVHlwZQotZXh0ZW5zaW9uLXBvaW50Lm5hbWUuMiA9IFhTTFQgUHJvY2Vzc29yCi1leHRlbnNpb24tcG9pbnQubmFtZS4zID0gWFNMVCBEZWJ1Z2dlcgotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JiMWU2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQk8ZXh0ZW5zaW9uCi0JCXBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLmxhdW5jaENvbmZpZ3VyYXRpb25UeXBlcyI+Ci0JCTxsYXVuY2hDb25maWd1cmF0aW9uVHlwZQotICAgICAgICAgICAgc291cmNlTG9jYXRvcklkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5zb3VyY2VMb29rdXBEaXJlY3RvciIKLSAgICAgICAgICAgIHNvdXJjZVBhdGhDb21wdXRlcklkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5zb3VyY2VQYXRoQ29tcHV0ZXIiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiCi0JCQluYW1lPSIlbGF1bmNoQ29uZmlndXJhdGlvblR5cGUubmFtZS4wIiAvPgotCTwvZXh0ZW5zaW9uPgotCQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuc291cmNlTG9jYXRvcnMiPgotICAgICAgPHNvdXJjZUxvY2F0b3IKLSAgICAgICAgICAgIG5hbWU9IiVzb3VyY2VMb2NhdG9yLm5hbWUuMCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5YU0xUU291cmNlTG9va3VwRGlyZWN0b3IiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuc291cmNlTG9va3VwRGlyZWN0b3IiPgotICAgICAgPC9zb3VyY2VMb2NhdG9yPgotICAgPC9leHRlbnNpb24+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZVBhdGhDb21wdXRlcnMiPgotICAgICAgPHNvdXJjZVBhdGhDb21wdXRlcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlhTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5zb3VyY2VQYXRoQ29tcHV0ZXIiPgotICAgICAgPC9zb3VyY2VQYXRoQ29tcHV0ZXI+Ci0gICA8L2V4dGVuc2lvbj4KLQkKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLmJyZWFrcG9pbnRzIj4KLSAgICAgIDxicmVha3BvaW50Ci0gICAgICAJCWlkPSJ4c2xMaW5lQnJlYWtwb2ludCIKLSAgICAgICAgICAgIG1hcmtlclR5cGU9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnhzbExpbmVCcmVha3BvaW50TWFya2VyIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTExpbmVCcmVha3BvaW50Ij4KLSAgICAgIDwvYnJlYWtwb2ludD4KLSAgIDwvZXh0ZW5zaW9uPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBpZD0ieHNsTGluZUJyZWFrcG9pbnRNYXJrZXIiCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubWFya2VycyI+Ci0gICAgICA8c3VwZXIKLSAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubGluZUJyZWFrcG9pbnRNYXJrZXIiPgotICAgICAgPC9zdXBlcj4KLSAgICAgIDxwZXJzaXN0ZW50Ci0gICAgICAgICAgICB2YWx1ZT0idHJ1ZSI+Ci0gICAgICA8L3BlcnNpc3RlbnQ+Ci0gICA8L2V4dGVuc2lvbj4KLQkKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wb20ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGExNmE1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0gICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc8L2FydGlmYWN0SWQ+Ci0gICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0gICA8dmVyc2lvbj4xLjAuMjAwLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgPG5hbWU+WFNMVCBMYXVuY2hpbmcgUGx1Z2luPC9uYW1lPgotCi0gICA8cGFyZW50PgotICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhzbDwvZ3JvdXBJZD4KLSAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54c2wtcGFyZW50PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+MS4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2RldmVsb3BtZW50L2F0aGVuYS9vcmcuZWNsaXBzZS53c3QueHNsLnJlbGVuZzwvcmVsYXRpdmVQYXRoPgotICAgPC9wYXJlbnQ+Ci0KLSAgIDxidWlsZD4KLSAgICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+Ci0gICAgICA8cGx1Z2lucz4KLSAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNzwvdmVyc2lvbj4KLSAgICAgICAgIDwvcGx1Z2luPgotICAgICAgPC9wbHVnaW5zPgotICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvTGF1bmNoaW5nUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9MYXVuY2hpbmdQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhYmIxNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9MYXVuY2hpbmdQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgTGF1bmNoaW5nUGx1Z2luIGV4dGVuZHMgUGx1Z2luCi17Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZyI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBMYXVuY2hpbmdQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIExhdW5jaGluZ1BsdWdpbigpCi0JewotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICogCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBMYXVuY2hpbmdQbHVnaW4gZ2V0RGVmYXVsdCgpCi0JewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coRXhjZXB0aW9uIGUpCi0JewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCAiIiwgZSkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhDb3JlRXhjZXB0aW9uIGUpCi0JewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKGUuZ2V0U3RhdHVzKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjJlM2E4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFV0aWxzXzA7IAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIFV0aWxzXzE7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xMaW5lQnJlYWtwb2ludF8wOyAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBYU0xTdGFja0ZyYW1lXzU7ICAgICAKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1V0aWxzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWI4MDEwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1V0aWxzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1wdWJsaWMgY2xhc3MgVXRpbHMKLXsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVMb2NhdGlvbihTdHJpbmcgYnVuZGxlSWQsIFN0cmluZyBwYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBGaWxlTG9jYXRvci5maW5kKFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVJZCksIG5ldyBQYXRoKHBhdGgpLCBudWxsKTsKLQkJCWlmICh1cmwgIT0gbnVsbCkKLQkJCXsKLQkJCQlVUkwgZmlsZVVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVVcmwuZ2V0RmlsZSgpKTsKLQkJCQlsb2NhdGlvbiA9IGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwgTWVzc2FnZXMuVXRpbHNfMCArIHBhdGggKyBNZXNzYWdlcy5VdGlsc18xICsgYnVuZGxlSWQsIGUpKTsKLQkJfSAKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsdWdpbkxvY2F0aW9uKFN0cmluZyBidW5kbGVJZCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlVUkwgdXJsID0gbmV3IFVSTCgicGxhdGZvcm06L3BsdWdpbi8iK2J1bmRsZUlkKTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKHVybCAhPSBudWxsKQotCQkJewotCQkJCVVSTCBmaWxlVXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZVVybC5nZXRGaWxlKCkpOwotCQkJCWxvY2F0aW9uID0gZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5VdGlsc18wICsgYnVuZGxlSWQgKyBNZXNzYWdlcy5VdGlsc18xICsgYnVuZGxlSWQsIGUpKTsKLQkJfSAKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMUHJvcGVydHlUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFByb3BlcnR5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZGQ2YjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMUHJvcGVydHlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKLQotcHVibGljIGNsYXNzIFhTTFByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIKLXsKLQlwdWJsaWMgYm9vbGVhbiB0ZXN0KE9iamVjdCBhcmcwLCBTdHJpbmcgYXJnMSwgT2JqZWN0W10gYXJnMiwgT2JqZWN0IGFyZzMpCi0JewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xUU291cmNlTG9va3VwRGlyZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBEaXJlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTNlNzNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBEaXJlY3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5BYnN0cmFjdFNvdXJjZUxvb2t1cERpcmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuc291cmNlbG9va3VwLklTb3VyY2VMb29rdXBQYXJ0aWNpcGFudDsKLQotcHVibGljIGNsYXNzIFhTTFRTb3VyY2VMb29rdXBEaXJlY3RvciBleHRlbmRzIEFic3RyYWN0U291cmNlTG9va3VwRGlyZWN0b3IKLXsKLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFydGljaXBhbnRzKCkKLQl7Ci0JCWFkZFBhcnRpY2lwYW50cyhuZXcgSVNvdXJjZUxvb2t1cFBhcnRpY2lwYW50W117IG5ldyBYU0xUU291cmNlTG9va3VwUGFydGljaXBhbnQoKSB9KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xUU291cmNlTG9va3VwUGFydGljaXBhbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTIzMjg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5BYnN0cmFjdFNvdXJjZUxvb2t1cFBhcnRpY2lwYW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFN0YWNrRnJhbWU7Ci0KLS8qKgotICogVHJhbnNsYXRlIGEgc3RhY2sgZnJhbWUgaW50byBhIHNvdXJjZSBmaWxlIG5hbWUKLSAqLwotcHVibGljIGNsYXNzIFhTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudCBleHRlbmRzIEFic3RyYWN0U291cmNlTG9va3VwUGFydGljaXBhbnQKLXsKLQlwdWJsaWMgU3RyaW5nIGdldFNvdXJjZU5hbWUoT2JqZWN0IG9iamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBYU0xTdGFja0ZyYW1lKQotCQl7Ci0JCQlyZXR1cm4gKChYU0xTdGFja0ZyYW1lKSBvYmplY3QpLmdldFNvdXJjZU5hbWUoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xUU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTA5YTgwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXMuVmFyaWFibGVzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuSVNvdXJjZUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5JU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuY29udGFpbmVycy5EaXJlY3RvcnlTb3VyY2VDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuY29udGFpbmVycy5Gb2xkZXJTb3VyY2VDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuY29udGFpbmVycy5Qcm9qZWN0U291cmNlQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFBpcGVsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLXB1YmxpYyBjbGFzcyBYU0xUU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUgaW1wbGVtZW50cyBJU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUKLXsKLQlwdWJsaWMgSVNvdXJjZUNvbnRhaW5lcltdIGNvbXB1dGVTb3VyY2VDb250YWluZXJzKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUxpc3Q8SVNvdXJjZUNvbnRhaW5lcj4gY29udGFpbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNvdXJjZUNvbnRhaW5lcj4oKTsKLQotCQlTdHJpbmcgc291cmNlRmlsZUV4cHIgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwgKFN0cmluZykgbnVsbCk7Ci0JCUlQYXRoIHNvdXJjZUZpbGUgPSBnZXRTdWJzdGl0dXRlZFBhdGgoc291cmNlRmlsZUV4cHIpOwotCQlMYXVuY2hQaXBlbGluZSBwaXBlbGluZSA9IGh5ZHJhdGVQaXBlbGluZShjb25maWd1cmF0aW9uKTsKLQotCQkvLyBUT0RPIGhhdmUgc29tZSB3YXkgb2Yga25vd2luZyB3aGV0aGVyIGl0IGlzIGFuIElSZXNvdXJjZSBvciBub3QKLQkJY29udGFpbmVycy5hZGQobmV3IERpcmVjdG9yeVNvdXJjZUNvbnRhaW5lcihzb3VyY2VGaWxlLCBmYWxzZSkpOwotCi0JCWZvciAoSXRlcmF0b3I8Pz4gaXRlciA9IHBpcGVsaW5lLmdldFRyYW5zZm9ybURlZnMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUxhdW5jaFRyYW5zZm9ybSB0cmFuc2Zvcm0gPSAoTGF1bmNoVHJhbnNmb3JtKSBpdGVyLm5leHQoKTsKLQkJCUlQYXRoIHBhdGggPSB0cmFuc2Zvcm0uZ2V0UGF0aCgpOwotCQkJSVNvdXJjZUNvbnRhaW5lciBzb3VyY2VDb250YWluZXIgPSBudWxsOwotCQkJaWYgKHRyYW5zZm9ybS5nZXRQYXRoVHlwZSgpLmVxdWFscyhMYXVuY2hUcmFuc2Zvcm0uUkVTT1VSQ0VfVFlQRSkpCi0JCQl7Ci0JCQkJSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHBhdGgpOwotCQkJCUlDb250YWluZXIgY29udGFpbmVyID0gcmVzb3VyY2UuZ2V0UGFyZW50KCk7Ci0JCQkJaWYgKGNvbnRhaW5lci5nZXRUeXBlKCkgPT0gSVJlc291cmNlLlBST0pFQ1QpCi0JCQkJewotCQkJCQlzb3VyY2VDb250YWluZXIgPSBuZXcgUHJvamVjdFNvdXJjZUNvbnRhaW5lcigoSVByb2plY3QpIGNvbnRhaW5lciwgZmFsc2UpOwotCQkJCX0KLQkJCQllbHNlIGlmIChjb250YWluZXIuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GT0xERVIpCi0JCQkJewotCQkJCQlzb3VyY2VDb250YWluZXIgPSBuZXcgRm9sZGVyU291cmNlQ29udGFpbmVyKGNvbnRhaW5lciwgZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlzb3VyY2VDb250YWluZXIgPSBuZXcgRGlyZWN0b3J5U291cmNlQ29udGFpbmVyKHBhdGgsIGZhbHNlKTsKLQkJCX0KLQkJCWNvbnRhaW5lcnMuYWRkKHNvdXJjZUNvbnRhaW5lcik7Ci0JCX0KLQotCQkvLyBpZiAoc291cmNlQ29udGFpbmVyID09IG51bGwpCi0JCS8vIHsKLQkJLy8gc291cmNlQ29udGFpbmVyID0gbmV3IFdvcmtzcGFjZVNvdXJjZUNvbnRhaW5lcigpOwotCQkvLyB9Ci0KLQkJcmV0dXJuIGNvbnRhaW5lcnMudG9BcnJheShuZXcgSVNvdXJjZUNvbnRhaW5lclswXSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGF1bmNoUGlwZWxpbmUgaHlkcmF0ZVBpcGVsaW5lKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlMYXVuY2hQaXBlbGluZSBwaXBlbGluZSA9IG51bGw7Ci0JCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BJUEVMSU5FLCAoU3RyaW5nKSBudWxsKTsKLQkJaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLQkJewotCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocy5nZXRCeXRlcygpKTsKLQkJCXBpcGVsaW5lID0gTGF1bmNoUGlwZWxpbmUuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCX0KLQkJcmV0dXJuIHBpcGVsaW5lOwotCX0KLQotCXByaXZhdGUgc3RhdGljIElQYXRoIGdldFN1YnN0aXR1dGVkUGF0aChTdHJpbmcgcGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChwYXRoICE9IG51bGwpCi0JCXsKLQkJCXBhdGggPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24ocGF0aCk7Ci0JCQlyZXR1cm4gbmV3IFBhdGgocGF0aCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ4MTU3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1VdGlsc18wPUVycm9yIGRldGVybWluaW5nIGphciBmaWxlIGxvY2F0aW9uOiAKLVV0aWxzXzE9XCBmcm9tIGJ1bmRsZTogCi1YU0xMaW5lQnJlYWtwb2ludF8wPUxpbmUgQnJlYWtwb2ludDogCi1YU0xTdGFja0ZyYW1lXzU9XCBsaW5lOiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMjI2YTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JTlBVVF9GSUxFID0gTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9JTlBVVF9GSUxFIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX09VVFBVVF9GT0xERVIgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX09VVFBVVF9GT0xERVIiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfT1VUUFVUX0ZJTEVOQU1FID0gTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9PVVRQVVRfRklMRU5BTUUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfTEFVTkNIX0NPTkZJR19UWVBFID0gTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIubGF1bmNoQ29uZmlndXJhdGlvblR5cGUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9QSVBFTElORSA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfUElQRUxJTkUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9PUEVOX0ZJTEUgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX09QRU5fRklMRSI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9GT1JNQVRfRklMRSA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfRk9STUFUX0ZJTEUiOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfV09SS0lOR19ESVIgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX1dPUktJTkdfRElSIjsgLy8kTk9OLU5MUy0xJDsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL1hTTFRSdW50aW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xUUnVudGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTY0Y2JkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL1hTTFRSdW50aW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKEludGFsaW8pIC0gY2xlYW4gdXAgZmluZCBidWdzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBYU0xUUnVudGltZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUHJlZmVyZW5jZXMoKSB7Ci0JCUxhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMoKSB7Ci0JCXJldHVybiBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhIGRlZmF1bHQgT3V0cHV0IEZpbGUgZm9yIHRoZSBnaXZlbiBpbnB1dCBmaWxlIHN0cmluZy4KLQkgKiAKLQkgKiBAcmV0dXJuIFJldHVybnMgYW4gSVBhdGggZm9yIHRoZSBPdXRwdXQgRmlsZS4KLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIHN0YXRpYyBJUGF0aCBkZWZhdWx0T3V0cHV0RmlsZUZvcklucHV0RmlsZShTdHJpbmcgaW5wdXRGaWxlRXhwcmVzc2lvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGUgPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpCi0JCQkJLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24oaW5wdXRGaWxlRXhwcmVzc2lvbik7Ci0JCUlQYXRoIGlucHV0RmlsZVBhdGggPSBuZXcgUGF0aChmaWxlKTsKLQkJaW5wdXRGaWxlUGF0aCA9IGlucHV0RmlsZVBhdGgucmVtb3ZlRmlsZUV4dGVuc2lvbigpOwotCQlpbnB1dEZpbGVQYXRoID0gaW5wdXRGaWxlUGF0aC5hZGRGaWxlRXh0ZW5zaW9uKCJvdXQueG1sIik7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGlucHV0RmlsZVBhdGg7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvQmFzZUxhdW5jaEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0Jhc2VMYXVuY2hIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMyZWI2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvQmFzZUxhdW5jaEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5WYXJpYWJsZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xUUnVudGltZTsKLQotLyoqCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBCYXNlTGF1bmNoSGVscGVyIHsKLQlwcml2YXRlIGZpbmFsIFVSTCBzb3VyY2U7Ci0JcHJpdmF0ZSBmaW5hbCBGaWxlIHRhcmdldDsKLQlwcm90ZWN0ZWQgZmluYWwgTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmU7Ci0JcHJpdmF0ZSBpbnQgcmVxdWVzdFBvcnQgPSAtMTsKLQlwcml2YXRlIGludCBldmVudFBvcnQgPSAtMTsKLQlwcml2YXRlIGludCBnZW5lcmF0ZVBvcnQgPSAtMTsKLQlwcml2YXRlIGZpbmFsIGJvb2xlYW4gb3BlbkZpbGVPbkNvbXBsZXRpb247Ci0JcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZvcm1hdEZpbGVPbkNvbXBsZXRpb247Ci0JcHJpdmF0ZSBmaW5hbCBJUGF0aCB3b3JraW5nRGlyOwotCi0JcHVibGljIEJhc2VMYXVuY2hIZWxwZXIoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJd29ya2luZ0RpciA9IGh5ZHJhdGVXb3JraW5nRGlyKGNvbmZpZ3VyYXRpb24pOwotCQlzb3VyY2UgPSBoeWRyYXRlU291cmNlRmlsZVVSTChjb25maWd1cmF0aW9uKTsKLQkJdGFyZ2V0ID0gaHlkcmF0ZU91dHB1dEZpbGUoY29uZmlndXJhdGlvbik7Ci0JCXBpcGVsaW5lID0gaHlkcmF0ZVBpcGVsaW5lKGNvbmZpZ3VyYXRpb24pOwotCQlvcGVuRmlsZU9uQ29tcGxldGlvbiA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PUEVOX0ZJTEUsIHRydWUpOwotCQlmb3JtYXRGaWxlT25Db21wbGV0aW9uID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0ZPUk1BVF9GSUxFLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIGludCBnZXRSZXF1ZXN0UG9ydCgpIHsKLQkJaWYgKHJlcXVlc3RQb3J0ID09IC0xKQotCQkJcmVxdWVzdFBvcnQgPSBmaW5kRnJlZVBvcnQoKTsKLQkJcmV0dXJuIHJlcXVlc3RQb3J0OwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0RXZlbnRQb3J0KCkgewotCQlpZiAoZXZlbnRQb3J0ID09IC0xKQotCQkJZXZlbnRQb3J0ID0gZmluZEZyZWVQb3J0KCk7Ci0JCXJldHVybiBldmVudFBvcnQ7Ci0JfQotCi0JcHVibGljIGludCBnZXRHZW5lcmF0ZVBvcnQoKSB7Ci0JCWlmIChnZW5lcmF0ZVBvcnQgPT0gLTEpCi0JCQlnZW5lcmF0ZVBvcnQgPSBmaW5kRnJlZVBvcnQoKTsKLQkJcmV0dXJuIGdlbmVyYXRlUG9ydDsKLQl9Ci0KLQlwdWJsaWMgTGF1bmNoUGlwZWxpbmUgZ2V0UGlwZWxpbmUoKSB7Ci0JCXJldHVybiBwaXBlbGluZTsKLQl9Ci0KLQlwdWJsaWMgVVJMIGdldFNvdXJjZSgpIHsKLQkJcmV0dXJuIHNvdXJjZTsKLQl9Ci0KLQlwdWJsaWMgRmlsZSBnZXRUYXJnZXQoKSB7Ci0JCXJldHVybiB0YXJnZXQ7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldFdvcmtpbmdEaXIoKSB7Ci0JCXJldHVybiB3b3JraW5nRGlyOwotCX0KLQotCXByaXZhdGUgc3RhdGljIExhdW5jaFBpcGVsaW5lIGh5ZHJhdGVQaXBlbGluZSgKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmUgPSBudWxsOwotCQlTdHJpbmcgcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QSVBFTElORSwgKFN0cmluZykgbnVsbCk7Ci0JCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApIHsKLQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHMKLQkJCQkJLmdldEJ5dGVzKCkpOwotCQkJcGlwZWxpbmUgPSBMYXVuY2hQaXBlbGluZS5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJfQotCQlyZXR1cm4gcGlwZWxpbmU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgaHlkcmF0ZVNvdXJjZUZpbGVVUkwoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVBhdGggc291cmNlRmlsZSA9IGh5ZHJhdGVTb3VyY2VGaWxlKGNvbmZpZ3VyYXRpb24pOwotCQlyZXR1cm4gcGF0aFRvVVJMKHNvdXJjZUZpbGUpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIElQYXRoIGh5ZHJhdGVXb3JraW5nRGlyKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBleHByID0gY29uZmlndXJhdGlvbgotCQkJCS5nZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1dPUktJTkdfRElSLAotCQkJCQkJKFN0cmluZykgbnVsbCk7Ci0JCXJldHVybiBnZXRTdWJzdGl0dXRlZFBhdGgoZXhwcik7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVBhdGggaHlkcmF0ZVNvdXJjZUZpbGUoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZUZpbGVFeHByID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0lOUFVUX0ZJTEUsIChTdHJpbmcpIG51bGwpOwotCQlyZXR1cm4gZ2V0U3Vic3RpdHV0ZWRQYXRoKHNvdXJjZUZpbGVFeHByKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFVSTCBwYXRoVG9VUkwoSVBhdGggc291cmNlRmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlVUkwgdXJsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXVybCA9IHNvdXJjZUZpbGUudG9GaWxlKCkudG9VUkkoKS50b1VSTCgpOwotCQl9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQlMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBzb3VyY2VGaWxlCi0JCQkJCQkJLnRvU3RyaW5nKCksIGUpKTsKLQkJfQotCQlyZXR1cm4gdXJsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBoeWRyYXRlT3V0cHV0RmlsZShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJUGF0aCBvdXRwdXRGaWxlID0gbnVsbDsKLQkJYm9vbGVhbiB1c2VEZWZhdWx0T3V0cHV0RmlsZSA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKAotCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfREVGQVVMVF9PVVRQVVRfRklMRSwKLQkJCQl0cnVlKTsKLQkJaWYgKCF1c2VEZWZhdWx0T3V0cHV0RmlsZSkgewotCQkJU3RyaW5nIG91dHB1dEZpbGVOYW1lID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJCVhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfRklMRU5BTUUsCi0JCQkJCShTdHJpbmcpIG51bGwpOwotCQkJU3RyaW5nIG91dHB1dEZvbGRlckV4cHIgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZSgKLQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GT0xERVIsCi0JCQkJCShTdHJpbmcpIG51bGwpOwotCQkJb3V0cHV0RmlsZSA9IGdldFN1YnN0aXR1dGVkUGF0aChvdXRwdXRGb2xkZXJFeHByKS5hcHBlbmQoCi0JCQkJCW91dHB1dEZpbGVOYW1lKTsKLQkJfSBlbHNlIHsKLQkJCW91dHB1dEZpbGUgPSBYU0xUUnVudGltZQotCQkJCQkuZGVmYXVsdE91dHB1dEZpbGVGb3JJbnB1dEZpbGUoY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoCi0JCQkJCQkJWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0lOUFVUX0ZJTEUsCi0JCQkJCQkJKFN0cmluZykgbnVsbCkpOwotCQl9Ci0JCXJldHVybiBvdXRwdXRGaWxlLnRvRmlsZSgpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIElQYXRoIGdldFN1YnN0aXR1dGVkUGF0aChTdHJpbmcgcGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAocGF0aCAhPSBudWxsKSB7Ci0JCQlwYXRoID0gVmFyaWFibGVzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKQotCQkJCQkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihwYXRoKTsKLQkJCXJldHVybiBuZXcgUGF0aChwYXRoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgZnJlZSBwb3J0IG51bWJlciBvbiBsb2NhbGhvc3QsIG9yIC0xIGlmIHVuYWJsZSB0byBmaW5kIGEgZnJlZQotCSAqIHBvcnQuCi0JICogCi0JICogQHJldHVybiBhIGZyZWUgcG9ydCBudW1iZXIgb24gbG9jYWxob3N0LCBvciAtMSBpZiB1bmFibGUgdG8gZmluZCBhIGZyZWUKLQkgKiAgICAgICAgIHBvcnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBmaW5kRnJlZVBvcnQoKSB7Ci0JCVNlcnZlclNvY2tldCBzb2NrZXQgPSBudWxsOwotCQl0cnkgewotCQkJc29ja2V0ID0gbmV3IFNlcnZlclNvY2tldCgwKTsKLQkJCXJldHVybiBzb2NrZXQuZ2V0TG9jYWxQb3J0KCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCUxhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAoc29ja2V0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlzb2NrZXQuY2xvc2UoKTsKLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCUxhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRPcGVuRmlsZU9uQ29tcGxldGlvbigpIHsKLQkJcmV0dXJuIG9wZW5GaWxlT25Db21wbGV0aW9uOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGdldEZvcm1hdEZpbGVPbkNvbXBsZXRpb24oKSB7Ci0JCXJldHVybiBmb3JtYXRGaWxlT25Db21wbGV0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaEF0dHJpYnV0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaEF0dHJpYnV0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmYxYzlkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hBdHRyaWJ1dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLQotcHVibGljIGNsYXNzIExhdW5jaEF0dHJpYnV0ZQotewotCXB1YmxpYyBmaW5hbCBTdHJpbmcgdXJpOwotCXB1YmxpYyBTdHJpbmcgdHlwZTsKLQlwdWJsaWMgU3RyaW5nIHZhbHVlOwotCi0JcHVibGljIExhdW5jaEF0dHJpYnV0ZShTdHJpbmcgdXJpLCBTdHJpbmcgdHlwZSwgU3RyaW5nIHZhbHVlKQotCXsKLQkJdGhpcy51cmkgPSB1cmk7Ci0JCXRoaXMudHlwZSA9IHR5cGU7Ci0JCXRoaXMudmFsdWUgPSB2YWx1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpCi0JewotCQl0aGlzLnZhbHVlID0gdmFsdWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVzb2x2ZWRWYWx1ZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gVmFyaWFibGVzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKS5wZXJmb3JtU3RyaW5nU3Vic3RpdHV0aW9uKHZhbHVlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGhhc2hDb2RlKCkKLQl7Ci0JCXJldHVybiB1cmkuaGFzaENvZGUoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLQl7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBMYXVuY2hBdHRyaWJ1dGUpCi0JCXsKLQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHQgPSAoTGF1bmNoQXR0cmlidXRlKSBvYmo7Ci0JCQlyZXR1cm4gYXR0LnVyaS5lcXVhbHModXJpKTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hQaXBlbGluZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaFBpcGVsaW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNTMzZGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaFBpcGVsaW5lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAxMCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChJbnRhbGlvKSAtIGNsZWFuIHVwIGZpbmQgYnVncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hQaXBlbGluZSB7Ci0JcHJpdmF0ZSBMaXN0PExhdW5jaFRyYW5zZm9ybT4gdHJhbnNmb3JtRGVmcyA9IG5ldyBBcnJheUxpc3Q8TGF1bmNoVHJhbnNmb3JtPigpOwotCXByaXZhdGUgZmluYWwgUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKLQotCXB1YmxpYyBQcm9wZXJ0aWVzIGdldE91dHB1dFByb3BlcnRpZXMoKSB7Ci0JCXJldHVybiBvdXRwdXRQcm9wZXJ0aWVzOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZE91dHB1dFByb3BlcnR5KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLQkJb3V0cHV0UHJvcGVydGllcy5wdXQobmFtZSwgdmFsdWUpOwotCX0KLQotCXB1YmxpYyBMaXN0PExhdW5jaFRyYW5zZm9ybT4gZ2V0VHJhbnNmb3JtRGVmcygpIHsKLQkJcmV0dXJuIHRyYW5zZm9ybURlZnM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VHJhbnNmb3JtRGVmcyhMaXN0PExhdW5jaFRyYW5zZm9ybT4gdHJhbnNmb3JtcykgewotCQl0cmFuc2Zvcm1EZWZzID0gdHJhbnNmb3JtczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRUcmFuc2Zvcm1EZWYoTGF1bmNoVHJhbnNmb3JtIHRkZWYpIHsKLQkJdGRlZi5zZXRQaXBlbGluZSh0aGlzKTsKLQkJdHJhbnNmb3JtRGVmcy5hZGQodGRlZik7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlVHJhbnNmb3JtRGVmKExhdW5jaFRyYW5zZm9ybSB0ZGVmKSB7Ci0JCXRyYW5zZm9ybURlZnMucmVtb3ZlKHRkZWYpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgdG9YTUwoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWwgPSBudWxsOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgcm9vdEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBpcGVsaW5lIik7IC8vJE5PTi1OTFMtMSQKLQkJCWRvYy5hcHBlbmRDaGlsZChyb290RWwpOwotCi0JCQlFbGVtZW50IG9wRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiT3V0cHV0UHJvcGVydGllcyIpOyAvLyROT04tTkxTLTEkCi0JCQlyb290RWwuYXBwZW5kQ2hpbGQob3BFbCk7Ci0JCQlmb3IgKE9iamVjdCBlbGVtZW50IDogb3V0cHV0UHJvcGVydGllcy5lbnRyeVNldCgpKSB7Ci0JCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSkgZWxlbWVudDsKLQkJCQlFbGVtZW50IHByb3BFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJQcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCQkJcHJvcEVsLnNldEF0dHJpYnV0ZSgibmFtZSIsIChTdHJpbmcpIGVudHJ5LmdldEtleSgpKTsgLy8kTk9OLU5MUy0xJAotCQkJCXByb3BFbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgKFN0cmluZykgZW50cnkuZ2V0VmFsdWUoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlvcEVsLmFwcGVuZENoaWxkKHByb3BFbCk7Ci0JCQl9Ci0KLQkJCWZvciAoSXRlcmF0b3I8TGF1bmNoVHJhbnNmb3JtPiBpdGVyID0gdHJhbnNmb3JtRGVmcy5pdGVyYXRvcigpOyBpdGVyCi0JCQkJCS5oYXNOZXh0KCk7KSB7Ci0JCQkJTGF1bmNoVHJhbnNmb3JtIHRkZWYgPSBpdGVyLm5leHQoKTsKLQkJCQlFbGVtZW50IHRkZWZFbCA9IHRkZWYuYXNYTUwoZG9jKTsKLQkJCQlyb290RWwuYXBwZW5kQ2hpbGQodGRlZkVsKTsKLQkJCX0KLQotCQkJeG1sID0gUHJlZmVyZW5jZVV0aWwuc2VyaWFsaXplRG9jdW1lbnQoZG9jKTsKLQkJfSBjYXRjaCAoRE9NRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgZS5nZXRNZXNzYWdlKCksIGUpKTsKLQkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsCi0JCQkJCUxhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIGUuZ2V0TWVzc2FnZSgpLCBlKSk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwKLQkJCQkJTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgZS5nZXRNZXNzYWdlKCksIGUpKTsKLQkJfSBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCQlMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBlLmdldE1lc3NhZ2UoKSwgZSkpOwotCQl9Ci0JCXJldHVybiB4bWw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMYXVuY2hQaXBlbGluZSBmcm9tWE1MKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKQotCQkJdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudChpbnB1dFN0cmVhbSk7Ci0KLQkJTGF1bmNoUGlwZWxpbmUgcGRlZiA9IG5ldyBMYXVuY2hQaXBlbGluZSgpOwotCi0JCUVsZW1lbnQgcm9vdEVsID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotCi0JCUVsZW1lbnQgb3BFbCA9IChFbGVtZW50KSByb290RWwKLQkJCQkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIk91dHB1dFByb3BlcnRpZXMiKS5pdGVtKDApOyAvLyROT04tTkxTLTEkCi0JCWlmIChvcEVsICE9IG51bGwpIHsKLQkJCU5vZGVMaXN0IHByb3BFbHMgPSBvcEVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJQcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHByb3BFbHMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCUVsZW1lbnQgcHJvcEVsID0gKEVsZW1lbnQpIHByb3BFbHMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IHByb3BFbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJCVN0cmluZyB2YWx1ZSA9IHByb3BFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlwZGVmLmFkZE91dHB1dFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLQkJCX0KLQkJfQotCi0JCU5vZGVMaXN0IHRyYW5zZm9ybUVscyA9IHJvb3RFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVHJhbnNmb3JtIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1FbHMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJRWxlbWVudCB0cmFuc2Zvcm1FbCA9IChFbGVtZW50KSB0cmFuc2Zvcm1FbHMuaXRlbShpKTsKLQkJCUxhdW5jaFRyYW5zZm9ybSB0ZGVmID0gTGF1bmNoVHJhbnNmb3JtLmZyb21YTUwodHJhbnNmb3JtRWwpOwotCQkJcGRlZi5hZGRUcmFuc2Zvcm1EZWYodGRlZik7Ci0JCX0KLQotCQlyZXR1cm4gcGRlZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoVHJhbnNmb3JtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoVHJhbnNmb3JtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMjUyOGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaFRyYW5zZm9ybS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5WYXJpYWJsZXNQbHVnaW47Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIExhdW5jaFRyYW5zZm9ybQotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU09VUkNFX1RZUEUgPSAicmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURVJOQUxfVFlQRSA9ICJleHRlcm5hbCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIHN0eWxlc2hlZXQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGF0aFR5cGU7Ci0JcHJpdmF0ZSBTdHJpbmcgcmVzb2x2ZXI7Ci0JcHJpdmF0ZSBmaW5hbCBTZXQ8TGF1bmNoQXR0cmlidXRlPiBwYXJhbWV0ZXJzID0gbmV3IEhhc2hTZXQ8TGF1bmNoQXR0cmlidXRlPigpOwotCXByaXZhdGUgTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmU7Ci0KLQkvKioKLQkgKiBUaGUgcGF0aCBtYXkgYmUgYW4gSVJlc291cmNlIHRvIGEgZmlsZSBpbiB0aGUgd29ya3NwYWNlLCBvciBhbiBJUGF0aCB0byBhCi0JICogZmlsZSBvdXRzaWRlIG9mIHRoZSB3b3Jrc3BhY2UgLSBkZXBlbmRpbmcgb24gdGhlIHBhdGhUeXBlLiBUaGUgcGF0aAotCSAqIHNob3VsZCBiZSBjcmVhdGVkIHVzaW5nIElQYXRoLnRvUG9ydGFibGVTdHJpbmcoKS4gVGhlIHBhdGggbWF5IGFsc28KLQkgKiBjb250YWluIHZhcmlhYmxlcyBkZWZpbmVkIGJ5IHRoZSBWYXJpYWJsZVBsdWdpbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGF0aAotCSAqIEBwYXJhbSBwYXRoVHlwZQotCSAqLwotCXB1YmxpYyBMYXVuY2hUcmFuc2Zvcm0oU3RyaW5nIHBhdGgsIFN0cmluZyBwYXRoVHlwZSkKLQl7Ci0JCXN0eWxlc2hlZXQgPSBwYXRoOwotCQl0aGlzLnBhdGhUeXBlID0gcGF0aFR5cGU7Ci0JfQotCi0JcHVibGljIFNldDxMYXVuY2hBdHRyaWJ1dGU+IGdldFBhcmFtZXRlcnMoKQotCXsKLQkJcmV0dXJuIHBhcmFtZXRlcnM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcihMYXVuY2hBdHRyaWJ1dGUgcGFyYW1ldGVyKQotCXsKLQkJcGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlc29sdmVyKCkKLQl7Ci0JCXJldHVybiByZXNvbHZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRSZXNvbHZlcihTdHJpbmcgcmVzb2x2ZXIpCi0JewotCQl0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldFBhdGgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHN1YnN0aXR1dGVkVmFsdWUgPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24oc3R5bGVzaGVldCk7Ci0JCXJldHVybiBQYXRoLmZyb21Qb3J0YWJsZVN0cmluZyhzdWJzdGl0dXRlZFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFBhdGhUeXBlKCkKLQl7Ci0JCXJldHVybiBwYXRoVHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSAod2l0aCBhbnkgc3RyaW5nCi0JICogc3Vic2l0dXRpb25zIGFscmVhZHkgbWFkZSkuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBJUGF0aCBnZXRMb2NhdGlvbigpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUGF0aCBwYXJ0aWFsUGF0aCA9IGdldFBhdGgoKTsKLQkJSVBhdGggZnVsbFBhdGggPSBudWxsOwotCQlpZiAoUkVTT1VSQ0VfVFlQRS5lcXVhbHMocGF0aFR5cGUpKQotCQl7Ci0JCQlJRmlsZSBmaWxlID0gKElGaWxlKSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIocGFydGlhbFBhdGgpOwotCQkJZnVsbFBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCX0KLQkJZWxzZSBpZiAoRVhURVJOQUxfVFlQRS5lcXVhbHMocGF0aFR5cGUpKQotCQl7Ci0JCQlmdWxsUGF0aCA9IHBhcnRpYWxQYXRoOwotCQl9Ci0JCXJldHVybiBmdWxsUGF0aDsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudCBhc1hNTChEb2N1bWVudCBkb2MpCi0JewotCQlFbGVtZW50IHRkZWZFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJUcmFuc2Zvcm0iKTsgLy8kTk9OLU5MUy0xJAotCQl0ZGVmRWwuc2V0QXR0cmlidXRlKCJwYXRoIiwgc3R5bGVzaGVldCk7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZkVsLnNldEF0dHJpYnV0ZSgicGF0aFR5cGUiLCBwYXRoVHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHJlc29sdmVyICE9IG51bGwpCi0JCQl0ZGVmRWwuc2V0QXR0cmlidXRlKCJ1cmlSZXNvbHZlciIsIHJlc29sdmVyKTsgLy8kTk9OLU5MUy0xJAotCQlFbGVtZW50IHBhcmFtc0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBhcmFtZXRlcnMiKTsgLy8kTk9OLU5MUy0xJAotCQl0ZGVmRWwuYXBwZW5kQ2hpbGQocGFyYW1zRWwpOwotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlciA9IHBhcmFtZXRlcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgcGFyYW0gPSBpdGVyLm5leHQoKTsKLQkJCUVsZW1lbnQgcHJvcEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBhcmFtZXRlciIpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgcGFyYW0udXJpKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcEVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBwYXJhbS52YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCXBhcmFtc0VsLmFwcGVuZENoaWxkKHByb3BFbCk7Ci0JCX0KLQkJcmV0dXJuIHRkZWZFbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExhdW5jaFRyYW5zZm9ybSBmcm9tWE1MKEVsZW1lbnQgdHJhbnNmb3JtRWwpCi0JewotCQlTdHJpbmcgcGF0aCA9IHRyYW5zZm9ybUVsLmdldEF0dHJpYnV0ZSgicGF0aCIpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyBwYXRoVHlwZSA9IHRyYW5zZm9ybUVsLmdldEF0dHJpYnV0ZSgicGF0aFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCi0JCUxhdW5jaFRyYW5zZm9ybSB0ZGVmID0gbmV3IExhdW5jaFRyYW5zZm9ybShwYXRoLCBwYXRoVHlwZSk7Ci0KLQkJU3RyaW5nIHVyaVJlc29sdmVyID0gdHJhbnNmb3JtRWwuZ2V0QXR0cmlidXRlKCJ1cmlSZXNvbHZlciIpOyAvLyROT04tTkxTLTEkCi0JCXRkZWYuc2V0UmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotCi0JCUVsZW1lbnQgcGFyYW1zRWwgPSAoRWxlbWVudCkgdHJhbnNmb3JtRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlBhcmFtZXRlcnMiKS5pdGVtKDApOyAvLyROT04tTkxTLTEkCi0JCU5vZGVMaXN0IHBhcmFtRWxzID0gcGFyYW1zRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlBhcmFtZXRlciIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1FbHMuZ2V0TGVuZ3RoKCk7IGkrKykKLQkJewotCQkJRWxlbWVudCBwYXJhbUVsID0gKEVsZW1lbnQpIHBhcmFtRWxzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IHBhcmFtRWwuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyB0eXBlID0gcGFyYW1FbC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHZhbHVlID0gcGFyYW1FbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCXRkZWYuYWRkUGFyYW1ldGVyKG5ldyBMYXVuY2hBdHRyaWJ1dGUobmFtZSwgdHlwZSwgdmFsdWUpKTsKLQkJfQotCi0JCXJldHVybiB0ZGVmOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFBpcGVsaW5lKExhdW5jaFBpcGVsaW5lIHBpcGVsaW5lKQotCXsKLQkJdGhpcy5waXBlbGluZSA9IHBpcGVsaW5lOwotCX0KLQotCXB1YmxpYyBMYXVuY2hQaXBlbGluZSBnZXRQaXBlbGluZSgpCi0JewotCQlyZXR1cm4gcGlwZWxpbmU7Ci0JfQotCi0JLyoKLQkgKiBwcml2YXRlIEZpbGUgZ2V0VVJJUmVzb2x2ZXJEaXJlY3RvcnkoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkgKiB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7IEZpbGUgcmVzb2x2ZXJEaXIgPSBudWxsOyBTdHJpbmcgYmFzZVVSSVR5cGUgPQotCSAqIGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9CQVNFX1VSSV9UWVBFLAotCSAqIFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQkFTRV9VUklfV09SS0lOR19ESVJfUkVMQVRJVkUpOyBpZgotCSAqIChYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkJBU0VfVVJJX0FCU09MVVRFLmVxdWFscyhiYXNlVVJJVHlwZSkpIHsKLQkgKiBTdHJpbmcgdXJpRGlyID0KLQkgKiBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfQkFTRV9VUklfRElSRUNUT1JZLAotCSAqIChTdHJpbmcpbnVsbCk7IGlmICh1cmlEaXIhPW51bGwpIHsgU3RyaW5nIHBhdGhFeHByID0KLQkgKiBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24odXJpRGlyKTsKLQkgKiBQYXRoIHBhdGggPSBuZXcgUGF0aChwYXRoRXhwcik7IGlmIChwYXRoLmlzQWJzb2x1dGUoKSkgeyBGaWxlIGRpciA9IG5ldwotCSAqIEZpbGUocGF0aC50b09TU3RyaW5nKCkpOyBpZiAoZGlyLmlzRGlyZWN0b3J5KCkgJiYgZGlyLmV4aXN0cygpKSB7IHJldHVybgotCSAqIGRpcjsgfSAvLyBUaGlzIG1heSBiZSBhIHdvcmtzcGFjZSByZWxhdGl2ZSBwYXRoIHJldHVybmVkIGJ5IGEgdmFyaWFibGUuIC8vCi0JICogSG93ZXZlciB2YXJpYWJsZSBwYXRocyBzdGFydCB3aXRoIGEgc2xhc2ggYW5kIHRodXMgYXJlIHRob3VnaHQgdG8gLy8gYmUKLQkgKiBhYnNvbHV0ZSwgc28gZmFsbCB0aHJvdWdoIHRvIGJlbG93IH0gSVJlc291cmNlIHJlcyA9Ci0JICogUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHBhdGgpOyBpZiAocmVzCi0JICogaW5zdGFuY2VvZiBJQ29udGFpbmVyICYmIHJlcy5leGlzdHMoKSkgcmV0dXJuIHJlcy5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOwotCSAqIGFib3J0KCJVUkkgcGF0aCBpcyBpbnZhbGlkIixudWxsLDApOyB9IH0gZWxzZSBpZgotCSAqIChYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkJBU0VfVVJJX1NUWUxFU0hFRVRfUkVMQVRJVkUuZXF1YWxzKGJhc2VVUklUeXBlKSkgewotCSAqIHJlc29sdmVyRGlyID0gZ2V0U3R5bGVzaGVldFJlbGF0aXZlVVJJUmVzb2x2ZXIoY29uZmlndXJhdGlvbik7IH0gLy8gbm8KLQkgKiBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiB3b3JraW5nX2RpciByZWxhdGl2ZSAtIHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yCi0JICogSkFYUCBzbyByZXR1cm4gbnVsbCByZXR1cm4gcmVzb2x2ZXJEaXI7IH0KLQkgKiAKLQkgKiBwcml2YXRlIEZpbGUgZ2V0U3R5bGVzaGVldFJlbGF0aXZlVVJJUmVzb2x2ZXIoSUxhdW5jaENvbmZpZ3VyYXRpb24KLQkgKiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7IExpc3Qgc3R5bGVzaGVldHMgPQotCSAqIGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9TVFlMRVNIRUVUU19MSVNULChMaXN0KW51bGwpOwotCSAqIGlmIChzdHlsZXNoZWV0cyA9PSBudWxsIHx8IHN0eWxlc2hlZXRzLnNpemUoKSA9PSAwKSBhYm9ydCgiTm8gc3R5bGVzaGVldHMKLQkgKiBkZWZpbmVkIGZvciB0aGlzIGxhdW5jaCBjb25maWd1cmF0aW9uIiwgbnVsbCwgMCk7IGVsc2UgeyBTdHJpbmcgc2hlZXQgPQotCSAqIChTdHJpbmcpc3R5bGVzaGVldHMuZ2V0KDApOyBTdHJpbmcgcGF0aEV4cHIgPQotCSAqIFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihzaGVldCk7Ci0JICogUGF0aCBwYXRoID0gbmV3IFBhdGgocGF0aEV4cHIpOyBpZiAocGF0aC5pc0Fic29sdXRlKCkpIHsgRmlsZSBmaWxlID0gbmV3Ci0JICogRmlsZShwYXRoLnRvT1NTdHJpbmcoKSk7IGlmIChmaWxlLmV4aXN0cygpKSB7IEZpbGUgZGlyID0KLQkgKiBmaWxlLmdldFBhcmVudEZpbGUoKTsgcmV0dXJuIGRpcjsgfSAvLyBUaGlzIG1heSBiZSBhIHdvcmtzcGFjZSByZWxhdGl2ZQotCSAqIHBhdGggcmV0dXJuZWQgYnkgYSB2YXJpYWJsZS4gLy8gSG93ZXZlciB2YXJpYWJsZSBwYXRocyBzdGFydCB3aXRoIGEgc2xhc2gKLQkgKiBhbmQgdGh1cyBhcmUgdGhvdWdodCB0byAvLyBiZSBhYnNvbHV0ZSBJUmVzb3VyY2UgcmVzID0KLQkgKiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIocGF0aCk7IElDb250YWluZXIKLQkgKiBwYXJlbnQgPSByZXMuZ2V0UGFyZW50KCk7IGlmIChwYXJlbnQuZXhpc3RzKCkpIHJldHVybgotCSAqIHBhcmVudC5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOyBhYm9ydCgiU3R5bGVzaGVldCBwYXRoIGlzCi0JICogaW52YWxpZCIsbnVsbCwwKTsgfSBlbHNlIHsgSVJlc291cmNlIHJlcyA9Ci0JICogUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHBhdGgpOyBJQ29udGFpbmVyCi0JICogcGFyZW50ID0gcmVzLmdldFBhcmVudCgpOyBpZiAocGFyZW50LmV4aXN0cygpKSByZXR1cm4KLQkgKiBwYXJlbnQuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKTsgYWJvcnQoIlN0eWxlc2hlZXQgcGF0aCBpcwotCSAqIGludmFsaWQiLG51bGwsMCk7IH0gfSByZXR1cm4gbnVsbDsgfQotCSAqLwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL1ByZWZlcmVuY2VVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvUHJlZmVyZW5jZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBlYzBkNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvUHJlZmVyZW5jZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWc7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLS8qKgotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZVV0aWwKLXsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGVDb3JlRXhjZXB0aW9uKFRocm93YWJsZSBlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBlLmdldE1lc3NhZ2UoKSwgZSkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJRG9jdW1lbnQgZG9jID0gZG9jQnVpbGRlci5uZXdEb2N1bWVudCgpOwotCQlyZXR1cm4gZG9jOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZURvY3VtZW50KERvY3VtZW50IGRvYykgdGhyb3dzIElPRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIHMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0KLQkJVHJhbnNmb3JtZXJGYWN0b3J5IGZhY3RvcnkgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBmYWN0b3J5Lm5ld1RyYW5zZm9ybWVyKCk7Ci0JCXRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuTUVUSE9ELCAieG1sIik7ICAvLyROT04tTkxTLTEkCi0JCXRyYW5zZm9ybWVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7ICAvLyROT04tTkxTLTEkCi0KLQkJRE9NU291cmNlIHNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jKTsKLQkJU3RyZWFtUmVzdWx0IG91dHB1dFRhcmdldCA9IG5ldyBTdHJlYW1SZXN1bHQocyk7Ci0JCXRyYW5zZm9ybWVyLnRyYW5zZm9ybShzb3VyY2UsIG91dHB1dFRhcmdldCk7Ci0KLQkJcmV0dXJuIHMudG9TdHJpbmcoIlVURjgiKTsgCQkJIC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEVsZW1lbnRbXSBnZXRDaGlsZEVsZW1lbnRzKEVsZW1lbnQgcGFyZW50LCBTdHJpbmcgbmFtZSkKLQl7Ci0JCUxpc3Q8RWxlbWVudD4gY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PEVsZW1lbnQ+KCk7Ci0JCU5vZGVMaXN0IGxpc3QgPSBwYXJlbnQuZ2V0Q2hpbGROb2RlcygpOwotCQlpbnQgbGVuZ3RoID0gbGlzdC5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLQkJewotCQkJTm9kZSBub2RlID0gbGlzdC5pdGVtKGkpOwotCQkJc2hvcnQgdHlwZSA9IG5vZGUuZ2V0Tm9kZVR5cGUoKTsKLQkJCWlmICh0eXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKQotCQkJewotCQkJCUVsZW1lbnQgcHJvY2Vzc29yRWxlbWVudCA9IChFbGVtZW50KSBub2RlOwotCQkJCWlmIChwcm9jZXNzb3JFbGVtZW50LmdldE5vZGVOYW1lKCkuZXF1YWxzKG5hbWUpKQotCQkJCXsKLQkJCQkJY2hpbGRyZW4uYWRkKHByb2Nlc3NvckVsZW1lbnQpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gY2hpbGRyZW4udG9BcnJheShuZXcgRWxlbWVudFswXSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Tm9kZVRleHQoTm9kZSBub2RlKQotCXsKLQkJc3dpdGNoIChub2RlLmdldE5vZGVUeXBlKCkpCi0JCXsKLQkJCWNhc2UgTm9kZS5FTEVNRU5UX05PREU6Ci0JCQkJTm9kZUxpc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkTm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykKLQkJCQl7Ci0JCQkJCU5vZGUgY2hpbGQgPSBjaGlsZE5vZGVzLml0ZW0oaSk7Ci0JCQkJCWlmIChjaGlsZC5nZXROb2RlVHlwZSgpID09IE5vZGUuVEVYVF9OT0RFKQotCQkJCQl7Ci0JCQkJCQlzYi5hcHBlbmQoY2hpbGQuZ2V0Tm9kZVZhbHVlKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJCXJldHVybiBzYi50b1N0cmluZygpOwotCQkJY2FzZSBOb2RlLlRFWFRfTk9ERToKLQkJCWNhc2UgTm9kZS5BVFRSSUJVVEVfTk9ERToKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIG5vZGUuZ2V0Tm9kZVZhbHVlKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIERvY3VtZW50IGdldERvY3VtZW50KElucHV0U3RyZWFtIHN0cmVhbSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlEb2N1bWVudEJ1aWxkZXIgcGFyc2VyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkJcGFyc2VyLnNldEVycm9ySGFuZGxlcihuZXcgRGVmYXVsdEhhbmRsZXIoKSk7Ci0JCQlkb2MgPSBwYXJzZXIucGFyc2UobmV3IElucHV0U291cmNlKHN0cmVhbSkpOwotCQl9Ci0JCWNhdGNoIChTQVhFeGNlcHRpb24gZSkKLQkJewotCQkJUHJlZmVyZW5jZVV0aWwuY3JlYXRlQ29yZUV4Y2VwdGlvbihlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJUHJlZmVyZW5jZVV0aWwuY3JlYXRlQ29yZUV4Y2VwdGlvbihlKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlQcmVmZXJlbmNlVXRpbC5jcmVhdGVDb3JlRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWNhdGNoIChGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGUpCi0JCXsKLQkJCVByZWZlcmVuY2VVdGlsLmNyZWF0ZUNvcmVFeGNlcHRpb24oZSk7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCVByZWZlcmVuY2VVdGlsLmNyZWF0ZUNvcmVFeGNlcHRpb24oZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRvYzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9JWFNMQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9JWFNMQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYTQ3ZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvSVhTTENvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWw7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSVhTTENvbnN0YW50cwotewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfWFNMX0RFQlVHX01PREVMID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTERlYnVnTW9kZWwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFSS0VSX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnhzbExpbmVCcmVha3BvaW50TWFya2VyIjsgLy8kTk9OLU5MUy0xJAotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9JWFNMRGVidWdUYXJnZXQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xEZWJ1Z1RhcmdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTllNTU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xEZWJ1Z1RhcmdldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JU3RhY2tGcmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLQotcHVibGljIGludGVyZmFjZSBJWFNMRGVidWdUYXJnZXQgZXh0ZW5kcyBJRGVidWdUYXJnZXQKLXsKLQlYU0xWYXJpYWJsZSBnZXRWYXJpYWJsZShpbnQgdmFySWQpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbjsKLQotCUlTdGFja0ZyYW1lW10gZ2V0U3RhY2tGcmFtZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb247Ci0KLQl2b2lkIHN0ZXBJbnRvKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uOwotCi0Jdm9pZCBzdGVwT3ZlcigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbjsKLQotCXZvaWQgc3RlcFJldHVybigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbjsKLQotCUlWYWx1ZSBnZXRWYXJpYWJsZVZhbHVlKFhTTFZhcmlhYmxlIHZhcmlhYmxlKSB0aHJvd3MgRGVidWdFeGNlcHRpb247CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvTm9kZUxpc3RWYXJpYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvTm9kZUxpc3RWYXJpYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODg3YWIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL05vZGVMaXN0VmFyaWFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKkNvcHlyaWdodCAoYykgMjAwOCBTVEFSIGFuZCBvdGhlcnMuCi0gKkFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKndoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICpDb250cmlidXRvcnM6Ci0gKiAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIxNDIzNSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYXJpYWJsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIE5vZGVMaXN0VmFyaWFibGUgcmVwcmVzZW50cyBhIFhTTCBOb2Rlc2V0LiAgVGhpcyBpcyB0eXBpY2FsbHkgYSBncm91cCBvZiBub2RlcyB0aGF0Ci0gKiBtYXRjaGVkIGEgcGFydGljdWxhciBYUGF0aCBleHByZXNzaW9uLCBhbmQgYXJlIHN0b3JlZCBpbiBhbiBYU0xUIHZhcmlhYmxlLgotICogCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBOb2RlTGlzdFZhcmlhYmxlIGV4dGVuZHMgWFNMRGVidWdFbGVtZW50IGltcGxlbWVudHMgSVZhcmlhYmxlIHsKLQkKLQlwcml2YXRlIE5vZGUgbm9kZSA9IG51bGw7Ci0KLQlwcml2YXRlIElEZWJ1Z1RhcmdldCBkZWJ1Z1RhcmdldDsKLQkKLQlwdWJsaWMgTm9kZUxpc3RWYXJpYWJsZShJRGVidWdUYXJnZXQgdGFyZ2V0LCBOb2RlIG5vZGVMaXN0Tm9kZSkgewotCQlzdXBlcih0YXJnZXQpOwotCQlub2RlID0gbm9kZUxpc3ROb2RlOwotCQlkZWJ1Z1RhcmdldCA9IHRhcmdldDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCVN0cmluZyBub2RlTmFtZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCWlmIChub2RlLmdldFByZWZpeCgpICE9IG51bGwpIHsKLQkJCW5vZGVOYW1lID0gbm9kZU5hbWUgKyBub2RlLmdldFByZWZpeCgpICsgIjoiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJaWYgKG5vZGUuZ2V0Tm9kZU5hbWUoKSAhPSBudWxsKSB7Ci0JCQlub2RlTmFtZSA9IG5vZGVOYW1lICsgbm9kZS5nZXROb2RlTmFtZSgpOwotCQl9Ci0JCXJldHVybiBub2RlTmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZVR5cGVOYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgSVZhbHVlIGdldFZhbHVlKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJSVZhbHVlIHZhbHVlID0gbmV3IFhTTFZhbHVlKGRlYnVnVGFyZ2V0LCAic3RyaW5nIiwgbm9kZSk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc1ZhbHVlQ2hhbmdlZCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1ZhbHVlTW9kaWZpY2F0aW9uKCkgewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB2ZXJpZnlWYWx1ZShTdHJpbmcgZXhwcmVzc2lvbikgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdmVyaWZ5VmFsdWUoSVZhbHVlIHZhbHVlKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgZXhwcmVzc2lvbikgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShJVmFsdWUgdmFsdWUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCi0JfQotCQotCXB1YmxpYyBOb2RlIGdldE5vZGUoKSB7Ci0JCXJldHVybiBub2RlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMRGVidWdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xEZWJ1Z0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ViMmUwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xEZWJ1Z0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLkRlYnVnRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEaXNjb25uZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVRlcm1pbmF0ZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTTERlYnVnRWxlbWVudCBleHRlbmRzIERlYnVnRWxlbWVudCBpbXBsZW1lbnRzIElEaXNjb25uZWN0Ci17Ci0JcHVibGljIFhTTERlYnVnRWxlbWVudChJRGVidWdUYXJnZXQgdGFyZ2V0KQotCXsKLQkJc3VwZXIodGFyZ2V0KTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1vZGVsSWRlbnRpZmllcigpCi0JewotCQlyZXR1cm4gSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUw7Ci0JfQotCQotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7Ci0JCWlmIChhZGFwdGVyID09IElUZXJtaW5hdGUuY2xhc3MpIHsKLQkJCXJldHVybiBnZXREZWJ1Z1RhcmdldCgpOwotCQl9Ci0JCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGFkYXB0ZXIpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBjYW5EaXNjb25uZWN0KCkKLQl7Ci0JCXJldHVybiBnZXREZWJ1Z1RhcmdldCgpLmNhbkRpc2Nvbm5lY3QoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0RGVidWdUYXJnZXQoKS5kaXNjb25uZWN0KCk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGlzRGlzY29ubmVjdGVkKCkKLQl7Ci0JCXJldHVybiBnZXREZWJ1Z1RhcmdldCgpLmlzRGlzY29ubmVjdGVkKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMTGluZUJyZWFrcG9pbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTExpbmVCcmVha3BvaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYzY5MzQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMTGluZUJyZWFrcG9pbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgQmpvcm4gRnJlZW1hbi1CZW5zb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5MaW5lQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5NZXNzYWdlczsKLQotcHVibGljIGNsYXNzIFhTTExpbmVCcmVha3BvaW50IGV4dGVuZHMgTGluZUJyZWFrcG9pbnQKLXsKLQlwcml2YXRlIGludCBsaW5lTnVtYmVyOwotCi0JcHVibGljIFhTTExpbmVCcmVha3BvaW50KCkKLQl7Ci0JfQotCi0JcHVibGljIFhTTExpbmVCcmVha3BvaW50KGZpbmFsIElSZXNvdXJjZSByZXNvdXJjZSwgZmluYWwgaW50IGxpbmVOdW1iZXIsIGZpbmFsIGludCBjaGFyU3RhcnQsIGZpbmFsIGludCBjaGFyRW5kKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JCQl7Ci0JCQkJSU1hcmtlciBtYXJrZXIgPSByZXNvdXJjZS5jcmVhdGVNYXJrZXIoSVhTTENvbnN0YW50cy5NQVJLRVJfSUQpOwotCQkJCXNldE1hcmtlcihtYXJrZXIpOwotCQkJCW1hcmtlci5zZXRBdHRyaWJ1dGUoSUJyZWFrcG9pbnQuSUQsIGdldE1vZGVsSWRlbnRpZmllcigpKTsKLQkJCQltYXJrZXIuc2V0QXR0cmlidXRlKElCcmVha3BvaW50LkVOQUJMRUQsIEJvb2xlYW4uVFJVRSk7Ci0JCQkJbWFya2VyLnNldEF0dHJpYnV0ZShJTWFya2VyLk1FU1NBR0UsIE1lc3NhZ2VzLlhTTExpbmVCcmVha3BvaW50XzAgKyByZXNvdXJjZS5nZXROYW1lKCkgKyAiIFtsaW5lOiAiICsgbGluZU51bWJlciArICJdIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAKLQotCQkJCW1hcmtlci5zZXRBdHRyaWJ1dGUoSU1hcmtlci5MSU5FX05VTUJFUiwgbGluZU51bWJlcik7Ci0JCQkJbWFya2VyLnNldEF0dHJpYnV0ZShJTWFya2VyLkNIQVJfU1RBUlQsIEludGVnZXIudmFsdWVPZihjaGFyU3RhcnQpKTsKLQkJCQltYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuQ0hBUl9FTkQsIEludGVnZXIudmFsdWVPZihjaGFyRW5kKSk7Ci0KLQkJCQlyZWdpc3Rlcih0cnVlKTsKLQkJCX0KLQkJfTsKLQkJcnVuKGdldE1hcmtlclJ1bGUocmVzb3VyY2UpLCBydW5uYWJsZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWludCBsaW5lID0gc3VwZXIuZ2V0TGluZU51bWJlcigpOwotCQlyZXR1cm4gbGluZSA9PSAtMSA/IGxpbmVOdW1iZXIgOiBsaW5lOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHJlZ2lzdGVyKGJvb2xlYW4gcmVnaXN0ZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlEZWJ1Z1BsdWdpbiBwbHVnaW4gPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCWlmIChwbHVnaW4gIT0gbnVsbCAmJiByZWdpc3RlcikKLQkJewotCQkJcGx1Z2luLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkuYWRkQnJlYWtwb2ludCh0aGlzKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXNldFJlZ2lzdGVyZWQoZmFsc2UpOwotCQl9Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRNb2RlbElkZW50aWZpZXIoKQotCXsKLQkJcmV0dXJuIElYU0xDb25zdGFudHMuSURfWFNMX0RFQlVHX01PREVMOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFN0YWNrRnJhbWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFN0YWNrRnJhbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMyNjAwZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xTdGFja0ZyYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklSZWdpc3Rlckdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVN0YWNrRnJhbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVGhyZWFkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhcmlhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5NZXNzYWdlczsKLQotLyoqCi0gKiBYU0wgc3RhY2sgZnJhbWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0xTdGFja0ZyYW1lIGV4dGVuZHMgWFNMRGVidWdFbGVtZW50IGltcGxlbWVudHMgSVN0YWNrRnJhbWUKLXsKLQlwcml2YXRlIGZpbmFsIFhTTFRocmVhZCB4c2xUaHJlYWQ7Ci0JcHJpdmF0ZSBpbnQgaWQ7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIGludCBsaW5lTnVtYmVyOwotCXByaXZhdGUgU3RyaW5nIHhzbEZpbGVOYW1lOwotCXByaXZhdGUgSVZhcmlhYmxlW10gdmFyaWFibGVzOwotCi0JcHVibGljIFhTTFN0YWNrRnJhbWUoWFNMVGhyZWFkIHRocmVhZCwgU3RyaW5nIGRhdGEsIGludCBpbmRleCkKLQl7Ci0JCXN1cGVyKHRocmVhZC5nZXREZWJ1Z1RhcmdldCgpKTsKLQkJdGhpcy54c2xUaHJlYWQgPSB0aHJlYWQ7Ci0JCWluaXQoZGF0YSwoSVhTTERlYnVnVGFyZ2V0KSB0aHJlYWQuZ2V0RGVidWdUYXJnZXQoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXQoU3RyaW5nIGRhdGEsSVhTTERlYnVnVGFyZ2V0IGRlYnVnVGFyZ2V0KQotCXsKLQotCQlTdHJpbmdbXSBzdHJpbmdzID0gZGF0YS5zcGxpdCgiXFx8Iik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIGZpbGVOYW1lID0gc3RyaW5nc1swXTsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKGZpbGVOYW1lKTsKLQkJCVBhdGggcCA9IG5ldyBQYXRoKHVybC5nZXRGaWxlKCkpOwotCQkJeHNsRmlsZU5hbWUgPSAobmV3IFBhdGgoZmlsZU5hbWUpKS5sYXN0U2VnbWVudCgpOwotCi0JCQlTdHJpbmcgaWRTdHJpbmcgPSBzdHJpbmdzWzFdOwotCQkJaWQgPSBJbnRlZ2VyLnBhcnNlSW50KGlkU3RyaW5nKTsKLQkJCVN0cmluZyBwYyA9IHN0cmluZ3NbMl07Ci0JCQlsaW5lTnVtYmVyID0gSW50ZWdlci5wYXJzZUludChwYyk7Ci0JCQlTdHJpbmcgc2FmZW5hbWUgPSBzdHJpbmdzWzNdOwotCi0JCQlpbnQgdGhlSW5kZXg7Ci0JCQl3aGlsZSAoKHRoZUluZGV4ID0gc2FmZW5hbWUuaW5kZXhPZigiJUBfUElQRV9AJSIpKSAhPSAtMSkgLy8kTk9OLU5MUy0xJAotCQkJewotCQkJCXNhZmVuYW1lID0gc2FmZW5hbWUuc3Vic3RyaW5nKDAsIHRoZUluZGV4KSArICJ8IiArIHNhZmVuYW1lLnN1YnN0cmluZyh0aGVJbmRleCArICIlQF9QSVBFX0AlIi5sZW5ndGgoKSwgc2FmZW5hbWUubGVuZ3RoKCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCX0KLQotCQkJbmFtZSA9IHAubGFzdFNlZ21lbnQoKSArICIgIiArIHNhZmVuYW1lOyAvLyROT04tTkxTLTEkCi0JCQkKLQkJCXZhcmlhYmxlcyA9IG5ldyBYU0xWYXJpYWJsZVtzdHJpbmdzLmxlbmd0aC00XTsKLQkJCWZvciAoaW50IGk9MDtpPHZhcmlhYmxlcy5sZW5ndGg7aSsrKQotCQkJewotCQkJCWludCB2YXJJZCA9IEludGVnZXIucGFyc2VJbnQoc3RyaW5nc1tpKzRdKTsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCVhTTFZhcmlhYmxlIHZhciA9IGRlYnVnVGFyZ2V0LmdldFZhcmlhYmxlKHZhcklkKTsKLQkJCQkJdmFyaWFibGVzW2ldID0gdmFyOwotCQkJCX0KLQkJCQljYXRjaCAoRGVidWdFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUxhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkJewotCQkJTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLQotCXB1YmxpYyBJVGhyZWFkIGdldFRocmVhZCgpCi0JewotCQlyZXR1cm4geHNsVGhyZWFkOwotCX0KLQotCXB1YmxpYyBJVmFyaWFibGVbXSBnZXRWYXJpYWJsZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiB2YXJpYWJsZXM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzVmFyaWFibGVzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gdmFyaWFibGVzLmxlbmd0aCA+IDA7Ci0JfQotCi0JcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbGluZU51bWJlcjsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldENoYXJTdGFydCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0Q2hhckVuZCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIG5hbWUgKyBNZXNzYWdlcy5YU0xTdGFja0ZyYW1lXzUgKyBsaW5lTnVtYmVyOyAKLQl9Ci0KLQlwdWJsaWMgSVJlZ2lzdGVyR3JvdXBbXSBnZXRSZWdpc3Rlckdyb3VwcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzUmVnaXN0ZXJHcm91cHMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5TdGVwSW50bygpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuY2FuU3RlcEludG8oKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5TdGVwT3ZlcigpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuY2FuU3RlcE92ZXIoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5TdGVwUmV0dXJuKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5jYW5TdGVwUmV0dXJuKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNTdGVwcGluZygpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuaXNTdGVwcGluZygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBJbnRvKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXRUaHJlYWQoKS5zdGVwSW50bygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBPdmVyKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXRUaHJlYWQoKS5zdGVwT3ZlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBSZXR1cm4oKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldFRocmVhZCgpLnN0ZXBSZXR1cm4oKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5SZXN1bWUoKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmNhblJlc3VtZSgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN1c3BlbmQoKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmNhblN1c3BlbmQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1N1c3BlbmRlZCgpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuaXNTdXNwZW5kZWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXN1bWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldFRocmVhZCgpLnJlc3VtZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1c3BlbmQoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldFRocmVhZCgpLnN1c3BlbmQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5UZXJtaW5hdGUoKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmNhblRlcm1pbmF0ZSgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzVGVybWluYXRlZCgpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuaXNUZXJtaW5hdGVkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVybWluYXRlKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXRUaHJlYWQoKS50ZXJtaW5hdGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIHN0YWNrIGZyYW1lIGlzIGFzc29jaWF0ZWQgd2l0aC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFNvdXJjZU5hbWUoKQotCXsKLQkJcmV0dXJuIHhzbEZpbGVOYW1lOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKQotCXsKLQkJaWYgKG9iaiBpbnN0YW5jZW9mIFhTTFN0YWNrRnJhbWUpCi0JCXsKLQkJCVhTTFN0YWNrRnJhbWUgc2YgPSAoWFNMU3RhY2tGcmFtZSkgb2JqOwotCQkJcmV0dXJuIHNmLmlkID09IGlkOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGhhc2hDb2RlKCkKLQl7Ci0JCXJldHVybiBnZXRTb3VyY2VOYW1lKCkuaGFzaENvZGUoKSArIGlkOwotCX0KLQotCXByb3RlY3RlZCBpbnQgZ2V0SWRlbnRpZmllcigpCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TGluZU51bWJlcihpbnQgbGluZU51bWJlcikKLQl7Ci0JCXRoaXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VmFyaWFibGVzKElWYXJpYWJsZVtdIHZhcmlhYmxlcykKLQl7Ci0JCXRoaXMudmFyaWFibGVzID0gdmFyaWFibGVzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFRocmVhZC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVGhyZWFkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmYxNmUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVGhyZWFkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JU3RhY2tGcmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklUaHJlYWQ7Ci0KLXB1YmxpYyBjbGFzcyBYU0xUaHJlYWQgZXh0ZW5kcyBYU0xEZWJ1Z0VsZW1lbnQgaW1wbGVtZW50cyBJVGhyZWFkCi17Ci0KLQkvKioKLQkgKiBCcmVha3BvaW50cyB0aGlzIHRocmVhZCBpcyBzdXNwZW5kZWQgYXQgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZS4KLQkgKi8KLQlwcml2YXRlIElCcmVha3BvaW50W10gZkJyZWFrcG9pbnRzOwotCi0JLyoqCi0JICogV2hldGhlciB0aGlzIHRocmVhZCBpcyBzdGVwcGluZwotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBmU3RlcHBpbmcgPSBmYWxzZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgdGhyZWFkIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0Ci0JICovCi0JcHVibGljIFhTTFRocmVhZChJRGVidWdUYXJnZXQgdGFyZ2V0KQotCXsKLQkJc3VwZXIodGFyZ2V0KTsKLQl9Ci0KLQlwdWJsaWMgSVN0YWNrRnJhbWVbXSBnZXRTdGFja0ZyYW1lcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJaWYgKGlzU3VzcGVuZGVkKCkpCi0JCXsKLQkJCXJldHVybiAoKElYU0xEZWJ1Z1RhcmdldCkgZ2V0RGVidWdUYXJnZXQoKSkuZ2V0U3RhY2tGcmFtZXMoKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXJldHVybiBuZXcgSVN0YWNrRnJhbWVbMF07Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNTdGFja0ZyYW1lcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGludCBnZXRQcmlvcml0eSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHVibGljIElTdGFja0ZyYW1lIGdldFRvcFN0YWNrRnJhbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCUlTdGFja0ZyYW1lW10gZnJhbWVzID0gZ2V0U3RhY2tGcmFtZXMoKTsKLQkJaWYgKGZyYW1lcy5sZW5ndGggPiAwKQotCQl7Ci0JCQlyZXR1cm4gZnJhbWVzWzBdOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuICJUaHJlYWRbMV0iOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIElCcmVha3BvaW50W10gZ2V0QnJlYWtwb2ludHMoKQotCXsKLQkJaWYgKGZCcmVha3BvaW50cyA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm4gbmV3IElCcmVha3BvaW50WzBdOwotCQl9Ci0JCXJldHVybiBmQnJlYWtwb2ludHM7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB0aGUgYnJlYWtwb2ludHMgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkIGF0LCBvciA8Y29kZT5udWxsPC9jb2RlPgotCSAqIGlmIG5vbmUuCi0JICogCi0JICogQHBhcmFtIGJyZWFrcG9pbnRzCi0JICogICAgICAgICAgICB0aGUgYnJlYWtwb2ludHMgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkIGF0LCBvcgotCSAqICAgICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZQotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCcmVha3BvaW50cyhJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzKQotCXsKLQkJZkJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuUmVzdW1lKCkKLQl7Ci0JCXJldHVybiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN1c3BlbmQoKQotCXsKLQkJcmV0dXJuICFpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzU3VzcGVuZGVkKCkKLQl7Ci0JCXJldHVybiBnZXREZWJ1Z1RhcmdldCgpLmlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVzdW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXREZWJ1Z1RhcmdldCgpLnJlc3VtZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1c3BlbmQoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldERlYnVnVGFyZ2V0KCkuc3VzcGVuZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBJbnRvKCkKLQl7Ci0JCXJldHVybiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBPdmVyKCkKLQl7Ci0JCXJldHVybiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBSZXR1cm4oKQotCXsKLQkJcmV0dXJuIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNTdGVwcGluZygpCi0JewotCQlyZXR1cm4gZlN0ZXBwaW5nOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBJbnRvKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQkoKElYU0xEZWJ1Z1RhcmdldCkgZ2V0RGVidWdUYXJnZXQoKSkuc3RlcEludG8oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwT3ZlcigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJKChJWFNMRGVidWdUYXJnZXQpIGdldERlYnVnVGFyZ2V0KCkpLnN0ZXBPdmVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RlcFJldHVybigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJKChJWFNMRGVidWdUYXJnZXQpIGdldERlYnVnVGFyZ2V0KCkpLnN0ZXBSZXR1cm4oKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5UZXJtaW5hdGUoKQotCXsKLQkJcmV0dXJuICFpc1Rlcm1pbmF0ZWQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1Rlcm1pbmF0ZWQoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCkuaXNUZXJtaW5hdGVkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVybWluYXRlKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXREZWJ1Z1RhcmdldCgpLnRlcm1pbmF0ZSgpOwotCX0KLQotCS8qKgotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTdGVwcGluZyhib29sZWFuIHN0ZXBwaW5nKQotCXsKLQkJZlN0ZXBwaW5nID0gc3RlcHBpbmc7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFsdWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFZhbHVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMDdmMGIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFsdWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDIxNDIzNSAtIE5vZGUgTGlzdCBleHBhbnNpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYXJpYWJsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFhTTFZhbHVlIGV4dGVuZHMgWFNMRGVidWdFbGVtZW50IGltcGxlbWVudHMgSVZhbHVlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVTRVQgPSAibm9kZXNldCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU1QVFlfTk9ERVNFVCA9ICI8RU1QVFkgTk9ERVNFVD4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBTdHJpbmcgZlZhbHVlOwotCXByaXZhdGUgU3RyaW5nIHR5cGU7Ci0JcHJpdmF0ZSBib29sZWFuIGhhc1ZhcmlhYmxlczsKLQlwcml2YXRlIE5vZGUgYWN0dWFsTm9kZTsKLQotCS8qKgotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgWFNMVmFsdWUoSURlYnVnVGFyZ2V0IHRhcmdldCwgU3RyaW5nIHR5cGUsIE5vZGUgbm9kZSkgewotCQlzdXBlcih0YXJnZXQpOwotCQlhY3R1YWxOb2RlID0gbm9kZTsKLQkJU3RyaW5nIHZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG5vZGUuZ2V0Tm9kZVZhbHVlKCkgIT0gbnVsbCkgewotCQkJdmFsdWUgPSBub2RlLmdldE5vZGVWYWx1ZSgpOwotCQl9Ci0JCWluaXQodGFyZ2V0LCB0eXBlLCB2YWx1ZSk7Ci0JfQotCXB1YmxpYyBYU0xWYWx1ZShJRGVidWdUYXJnZXQgdGFyZ2V0LCBTdHJpbmcgdHlwZSwgU3RyaW5nIHZhbHVlKQotCXsKLQkJc3VwZXIodGFyZ2V0KTsKLQkJaW5pdCh0YXJnZXQsIHR5cGUsIHZhbHVlKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGluaXQoSURlYnVnVGFyZ2V0IHRhcmdldCwgU3RyaW5nIHR5cGUsIFN0cmluZyB2YWx1ZSkgewotCQl0aGlzLnR5cGUgPSB0eXBlOwotCQlmVmFsdWUgPSB2YWx1ZTsKLQl9Ci0JCi0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlVHlwZU5hbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiB0eXBlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWVTdHJpbmcoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWlmICgic3RyaW5nIi5lcXVhbHModHlwZSkpIC8vJE5PTi1OTFMtMSQKLQkJCXJldHVybiAiJyIrZlZhbHVlKyInIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCXJldHVybiBmVmFsdWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNBbGxvY2F0ZWQoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBJVmFyaWFibGVbXSBnZXRWYXJpYWJsZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCUxpc3Q8SVZhcmlhYmxlPiB2YXJpYWJsZUxpc3QgPSBuZXcgQXJyYXlMaXN0PElWYXJpYWJsZT4oKTsKLQkJaWYgKGFjdHVhbE5vZGUgIT0gbnVsbCkgewotCQkJaWYgKGFjdHVhbE5vZGUuaGFzQXR0cmlidXRlcygpKSB7Ci0JCQkJZ2V0QXR0cmlidXRlcyh2YXJpYWJsZUxpc3QsIGFjdHVhbE5vZGUpOwotCQkJfQotCQkJdmFyaWFibGVMaXN0LmFkZEFsbChnZXROb2RlTGlzdFZhcmlhYmxlcyhhY3R1YWxOb2RlLmdldENoaWxkTm9kZXMoKSkpOwotCQl9Ci0JCWlmICh0eXBlLmVxdWFscyhOT0RFU0VUKSAmJiAhKGZWYWx1ZS5lcXVhbHMoRU1QVFlfTk9ERVNFVCkpKSB7IAotCQkJY3JlYXRlTm9kZVNldFZhcmlhYmxlcyh2YXJpYWJsZUxpc3QpOwotCQl9Ci0JCUlWYXJpYWJsZVtdIHZhcmlhYmxlcyA9IG5ldyBJVmFyaWFibGVbdmFyaWFibGVMaXN0LnNpemUoKV07Ci0JCXZhcmlhYmxlTGlzdC50b0FycmF5KHZhcmlhYmxlcyk7Ci0JCXJldHVybiB2YXJpYWJsZXM7Ci0JfQotCXByaXZhdGUgdm9pZCBjcmVhdGVOb2RlU2V0VmFyaWFibGVzKExpc3Q8SVZhcmlhYmxlPiB2YXJpYWJsZUxpc3QpIHsKLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBidWlsZGVyRmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJTm9kZUxpc3Qgbm9kZUxpc3QgPSBudWxsOwotCQl0cnkgewotCQkJRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBidWlsZGVyRmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJCVN0cmluZyBub2RlU2V0ID0gIjxub2Rlc2V0PiIgKyBmVmFsdWUgKyAiPC9ub2Rlc2V0PiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obm9kZVNldC5nZXRCeXRlcygpKTsKLQkJCURvY3VtZW50IGRvYyA9IGJ1aWxkZXIucGFyc2UoaXMpOwotCQkJTm9kZSBmaXJzdENoaWxkID0gZG9jLmdldEZpcnN0Q2hpbGQoKTsKLQkJCW5vZGVMaXN0ID0gZmlyc3RDaGlsZC5nZXRDaGlsZE5vZGVzKCk7Ci0JCQl2YXJpYWJsZUxpc3QuYWRkQWxsKGdldE5vZGVMaXN0VmFyaWFibGVzKG5vZGVMaXN0KSk7Ci0JCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JcHJpdmF0ZSBMaXN0PElWYXJpYWJsZT4gZ2V0Tm9kZUxpc3RWYXJpYWJsZXMoTm9kZUxpc3Qgbm9kZUxpc3QpIHsKLQkJTGlzdDxJVmFyaWFibGU+IHZhcmlhYmxlTGlzdCA9IG5ldyBBcnJheUxpc3Q8SVZhcmlhYmxlPigpOwotCQlpZiAobm9kZUxpc3QgIT0gbnVsbCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbShpKTsKLQkJCQlJVmFyaWFibGUgdmFyaWFibGUgPSBuZXcgTm9kZUxpc3RWYXJpYWJsZShnZXREZWJ1Z1RhcmdldCgpLCBub2RlKTsKLQkJCQl2YXJpYWJsZUxpc3QuYWRkKHZhcmlhYmxlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdmFyaWFibGVMaXN0OwotCX0KLQlwcml2YXRlIHZvaWQgZ2V0QXR0cmlidXRlcyhMaXN0PElWYXJpYWJsZT4gdmFyaWFibGVMaXN0LCBOb2RlIG5vZGUpIHsKLQkJTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJZm9yIChpbnQgaXRlbSA9IDA7IGl0ZW0gPCBub2RlTWFwLmdldExlbmd0aCgpOyBpdGVtKyspIHsKLQkJCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpIG5vZGVNYXAuaXRlbShpdGVtKTsKLQkJCUlWYXJpYWJsZSB2YXJpYWJsZSA9IG5ldyBOb2RlTGlzdFZhcmlhYmxlKGdldERlYnVnVGFyZ2V0KCksIGF0dHJpYnV0ZSk7Ci0JCQl2YXJpYWJsZUxpc3QuYWRkKHZhcmlhYmxlKTsKLQkJfQotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc1ZhcmlhYmxlcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJaGFzVmFyaWFibGVzID0gZmFsc2U7Ci0JCWlmIChhY3R1YWxOb2RlICE9IG51bGwpIHsKLQkJCWhhc1ZhcmlhYmxlcyA9IGFjdHVhbE5vZGUuaGFzQ2hpbGROb2RlcygpOwotCQl9IGVsc2UgCWlmICh0eXBlLmVxdWFscyhOT0RFU0VUKSkgeyAKLQkJCWhhc1ZhcmlhYmxlcyA9IHRydWU7Ci0JCX0gZWxzZSB7Ci0JCQloYXNWYXJpYWJsZXMgPSBmYWxzZTsKLQkJfQotCQlpZiAoZlZhbHVlLmVxdWFscyhFTVBUWV9OT0RFU0VUKSkgewotCQkJaGFzVmFyaWFibGVzID0gZmFsc2U7Ci0JCX0KLQkJCi0JCXJldHVybiBoYXNWYXJpYWJsZXM7IAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFZhcmlhYmxlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xWYXJpYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzhkMDk0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFZhcmlhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVmFyaWFibGU7Ci0KLXB1YmxpYyBjbGFzcyBYU0xWYXJpYWJsZSBleHRlbmRzIFhTTERlYnVnRWxlbWVudCBpbXBsZW1lbnRzIElWYXJpYWJsZQotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX1NDT1BFID0gIkwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFVOTkVMX1NDT1BFID0gIlQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0xPQkFMX1NDT1BFID0gIkciOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGZpbmFsIGludCBpZDsKLQlwcml2YXRlIFN0cmluZyBmTmFtZTsKLQlwcml2YXRlIFN0cmluZyBzY29wZTsKLQotCXB1YmxpYyBYU0xWYXJpYWJsZShJRGVidWdUYXJnZXQgdGFyZ2V0LCBpbnQgaWQpCi0JewotCQlzdXBlcih0YXJnZXQpOwotCQl0aGlzLmlkID0gaWQ7Ci0JfQotCi0JcHVibGljIGludCBnZXRJZCgpCi0JewotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JcHVibGljIElWYWx1ZSBnZXRWYWx1ZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuICgoSVhTTERlYnVnVGFyZ2V0KSBnZXREZWJ1Z1RhcmdldCgpKS5nZXRWYXJpYWJsZVZhbHVlKHRoaXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotCXsKLQkJdGhpcy5mTmFtZSA9IG5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gZk5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRSZWZlcmVuY2VUeXBlTmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJaWYgKEdMT0JBTF9TQ09QRS5lcXVhbHMoc2NvcGUpKQotCQkJcmV0dXJuICJnbG9iYWwiOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiAibG9jYWwiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzVmFsdWVDaGFuZ2VkKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIGV4cHJlc3Npb24pIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRWYWx1ZShJVmFsdWUgdmFsdWUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1ZhbHVlTW9kaWZpY2F0aW9uKCkKLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiB2ZXJpZnlWYWx1ZShTdHJpbmcgZXhwcmVzc2lvbikgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdmVyaWZ5VmFsdWUoSVZhbHVlIHZhbHVlKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2NvcGUoU3RyaW5nIHNjb3BlKQotCXsKLQkJdGhpcy5zY29wZSA9IHNjb3BlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U2NvcGUoKQotCXsKLQkJcmV0dXJuIHNjb3BlOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTVhMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1kZWJ1Z2dlciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2E2NTg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuc2F4b248L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2E5ZjM2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jVHVlIEZlYiAxMCAwNToyNDo1NiBHTVQgMjAwOQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODFlMzYyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuc2F4b247c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vU2F4b25BdHRyaWJ1dGVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vU2F4b25BdHRyaWJ1dGVzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NGFiMGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL1NheG9uQXR0cmlidXRlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLUFMTE9XX0VYVEVSTkFMX0ZVTkNUSU9OUz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvYWxsb3ctZXh0ZXJuYWwtZnVuY3Rpb25zCi1BTExPV19FWFRFUk5BTF9GVU5DVElPTlMuVFlQRT1ib29sZWFuCi1BTExPV19FWFRFUk5BTF9GVU5DVElPTlMuREVTQz10cnVlIGlmIHRoZSBzdHlsZXNoZWV0IGFsbG93cyBleHRlcm5hbCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkLiBEZWZhdWx0IGlzIHRydWUuIFRoZSBzZXR0aW5nIGZhbHNlIGlzIHJlY29tbWVuZGVkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHVudHJ1c3RlZCBzdHlsZXNoZWV0cyBtYXkgYmUgZXhlY3V0ZWQuIFNldHRpbmcgdGhpcyB2YWx1ZSB0byBmYWxzZSAgYWxzbyBkaXNhYmxlcyB1c2VyLWRlZmluZWQgZXh0ZW5zaW9uIGVsZW1lbnRzLCB0b2dldGhlciB3aXRoIHRoZSB3cml0aW5nIG9mIG11bHRpcGxlIG91dHB1dCBmaWxlcywgYWxsIG9mIHdoaWNoIGNhcnJ5IHNpbWlsYXIgc2VjdXJpdHkgcmlza3MuCi0KLVRSQUNFX0VYVEVSTkFMX0ZVTkNUSU9OUz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvdHJhY2UtZXh0ZXJuYWwtZnVuY3Rpb25zCi1UUkFDRV9FWFRFUk5BTF9GVU5DVElPTlMuVFlQRT1ib29sZWFuCi1UUkFDRV9FWFRFUk5BTF9GVU5DVElPTlMuREVTQz10cnVlIGlmIHRoZSB0cmFjaW5nIG9mIGNhbGxzIHRvIGV4dGVybmFsIEphdmEgbWV0aG9kcyBpcyByZXF1aXJlZC4gRGVmYXVsdCBpcyBmYWxzZS4gVGhpcyBzd2l0Y2ggaXMgdXNlZnVsIHdoZW4gYW5hbHl6aW5nIHdoeSBTYXhvbiBmYWlscyB0byBmaW5kIGEgSmF2YSBtZXRob2QgdG8gbWF0Y2ggYW4gZXh0ZW5zaW9uIGZ1bmN0aW9uIGNhbGwgaW4gdGhlIHN0eWxlc2hlZXQsIG9yIHdoeSBpdCBjaG9vc2VzIG9uZSBtZXRob2Qgb3ZlciBhbm90aGVyIHdoZW4gc2V2ZXJhbCBhcmUgYXZhaWxhYmxlLiBUaGUgdHJhY2Ugb3V0cHV0IGlzIHNlbnQgdG8gU3lzdGVtLmVyci4KLQotVElNSU5HPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS90aW1pbmcKLVRJTUlORy5UWVBFPWJvb2xlYW4KLVRJTUlORy5ERVNDPXRydWUgaWYgYmFzaWMgdGltaW5nIGluZm9ybWF0aW9uIGlzIHRvIGJlIG91dHB1dCB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IHN0cmVhbS4KLQotVFJFRV9NT0RFTD1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvdHJlZU1vZGVsCi1UUkVFX01PREVMLlRZUEU9aW50Ci1UUkVFX01PREVMLkRFU0M9QnVpbGRlci5TVEFOREFSRF9UUkVFIG9yIEJ1aWxkZXIuVElOWV9UUkVFLiBTZWxlY3RzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTYXhvbiB0cmVlIG1vZGVsLiBUaGUgZGVmYXVsdCBpcyBCdWlsZGVyLlRJTllfVFJFRS4KLQotVFJBQ0VfTElTVEVORVI9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3RyYWNlTGlzdGVuZXIKLVRSQUNFX0xJU1RFTkVSLlRZUEU9b2JqZWN0Ci1UUkFDRV9MSVNURU5FUi5ERVNDPWFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBuZXQuc2Yuc2F4b24udHJhY2UuVHJhY2VMaXN0ZW5lci4gVGhpcyBvYmplY3Qgd2lsbCBiZSBub3RpZmllZCBvZiBzaWduaWZpY2FudCBldmVudHMgb2NjdXJyaW5nIGR1cmluZyB0aGUgdHJhbnNmb3JtYXRpb24sIGZvciB0cmFjaW5nIG9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLQotTElORV9OVU1CRVJJTkc9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL2xpbmVudW1iZXJpbmcKLUxJTkVfTlVNQkVSSU5HLlRZUEU9Ym9vbGVhbgotTElORV9OVU1CRVJJTkcuREVTQz1pbmRpY2F0ZXMgd2hldGhlciBsaW5lIG51bWJlcnMgYXJlIHRvIGJlIG1haW50YWluZWQgZm9yIHRoZSBzb3VyY2UgZG9jdW1lbnQuIFRoaXMgd2lsbCBub3QgYmUgcG9zc2libGUgaWYgdGhlIHNvdXJjZSBkb2N1bWVudCBpcyBzdXBwbGllZCBhcyBhIERPTS4gVGhlIGxpbmUgbnVtYmVycyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSB0cmFjaW5nIGludGVyZmFjZSwgYW5kIGFsc28gdmlhIHRoZSBzYXhvbjpsaW5lLW51bWJlcigpIGV4dGVuc2lvbiBmdW5jdGlvbi4KLQotUkVDT1ZFUllfUE9MSUNZPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9yZWNvdmVyeVBvbGljeQotUkVDT1ZFUllfUE9MSUNZLlRZUEU9aW50Ci1SRUNPVkVSWV9QT0xJQ1kuREVTQz1BbiBJbnRlZ2VyLiBJbmRpY2F0ZXMgaG93IGR5bmFtaWMgZXJyb3JzIHNob3VsZCBiZSBoYW5kbGVkLiBPbmUgb2YgdGhlIHZhbHVlcyAoZGVmaW5lZCBhcyBjb25zdGFudHMgaW4gdGhlIENvbnRyb2xsZXIgY2xhc3MpIFJFQ09WRVJfU0lMRU5UTFksIFJFQ09WRVJfV0lUSF9XQVJOSU5HUywgb3IgRE9fTk9UX1JFQ09WRVIpLgotCi1NRVNTQUdFX0VNSVRURVJfQ0xBU1M9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL21lc3NhZ2VFbWl0dGVyQ2xhc3MKLU1FU1NBR0VfRU1JVFRFUl9DTEFTUy5UWVBFPWNsYXNzCi1NRVNTQUdFX0VNSVRURVJfQ0xBU1MuREVTQz1UaGUgZnVsbCBuYW1lIG9mIGEgc2F4b24gZW1pdHRlciBjbGFzcy4gdGhhdCBpbXBsZW1lbnRzIHRoZSBuZXQuc2Yuc2F4b24ub3V0cHV0LkVtaXR0ZXIgaW50ZXJmYWNlOyB0aGUgY2xhc3Mgd2lsbCBiZSB1c2VkIHRvIGZvcm1hdCB0aGUgb3V0cHV0IG9mIHRoZSB4c2w6bWVzc2FnZSBpbnN0cnVjdGlvbi4KLQotU09VUkNFX1BBUlNFUl9DTEFTUz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvc291cmNlUGFyc2VyQ2xhc3MKLVNPVVJDRV9QQVJTRVJfQ0xBU1MuVFlQRT1jbGFzcwotU09VUkNFX1BBUlNFUl9DTEFTUy5ERVNDPVRoZSBmdWxsIG5hbWUgb2YgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIG9yZy54bWwuc2F4LlhNTFJlYWRlciBpbnRlcmZhY2U7IHRoZSBjbGFzcyB3aWxsIGJlIHVzZWQgdG8gcGFyc2Ugc291cmNlIGRvY3VtZW50cyAodGhhdCBpcywgdGhlIHByaW5jaXBhbCBzb3VyY2UgZG9jdW1lbnQgcGx1cyBhbnkgc2Vjb25kYXJ5IHNvdXJjZSBkb2N1bWVudHMgcmVhZCB1c2luZyB0aGUgZG9jdW1lbnQoKSBmdW5jdGlvbikKLQotU1RZTEVfUEFSU0VSX0NMQVNTPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9zdHlsZVBhcnNlckNsYXNzCi1TVFlMRV9QQVJTRVJfQ0xBU1MuVFlQRT1jbGFzcwotU1RZTEVfUEFSU0VSX0NMQVNTLkRFU0M9VGhlIGZ1bGwgbmFtZSBvZiBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgb3JnLnhtbC5zYXguWE1MUmVhZGVyIGludGVyZmFjZTsgdGhlIGNsYXNzIHdpbGwgYmUgdXNlZCB0byBwYXJzZSBzdHlsZXNoZWV0IGRvY3VtZW50cyAodGhhdCBpcywgdGhlIHByaW5jaXBhbCBzdHlsZXNoZWV0IG1vZHVsZSBwbHVzIGFueSBzZWNvbmRhcnkgc291cmNlIGRvY3VtZW50cyByZWFkIHVzaW5nIHhzbDppbmNsdWRlIG9yIHhzbDppbXBvcnQpCi0KLU9VVFBVVF9VUklfUkVTT0xWRVI9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL291dHB1dFVSSVJlc29sdmVyCi1PVVRQVVRfVVJJX1JFU09MVkVSLlRZUEU9b2JqZWN0Ci1PVVRQVVRfVVJJX1JFU09MVkVSLkRFU0M9QW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIG5ldC5zZi5zYXhvbi5PdXRwdXRVUklSZXNvbHZlcjsgdGhpcyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUgVVJJcyBvZiBzZWNvbmRhcnkgcmVzdWx0IGRvY3VtZW50cyBzcGVjaWZpZWQgaW4gdGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSB4c2w6cmVzdWx0LWRvY3VtZW50ICBpbnN0cnVjdGlvbgotCi1EVERfVkFMSURBVElPTj1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvdmFsaWRhdGlvbgotRFREX1ZBTElEQVRJT04uVFlQRT1ib29sZWFuCi1EVERfVkFMSURBVElPTi5ERVNDPUluZGljYXRlcyB3aGV0aGVyIHRoZSBYTUwgcGFyc2VyIHNob3VsZCBiZSBhc2tlZCB0byB2YWxpZGF0ZSBzb3VyY2UgZG9jdW1lbnRzIGFnYWluc3QgdGhlaXIgRFRELiBUaGlzIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgc291cmNlIGRvY3VtZW50IGFuZCBhbnkgc291cmNlIGRvY3VtZW50cyByZWFkIHVzaW5nIHRoZSBkb2N1bWVudCgpIGZ1bmN0aW9uLCB1bmxlc3MgaGFuZGxlZCBieSBhIHVzZXItd3JpdHRlbiBVUklSZXNvbHZlci4KLQotVkFMSURBVElPTl9XQVJOSU5HUz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvdmFsaWRhdGlvbi13YXJuaW5ncwotVkFMSURBVElPTl9XQVJOSU5HUy5UWVBFPWJvb2xlYW4KLVZBTElEQVRJT05fV0FSTklOR1MuREVTQz1UaGlzIGRldGVybWluZXMgd2hldGhlciB2YWxpZGF0aW9uIGVycm9ycyBpbiByZXN1bHQgZG9jdW1lbnRzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGZhdGFsLiBCeSBkZWZhdWx0IHRoZXkgYXJlIGZhdGFsOyB3aXRoIHRoaXMgb3B0aW9uIHNldCwgdGhleSBhcmUgdHJlYXRlZCBhcyB3YXJuaW5ncy4KLQotU0NIRU1BX1ZBTElEQVRJT049aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3NjaGVtYS12YWxpZGF0aW9uCi1TQ0hFTUFfVkFMSURBVElPTi5UWVBFPWJvb2xlYW4KLVNDSEVNQV9WQUxJREFUSU9OLkRFU0M9VGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgc291cmNlIGRvY3VtZW50cyBzaG91bGQgYmUgcGFyc2VkIHdpdGggc2NoZW1hLXZhbGlkYXRpb24gZW5hYmxlZC4KLQotVkVSU0lPTl9XQVJOSU5HPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS92ZXJzaW9uLXdhcm5pbmcKLVZFUlNJT05fV0FSTklORy5UWVBFPWJvb2xlYW4KLVZFUlNJT05fV0FSTklORy5ERVNDPVRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgd2FybmluZyBzaG91bGQgYmUgb3V0cHV0IHdoZW4gcnVubmluZyBhbiBYU0xUIDIuMCBwcm9jZXNzb3IgYWdhaW5zdCBhbiBYU0xUIDEuMCBzdHlsZXNoZWV0LiBUaGUgWFNMVCBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoaXMgdG8gYmUgZG9uZSBieSBkZWZhdWx0LgotCi1OQU1FX1BPT0w9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL25hbWVQb29sCi1OQU1FX1BPT0wuVFlQRT1vYmplY3QKLU5BTUVfUE9PTC5ERVNDPUEgaW5zdGFuY2Ugb2YgY2xhc3MgbmV0LnNmLnNheG9uLm9tLk5hbWVQb29sLiBJbmRpY2F0ZXMgdGhhdCB0aGUgc3VwcGxpZWQgTmFtZVBvb2wgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIHRhcmdldCAocnVuLXRpbWUpIE5hbWVQb29sIGJ5IGFsbCBzdHlsZXNoZWV0cyBjb21waWxlZCAodXNpbmcgbmV3VGVtcGxhdGVzKCkpIGFmdGVyIHRoaXMgY2FsbCBvbiBzZXRBdHRyaWJ1dGUuIE5vcm1hbGx5IGEgc2luZ2xlIHN5c3RlbS1hbGxvY2F0ZWQgTmFtZVBvb2wgaXMgdXNlZCBmb3IgYWxsIHN0eWxlc2hlZXRzIGNvbXBpbGVkIHdoaWxlIHRoZSBKYXZhIFZNIHJlbWFpbnMgbG9hZGVkOyB0aGlzIGF0dHJpYnV0ZSBhbGxvd3MgdXNlciBjb250cm9sIG92ZXIgdGhlIGFsbG9jYXRpb24gb2YgTmFtZVBvb2xzLiBOb3RlIHRoYXQgc291cmNlIHRyZWVzIHVzZWQgYXMgaW5wdXQgdG8gYSB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGJ1aWx0IHVzaW5nIHRoZSBzYW1lIE5hbWVQb29sIHRoYXQgaXMgdXNlZCB3aGVuIHRoZSBzdHlsZXNoZWV0IGlzIGNvbXBpbGVkOiB0aGlzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGlucHV0IHRvIGEgdHJhbnNmb3JtYXRpb24gaXMgc3VwcGxpZWQgYXMgYSBTQVhTb3VyY2Ugb3IgU3RyZWFtU291cmNlIGJ1dCBpdCBpcyB1bmRlciB1c2VyIGNvbnRyb2wgaWYgeW91IGJ1aWxkIHRoZSBzb3VyY2UgdHJlZSB5b3Vyc2VsZi4KLQotUkVDT0dOSVpFX1VSSV9RVUVSWV9QQVJBTUVURVJTPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9yZWNvZ25pemUtdXJpLXF1ZXJ5LXBhcmFtZXRlcnMKLVJFQ09HTklaRV9VUklfUVVFUllfUEFSQU1FVEVSUy5UWVBFPWJvb2xlYW4KLVJFQ09HTklaRV9VUklfUVVFUllfUEFSQU1FVEVSUy5ERVNDPWRldGVybWluZXMgd2hldGhlciBxdWVyeSBwYXJhbWV0ZXJzICh0aGluZ3MgYWZ0ZXIgIj8iKVxuXAotIGluIGEgVVJJIHBhc3NlZCB0byB0aGUgZG9jdW1lbnQoKSBvciBkb2MoKSBmdW5jdGlvbiBhcmUgc3BlY2lhbGx5IHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbSBkZWZhdWx0IFVSSVJlc29sdmVyLlxuXAotIEFsbG93ZWQgcGFyYW1ldGVycyBpbmNsdWRlLCBmb3IgZXhhbXBsZSB2YWxpZGF0aW9uPXN0cmljdCB0byBwZXJmb3JtIHNjaGVtYSB2YWxpZGF0aW9uLCBhbmQgc3RyaXAtc3BhY2U9eWVzXG5cCi0gdG8gcGVyZm9ybSBzdHJpcHBpbmcgb2YgYWxsIHdoaXRlc3BhY2Utb25seSB0ZXh0IG5vZGVzCi0KLUNPTExBVElPTl9VUklfUkVTT0xWRVI9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL2NvbGxhdGlvbi11cmktcmVzb2x2ZXIKLUNPTExBVElPTl9VUklfUkVTT0xWRVIuVFlQRT1vYmplY3QKLUNPTExBVElPTl9VUklfUkVTT0xWRVIuREVTQz1BIG5ldC5zZi5zYXhvbi5zb3J0LkNvbGxhdGlvblVSSVJlc29sdmVyIHVzZWQgdG8gcmVzb2x2ZSBjb2xsYXRpb24gVVJJcyB1c2VkIGluIHN0eWxlc2hlZXRzIGNvbXBpbGVkIG9yIGV4ZWN1dGVkIHVuZGVyIHRoZVxuXAotIGNvbnRyb2wgb2YgdGhpcyBUcmFuc2Zvcm1lckZhY3RvcnkKLSAKLUNPTExFQ1RJT05fVVJJX1JFU09MVkVSPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9jb2xsZWN0aW9uLXVyaS1yZXNvbHZlcgotQ09MTEVDVElPTl9VUklfUkVTT0xWRVIuVFlQRT1vYmplY3QKLUNPTExFQ1RJT05fVVJJX1JFU09MVkVSLkRFU0M9QSBuZXQuc2Yuc2F4b24uc29ydC5Db2xsZWN0aW9uVVJJUmVzb2x2ZXIgdXNlZCB0byByZXNvbHZlIGNvbGxlY3Rpb24gVVJJcyB1c2VkIGluIGNhbGxzIG9mIHRoZSBjb2xsZWN0aW9uKCkgZnVuY3Rpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vU2F4b25PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vU2F4b25PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NzkwNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL1NheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLUlOREVOVF9TUEFDRVM9e2h0dHA6Ly9zYXhvbi5zZi5uZXQvfWluZGVudC1zcGFjZXMKLUlOREVOVF9TUEFDRVMuREVTQz0oaW50ZWdlciB2YWx1ZSkuRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB1c2VkIGZvciBpbmRlbnRhdGlvbiBvZiBvdXRwdXQKLQotVU5ERUNMQVJFX05BTUVTUEFDRVM9e2h0dHA6Ly9zYXhvbi5zZi5uZXQvfXVuZGVjbGFyZS1uYW1lc3BhY2VzCi1VTkRFQ0xBUkVfTkFNRVNQQUNFUy5ERVNDPWluY2x1ZGUtY29udGVudC10eXBlID0gInllcyIgfCAibm8iLiBUaGlzIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGluIFhTTFQgMi4wLiBJbmRpY2F0ZXMgWE1MIDEuMSBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGFyZSB0byBiZSBvdXRwdXQuCi0KLUNIQVJBQ1RFUl9SRVBSRVNFTlRBVElPTj17aHR0cDovL3NheG9uLnNmLm5ldC99Y2hhcmFjdGVyLXJlcHJlc2VudGF0aW9uCi1DSEFSQUNURVJfUkVQUkVTRU5UQVRJT04uREVTQz0ocmVwMVs7cmVwMl0pLiBJbmRpY2F0ZXMgdGhlIHByZWZlcnJlZCB3YXkgb2YgcmVwcmVzZW50aW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIEhUTUwgYW5kIFhNTCBvdXRwdXQuIHJlcDEgaXMgZm9yIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIDEyOC0yNTYsIHJlcDIgZm9yIHRob3NlIGFib3ZlIDI1Ni4KLQotTkVYVF9JTl9DSEFJTj17aHR0cDovL3NheG9uLnNmLm5ldC99bmV4dC1pbi1jaGFpbgotTkVYVF9JTl9DSEFJTi5ERVNDPSh1cmkpLiBJbmRpY2F0ZXMgdGhhdCB0aGUgb3V0cHV0IGlzIHRvIGJlIHBpcGVkIGludG8gYW5vdGhlciBYU0xUIHN0eWxlc2hlZXQgdG8gcGVyZm9ybSBhbm90aGVyIHRyYW5zZm9ybWF0aW9uLiBUaGUgYXV4aWxpYXJ5IHByb3BlcnR5IE5FWFRfSU5fQ0hBSU5fQkFTRV9VUkkgcmVjb3JkcyB0aGUgYmFzZSBVUkkgb2YgdGhlIHN0eWxlc2hlZXQgZWxlbWVudCB3aGVyZSB0aGlzIGF0dHJpYnV0ZSB3YXMgZm91bmQuCi0KLVRZUEVfSU5GT1JNQVRJT049e2h0dHA6Ly9zYXhvbi5zZi5uZXQvfXR5cGUtaW5mb3JtYXRpb24KLVRZUEVfSU5GT1JNQVRJT04uREVTQz0obm9uZXxwcmVzZXJ2ZXxzdHJpY3R8bGF4KS4gSW5kaWNhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgdHlwZS1pbmZvcm1hdGlvbiBhdHRyaWJ1dGU6ICJub25lIiwgInByZXNlcnZlIiwgInN0cmljdCIsICJsYXgiCi0KLVJFUVVJUkVfV0VMTF9GT1JNRUQ9e2h0dHA6Ly9zYXhvbi5zZi5uZXQvfXJlcXVpcmUtd2VsbC1mb3JtZWQKLVJFUVVJUkVfV0VMTF9GT1JNRUQuREVTQz0oeWVzfG5vKS4gSW5kaWNhdGVzIHdoZXRoZXIgYSB1c2VyLXN1cHBsaWVkIENvbnRlbnRIYW5kbGVyIHJlcXVpcmVzIHRoZSBzdHJlYW0gb2YgU0FYIGV2ZW50cyB0byBiZSB3ZWxsLWZvcm1lZCAodGhhdCBpcywgdG8gaGF2ZSBhIHNpbmdsZSBlbGVtZW50IG5vZGUgYW5kIG5vIHRleHQgbm9kZXMgYXMgY2hpbGRyZW4gb2YgdGhlIHJvb3QpLiBUaGUgZGVmYXVsdCBpcyAibm8iLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NGRkZTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLWRlYnVnZ2VyLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBTYXhvbkF0dHJpYnV0ZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBTYXhvbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiM2NkNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wuc2F4b24KLUJ1bmRsZS1OYW1lLjAgPSBYU0wgU2F4b24gU3VwcG9ydAotcHJvY2Vzc29yVHlwZS5sYWJlbC4wID0gU2F4b24gKFhTTFQgMi4wKQotcHJvY2Vzc29yVHlwZS5sYWJlbC4xID0gU2F4b24gKFhTTFQgMS4wKQotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLXRyYW5zZm9ybWVyRmFjdG9yeVNheG9uNiA9IFNheG9uIDYKLXRyYW5zZm9ybWVyU2F4b25YU0xUMiA9IFNheG9uIDcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZTBhODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvclR5cGUiPgotICAgICAgPHByb2Nlc3NvclR5cGUKLSAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXM9IlNheG9uQXR0cmlidXRlcy5wcm9wZXJ0aWVzIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuc2F4b25fMV8wLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3NvclR5cGUubGFiZWwuMSIKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9IlNheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIj4KLSAgICAgICAgIDx0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0iY29tLmljbC5zYXhvbi5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIgotICAgICAgICAgICAgICAgbmFtZT0iJXRyYW5zZm9ybWVyRmFjdG9yeVNheG9uNiI+Ci0gICAgICAgICA8L3RyYW5zZm9ybWVyRmFjdG9yeT4KLSAgICAgIDwvcHJvY2Vzc29yVHlwZT4KLSAgICAgIDxwcm9jZXNzb3JUeXBlCi0gICAgICAgICAgICBhdHRyaWJ1dGVQcm9wZXJ0aWVzPSJTYXhvbkF0dHJpYnV0ZXMucHJvcGVydGllcyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3NvclR5cGUubGFiZWwuMCIKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9IlNheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIj4KLSAgICAgICAgIDx0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0ibmV0LnNmLnNheG9uLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiCi0gICAgICAgICAgICAgICBuYW1lPSIldHJhbnNmb3JtZXJTYXhvblhTTFQyIj4KLSAgICAgICAgIDwvdHJhbnNmb3JtZXJGYWN0b3J5PgotICAgICAgPC9wcm9jZXNzb3JUeXBlPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BvbS54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhZjJjYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54c2wuc2F4b248L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPgotCTx2ZXJzaW9uPjEuMC4yMDAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JPG5hbWU+WFNMVCBTYXhvbiBQbHVnaW48L25hbWU+Ci0KLQk8cGFyZW50PgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS53c3QueHNsLXBhcmVudDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MS4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vLi4vZGV2ZWxvcG1lbnQvYXRoZW5hL29yZy5lY2xpcHNlLndzdC54c2wucmVsZW5nPC9yZWxhdGl2ZVBhdGg+Ci0JPC9wYXJlbnQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9zcmMtZGVidWdnZXIvUkVBRE1FLnR4dCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9zcmMtZGVidWdnZXIvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2M2E1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vc3JjLWRlYnVnZ2VyL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1KdXN0IGEgcGxhY2Vob2xkZXIgdG8gZW5zdXJlIHNyYyBmb2xkZXIgYXBwZWFycy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmRmOGU5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLWRlYnVnZ2VyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYjc2YmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWphdmFDb21waWxlci54YWxhbi1kZWJ1Z2dlci5qYXIuYXJncwotYnVpbGQueG1sCi14YWxhbi1kZWJ1Z2dlci5qYXIKLXRlbXAuZm9sZGVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjNTZiYzIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYTEzMDkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1RodSBKYW4gMDMgMjI6MjQ6NTAgRVNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYmMzNDcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNTdW4gRGVjIDE2IDA4OjQ4OjUyIEdNVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWU2OGI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotI1dlZCBKdWwgMzAgMjA6NTc6MTUgQlNUIDIwMDgKLWNvbXBpbGVycy5mLnVucmVzb2x2ZWQtZmVhdHVyZXM9MQotY29tcGlsZXJzLmYudW5yZXNvbHZlZC1wbHVnaW5zPTEKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MQotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5kaXNjb3VyYWdlZC1jbGFzcz0xCi1jb21waWxlcnMucC5pbnRlcm5hbD0xCi1jb21waWxlcnMucC5taXNzaW5nLWJ1bmRsZS1jbGFzc3BhdGgtZW50cmllcz0wCi1jb21waWxlcnMucC5taXNzaW5nLXBhY2thZ2VzPTIKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0xCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTEKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLWlkZW50aWZpZXI9MQotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0xCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucy5jcmVhdGUtZG9jcz1mYWxzZQotY29tcGlsZXJzLnMuZG9jLWZvbGRlcj1kb2MKLWNvbXBpbGVycy5zLm9wZW4tdGFncz0xCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZmOGYyYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbjtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotICB1c2VzOj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlciwKLSAgIG9yZy5hcGFjaGUueHBhdGgsCi0gICBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLAotICAgamF2YXgueG1sLnRyYW5zZm9ybSwKLSAgIG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5hcGFjaGUueGFsYW47YnVuZGxlLXZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXI7YnVuZGxlLXZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1ZztidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSI7cmVzb2x1dGlvbjo9b3B0aW9uYWwKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9YYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9YYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUxYjVjNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vWGFsYW5BdHRyaWJ1dGVzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotT1BUSU1JWkU9aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuL2ZlYXR1cmVzL29wdGltaXplCi1PUFRJTUlaRS5UWVBFPWJvb2xlYW4KLU9QVElNSVpFLkRFU0M9T3B0aW1pemUgc3R5bGVzaGVldCBwcm9jZXNzaW5nLiBCeSBkZWZhdWx0LCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZS4gWW91IG1heSBuZWVkIHRvIHNldCBpdCB0byBmYWxzZSBmb3IgdG9vbGluZyBhcHBsaWNhdGlvbnMuCi0KLUlOQ1JFTUVOVEFMPWh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9pbmNyZW1lbnRhbAotSU5DUkVNRU5UQUwuVFlQRT1ib29sZWFuCi1JTkNSRU1FTlRBTC5ERVNDPVByb2R1Y2Ugb3V0cHV0IGluY3JlbWVudGFsbHksIHJhdGhlciB0aGFuIHdhaXRpbmcgdG8gZmluaXNoIHBhcnNpbmcgdGhlIGlucHV0IGJlZm9yZSBnZW5lcmF0aW5nIGFueSBvdXRwdXQuIEJ5IGRlZmF1bHQgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvIGZhbHNlLiBZb3UgY2FuIHR1cm4gdGhpcyBhdHRyaWJ1dGUgb24gdG8gdHJhbnNmb3JtIGxhcmdlIGRvY3VtZW50cyB3aGVyZSB0aGUgc3R5bGVzaGVldCBzdHJ1Y3R1cmUgaXMgb3B0aW1pemVkIHRvIGV4ZWN1dGUgaW5kaXZpZHVhbCB0ZW1wbGF0ZXMgd2l0aG91dCBoYXZpbmcgdG8gcGFyc2UgdGhlIGVudGlyZSBkb2N1bWVudC4KLQotU09VUkNFX0xPQ0FUSU9OPWh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9zb3VyY2VfbG9jYXRpb24KLVNPVVJDRV9MT0NBVElPTi5UWVBFPWJvb2xlYW4KLVNPVVJDRV9MT0NBVElPTi5ERVNDPUJ5IGRlZmF1bHQsIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byBmYWxzZS4gU2V0dGluZyB0aGlzIGF0dHJpYnV0ZSB0byB0cnVlIGludm9sdmVzIGEgc3Vic3RhbnRpYWwgaW5jcmVhc2UgaW4gc3RvcmFnZSBjb3N0IHBlciBzb3VyY2UgZG9jdW1lbnQgbm9kZS4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBOb2RlSW5mbyBleHRlbnNpb24gZnVuY3Rpb25zIChvciBzb21lIG90aGVyIG1lY2hhbmlzbSkgdG8gcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGR1cmluZyBhIHRyYW5zZm9ybSwgeW91IG11c3Qgc2V0IHRoZSBhdHRyaWJ1dGUgdG8gdHJ1ZSBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgVHJhbnNmb3JtZXIgYW5kIHByb2Nlc3NpbmcgdGhlIHN0eWxlc2hlZXQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL1hhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL1hhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWViMDcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9YYWxhbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1TX0tFWV9JTkRFTlRfQU1PVU5UPXtodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW59aW5kZW50LWFtb3VudAotU19LRVlfSU5ERU5UX0FNT1VOVC5ERVNDPVRoZSBub24tc3RhbmRhcmQgcHJvcGVydHkga2V5IHRvIHVzZSB0byBzZXQgdGhlXG5cCi0JbnVtYmVyIG9mIHdoaXRlcGFjZXMgdG8gaW5kZW50IGJ5LCBwZXIgaW5kZW50YXRpb24gbGV2ZWwsXG5cCi0gICAgaWYgaW5kZW50PSJ5ZXMiCi0KLVNfS0VZX0xJTkVfU0VQQVJBVE9SPXtodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW59bGluZS1zZXBhcmF0b3IKLVNfS0VZX0xJTkVfU0VQQVJBVE9SLkRFU0M9VGhlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgdG8gdXNlIHRvIHNldCB0aGUgY2hhcmFjdGVycyB0byB3cml0ZSBvdXQgYXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUsXG5cCi0JcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lcyBmcm9tIHRoZSBydW50aW1lLgotCi1TX0tFWV9DT05URU5UX0hBTkRMRVI9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1jb250ZW50LWhhbmRsZXIKLVNfS0VZX0NPTlRFTlRfSEFORExFUi5ERVNDPVRoaXMgbm9uLXN0YW5kYXJkIHByb3BlcnR5IGtleSBpcyB1c2VkIHRvIHNldCB0aGUgbmFtZSBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkXG5cCi0gICAgIEphdmEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBDb250ZW50SGFuZGxlciBpbnRlcmZhY2UuXG5cCi0gICAgIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIGNsYXNzIHdpdGggYSBkZWZhdWx0IGNvbnN0cnVjdG9yIHRoYXRcblwKLSAgICAgaW1wbGVtZW50cyB0aGUgQ29udGVudEhhbmRsZXIgaW50ZXJmYWNlLCB3aGVyZSB0aGUgcmVzdWx0IHRyZWUgZXZlbnRzXG5cCi0gICAgIHdpbGwgYmUgc2VudCB0by4KLQotU19LRVlfRU5USVRJRVM9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1lbnRpdGllcwotU19LRVlfRU5USVRJRVMuREVTQz1UaGlzIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBmaWxlXG5cCi0gICAgIHRoYXQgc3BlY2lmaWVzIGNoYXJhY3RlciB0byBlbnRpdHkgcmVmZXJlbmNlIG1hcHBpbmdzLgotCi1TX1VTRV9VUkxfRVNDQVBJTkc9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn11c2UtdXJsLWVzY2FwaW5nCi1TX1VTRV9VUkxfRVNDQVBJTkcuREVTQz1UaGlzIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgaXMgdXNlZCB0byBzZXQgYSB2YWx1ZSBvZiAieWVzIiBpZiB0aGUgaHJlZiB2YWx1ZXMgZm9yIEhUTUwgc2VyaWFsaXphdGlvbiBzaG91bGRcblwKLSAgICAgdXNlICV4eCBlc2NhcGluZy4KLSAgICAgCi1TX09NSVRfTUVUQV9UQUc9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1vbWl0LW1ldGEtdGFnCi1TX09NSVRfTUVUQV9UQUcuREVTQz1UaGlzIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgaXMgdXNlZCB0byBzZXQgYSB2YWx1ZSBvZiAieWVzIiBpZiB0aGUgTUVUQSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQgd2hlcmUgaXQgd291bGRcblwKLSAgICAgb3RoZXJ3aXNlIGJlIHN1cHBsaWVkLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNTZjODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy1kZWJ1Z2dlci8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBYYWxhbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBYYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAxYzBmYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4KLUJ1bmRsZS1OYW1lLjAgPSBYU0wgWGFsYW4gU3VwcG9ydAotcHJvY2Vzc29yVHlwZS5sYWJlbC4wID0gWGFsYW4KLXByb2Nlc3Nvci5sYWJlbC4wID0gWGFsYW4gMi41LjEKLXByb2Nlc3Nvci5sYWJlbC4xID0gWGFsYW4gMi43LjEKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi10cmFuc2Zvcm1lckZhY3RvcnlOYW1lWGFsYW4gPSBJbnRlcnByZXRpdmUKLXRyYW5zZm9ybWVyRmFjdG9yeU5hbWVYYWxhblhTTFRDID0gQ29tcGlsaW5nCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTYwMjk3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlIj4KLSAgICAgIDxwcm9jZXNzb3JUeXBlCi0gICAgICAgICAgICBhdHRyaWJ1dGVQcm9wZXJ0aWVzPSJYYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3NvclR5cGUubGFiZWwuMCIKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9IlhhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIj4KLSAgICAgICAgIDx0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0ib3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIKLSAgICAgICAgICAgICAgIG5hbWU9IiV0cmFuc2Zvcm1lckZhY3RvcnlOYW1lWGFsYW4iPgotICAgICAgICAgPC90cmFuc2Zvcm1lckZhY3Rvcnk+Ci0gICAgICAgICA8dHJhbnNmb3JtZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICBmYWN0b3J5Q2xhc3M9Im9yZy5hcGFjaGUueGFsYW4ueHNsdGMudHJheC5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIgotICAgICAgICAgICAgICAgbmFtZT0iJXRyYW5zZm9ybWVyRmFjdG9yeU5hbWVYYWxhblhTTFRDIj4KLSAgICAgICAgIDwvdHJhbnNmb3JtZXJGYWN0b3J5PgotICAgICAgPC9wcm9jZXNzb3JUeXBlPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5kZWJ1Z2dlciI+Ci0gICAgICA8ZGVidWdnZXIKLSAgICAgICAgICAgIGNsYXNzTmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2VjbGlwc2Vfb3JiaXQ6b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbn0iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlciIKLSAgICAgICAgICAgIG5hbWU9IlhhbGFuIDIuNS4xIG9yIGdyZWF0ZXIiCi0gICAgICAgICAgICBwcm9jZXNzb3JUeXBlSWQ9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4ucHJvY2Vzc29yVHlwZSIKLSAgICAgICAgICAgIHRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIj4KLSAgICAgIDwvZGVidWdnZXI+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvciI+Ci0gICAgICA8IS0tIEFuIGFkb3B0ZXIgY2FuIHNwZWNpZnkgdGhlICR7ZWNsaXBzZV9vcmJpdDogfSB2YXJpYWJsZSB0byBpbmRpY2F0ZSB3aGljaCBlY2xpcHNlCi0gICAgICAgICAgIGJ1bmRsZSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHBhdGguIC0tPgotICAgICAgPHByb2Nlc3NvcgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS54YWxhbn07JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXJ9OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLmJjZWx9OyR7ZWNsaXBzZV9vcmJpdDpqYXZhX2N1cC5ydW50aW1lfSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3IiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3Nvci5sYWJlbC4xIgotICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBkZWJ1Z2dlcklkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyIgotICAgICAgICAgICAgc3VwcG9ydHM9IjEuMCI+Ci0gICAgICA8L3Byb2Nlc3Nvcj4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vcG9tLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTc2ZGQyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0JPHZlcnNpb24+MS4wLjEwMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8bmFtZT5YU0xUIFhhbGFuIFBsdWdpbjwvbmFtZT4KLQotCTxwYXJlbnQ+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54c2wtcGFyZW50PC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4xLjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQkJPHJlbGF0aXZlUGF0aD4uLi8uLi9kZXZlbG9wbWVudC9hdGhlbmEvb3JnLmVjbGlwc2Uud3N0LnhzbC5yZWxlbmc8L3JlbGF0aXZlUGF0aD4KLQk8L3BhcmVudD4KLQotICAgPGJ1aWxkPgotICAgICAgPHNvdXJjZURpcmVjdG9yeT5zcmMtZGVidWdnZXI8L3NvdXJjZURpcmVjdG9yeT4KLSAgICAgIDxwbHVnaW5zPgotICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi43PC92ZXJzaW9uPgotICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICA8L3BsdWdpbnM+Ci0gICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5EZWJ1Z2dlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuRGVidWdnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyZWFiMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5EZWJ1Z2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEudXRpbC5Ub29NYW55TGlzdGVuZXJzRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFuc2Zvcm1lci5UcmFuc2Zvcm1lckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLkFic3RyYWN0RGVidWdnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLkJyZWFrUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFhhbGFuRGVidWdnZXIgZXh0ZW5kcyBBYnN0cmFjdERlYnVnZ2VyCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFhhbGFuRGVidWdnZXIuY2xhc3MpOwotCXByaXZhdGUgWGFsYW5UcmFjZUxpc3RlbmVyIGN1cnJlbnRUcmFjZUxpc3RlbmVyOwotCXByaXZhdGUgVHJhbnNmb3JtZXJJbXBsIGxhc3RUcmFuc2Zvcm1lckluQ2hhaW47Ci0JCi0JcHVibGljIHZvaWQgc2V0VHJhbnNmb3JtZXJGYWN0b3J5KFRyYW5zZm9ybWVyRmFjdG9yeSBmYWN0b3J5KQotCXsKLQkJVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCB0ZmkgPSAoVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCkgZmFjdG9yeTsKLQkJdGZpLnNldEF0dHJpYnV0ZShUcmFuc2Zvcm1lckZhY3RvcnlJbXBsLkZFQVRVUkVfU09VUkNFX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOwotCQl0Zmkuc2V0QXR0cmlidXRlKFRyYW5zZm9ybWVyRmFjdG9yeUltcGwuRkVBVFVSRV9PUFRJTUlaRSwgQm9vbGVhbi5GQUxTRSk7Ci0JfQotCQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkZWJ1Z2dlclN1c3BlbmRlZChCcmVha1BvaW50IGJyZWFrcG9pbnQpCi0JewotCQkvLyBmbHVzaCB0aGUgc2VyaWFsaXplciAod2hpY2ggaXMgYnVmZmVyZWQgYnkgWGFsYW4gaXRzZWxmKQotCQl0cnkKLQkJewotCQkJbGFzdFRyYW5zZm9ybWVySW5DaGFpbi5nZXRTZXJpYWxpemF0aW9uSGFuZGxlcigpLmZsdXNoUGVuZGluZygpOwotCQl9Ci0JCWNhdGNoIChTQVhFeGNlcHRpb24gZSkKLQkJewotCQkJbG9nLmVycm9yKCJFcnJvciBmbHVzaGluZyBzZXJpYWxpemVyIiwgZSk7Ci0JCX0KLQkJc3VwZXIuZGVidWdnZXJTdXNwZW5kZWQoYnJlYWtwb2ludCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVHJhbnNmb3JtZXIoVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpCi0JewotCQlUcmFuc2Zvcm1lckltcGwgdHJhbnNmb3JtZXJJbXBsID0gKFRyYW5zZm9ybWVySW1wbCkgdHJhbnNmb3JtZXI7Ci0JCQotCQlsYXN0VHJhbnNmb3JtZXJJbkNoYWluID0gdHJhbnNmb3JtZXJJbXBsOwotCQkKLQkJVHJhY2VNYW5hZ2VyIHRyTWdyID0gdHJhbnNmb3JtZXJJbXBsLmdldFRyYWNlTWFuYWdlcigpOwotCQl0cnkKLQkJewotLy8JCQlYYWxhblByaW50VHJhY2VMaXN0ZW5lciBwcmludGVyID0gbmV3IFhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyKG5ldyBQcmludFdyaXRlcihTeXN0ZW0uZXJyKSk7Ci0vLwkJCXByaW50ZXIubV90cmFjZUVsZW1lbnRzID0gdHJ1ZTsKLS8vCQkJcHJpbnRlci5tX3RyYWNlU2VsZWN0aW9uID0gdHJ1ZTsKLS8vCQkJcHJpbnRlci5tX3RyYWNlVGVtcGxhdGVzID0gdHJ1ZTsKLS8vCQkJdHJNZ3IuYWRkVHJhY2VMaXN0ZW5lcihwcmludGVyKTsKLQkJCQotCQkJWGFsYW5UcmFjZUxpc3RlbmVyIHRyYWNlTGlzdGVuZXIgPSBuZXcgWGFsYW5UcmFjZUxpc3RlbmVyKHRoaXMpOwotCQkJdHJNZ3IuYWRkVHJhY2VMaXN0ZW5lcih0cmFjZUxpc3RlbmVyKTsKLQkJfQotCQljYXRjaCAoVG9vTWFueUxpc3RlbmVyc0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQotCS8qKgotCSAqIEdldHMgYSB2YXJpYWJsZSBieSBJRAotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IGlkKQotCXsKLQkJcmV0dXJuIGN1cnJlbnRUcmFjZUxpc3RlbmVyLmdldFZhcmlhYmxlKGlkKTsKLQl9Ci0KLQl2b2lkIHNldEN1cnJlbnRUcmFjZUxpc3RlbmVyKFhhbGFuVHJhY2VMaXN0ZW5lciBjdXJyZW50VHJhY2VMaXN0ZW5lcikKLQl7Ci0JCWxvZy5kZWJ1ZygiU2V0dGluZyBuZXcgWGFsYW5UcmFjZUxpc3RlbmVyIik7Ci0JCXRoaXMuY3VycmVudFRyYWNlTGlzdGVuZXIgPSBjdXJyZW50VHJhY2VMaXN0ZW5lcjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5QcmludFRyYWNlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblByaW50VHJhY2VMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDZjMDdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblByaW50VHJhY2VMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVRleHRMaXRlcmFsOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5QcmludFRyYWNlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50OwotCi1wdWJsaWMgY2xhc3MgWGFsYW5QcmludFRyYWNlTGlzdGVuZXIgZXh0ZW5kcyBQcmludFRyYWNlTGlzdGVuZXIKLXsKLQlwcml2YXRlIGZpbmFsIFByaW50V3JpdGVyIHdyaXRlcjsKLQotCXB1YmxpYyBYYWxhblByaW50VHJhY2VMaXN0ZW5lcihQcmludFdyaXRlciBwdykKLQl7Ci0JCXN1cGVyKHB3KTsKLQkJdGhpcy53cml0ZXIgPSBwdzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQlzd2l0Y2ggKGV2Lm1fc3R5bGVOb2RlLmdldFhTTFRva2VuKCkpCi0JCXsKLQkJCWNhc2UgQ29uc3RhbnRzLkVMRU1OQU1FX1RFWFRMSVRFUkFMUkVTVUxUOgotCQkJCWlmIChtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQl3cml0ZXIucHJpbnQoZXYubV9zdHlsZU5vZGUuZ2V0U3lzdGVtSWQoKSArICIgTGluZSAjIiArIGV2Lm1fc3R5bGVOb2RlLmdldExpbmVOdW1iZXIoKSArICIsICIgKyAiQ29sdW1uICMiICsgZXYubV9zdHlsZU5vZGUuZ2V0Q29sdW1uTnVtYmVyKCkgKyAiIC0tICIgKyBldi5tX3N0eWxlTm9kZS5nZXROb2RlTmFtZSgpCi0JCQkJCQkJKyAiOiAiKTsKLQotCQkJCQlFbGVtVGV4dExpdGVyYWwgZXRsID0gKEVsZW1UZXh0TGl0ZXJhbCkgZXYubV9zdHlsZU5vZGU7Ci0JCQkJCVN0cmluZyBjaGFycyA9IG5ldyBTdHJpbmcoZXRsLmdldENoYXJzKCksIDAsIGV0bC5nZXRDaGFycygpLmxlbmd0aCk7Ci0KLQkJCQkJd3JpdGVyLnByaW50bG4oIiAgICAiICsgY2hhcnMudHJpbSgpKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENvbnN0YW50cy5FTEVNTkFNRV9URU1QTEFURToKLQkJCQlpZiAobV90cmFjZVRlbXBsYXRlcyB8fCBtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQlFbGVtVGVtcGxhdGUgZXQgPSAoRWxlbVRlbXBsYXRlKSBldi5tX3N0eWxlTm9kZTsKLQotCQkJCQl3cml0ZXIucHJpbnQoZXQuZ2V0U3lzdGVtSWQoKSArICIgTGluZSAjIiArIGV0LmdldExpbmVOdW1iZXIoKSArICIsICIgKyAiQ29sdW1uICMiICsgZXQuZ2V0Q29sdW1uTnVtYmVyKCkgKyAiOiAiICsgZXQuZ2V0Tm9kZU5hbWUoKSArICIgIik7Ci0KLQkJCQkJaWYgKG51bGwgIT0gZXQuZ2V0TWF0Y2goKSkKLQkJCQkJewotCQkJCQkJd3JpdGVyLnByaW50KCJtYXRjaD0nIiArIGV0LmdldE1hdGNoKCkuZ2V0UGF0dGVyblN0cmluZygpICsgIicgIik7Ci0JCQkJCX0KLQotCQkJCQlpZiAobnVsbCAhPSBldC5nZXROYW1lKCkpCi0JCQkJCXsKLQkJCQkJCXdyaXRlci5wcmludCgibmFtZT0nIiArIGV0LmdldE5hbWUoKSArICInICIpOwotCQkJCQl9Ci0KLQkJCQkJd3JpdGVyLnByaW50bG4oKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWlmIChtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQl3cml0ZXIKLQkJCQkJCQkucHJpbnRsbihldi5tX3N0eWxlTm9kZS5nZXRTeXN0ZW1JZCgpICsgIiBMaW5lICMiICsgZXYubV9zdHlsZU5vZGUuZ2V0TGluZU51bWJlcigpICsgIiwgIiArICJDb2x1bW4gIyIgKyBldi5tX3N0eWxlTm9kZS5nZXRDb2x1bW5OdW1iZXIoKSArICI6ICIKLQkJCQkJCQkJCSsgZXYubV9zdHlsZU5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0JCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXYpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJd3JpdGVyLnByaW50KCJzZWxlY3RlZDogIik7Ci0JCXN1cGVyLnNlbGVjdGVkKGV2KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2VsZWN0RW5kKEVuZFNlbGVjdGlvbkV2ZW50IGV2KSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCXdyaXRlci5wcmludCgic2VsZWN0RW5kOiAiKTsKLQkJc3VwZXIuc2VsZWN0RW5kKGV2KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQl3cml0ZXIucHJpbnQoInRyYWNlOiAiKTsKLQkJc3VwZXIudHJhY2UoZXYpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0cmFjZUVuZChUcmFjZXJFdmVudCBldikKLQl7Ci0JCXdyaXRlci5wcmludCgidHJhY2VFbmQ6ICIpOwotCQlfdHJhY2UoZXYpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblJvb3RTdHlsZUZyYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5Sb290U3R5bGVGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjViNzFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblJvb3RTdHlsZUZyYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVmFyaWFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuU3R5bGVzaGVldFJvb3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlZhcmlhYmxlU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5Sb290U3R5bGVGcmFtZSBleHRlbmRzIFhhbGFuU3R5bGVGcmFtZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhYYWxhblJvb3RTdHlsZUZyYW1lLmNsYXNzKTsKLQlwcml2YXRlIE1hcCB2YXJpYWJsZXM7Ci0JcHJpdmF0ZSBBcnJheUxpc3QgZ2xvYmFsczsKLQotCXB1YmxpYyBYYWxhblJvb3RTdHlsZUZyYW1lKFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIobnVsbCwgZXZlbnQpOwotCQlmaWxsR2xvYmFscyhldmVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0R2xvYmFscygpCi0JewotCQlyZXR1cm4gZ2xvYmFsczsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGZpbGxHbG9iYWxzKFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJVmFyaWFibGVTdGFjayB2cyA9IGV2ZW50Lm1fcHJvY2Vzc29yLmdldFhQYXRoQ29udGV4dCgpLmdldFZhclN0YWNrKCk7Ci0JICAgIFN0eWxlc2hlZXRSb290IHNyID0gZXZlbnQubV9zdHlsZU5vZGUuZ2V0U3R5bGVzaGVldFJvb3QoKTsKLQkgICAgVmVjdG9yIHZhcnMgPSBzci5nZXRWYXJpYWJsZXNBbmRQYXJhbXNDb21wb3NlZCgpOwotCQl2YXJpYWJsZXMgPSBuZXcgSGFzaE1hcCh2YXJzLnNpemUoKSk7Ci0JCWdsb2JhbHMgPSBuZXcgQXJyYXlMaXN0KHZhcnMuc2l6ZSgpKTsKLQkgICAgaW50IGkgPSB2YXJzLnNpemUoKTsKLQkgICAgd2hpbGUgKC0taSA+PSAwKQotCQl7Ci0JCQlFbGVtVmFyaWFibGUgdmFyaWFibGUgPSAoRWxlbVZhcmlhYmxlKSB2YXJzLmVsZW1lbnRBdChpKTsKLQkJCVhhbGFuVmFyaWFibGUgeHZhciA9IG5ldyBYYWxhblZhcmlhYmxlKHRoaXMsdnMsVmFyaWFibGUuR0xPQkFMX1NDT1BFLGksdmFyaWFibGUpOwotCQkJYWRkVmFyaWFibGUoeHZhcik7Ci0JCQlnbG9iYWxzLmFkZCh4dmFyKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdldHMgYSBWYXJpYWJsZSBieSBJRAotCSAqIEBzaW5jZSAxLjAKLQkgKi8KLQlwdWJsaWMgVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IGlkKQotCXsKLS8vCQlsb2cuZGVidWcoIkdldHRpbmcgdmFyaWFibGUgd2l0aCBpZCAiK2lkKyIgZnJvbSB2YXJpYWJsZXMgIit2YXJpYWJsZXMuc2l6ZSgpKTsKLQkJcmV0dXJuIChWYXJpYWJsZSl2YXJpYWJsZXMuZ2V0KG5ldyBJbnRlZ2VyKGlkKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVmFyaWFibGUoWGFsYW5WYXJpYWJsZSB4dmFyKQotCXsKLS8vCQlsb2cuZGVidWcoIkFkZGluZyB2YXJpYWJsZSBpbmRleD0iK3h2YXIuZ2V0U2xvdE51bWJlcigpKyIgdmFsPSIreHZhcik7Ci0vLwkJdmFyaWFibGVzLmFkZCh4dmFyLmdldFNsb3ROdW1iZXIoKSx4dmFyKTsKLQkJbG9nLmRlYnVnKCJBZGRpbmcgdmFyaWFibGUgaWQ9Iit4dmFyLmdldElkKCkpOwotCQl2YXJpYWJsZXMucHV0KG5ldyBJbnRlZ2VyKHh2YXIuZ2V0SWQoKSkseHZhcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuU3R5bGVGcmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuU3R5bGVGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI1ZGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblN0eWxlRnJhbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZUxvY2F0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtQ2FsbFRlbXBsYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1UZW1wbGF0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVGVtcGxhdGVFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1WYXJpYWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLmR0bS5yZWYuRFRNTm9kZVByb3h5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sLnV0aWxzLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguVmFyaWFibGVTdGFjazsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5TdHlsZUZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5WYXJpYWJsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5TdHlsZUZyYW1lIGV4dGVuZHMgU3R5bGVGcmFtZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhYYWxhblN0eWxlRnJhbWUuY2xhc3MpOwotCi0JcHJpdmF0ZSBmaW5hbCBNYXAgdmFyTmFtZXM7Ci0JcHJpdmF0ZSBmaW5hbCBTdGFjayBldmVudFN0YWNrID0gbmV3IFN0YWNrKCk7Ci0JZmluYWwgVHJhY2VyRXZlbnQgZXZlbnQ7Ci0JcHJpdmF0ZSBpbnQgY3VycmVudExpbmU7Ci0JcHJpdmF0ZSBYYWxhblJvb3RTdHlsZUZyYW1lIHJvb3RTdHlsZUZyYW1lOwotCi0JLyoqCi0JICogQHNpbmNlIDEuMAotCSAqLwotCXB1YmxpYyBYYWxhblN0eWxlRnJhbWUoU3R5bGVGcmFtZSBwYXJlbnQsIFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIocGFyZW50KTsKLQkJdGhpcy5ldmVudCA9IGV2ZW50OwotCQlpZiAocGFyZW50ICE9IG51bGwpCi0JCQl0aGlzLnZhck5hbWVzID0gbmV3IEhhc2hNYXAoKChYYWxhblN0eWxlRnJhbWUpIHBhcmVudCkudmFyTmFtZXMpOwotCQllbHNlCi0JCQl0aGlzLnZhck5hbWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJcHVzaEVsZW1lbnQoZXZlbnQpOwotCQlmaW5kUm9vdFN0eWxlRnJhbWUoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZmluZFJvb3RTdHlsZUZyYW1lKCkKLQl7Ci0JCVhhbGFuU3R5bGVGcmFtZSBmcmFtZSA9IHRoaXM7Ci0JCWRvCi0JCXsKLQkJCWlmIChmcmFtZSBpbnN0YW5jZW9mIFhhbGFuUm9vdFN0eWxlRnJhbWUpCi0JCQkJcm9vdFN0eWxlRnJhbWUgPSAoWGFsYW5Sb290U3R5bGVGcmFtZSkgZnJhbWU7Ci0JCX0KLQkJd2hpbGUgKChmcmFtZSA9IChYYWxhblN0eWxlRnJhbWUpIGZyYW1lLmdldFBhcmVudCgpKSAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEZpbGVuYW1lKCkKLQl7Ci0JCXJldHVybiBldmVudC5tX3N0eWxlTm9kZS5nZXRTdHlsZXNoZWV0KCkuZ2V0U3lzdGVtSWQoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJU3RyaW5nIG5hbWUgPSBldmVudC5tX3N0eWxlTm9kZS5nZXROb2RlTmFtZSgpOwotCQlpZiAoZXZlbnQubV9zdHlsZU5vZGUgaW5zdGFuY2VvZiBFbGVtVGVtcGxhdGUpCi0JCXsKLQkJCUVsZW1UZW1wbGF0ZSBldCA9IChFbGVtVGVtcGxhdGUpIGV2ZW50Lm1fc3R5bGVOb2RlOwotCQkJUU5hbWUgcSA9IGV0LmdldE5hbWUoKTsKLQkJCWlmIChxICE9IG51bGwpCi0JCQl7Ci0JCQkJbmFtZSArPSAiIG5hbWU9XCIiICsgcS5nZXRMb2NhbE5hbWUoKSArICJcIiI7Ci0JCQl9Ci0JCQlYUGF0aCB4cCA9IGV0LmdldE1hdGNoKCk7Ci0JCQlpZiAoeHAgIT0gbnVsbCkKLQkJCXsKLQkJCQluYW1lICs9ICIgbWF0Y2g9XCIiICsgeHAuZ2V0UGF0dGVyblN0cmluZygpICsgIlwiIjsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChldmVudC5tX3N0eWxlTm9kZSBpbnN0YW5jZW9mIEVsZW1DYWxsVGVtcGxhdGUpCi0JCXsKLQkJCUVsZW1DYWxsVGVtcGxhdGUgZXQgPSAoRWxlbUNhbGxUZW1wbGF0ZSkgZXZlbnQubV9zdHlsZU5vZGU7Ci0JCQlRTmFtZSBxID0gZXQuZ2V0TmFtZSgpOwotCQkJaWYgKHEgIT0gbnVsbCkKLQkJCXsKLQkJCQluYW1lICs9ICIgbmFtZT1cIiIgKyBxLmdldExvY2FsTmFtZSgpICsgIlwiIjsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRWYXJpYWJsZVN0YWNrKCkKLQl7Ci0JCUxpc3QgdmFycyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJdmFycy5hZGRBbGwoZ2V0TG9jYWxzKCkpOwotCQl2YXJzLmFkZEFsbChnZXRHbG9iYWxzKCkpOwotCQlyZXR1cm4gdmFyczsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldEN1cnJlbnRMaW5lKCkKLQl7Ci0JCXJldHVybiBjdXJyZW50TGluZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwdXNoRWxlbWVudChUcmFjZXJFdmVudCBlKQotCXsKLQkJY3VycmVudExpbmUgPSBlLm1fc3R5bGVOb2RlLmdldExpbmVOdW1iZXIoKTsKLQkJZXZlbnRTdGFjay5wdXNoKGUpOwotCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpCi0JCQlsb2cuZGVidWcoIlB1c2hlZCBlbGVtZW50ICIgKyBUcmFjZXJFdmVudC5wcmludE5vZGUoZS5tX3N0eWxlTm9kZSkgKyAiIGF0IGxpbmUgIiArIGN1cnJlbnRMaW5lKTsKLQl9Ci0KLQlwdWJsaWMgVHJhY2VyRXZlbnQgcG9wRWxlbWVudCgpCi0JewotCQlUcmFjZXJFdmVudCBlID0gKFRyYWNlckV2ZW50KSBldmVudFN0YWNrLnBvcCgpOwotCQljdXJyZW50TGluZSA9IGUubV9zdHlsZU5vZGUuZ2V0RW5kTGluZU51bWJlcigpOwotCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpCi0JCQlsb2cuZGVidWcoIlBvcHBlZCBlbGVtZW50ICIgKyBUcmFjZXJFdmVudC5wcmludE5vZGUoZS5tX3N0eWxlTm9kZSkgKyAiIGF0IGxpbmUgIiArIGN1cnJlbnRMaW5lKTsKLQotCQlFbGVtVGVtcGxhdGVFbGVtZW50IGVsZW1lbnQgPSBlLm1fc3R5bGVOb2RlOwotCQlTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0Tm9kZU5hbWUoKTsKLQkJbG9nLmRlYnVnKCIgbmFtZSAiICsgbmFtZSk7Ci0JCWlmIChuYW1lLmVxdWFscygicGFyYW0iKSB8fCBuYW1lLmVxdWFscygidmFyaWFibGUiKSkKLQkJCWFkZFZhcmlhYmxlKChFbGVtVmFyaWFibGUpIGUubV9zdHlsZU5vZGUpOwotCi0JCXJldHVybiBlOwotCX0KLQotCXB1YmxpYyBUcmFjZXJFdmVudCBwZWVrRWxlbWVudCgpCi0JewotCQlpZiAoZXZlbnRTdGFjay5pc0VtcHR5KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJcmV0dXJuIChUcmFjZXJFdmVudCkgZXZlbnRTdGFjay5wZWVrKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFZhcmlhYmxlKEVsZW1WYXJpYWJsZSB2YXJpYWJsZSkKLQl7Ci0JCVN0cmluZyBzY29wZSA9IHZhcmlhYmxlLmdldElzVG9wTGV2ZWwoKSA/IFZhcmlhYmxlLkdMT0JBTF9TQ09QRSA6IFZhcmlhYmxlLkxPQ0FMX1NDT1BFOwotCQlWYXJpYWJsZVN0YWNrIHZzID0gZXZlbnQubV9wcm9jZXNzb3IuZ2V0WFBhdGhDb250ZXh0KCkuZ2V0VmFyU3RhY2soKTsKLQkJWGFsYW5WYXJpYWJsZSB4dmFyID0gbmV3IFhhbGFuVmFyaWFibGUodGhpcywgdnMsIHNjb3BlLCB2YXJpYWJsZS5nZXRJbmRleCgpLCB2YXJpYWJsZSk7Ci0JCXJvb3RTdHlsZUZyYW1lLmFkZFZhcmlhYmxlKHh2YXIpOwotCQl2YXJOYW1lcy5wdXQodmFyaWFibGUuZ2V0TmFtZSgpLCB4dmFyKTsKLQl9Ci0KLQlwcml2YXRlIExpc3QgZ2V0TG9jYWxzKCkKLQl7Ci0JCUxpc3QgbG9jYWxzID0gbmV3IEFycmF5TGlzdCh2YXJOYW1lcy52YWx1ZXMoKSk7Ci0JCS8vIHNvcnQgYnkgc2xvdE51bWJlcgotCQlDb2xsZWN0aW9ucy5zb3J0KGxvY2Fscyk7Ci0JCXJldHVybiBuZXcgQXJyYXlMaXN0KHZhck5hbWVzLnZhbHVlcygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgTGlzdCBnZXRHbG9iYWxzKCkKLQl7Ci0JCXJldHVybiByb290U3R5bGVGcmFtZS5nZXRHbG9iYWxzKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTb3VyY2VGaWxlbmFtZSgpCi0JewotCQlTb3VyY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTb3VyY2VMb2NhdG9yKCk7Ci0JCWlmIChsb2NhdG9yICE9IG51bGwpCi0JCQlyZXR1cm4gbG9jYXRvci5nZXRTeXN0ZW1JZCgpOwotCQlyZXR1cm4gIiI7Ci0JfQotCi0JcHVibGljIGludCBnZXRTb3VyY2VDdXJyZW50TGluZSgpCi0JewotCQlTb3VyY2VMb2NhdG9yIGxvY2F0b3IgPSBnZXRTb3VyY2VMb2NhdG9yKCk7Ci0JCWlmIChsb2NhdG9yICE9IG51bGwpCi0JCQlyZXR1cm4gbG9jYXRvci5nZXRMaW5lTnVtYmVyKCk7Ci0JCXJldHVybiAwOwotCX0KLQkKLQlwcml2YXRlIFNvdXJjZUxvY2F0b3IgZ2V0U291cmNlTG9jYXRvcigpCi0JewotCQlOb2RlIHNvdXJjZU5vZGUgPSBldmVudC5tX3NvdXJjZU5vZGU7Ci0gICAgICAgIFNvdXJjZUxvY2F0b3IgbG9jYXRvciA9IG51bGw7Ci0JCWlmIChzb3VyY2VOb2RlIGluc3RhbmNlb2YgRFRNTm9kZVByb3h5KQotCQl7Ci0JCQlpbnQgbm9kZUhhbmRsZXIgPSAoKERUTU5vZGVQcm94eSkgc291cmNlTm9kZSkuZ2V0RFRNTm9kZU51bWJlcigpOwotCQkJcmV0dXJuICgoRFRNTm9kZVByb3h5KSBzb3VyY2VOb2RlKS5nZXREVE0oKS5nZXRTb3VyY2VMb2NhdG9yRm9yKG5vZGVIYW5kbGVyKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5UcmFjZUxpc3RlbmVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5UcmFjZUxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4OWIzMjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuVHJhY2VMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5FeHRlbnNpb25FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkdlbmVyYXRlRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlTGlzdGVuZXJFeDI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuQnJlYWtQb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuVmFyaWFibGU7Ci0KLXB1YmxpYyBjbGFzcyBYYWxhblRyYWNlTGlzdGVuZXIgaW1wbGVtZW50cyBUcmFjZUxpc3RlbmVyRXgyIC8vIFRyYWNlTGlzdGVuZXJFeDMKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coWGFsYW5UcmFjZUxpc3RlbmVyLmNsYXNzKTsKLQotCXByaXZhdGUgZmluYWwgWGFsYW5EZWJ1Z2dlciBkZWJ1Z2dlcjsKLQlwcml2YXRlIFhhbGFuUm9vdFN0eWxlRnJhbWUgcm9vdFN0eWxlRnJhbWU7Ci0KLQlwdWJsaWMgWGFsYW5UcmFjZUxpc3RlbmVyKFhhbGFuRGVidWdnZXIgZGVidWdnZXIpCi0JewotCQl0aGlzLmRlYnVnZ2VyID0gZGVidWdnZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQlYYWxhblN0eWxlRnJhbWUgc3R5bGVGcmFtZSA9IG51bGw7Ci0JCWlmIChyb290U3R5bGVGcmFtZSA9PSBudWxsKQotCQl7Ly8gdGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgc3RhY2sKLQkJCWRlYnVnZ2VyLmRlYnVnZ2VyVHJhbnNmb3JtU3RhcnRlZCgpOwotCQkJZGVidWdnZXIuc2V0Q3VycmVudFRyYWNlTGlzdGVuZXIodGhpcyk7Ci0JCQlyb290U3R5bGVGcmFtZSA9IG5ldyBYYWxhblJvb3RTdHlsZUZyYW1lKGV2KTsKLQkJCXN0eWxlRnJhbWUgPSByb290U3R5bGVGcmFtZTsKLQkJCWRlYnVnZ2VyLnB1c2hTdHlsZUZyYW1lKHN0eWxlRnJhbWUpOwotCQl9Ci0JCWVsc2UgaWYgKGV2Lm1fc3R5bGVOb2RlLmdldE93bmVyWFNMVGVtcGxhdGUoKSA9PSBldi5tX3N0eWxlTm9kZSkKLQkJey8vIHRoaXMgaXMgYW4geHNsOnRlbXBsYXRlLCBzbyBhZGQgdG8gdGVtcGxhdGUgc3RhY2sKLQkJCXN0eWxlRnJhbWUgPSBuZXcgWGFsYW5TdHlsZUZyYW1lKGRlYnVnZ2VyLnBlZWtTdHlsZUZyYW1lKCksIGV2KTsKLQkJCWRlYnVnZ2VyLnB1c2hTdHlsZUZyYW1lKHN0eWxlRnJhbWUpOwotCQl9Ci0JCWVsc2UgaWYgKGV2Lm1fc3R5bGVOb2RlLmdldFhTTFRva2VuKCkgIT0gQ29uc3RhbnRzLkVMRU1OQU1FX1RFWFRMSVRFUkFMUkVTVUxUKQotCQl7Ly8gYWRkIHRvIGN1cnJlbnQgdGVtcGxhdGUgZWxlbWVudCBzdGFjawotCQkJc3R5bGVGcmFtZSA9IChYYWxhblN0eWxlRnJhbWUpIGRlYnVnZ2VyLnBlZWtTdHlsZUZyYW1lKCk7Ci0JCQlzdHlsZUZyYW1lLnB1c2hFbGVtZW50KGV2KTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWxvZy5kZWJ1ZygiU2tpcHBlZCBwdXNoIGZvciBlbGVtZW50ICIgKyBldi5tX3N0eWxlTm9kZS5nZXRMb2NhbE5hbWUoKSk7Ci0JCX0KLQkJY2hlY2soc3R5bGVGcmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdHJhY2VFbmQoVHJhY2VyRXZlbnQgZXYpCi0JewotCQlYYWxhblN0eWxlRnJhbWUgc3R5bGVGcmFtZSA9IChYYWxhblN0eWxlRnJhbWUpIGRlYnVnZ2VyLnBlZWtTdHlsZUZyYW1lKCk7Ci0JCWlmIChzdHlsZUZyYW1lICE9IG51bGwpCi0JCXsKLQkJCWlmIChldi5tX3N0eWxlTm9kZS5nZXRPd25lclhTTFRlbXBsYXRlKCkgPT0gZXYubV9zdHlsZU5vZGUpCi0JCQl7Ly8gcmVtb3ZlIGZyb20gY3VycmVudCB0ZW1wbGF0ZSBlbGVtZW50IHN0YWNrCi0JCQkJc3R5bGVGcmFtZS5wb3BFbGVtZW50KCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChldi5tX3N0eWxlTm9kZS5nZXRYU0xUb2tlbigpICE9IENvbnN0YW50cy5FTEVNTkFNRV9URVhUTElURVJBTFJFU1VMVCkKLQkJCXsvLyByZW1vdmUgZnJvbSBjdXJyZW50IHRlbXBsYXRlIGVsZW1lbnQgc3RhY2sKLQkJCQlzdHlsZUZyYW1lLnBvcEVsZW1lbnQoKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlsb2cuZGVidWcoIlNraXBwZWQgcG9wIGZvciBlbGVtZW50ICIgKyBldi5tX3N0eWxlTm9kZS5nZXRMb2NhbE5hbWUoKSk7Ci0JCQl9Ci0JCQljaGVjayhzdHlsZUZyYW1lKTsKLQkJCWlmIChldi5tX3N0eWxlTm9kZS5nZXRPd25lclhTTFRlbXBsYXRlKCkgPT0gZXYubV9zdHlsZU5vZGUpCi0JCQl7Ly8gZW5kIG9mIHRlbXBsYXRlLCBzbyByZW1vdmUgZnJvbSBzdGFjawotCQkJCWRlYnVnZ2VyLnBvcFN0eWxlRnJhbWUoKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsvLyBiZWNhdXNlIHdlIGRvbid0IGdldCBzZWxlY3RFbmQgZXZlbnRzLCB3ZSBuZWVkIHRvIGRvIHRoaXMgY2hlY2sKLQkJCQlUcmFjZXJFdmVudCB0ZWwgPSBzdHlsZUZyYW1lLnBlZWtFbGVtZW50KCk7Ci0JCQkJLy8gaWYgdGhlIHBhcmVudCBpcyBhIGNob29zZSwgbW92ZSBvbiB0byBpdAotCQkJCXN3aXRjaCAodGVsLm1fc3R5bGVOb2RlLmdldFhTTFRva2VuKCkpCi0JCQkJewotCQkJCQljYXNlIENvbnN0YW50cy5FTEVNTkFNRV9DSE9PU0U6Ci0JCQkJCQlzdHlsZUZyYW1lLnBvcEVsZW1lbnQoKTsKLQkJCQkJCWNoZWNrKHN0eWxlRnJhbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVjayhYYWxhblN0eWxlRnJhbWUgc3R5bGVGcmFtZSkKLQl7Ci0JCWRlYnVnZ2VyLmNoZWNrU3RvcHBlZCgpOwotCQlpZiAoc3R5bGVGcmFtZSAhPSBudWxsKQotCQl7Ci0JCQkvLyBjaGVjayBicmVha3BvaW50IGluIHN0eWxlc2hlZXQKLQkJCUJyZWFrUG9pbnQgYnJlYWtwb2ludCA9IG5ldyBCcmVha1BvaW50KHN0eWxlRnJhbWUuZ2V0RmlsZW5hbWUoKSwgc3R5bGVGcmFtZS5nZXRDdXJyZW50TGluZSgpKTsKLQkJCWRlYnVnZ2VyLmNoZWNrU3VzcGVuZGVkKHN0eWxlRnJhbWUsIGJyZWFrcG9pbnQpOwotCQkJLy8gVE9ETyBjaGVjayBicmVha3BvaW50IGluIHNvdXJjZQotCQkJLyoKLQkJCSAqIGJyZWFrcG9pbnQgPSBuZXcgQnJlYWtQb2ludChzdHlsZUZyYW1lLmdldFNvdXJjZUZpbGVuYW1lKCksIHN0eWxlRnJhbWUuZ2V0U291cmNlQ3VycmVudExpbmUoKSk7IFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tIiticmVha3BvaW50KTsgaWYgKGJyZWFrcG9pbnQuZ2V0RmlsZSgpICE9IG51bGwpCi0JCQkgKiBkZWJ1Z2dlci5jaGVja1N1c3BlbmRlZChzdHlsZUZyYW1lLCBicmVha3BvaW50KTsKLQkJCSAqL30KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3RlZChTZWxlY3Rpb25FdmVudCBldikgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdEVuZChFbmRTZWxlY3Rpb25FdmVudCBldikgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGdlbmVyYXRlZChHZW5lcmF0ZUV2ZW50IGV2KQotCXsKLS8vCQlYU0xHZW5lcmF0ZUV2ZW50IGV2ZW50ID0gbmV3IFhTTEdlbmVyYXRlRXZlbnQoKTsKLS8vCQlldmVudC5tX2NoYXJhY3RlcnMgPSBldi5tX2NoYXJhY3RlcnM7Ci0vLwkJZXZlbnQubV9kYXRhID0gZXYubV9kYXRhOwotLy8JCWV2ZW50Lm1fZXZlbnR0eXBlID0gZXYubV9ldmVudHR5cGU7Ci0vLwkJZXZlbnQubV9sZW5ndGggPSBldi5tX2xlbmd0aDsKLS8vCQlldmVudC5tX25hbWUgPSBldi5tX25hbWU7Ci0vLwkJZXZlbnQubV9zdGFydCA9IGV2Lm1fc3RhcnQ7Ci0vLwkJCi0vLwkJaWYgKGV2Lm1fYXR0cyAhPSBudWxsKQotLy8JCXsKLS8vCQkJZXZlbnQubV9hdHRzID0gbmV3IEFycmF5TGlzdCgpOwotLy8JCQlmb3IgKGludCBpID0gMDsgaSA8IGV2Lm1fYXR0cy5nZXRMZW5ndGgoKTsgaSsrKQotLy8JCQl7Ci0vLwkJCQlTdHJpbmcgYXR0TmFtZSA9IGV2Lm1fYXR0cy5nZXRRTmFtZShpKTsKLS8vCQkJCVN0cmluZyBhdHRWYWx1ZSA9IGV2Lm1fYXR0cy5nZXRWYWx1ZShpKTsKLS8vCQkJCVhTTEVsZW1lbnRBdHRyaWJ1dGUgeGF0dCA9IG5ldyBYU0xFbGVtZW50QXR0cmlidXRlKGF0dE5hbWUsYXR0VmFsdWUpOwotLy8JCQkJZXZlbnQubV9hdHRzLmFkZCh4YXR0KTsKLS8vCQkJfQkJCQotLy8JCX0KLS8vCQkKLS8vCQlkZWJ1Z2dlci5nZW5lcmF0ZWQoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGV4dGVuc2lvbihFeHRlbnNpb25FdmVudCBlZSkKLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgZXh0ZW5zaW9uRW5kKEV4dGVuc2lvbkV2ZW50IGVlKQotCXsKLQl9Ci0KLQkvKioKLQkgKiBAc2luY2UgMS4wCi0JICovCi0JcHVibGljIFZhcmlhYmxlIGdldFZhcmlhYmxlKGludCBpZCkKLQl7Ci0JCXJldHVybiByb290U3R5bGVGcmFtZS5nZXRWYXJpYWJsZShpZCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5WYXJpYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuVmFyaWFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5ZjgyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5WYXJpYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjE0MjM1IC0gQWxsb3dzIG5vZGVzIHRvIGJlIGV4cGFuZGVkLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVZhcmlhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguVmFyaWFibGVTdGFjazsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE5vZGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5WYXJpYWJsZSBleHRlbmRzIFZhcmlhYmxlIGltcGxlbWVudHMgQ29tcGFyYWJsZSB7Ci0JcHJpdmF0ZSBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coWGFsYW5WYXJpYWJsZS5jbGFzcyk7Ci0JcHJpdmF0ZSBmaW5hbCBFbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlOwotCXByaXZhdGUgZmluYWwgVmFyaWFibGVTdGFjayB2YXJTdGFjazsKLQlwcml2YXRlIGludCBzdGFja0ZyYW1lOwotCXByaXZhdGUgWE9iamVjdCB4b2JqZWN0OwotCi0JcHVibGljIFhhbGFuVmFyaWFibGUoWGFsYW5TdHlsZUZyYW1lIHhhbGFuU3R5bGVGcmFtZSwKLQkJCVZhcmlhYmxlU3RhY2sgdmFyU3RhY2ssIFN0cmluZyBzY29wZSwgaW50IHNsb3ROdW1iZXIsCi0JCQlFbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlKSB7Ci0JCXN1cGVyKGdldE5hbWUoZWxlbVZhcmlhYmxlLCBzY29wZSwgeGFsYW5TdHlsZUZyYW1lKSwgc2NvcGUsIHNsb3ROdW1iZXIKLQkJCQkrIHZhclN0YWNrLmdldFN0YWNrRnJhbWUoKSk7Ci0JCXRoaXMuZWxlbVZhcmlhYmxlID0gZWxlbVZhcmlhYmxlOwotCQl0aGlzLnZhclN0YWNrID0gdmFyU3RhY2s7Ci0JCS8vIGdldCB0aGUgc3RhY2sgZnJhbWUgYXQgdGhpcyBjdXJyZW50IHBvaW50IGluIHRpbWUKLQkJdGhpcy5zdGFja0ZyYW1lID0gdmFyU3RhY2suZ2V0U3RhY2tGcmFtZSgpOwotCQl0cnkgewotCQkJeG9iamVjdCA9IGdldFhPYmplY3QoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXROYW1lKEVsZW1WYXJpYWJsZSBlbGVtVmFyaWFibGUsIFN0cmluZyBzY29wZSwKLQkJCVhhbGFuU3R5bGVGcmFtZSB4YWxhblN0eWxlRnJhbWUpIHsKLQkJU3RyaW5nIG5hbWUgPSBlbGVtVmFyaWFibGUuZ2V0TmFtZSgpLmdldExvY2FsTmFtZSgpOwotCQlTdHJpbmcgc3lzdGVtSWQgPSBlbGVtVmFyaWFibGUuZ2V0U3R5bGVzaGVldCgpLmdldFN5c3RlbUlkKCk7Ci0JCWlmIChHTE9CQUxfU0NPUEUuZXF1YWxzKHNjb3BlKSAmJiBzeXN0ZW1JZCAhPSBudWxsKSB7Ci0JCQlpbnQgaW5kZXg7Ci0JCQlpZiAoKGluZGV4ID0gc3lzdGVtSWQubGFzdEluZGV4T2YoJy8nKSkgPiAwKQotCQkJCW5hbWUgKz0gIiAoIiArIHN5c3RlbUlkLnN1YnN0cmluZyhpbmRleCArIDEpICsgIikiOwotCQkJZWxzZQotCQkJCW5hbWUgKz0gIiAoIiArIHN5c3RlbUlkICsgIikiOwotCQl9Ci0JCS8vIGVsc2UgaWYgKExPQ0FMX1NDT1BFLmVxdWFscyhzY29wZSkpCi0JCS8vIHsKLQkJLy8gbmFtZSArPSAiICgiICsgeGFsYW5TdHlsZUZyYW1lLmdldE5hbWUoKSArICIpIjsKLQkJLy8gfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7Ci0JCVN0cmluZyB2YWx1ZSA9IFVOS05PV047Ci0JCS8vIFhPYmplY3QgeG9iamVjdCA9IGdldFhPYmplY3QoKTsKLQkJaWYgKHhvYmplY3QgIT0gbnVsbCkgewotCQkJaW50IHhhbGFuVHlwZSA9IHhvYmplY3QuZ2V0VHlwZSgpOwotCQkJc3dpdGNoICh4YWxhblR5cGUpIHsKLQkJCWNhc2UgWE9iamVjdC5DTEFTU19VTlJFU09MVkVEVkFSSUFCTEU6Ci0JCQkJdmFsdWUgPSBVTlJFU09MVkVEOwotCQkJCWJyZWFrOwotCQkJY2FzZSBYT2JqZWN0LkNMQVNTX05PREVTRVQ6Ci0JCQkJdmFsdWUgPSBOT0RFU0VUOwotCQkJCWJyZWFrOwotCQkJY2FzZSBYT2JqZWN0LkNMQVNTX0JPT0xFQU46Ci0JCQkJdmFsdWUgPSBCT09MRUFOOwotCQkJCWJyZWFrOwotCQkJY2FzZSBYT2JqZWN0LkNMQVNTX05VTUJFUjoKLQkJCQl2YWx1ZSA9IE5VTUJFUjsKLQkJCQlicmVhazsKLQkJCWNhc2UgWE9iamVjdC5DTEFTU19VTktOT1dOOgotCQkJCXZhbHVlID0gVU5LTk9XTjsKLQkJCQlicmVhazsKLQkJCWNhc2UgWE9iamVjdC5DTEFTU19TVFJJTkc6Ci0JCQlkZWZhdWx0OgotCQkJCXZhbHVlID0gU1RSSU5HOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCS8vIGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKQotCQkvLyB7Ci0JCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vIH0KLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICI/Pz8iOwotCQl0cnkgewotCQkJeG9iamVjdCA9IGdldFhPYmplY3QoKTsKLQkJCWlmICh4b2JqZWN0ICE9IG51bGwpIHsKLQkJCQlpbnQgeGFsYW5UeXBlID0geG9iamVjdC5nZXRUeXBlKCk7Ci0JCQkJc3dpdGNoICh4YWxhblR5cGUpIHsKLQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfVU5SRVNPTFZFRFZBUklBQkxFOgotCQkJCQl2YWx1ZSA9ICIiOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfTk9ERVNFVDoKLQkJCQkJWE5vZGVTZXQgeG5zID0gKFhOb2RlU2V0KSB4b2JqZWN0OwotCQkJCQlpZiAoeG5zLm5vZGVsaXN0KCkuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQkJCSAgICB2YWx1ZSA9IGNvbnZlcnROb2RlKHhucyk7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQkJdmFsdWUgPSAiPEVNUFRZIE5PREVTRVQ+IjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBYT2JqZWN0LkNMQVNTX0JPT0xFQU46Ci0JCQkJY2FzZSBYT2JqZWN0LkNMQVNTX05VTUJFUjoKLQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfU1RSSU5HOgotCQkJCWNhc2UgWE9iamVjdC5DTEFTU19VTktOT1dOOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXZhbHVlID0geG9iamVjdC50b1N0cmluZygpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJLy8gdmFsdWUgPSBnZXRTY29wZSgpKyIuIitnZXRTbG90TnVtYmVyKCkrIikiK2dldE5hbWUoKTsKLQkJLy8gbG9nLmRlYnVnKGdldFNjb3BlKCkrIi4iK2dldFNsb3ROdW1iZXIoKSsiKSIrZ2V0TmFtZSgpICsgIj0iICsKLQkJLy8gdmFsdWUpOwotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgY29udmVydE5vZGUoWE5vZGVTZXQgeG5zKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24gewotCQlOb2RlTGlzdCBub2RlTGlzdCA9IHhucy5ub2RlbGlzdCgpOwotCQlTdHJpbmcgdmFsdWUgPSBwcm9jZXNzTm9kZUxpc3Qobm9kZUxpc3QpOwotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcHJvY2Vzc05vZGVMaXN0KE5vZGVMaXN0IG5vZGVMaXN0KSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICIiOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5vZGVMaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCU5vZGUgbm9kZSA9IG5vZGVMaXN0Lml0ZW0oaSk7Ci0JCQlpZiAobm9kZSAhPSBudWxsKSB7Ci0JCQkJaW50IG5vZGVUeXBlID0gbm9kZS5nZXROb2RlVHlwZSgpOwotCQkJCWlmIChub2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLQkJCQkJdmFsdWUgPSBjcmVhdGVFbGVtZW50KHZhbHVlLCBub2RlKTsKLQkJCQl9Ci0JCQkJaWYgKG5vZGVUeXBlID09IE5vZGUuQ09NTUVOVF9OT0RFICkgewotCQkJCQl2YWx1ZSA9IHZhbHVlICsgIjwhLS0gIiArIG5vZGUuZ2V0Tm9kZVZhbHVlKCkgKyAiIC0tPiI7Ci0JCQkJfQotCQkJCWlmIChub2RlVHlwZSA9PSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewotCQkJCQlQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkgPSAoUHJvY2Vzc2luZ0luc3RydWN0aW9uKSBub2RlOwotCQkJCQl2YWx1ZSA9IHZhbHVlICsgIjw/IiArIHBpLmdldERhdGEoKSArICIgPz4iOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlRWxlbWVudChTdHJpbmcgdmFsdWUsIE5vZGUgbm9kZSkgewotCQl2YWx1ZSA9IHZhbHVlICsgIjwiOwotLy8JCWlmIChub2RlLmdldFByZWZpeCgpICE9IG51bGwgJiYgbm9kZS5nZXRQcmVmaXgoKS5sZW5ndGgoKSA+IDApIHsKLS8vCQkJdmFsdWUgPSB2YWx1ZSArIG5vZGUuZ2V0UHJlZml4KCkgKyAiOiI7Ci0vLwkJfQotCQlpZiAobm9kZS5nZXROb2RlTmFtZSgpICE9IG51bGwpIHsKLQkJCXZhbHVlID0gdmFsdWUgKyBub2RlLmdldE5vZGVOYW1lKCk7Ci0JCQlpZiAobm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHsKLQkJCQlOYW1lZE5vZGVNYXAgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlcygpOwotCQkJCXZhbHVlID0gdmFsdWUgKyBidWlsZEF0dHJpYnV0ZXMoYXR0cik7Ci0JCQl9Ci0JCQl2YWx1ZSA9IHZhbHVlICsgIj4iOwotCQkJaWYgKG5vZGUuZ2V0Tm9kZVZhbHVlKCkgIT0gbnVsbCkgewotCQkJCXZhbHVlID0gdmFsdWUgKyBub2RlLmdldE5vZGVWYWx1ZSgpOwotCQkJfQotCQl9Ci0JCWlmIChub2RlLmhhc0NoaWxkTm9kZXMoKSkgewotCQkJdmFsdWUgPSB2YWx1ZSArIHByb2Nlc3NOb2RlTGlzdChub2RlLmdldENoaWxkTm9kZXMoKSk7Ci0JCX0KLQkJdmFsdWUgPSB2YWx1ZSArICI8LyIgKyBub2RlLmdldE5vZGVOYW1lKCkgKyAiPiI7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRBdHRyaWJ1dGVzKE5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICIgIjsKLQkJZm9yIChpbnQgYSA9IDA7IGEgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBhKyspIHsKLQkJCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpYXR0cmlidXRlcy5pdGVtKGEpOwotLy8JCQlpZiAoYXR0cmlidXRlLmdldFByZWZpeCgpICE9IG51bGwpIHsKLS8vCQkJCXZhbHVlID0gdmFsdWUgKyBhdHRyaWJ1dGUuZ2V0UHJlZml4KCkgKyAiOiI7Ci0vLwkJCX0KLQkJCXZhbHVlID0gdmFsdWUgKyBhdHRyaWJ1dGUuZ2V0TmFtZSgpICsgIj1cIiIgKyBhdHRyaWJ1dGUuZ2V0VmFsdWUoKSArICJcIiAiOwotCQl9Ci0JCXZhbHVlID0gdmFsdWUgKyAiICI7Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQlwcml2YXRlIFhPYmplY3QgZ2V0WE9iamVjdCgpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbiB7Ci0JCVhPYmplY3QgeHZhbHVlOwotCQlpZiAoZWxlbVZhcmlhYmxlLmdldElzVG9wTGV2ZWwoKSkKLQkJCXh2YWx1ZSA9IHZhclN0YWNrLmVsZW1lbnRBdChzbG90TnVtYmVyKTsKLQkJZWxzZQotCQkJeHZhbHVlID0gdmFyU3RhY2suZ2V0TG9jYWxWYXJpYWJsZShlbGVtVmFyaWFibGUuZ2V0SW5kZXgoKSwKLQkJCQkJc3RhY2tGcmFtZSk7Ci0JCXJldHVybiB4dmFsdWU7Ci0JfQotCi0JcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IGFyZzApIHsKLQkJWGFsYW5WYXJpYWJsZSB4dmFyID0gKFhhbGFuVmFyaWFibGUpIGFyZzA7Ci0JCWludCBjb21wID0geHZhci5zdGFja0ZyYW1lIC0gc3RhY2tGcmFtZTsKLQkJaWYgKGNvbXAgPT0gMCkKLQkJCWNvbXAgPSBzbG90TnVtYmVyIC0geHZhci5zbG90TnVtYmVyOwotCQlyZXR1cm4gY29tcDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNWEzY2QuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxNDljYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsCi1CdW5kbGUtVmVyc2lvbjogMS4yLjAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5pbmkgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDkwYzg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT1pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQubWFwcGluZ3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLTA9QGJ1aWxkQApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVmMzJhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPUVjbGlwc2UgWFNMIERldmVsb3BlciBUb29sc1xuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHRcblwKLSAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSxcblwKLSAgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwpXG5cCi0gIGFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjk0OTIyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5pbmksXAotICAgICAgICAgICAgICAgYWJvdXQubWFwcGluZ3MsXAotICAgICAgICAgICAgICAgYWJvdXQucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBpY29ucy8KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2ljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDljMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2ljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNDBlNTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotQnVuZGxlLU5hbWUuMCA9IEVjbGlwc2UgWFNMIERldmVsb3BlciBUb29scwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9wb20ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYTA3MWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhzbDwvZ3JvdXBJZD4KLSAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2FydGlmYWN0SWQ+Ci0gICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0gICA8dmVyc2lvbj4xLjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgIDxuYW1lPlhTTCBUb29scyBCcmFuZGluZyBQbHVnaW48L25hbWU+Ci0KLSAgIDxwYXJlbnQ+Ci0gICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS53c3QueHNsPC9ncm91cElkPgotICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vZGV2ZWxvcG1lbnQvYXRoZW5hL29yZy5lY2xpcHNlLndzdC54c2wucmVsZW5nPC9yZWxhdGl2ZVBhdGg+Ci0gICA8L3BhcmVudD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU5M2RmZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXhpbmNsdWRlCi10ZXN0LnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjY5MTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/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+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMzZlZDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1NhdCBKdW4gMjEgMTg6MjI6MzAgR01ULTA1OjAwIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3OTE1M2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNTYXQgQXVnIDAyIDA4OjQ1OjM5IEdNVC0wNTowMCAyMDA4Ci1ERUxFR0FURVNfUFJFRkVSRU5DRT1kZWxlZ2F0ZVZhbGlkYXRvckxpc3QKLVVTRVJfQlVJTERfUFJFRkVSRU5DRT1lbmFibGVkQnVpbGRWYWxpZGF0b3JMaXN0Ci1VU0VSX01BTlVBTF9QUkVGRVJFTkNFPWVuYWJsZWRNYW51YWxWYWxpZGF0b3JMaXN0Ci1VU0VSX1BSRUZFUkVOQ0U9b3ZlcnJpZGVHbG9iYWxQcmVmZXJlbmNlc3RydWVkaXNhYmxlQWxsVmFsaWRhdGlvbmZhbHNldmVyc2lvbjEuMi4wLnYyMDA4MDYwNTE0MDIKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vdmVycmlkZT10cnVlCi1zdXNwZW5kPWZhbHNlCi12YWxzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5KU1BCYXRjaFZhbGlkYXRvci9nbG9iYWw9RkYwMQotdmFscy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuSlNQQ29udGVudFZhbGlkYXRvci9nbG9iYWw9RkYwMQotdmFscy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkRFREVmFsaWRhdG9yL2dsb2JhbD1GRjAxCi12YWxzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLkhUTUxWYWxpZGF0b3IvZ2xvYmFsPUZGMDEKLXZhbHMvb3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi53c2RsL2dsb2JhbD1GRjAyMTU4b3JnLmVjbGlwc2Uud3N0LndzZGwudmFsaWRhdGlvbi5pbnRlcm5hbC5lY2xpcHNlLlZhbGlkYXRvcgotdmFscy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sL2dsb2JhbD1UVDAzCi12YWxzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS54c2QvZ2xvYmFsPUZGMDIxNjJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcgotdmFscy9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUueHNsL2dsb2JhbD1UVDAyCi12Zi52ZXJzaW9uPTMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU4N2U5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbjsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24uQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmhlbHAKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9SZWFkTWUudHh0IGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL1JlYWRNZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YjU5MWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL1JlYWRNZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVRvIGJ1aWxkIHRoZSBTREsgZG9jdW1lbnRhdGlvbiwgeW91IG5lZWQgdGhlIERvY2xldCBKRUxEb2NMZXQuamFyLgotCi1UaGlzIGNhbiBiZSByZXRyaWV2ZWQgZnJvbToKLQotaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9qZWxkb2NsZXQKLQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNjZmM5Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICB0b2MueG1sLFwKLSAgICAgICAgICAgICAgIGRvYy9odG1sLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdG9jRXh0ZW5zaW9uLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZTY3MDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgIEp1bCAyMSwgMjAwOCA2OjQ2OjAyIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICBTREsgRG9jdW1lbnRhdGlvbiAgICAKLSAgICAgQnVpbGRzIFNESyBUT0MgRG9jdW1lbnRhdGlvbiB1c2luZyBKRUxEb2NsZXQuCi0gICAgICAgICAgICAgICAgICAgCi0gICAgIGRjYXJ2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08cHJvamVjdCBuYW1lPSJTREsgRG9jdW1lbnRhdGlvbiIgZGVmYXVsdD0iZGVmYXVsdCI+Ci0gICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgQnVpbGRzIFNESyBUT0MgRG9jdW1lbnRhdGlvbiB1c2luZyBKRUxEb2NsZXQuCi0gICAgPC9kZXNjcmlwdGlvbj4KLQkKLQk8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlIiBsb2NhdGlvbj0iLiIvPgotCTxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2Vsb2MiIGxvY2F0aW9uPSIuLiIvPgotCi0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICAgdGFyZ2V0OiBkZWZhdWx0ICAgICAgICAgICAgICAKLSAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImRlZmF1bHQiIGRlc2NyaXB0aW9uPSJCdWlsZHMgU0RLIFRPQyBEb2N1bWVudGF0aW9uIHVzaW5nIEpFTERvY2xldC4iPgotCi0gIAkgIDxqYXZhZG9jIGRlc3RkaXI9ImRvYyIgcGFja2FnZT0idHJ1ZSIgZG9jbGV0cGF0aD0iJHt3b3Jrc3BhY2V9L2xpYi9qZWxkb2NsZXQuamFyIj4KLSAgCSAgCSA8ZmlsZXNldCBkaXI9IiR7d29ya3NwYWNlbG9jfSI+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmMvKiovKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS9zcmNfc3NlLyoqLyouamF2YSIvPgotICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpL3NyYy8qKi8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy1kZWJ1Z2dlci8qKi8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy1pbnZva2VyLyoqLyouamF2YSIvPgotICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci8qKi8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy8qKi8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMteHBhdGgvKiovKi5qYXZhIi8+Ci0gIAkgIAkgPC9maWxlc2V0PgotICAJICAgICA8ZG9jbGV0IG5hbWU9ImNvbS5qZWxkb2NsZXQuSkVMRG9jbGV0Ii8+Ci0gIAkgIDwvamF2YWRvYz4KLSAgICAJCi0gICAgIDx4c2x0IGJhc2VkaXI9Ii4iIHN0eWxlPSJkb2MvamVsdG9odG1sLnhzbCIgaW49ImRvYy9qZWwueG1sIiBvdXQ9ImRvYy9odG1sL2RlbGV0ZW1lLmh0bWwiPgotICAJCTxmYWN0b3J5IG5hbWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiPgotICAJCQk8YXR0cmlidXRlIG5hbWU9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9vcHRpbWl6ZSIgdmFsdWU9InRydWUiLz4KLSAgCQk8L2ZhY3Rvcnk+Ci0gICAgIDwveHNsdD4KLSAgICAJCi0gICAgCQotICAgICA8eHNsdCBzdHlsZT0iZG9jL2plbHRvdG9jLnhzbCIgaW49ImRvYy9qZWwueG1sIiBvdXQ9InRvYy54bWwiIGRlc3RkaXI9Ii4iPgotICAJCTxmYWN0b3J5IG5hbWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiPgotICAJCQk8YXR0cmlidXRlIG5hbWU9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9vcHRpbWl6ZSIgdmFsdWU9InRydWUiLz4KLSAgCQk8L2ZhY3Rvcnk+Ci0gICAgIAk8cGFyYW0gbmFtZT0ic2RrbmFtZSIgZXhwcmVzc2lvbj0iWFNMIFRvb2xzIFNESyBEb2N1bWVudGF0aW9uIi8+Ci0gICAgIDwveHNsdD4KLSAgICAJCi0gICAgPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJEb2NDaGVjayI+Ci0JICAJICA8amF2YWRvYyBkZXN0ZGlyPSJkb2MvZG9jY2hlY2siIHBhY2thZ2U9InRydWUiIGRvY2xldHBhdGg9IiR7d29ya3NwYWNlfS9saWIvZG9jY2hlY2suamFyIj4KLQkgIAkgIAkgPGZpbGVzZXQgZGlyPSIke3dvcmtzcGFjZWxvY30iPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkvKiovKi5qYXZhIi8+Ci0JICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vKiovKi5qYXZhIi8+Ci0JICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvKiovKi5qYXZhIi8+Ci0JICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUvc3JjLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS9zcmMteHBhdGgvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC91aS8qLmphdmEiLz4KLQkgIAkgIAkgPC9maWxlc2V0PgotCSAgCSAgICAgPGRvY2xldCBuYW1lPSJjb20uc3VuLnRvb2xzLmRvY2xldHMuZG9jY2hlY2suRG9jQ2hlY2siPgotCSAgCSAgICAgCTxwYXJhbSBuYW1lPSItZXhlY0RlcHRoIiB2YWx1ZT0iMiIvPgotCSAgCSAgCSA8L2RvY2xldD4KLQkgIAkgIDwvamF2YWRvYz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9IkV4dGVuc2lvblBvaW50RG9jIj4KLQkJPHBkZS5jb252ZXJ0U2NoZW1hVG9IVE1MIG1hbmlmZXN0PSIuLi9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi54bWwiCi0JCQkgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbj0iJHt3b3Jrc3BhY2V9L2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludCIKLQkJLz4KLQkJPHBkZS5jb252ZXJ0U2NoZW1hVG9IVE1MIG1hbmlmZXN0PSIuLi9vcmcuZWNsaXBzZS53c3QueHNsLnVpL3BsdWdpbi54bWwiCi0JCQkgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbj0iJHt3b3Jrc3BhY2V9L2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludCIKLQkJLz4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjg3MjJlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi1kb2NjaGVjawotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5YU0xTb3VyY2VQYXJzZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLk91dHB1dFByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01WaWV3ZXJGaWx0ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmFyZ3VtZW50X3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YUGF0aFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3Nvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9yWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5YU0xUU291cmNlTG9va3VwUGFydGljaXBhbnQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5EZWJ1Z2dlclJlZ2lzdHJ5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTEF0dHJpYnV0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5QYXJhbWV0ZXJWaWV3ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLkluc3RhbGxTdGFuZGluLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci52YXJpYWJsZV9yZWZlcmVuY2VfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YU0xNb2RlbExvYWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXaXphcmRBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLm1vZGVsLlhTTE1vZGVsUHJlc2VudGF0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlhTTFZlcnNpb25IYW5kbGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuRGVidWdnZXJEZXNjcmlwdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuWFNMVFNvdXJjZUxvb2t1cERpcmVjdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhTTERvY3VtZW50TG9hZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQuSVhTTFBhcnRpdGlvbnMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWRkUGFyYW1ldGVyQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLlJlbW92ZUFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlN0cnVjdHVyZWREb2N1bWVudFV0aWwueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMuZm9ybWF0dGVyLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLmZvcm1hdHRlci5GT0Zvcm1hdHRlclRhYi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVXaXphcmRQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5yZWxhdGl2ZV9sb2NhdGlvbl9wYXRoX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5mb3JtYXR0ZXIuWFNMRk9Db21ib0Jsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlckZvclhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uWFNMTWFpblRhYi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9ucy5YUGF0aFNlcGFyYXRvclJlZ2lvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuSW52b2tlclJlZ2lzdHJ5UmVhZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UeXBlZFZhbHVlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUm9vdFN0eWxlRnJhbWUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFBhdGhUZW1wbGF0ZVByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMSHlwZXJsaW5rRGV0ZWN0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnBhdGhfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WE1MRmlsZVdpemFyZERlbGVnYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YU0xQYXJzZXJSZWdpb25GYWN0b3J5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5pbnRlcm5hbC51aS52aWV3cy5KRmFjZU5vZGVMYWJlbFByb3ZpZGVyWFBhdGgueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xEZWJ1Z0VsZW1lbnQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIudW5pb25fZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmV4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5LlByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuZXF1YWxpdHlfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50LlhJbmNsdWRlVGFzay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubW9kZWwuWFNMQnJlYWtwb2ludEFkYXB0ZXJGYWN0b3J5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5maWx0ZXJfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJQ29uc3RhbnRzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy5pbnRlcm5hbC51dGlsLlhTTERlYnVnUGx1Z2luSW1hZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkN1c3RvbVRlbXBsYXRlUHJvcG9zYWwueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5Qcm9jZXNzb3JSZWdpc3RyeVJlYWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMVFRhYkdyb3VwLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuUHJvY2Vzc29yUmVnaXN0cnkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWRkV29ya3NwYWNlRmlsZUFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuRmVhdHVyZXNCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xFbGVtZW50LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRNb2RlbC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5JbXBvcnQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1haW5QcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuc3BlY2lhbF9zdGVwX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYWJicl9heGlzX3NwZWNpZmllcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuVHJhbnNmb3JtYXRpb25FeGNlcHRpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTExhdW5jaFNob3J0Y3V0LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5BZGRQcm9jZXNzb3JEaWFsb2cueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLlhQYXRoUGFyc2VyTGV4ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmludGVybmFsLnVpLnZpZXdzLlhQYXRoQ29tcHV0ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmZ1bmN0aW9uX2NhbGxfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5YUGF0aFVJTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuVXRpbHMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuSW5jbHVkZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYWJzb2x1dGVfbG9jYXRpb25fcGF0aF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguaW50ZXJuYWwudWkudmlld3MuWFBhdGhWaWV3LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFVJTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMub3V0cHV0Lk91dHB1dEZpbGVCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC51dGlsLlhQYXRoUGx1Z2luSW1hZ2VIZWxwZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xEZWJ1Z1RhcmdldC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5WYXJpYWJsZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuQWJzdHJhY3RUYWJsZUJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLlByb2Nlc3Nvck1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5QaXBlbGluZURlZmluaXRpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5JUGFyYW1ldGVyc0NoYW5nZWRMaXN0ZW5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQuT3V0cHV0VGFiLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5DcmVhdGlvbkV4Y2VwdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuUHJvY2Vzc29yRGVzY3JpcHRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5NdWx0aXBsZUlucHV0RGlhbG9nLkZpZWxkU3VtbWFyeS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5LkRlYnVnZ2VyUmVnaXN0cnlSZWFkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguaW50ZXJuYWwudWkudmlld3MuSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyWFBhdGgueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC51dGlsLlhQYXRoUGx1Z2luSW1hZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5saXRlcmFsX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWJzdHJhY3RTdHlsZXNoZWV0QWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdEVERGaWxlV2l6YXJkRGVsZWdhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrLlhTTERvdWJsZUNsaWNrU3RyYXRlZ3kueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnJlbGF0aW9uYWxfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFBhdGhQcmVmZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcjIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLk1haW5UYWJNZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xOb2RlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldExhYmVsUHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoUHJvcGVydGllcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5KYXJMYWJlbFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uUGFyYW1ldGVyc0NvbnRlbnRQcm92aWRlci54bWwKLWplbC54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5QbHVnaW5Qcm9jZXNzb3JKYXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnByaW1hcnlfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5YU0xQcm9wZXJ0eVRlc3Rlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuUmVzb3VyY2VTZWxlY3Rpb25CbG9jay5XaWRnZXRMaXN0ZW5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIubnVtYmVyX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xNYXJrdXBWYWxpZGF0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5icmVha3BvaW50Lk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYYWxhblhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5mb3JtYXR0ZXIuUmVuZGVyZXJUYWJNZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMQ29uc29sZUxpbmVUcmFja2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuSVByb2Nlc3Nvckludm9rZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMTGF1bmNoQ29uZmlndXJhdGlvblRhYi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5mb3JtYXR0ZXIuUmVuZGVyZXJDb25maWd1cmF0aW9uQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuU3R5bGVGcmFtZS54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5JbnB1dEZpbGVCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuSVhTTERlYnVnZ2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuSUZlYXR1cmUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLm1vZGVsLlhTTExpbmVCcmVha3BvaW50QWRhcHRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5Qcm9jZXNzb3JQcmVmZXJlbmNlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlByZWZlcmVuY2VJbml0aWFsaXplci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuRGVidWdSdW5uZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmlfcmVsYXRpdmVfbG9jYXRpb25fcGF0aF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5GaWxlVXRpbC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuWFNMUHJvY2Vzc29yVGFiLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnBhcnNlci5YUGF0aFBhcnNlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlBhcmFtZXRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5yZXNvbHZlci5VUklSZXNvbHZlckJsb2NrMi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTExpbmVCcmVha3BvaW50LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZUlkc1hQYXRoLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnJlc29sdmVyLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuQWJzdHJhY3RSZWdpc3RyeVJlYWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnhwYXRoX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuRmVhdHVyZXNCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5Db25maWd1cmF0aW9uRXhjZXB0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLlJlbW92ZVBhcmFtZXRlckFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5NdWx0aXBsZUlucHV0RGlhbG9nLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLklYU0xEZWJ1Z1RhcmdldC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlRyYW5zZm9ybXNCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5KQVhQU0FYUHJvY2Vzc29ySW52b2tlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLk91dHB1dFByb3BlcnR5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFBhdGhSZWdpb25Db250ZXh0LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkNvbnRyb2xBY2Nlc3NpYmxlTGlzdGVuZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLk91dHB1dEJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFRyYW5zZm9ybS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuRGVidWdDb25zdGFudHMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYWJicl9zdGVwX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmxvY2F0aW9uX3BhdGhfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uU3R5bGVzaGVldFZpZXdlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGUueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucmVzb2x2ZXIuV29ya2luZ0RpcmVjdG9yeUJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLkNhbGxUZW1wbGF0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uUGFyYW1ldGVyc0Jsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFZpZXdQbHVnaW4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5QcmVmZXJlbmNlVXRpbC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLklYU0xDb25zdGFudHMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5JRGVidWdnZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5QYXJhbWV0ZXJzTGFiZWxQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIubXVsdF9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkZlYXR1cmVQcmVmZXJlbmNlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLklPdXRwdXRQcm9wZXJ0eS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFRocmVhZC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25SZXBvcnQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoRmVhdHVyZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLkZlYXR1cmVzUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5JU3R5bGVzaGVldEVudHJpZXNDaGFuZ2VkTGlzdGVuZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTU5vZGVMYWJlbFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuUHJvY2Vzc29yVHlwZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xFcnJvckxpc3RlbmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudC5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5yZXNvbHZlci5VUklSZXNvbHZlckJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFic3RyYWN0UGFyYW1ldGVyQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEhlbHBlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlNvdXJjZUZpbGVIeXBlcmxpbmsueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xWYXJpYWJsZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFZhbHVlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMU3RhY2tGcmFtZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5UZW1wbGF0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuQmFzZVByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5wcmVkaWNhdGVfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5Qcm9jZXNzb3JUeXBlUmVnaXN0cnkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGUuWEluY2x1ZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01UcmVlQ29udGVudFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dC5PdXRwdXRQcm9wZXJ0aWVzQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnVuYXJ5X2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuSW52b2tlclJlZ2lzdHJ5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLk1vdmVVcEFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHJhbnNmb3JtRGVmaW5pdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuT3BlbkRpYWxvZ0FjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYWRkaXRpdmVfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnN0ZXBfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5hcmdfbGlzdF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wZXJzcGVjdGl2ZS5YTUxQZXJzcGVjdGl2ZUZhY3RvcnkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmhhbmRsZXJzLk9wZW5EZWNsYXJhdGlvbkhhbmRsZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoUGlwZWxpbmUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWRkRXh0ZXJuYWxGaWxlQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuUHJvY2Vzc29ySmFyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMVFJ1bnRpbWUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5TdHlsZXNoZWV0Q29udGVudFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhMZXhlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0QnVpbGRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuUmVzb3VyY2VTZWxlY3Rpb25CbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuSmFyQ29udGVudFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5BYnN0cmFjdERlYnVnZ2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLkFjdGlvbk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuWFNMVFNvdXJjZVBhdGhDb21wdXRlckRlbGVnYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5icmVha3BvaW50LlhTTEJyZWFrcG9pbnRQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5Nb3ZlRG93bkFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuUHJvY2Vzc29yQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5pbnRlcm5hbC51aS52aWV3cy5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIucHJlZGljYXRlX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguaW50ZXJuYWwudWkudmlld3MuWFBhdGhWaWV3QWN0aW9ucy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuSVByb2Nlc3Nvckphci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIub3JfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuTXVsdGlwbGVJbnB1dERpYWxvZy5WYWxpZGF0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmF4aXNfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJQ29uc3RhbnRzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuRmVhdHVyZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQnJlYWtQb2ludC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlByb2Nlc3Nvckluc3RhbGwueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmFuZF9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5NYWluLnhtbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc1YTJhNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWRlbGV0ZW1lLmh0bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19kZWJ1Z2dlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX2RlYnVnZ2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTZkM2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX2RlYnVnZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5YU0xUIERlYnVnZ2VyPC90aXRsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL2Jvb2suY3NzIik7PC9zdHlsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL3NjaGVtYS5jc3MiKTs8L3N0eWxlPgotPC9IRUFEPgotPEJPRFk+Ci08SDEgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj5YU0xUIERlYnVnZ2VyPC9IMT4KLTxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPklkZW50aWZpZXI6IDwvaDY+b3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cC5kZWJ1Z2dlcjxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkRlc2NyaXB0aW9uOiA8L2g2PkNvbnRyaWJ1dGUgYSBkZWJ1Z2dlciBmb3IgYSBwYXJ0aWN1bGFyIEpBWFAgcHJvY2Vzc29yIHR5cGUgKGUuZy4gU2F4b24pLiBUaGUgZXh0ZW5zaW9uIHBvaW50IHByaW1hcmlseSBkZWZpbmVzIHRoZSBjbGFzc3BhdGggYW5kIHRyYW5zZm9ybWVyIGZhY3RvcnkgdG8gYmUgdXNlZCB3aGVuIGRlYnVnZ2luZy48cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5Db25maWd1cmF0aW9uIE1hcmt1cDo8L2g2PgotPHA+PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5leHRlbnNpb24iPmV4dGVuc2lvbjwvYT4gKDxhIGhyZWY9IiNlLmRlYnVnZ2VyIj5kZWJ1Z2dlcjwvYT4rKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBleHRlbnNpb248L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wb2ludCZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm5hbWUmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD4mZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZGVidWdnZXIiPmRlYnVnZ2VyPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBkZWJ1Z2dlcjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm5hbWUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Y2xhc3NwYXRoJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnByb2Nlc3NvclR5cGVJZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5jbGFzc05hbWUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+dHJhbnNmb3JtZXJGYWN0b3J5Q2xhc3MmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1BIGRlYnVnZ2VyIGZvciBhIHByb2Nlc3NvciB0eXBlPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+aWQ8L2I+IC0gQSB1bmlxdWUgaWQgZm9yIHRoaXMgZGVidWdnZXI8L2xpPgotPGxpPjxiPm5hbWU8L2I+IC0gQSBuYW1lIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgVUk8L2xpPgotPGxpPjxiPmNsYXNzcGF0aDwvYj4gLSBBICc7Jy1zZXBhcmF0ZWQgY2xhc3NwYXRoIHJlcXVpcmVkIHRvIHJ1biB0aGUgZGVidWdnZXIgKGluIGFkZGl0aW9uIHRvIHRoYXQgYWxyZWFkeSBhZGRlZCBieSB0aGUgcHJvY2Vzc29yIGl0c2VsZikuPC9saT4KLTxsaT48Yj5wcm9jZXNzb3JUeXBlSWQ8L2I+IC0gVGhlIHByb2Nlc3NvciB0eXBlIHRoYXQgdGhpcyBkZWJ1Z2dlciB3b3JrcyB3aXRoPC9saT4KLTxsaT48Yj5jbGFzc05hbWU8L2I+IC0gQSBmdWxseS1xdWFsaWZpZWQgY2xhc3MgdGhhdCBpbXBsZW1lbnQgdGhlIElYU0xEZWJ1Z2dlciBpbnRlcmZhY2UuIEl0IGlzIGVhc2llciB0byBleHRlbmQgQWJzdHJhY3RYU0xEZWJ1Z2dlci48L2xpPgotPGxpPjxiPnRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzPC9iPiAtIFRoZSBmdWxseS1xdWFsaWZpZWQgY2xhc3MgbmFtZSBvZiB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yeSB0byB1c2UgZm9yIGRlYnVnZ2luZy4gVGhpcyBtdXN0IGJlIG9uZSBvZiB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yaWVzIGJlbG9uZ2luZyB0byB0aGUgcHJvY2Vzc29yIHR5cGUuPC9saT4KLTwvdWw+Ci08YnI+PGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RXhhbXBsZXM6IDwvaDY+PHByZSBjbGFzcz0iRXhhbXBsZSI+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmRlYnVnZ2VyJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Jmd0OwotICAgICAgJmx0O2RlYnVnZ2VyCi0gICAgICAgICAgICBjbGFzc05hbWU9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlciZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgY2xhc3NwYXRoPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDske2VjbGlwc2Vfb3JiaXQ6b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbn0mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGlkPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBuYW1lPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtYYWxhbiAyLjUuMSBvciBncmVhdGVyJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBwcm9jZXNzb3JUeXBlSWQ9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4ucHJvY2Vzc29yVHlwZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgdHJhbnNmb3JtZXJGYWN0b3J5Q2xhc3M9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4mZ3Q7Ci0gICAgICAmbHQ7L2RlYnVnZ2VyJmd0OwotICAgJmx0Oy9leHRlbnNpb24mZ3Q7Ci08L3NwYW4+PC9wcmU+Ci08cD48L3A+Ci0KLTxicj4KLTxwIGNsYXNzPSJub3RlIFNjaGVtYUNvcHlyaWdodCI+Ci1Db3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSA8YSBocmVmPSJodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayI+aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWs8L2E+Ljxicj4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCA8YQotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPgotCi08L3A+Ci08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfaW52b2tlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfaW52b2tlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOWM0NDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX2ludm9rZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotPEhFQUQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+WFNMVCBQcm9jZXNzb3IgSW52b2tlcjwvdGl0bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9ib29rLmNzcyIpOzwvc3R5bGU+Ci08c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBpbXBvcnQgdXJsKCIuLi8uLi9zY2hlbWEuY3NzIik7PC9zdHlsZT4KLTwvSEVBRD4KLTxCT0RZPgotPEgxIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+WFNMVCBQcm9jZXNzb3IgSW52b2tlcjwvSDE+Ci08ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjOTkwMDAwOyBwYWRkaW5nOiA1cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6IHJlZDsiPlRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsPC9kaXY+Ci08cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5JZGVudGlmaWVyOiA8L2g2Pm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAuaW52b2tlPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RGVzY3JpcHRpb246IDwvaDY+PGI+VGhpcyBleHRlbnNpb24gcG9pbnQgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgcGx1Z2lucy48L2I+PHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+Q29uZmlndXJhdGlvbiBNYXJrdXA6PC9oNj4KLTxwPjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUuZXh0ZW5zaW9uIj5leHRlbnNpb248L2E+ICg8YSBocmVmPSIjZS5pbnZva2VyIj5pbnZva2VyPC9hPikmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZXh0ZW5zaW9uPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+cG9pbnQmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmludm9rZXIiPmludm9rZXI8L2E+IEVNUFRZJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGludm9rZXI8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5jbGFzcyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5jbGFzc3BhdGgmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmlkPC9iPiAtIFVuaXF1ZSBpZCBmb3IgdGhpcyBpbnZva2VyPC9saT4KLTxsaT48Yj5jbGFzczwvYj4gLSBBIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgSVByb2Nlc3Nvckludm9rZXIgaW50ZXJmYWNlPC9saT4KLTxsaT48Yj5jbGFzc3BhdGg8L2I+IC0gQSBzZW1pLWNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGphcnMgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGNvbnRyaWJ1dGluZyBwbHVnaW4uIE9uZSBvZiB0aGUgamFycyBtdXN0IGNvbnRhaW4gdGhlIEludm9rZXIgY2xhc3MgbmFtZWQgaW4gdGhlIGNsYXNzIGF0dHJpYnV0ZS48L2xpPgotPC91bD4KLTxicj48YnI+Ci08cCBjbGFzcz0ibm90ZSBTY2hlbWFDb3B5cmlnaHQiPgotQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gPGEgaHJlZj0iaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsiPmh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrPC9hPi48YnI+Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgPGEKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4KLQotPC9wPgotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX3Byb2Nlc3Nvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX3Byb2Nlc3Nvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWEyY2FlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPlhTTFQgUHJvY2Vzc29yPC90aXRsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL2Jvb2suY3NzIik7PC9zdHlsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+QGltcG9ydCB1cmwoIi4uLy4uL3NjaGVtYS5jc3MiKTs8L3N0eWxlPgotPC9IRUFEPgotPEJPRFk+Ci08SDEgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj5YU0xUIFByb2Nlc3NvcjwvSDE+Ci08cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5JZGVudGlmaWVyOiA8L2g2Pm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAucHJvY2Vzc29yPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RGVzY3JpcHRpb246IDwvaDY+Q29udHJpYnV0ZSBhIEphdmEgWFNMVCBwcm9jZXNzb3IgaW5zdGFuY2UgKGUuZy4gWGFsYW4gMi43LjApLiBUaGUgZXh0ZW5zaW9uIHBvaW50IHByaW1hcmlseSBkZWZpbmVzIHRoZSBjbGFzc3BhdGggdG8gYmUgdXNlZCB3aGVuIGxhdW5jaGluZyBhbiBYU0xUIHRyYW5zZm9ybWF0aW9uLjxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkNvbmZpZ3VyYXRpb24gTWFya3VwOjwvaDY+Ci08cD48L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmV4dGVuc2lvbiI+ZXh0ZW5zaW9uPC9hPiAoPGEgaHJlZj0iI2UucHJvY2Vzc29yIj5wcm9jZXNzb3I8L2E+KykmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgZXh0ZW5zaW9uPC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+cG9pbnQmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+aWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5uYW1lJm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLnByb2Nlc3NvciI+cHJvY2Vzc29yPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBwcm9jZXNzb3I8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5sYWJlbCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wcm9jZXNzb3JUeXBlSWQmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+Y2xhc3NwYXRoJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmRlYnVnZ2VySWQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5zdXBwb3J0cyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD4mZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLUFuIGluc3RhbmNlIG9mIGEgSkFYUC1jb21wbGlhbnQgWFNMVCBwcm9jZXNzb3I8L3A+Ci08YnI+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5pZDwvYj4gLSBBIHVuaXF1ZSBpZCBmb3IgdGhpcyBwcm9jZXNzb3IgaW5zdGFuY2U8L2xpPgotPGxpPjxiPmxhYmVsPC9iPiAtIEEgbGFiZWwgZm9yIHRoaXMgaW5zdGFuY2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBVSTwvbGk+Ci08bGk+PGI+cHJvY2Vzc29yVHlwZUlkPC9iPiAtIFRoZSBpZCBmb3IgdGhlIHByb2Nlc3NvciB0eXBlPC9saT4KLTxsaT48Yj5jbGFzc3BhdGg8L2I+IC0gVGhlIGNsYXNzcGF0aCB0byB1c2Ugd2hlbiB0aGlzIHByb2Nlc3NvciBpcyBsYXVuY2hlZDwvbGk+Ci08bGk+PGI+ZGVidWdnZXJJZDwvYj4gLSBUaGUgaWQgb2YgYSBkZWJ1Z2dlciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgcHJvY2Vzc29yPC9saT4KLTxsaT48Yj5zdXBwb3J0czwvYj4gLSBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHN1cHBvcnRlZCBYU0xUIHZlcnNpb25zIGUuZy4gMS4wLDIuMDwvbGk+Ci08L3VsPgotPGJyPjxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkV4YW1wbGVzOiA8L2g2PjxwcmUgY2xhc3M9IkV4YW1wbGUiPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAmbHQ7ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3ImcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4mZ3Q7Ci0gICAgICAmbHQ7IS0tIEFuIGFkb3B0ZXIgY2FuIHNwZWNpZnkgdGhlICR7ZWNsaXBzZV9vcmJpdDogfSB2YXJpYWJsZSB0byBpbmRpY2F0ZSB3aGljaCBlY2xpcHNlCi0gICAgICAgICAgIGJ1bmRsZSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNsYXNzIHBhdGguIC0tJmd0OwotICAgICAgJmx0O3Byb2Nlc3NvcgotICAgICAgY2xhc3NwYXRoPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS54YWxhbn07JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXJ9OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLmJjZWx9OyR7ZWNsaXBzZV9vcmJpdDpqYXZhX2N1cC5ydW50aW1lfSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgaWQ9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnhhbGFuLnByb2Nlc3NvciZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgbGFiZWw9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90OyVwcm9jZXNzb3IubGFiZWwuMSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGRlYnVnZ2VySWQ9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXImcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIHN1cHBvcnRzPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDsxLjAmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4mZ3Q7Ci0gICAgICAmbHQ7L3Byb2Nlc3NvciZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotPC9zcGFuPjwvcHJlPgotPHA+PC9wPgotCi08YnI+Ci08cCBjbGFzcz0ibm90ZSBTY2hlbWFDb3B5cmlnaHQiPgotQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gPGEgaHJlZj0iaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsiPmh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrPC9hPi48YnI+Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgPGEKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4KLQotPC9wPgotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX3Byb2Nlc3NvclR5cGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3JUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmI1ZjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX3Byb2Nlc3NvclR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPlhTTFQgUHJvY2Vzc29yIFR5cGU8L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vYm9vay5jc3MiKTs8L3N0eWxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vc2NoZW1hLmNzcyIpOzwvc3R5bGU+Ci08L0hFQUQ+Ci08Qk9EWT4KLTxIMSBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPlhTTFQgUHJvY2Vzc29yIFR5cGU8L0gxPgotPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+SWRlbnRpZmllcjogPC9oNj5vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwLnByb2Nlc3NvclR5cGU8cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5EZXNjcmlwdGlvbjogPC9oNj5Db250cmlidXRlIGEgSmF2YSBYU0xUIHByb2Nlc3NvciB0eXBlIChlLmcuIFhhbGFuLCBTYXhvbikuIFRoZSBwcm9jZXNzb3IgdHlwZSBkZWZpbmVzIHdoaWNoIEpBWFAgYXR0cmlidXRlcyBhbmQgb3V0cHV0IHByb3BlcmllcyBhcmUgc3VwcG9ydGVkLCBhbmQgYWxzbyB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yeSBjbGFzc2VzIGl0IGNvbnRhaW5zLjxwPjwvcD4KLTxoNiBjbGFzcz0iQ2FwdGlvbkZpZ0NvbHVtbiBTY2hlbWFIZWFkZXIiPkNvbmZpZ3VyYXRpb24gTWFya3VwOjwvaDY+Ci08cD48L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLmV4dGVuc2lvbiI+ZXh0ZW5zaW9uPC9hPiAoPGEgaHJlZj0iI2UucHJvY2Vzc29yVHlwZSI+cHJvY2Vzc29yVHlwZTwvYT4rKSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBleHRlbnNpb248L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5wb2ludCZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm5hbWUmbmJzcDsmbmJzcDtDREFUQSAjSU1QTElFRDwvcD4mZ3Q7PC9wPgotPHA+PC9wPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08L3VsPgotPGJyPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFFTEVNRU5UIDxhIG5hbWU9ImUucHJvY2Vzc29yVHlwZSI+cHJvY2Vzc29yVHlwZTwvYT4gKDxhIGhyZWY9IiNlLnRyYW5zZm9ybWVyRmFjdG9yeSI+dHJhbnNmb3JtZXJGYWN0b3J5PC9hPiopJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIHByb2Nlc3NvclR5cGU8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5pZCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5sYWJlbCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5vdXRwdXRQcm9wZXJ0aWVzJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+YXR0cmlidXRlUHJvcGVydGllcyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPiZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5pZDwvYj4gLSBVbmlxdWUgaWQgZm9yIHRoZSBwcm9jZXNzb3IgdHlwZTwvbGk+Ci08bGk+PGI+bGFiZWw8L2I+IC0gTmFtZSBmb3IgZGlzcGxheSBpbiB0aGUgVUk8L2xpPgotPGxpPjxiPm91dHB1dFByb3BlcnRpZXM8L2I+IC0gTG9jYXRpb24gb2YgYSBwcm9wZXJ0aWVzIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiB0aGUgcHJvY2Vzc29ycyBvdXRwdXQgcHJvcGVydGllcy4gTXVzdCBiZSBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGJ1bmRsZS48L2xpPgotPGxpPjxiPmF0dHJpYnV0ZVByb3BlcnRpZXM8L2I+IC0gTG9jYXRpb24gb2YgYSBwcm9wZXJ0aWVzIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiB0aGUgYXR0cmlidXRlcyBzdXBwb3J0ZWQgYnkgdGhpcyBwcm9jZXNzb3IuIE11c3QgYmUgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBidW5kbGUuPC9saT4KLTwvdWw+Ci08YnI+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS50cmFuc2Zvcm1lckZhY3RvcnkiPnRyYW5zZm9ybWVyRmFjdG9yeTwvYT4gRU1QVFkmZ3Q7PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUFUVExJU1QgdHJhbnNmb3JtZXJGYWN0b3J5PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+ZmFjdG9yeUNsYXNzJm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPm5hbWUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDREFUQSAjUkVRVUlSRUQ8L3A+Jmd0OzwvcD4KLTxwPjwvcD4KLTxwIGNsYXNzPSJDb25maWdNYXJrdXBFbGVtZW50RGVzYyI+Ci1BIFRyYW5zZm9ybWVyRmFjdG9yeSBmb3IgdGhpcyB0eXBlPC9wPgotPGJyPgotPHVsIGNsYXNzPSJDb25maWdNYXJrdXBBdHRsaXN0RGVzYyI+Ci08bGk+PGI+ZmFjdG9yeUNsYXNzPC9iPiAtIFRoZSBmdWxseS1xdWFsaWZpZWQgdHJhbnNmb3JtZXIgZmFjdG9yeSBjbGFzczwvbGk+Ci08bGk+PGI+bmFtZTwvYj4gLSBBIG5hbWUgZm9yIHRoaXMgdHJhbnNmb3JtZXIgZmFjdG9yeSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIFVJPC9saT4KLTwvdWw+Ci08YnI+PGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RXhhbXBsZXM6IDwvaDY+PHByZSBjbGFzcz0iRXhhbXBsZSI+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvclR5cGUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4mZ3Q7Ci0gICAgICAmbHQ7cHJvY2Vzc29yVHlwZQotICAgICAgICAgICAgYXR0cmlidXRlUHJvcGVydGllcz08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7WGFsYW5BdHRyaWJ1dGVzLnByb3BlcnRpZXMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGlkPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4KLSAgICAgICAgICAgIGxhYmVsPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDslcHJvY2Vzc29yVHlwZS5sYWJlbC4wJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICBvdXRwdXRQcm9wZXJ0aWVzPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtYYWxhbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPiZndDsKLSAgICAgICAgICZsdDt0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7b3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFUYWciPgotICAgICAgICAgICAgICAgbmFtZT08L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hQ3N0cmluZyI+JnF1b3Q7SW50ZXJwcmV0aXZlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Jmd0OwotICAgICAgICAgJmx0Oy90cmFuc2Zvcm1lckZhY3RvcnkmZ3Q7Ci0gICAgICAgICAmbHQ7dHJhbnNmb3JtZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICBmYWN0b3J5Q2xhc3M9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYUNzdHJpbmciPiZxdW90O29yZy5hcGFjaGUueGFsYW4ueHNsdGMudHJheC5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIFNjaGVtYVRhZyI+Ci0gICAgICAgICAgICAgICBuYW1lPTwvc3Bhbj48c3BhbiBjbGFzcz0iY29kZSBTY2hlbWFDc3RyaW5nIj4mcXVvdDtDb21waWxpbmcmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNvZGUgU2NoZW1hVGFnIj4mZ3Q7Ci0gICAgICAgICAmbHQ7L3RyYW5zZm9ybWVyRmFjdG9yeSZndDsKLSAgICAgICZsdDsvcHJvY2Vzc29yVHlwZSZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotPC9zcGFuPjwvcHJlPgotPHA+PC9wPgotCi08YnI+Ci08cCBjbGFzcz0ibm90ZSBTY2hlbWFDb3B5cmlnaHQiPgotQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gPGEgaHJlZj0iaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsiPmh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrPC9hPi48YnI+Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgPGEKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4KLQotPC9wPgotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX3VpX2NvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF91aV9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZDZkY2IuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX3VpX2NvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPlhTTCBDb250ZW50IEFzc2lzdGFuY2U8L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vYm9vay5jc3MiKTs8L3N0eWxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj5AaW1wb3J0IHVybCgiLi4vLi4vc2NoZW1hLmNzcyIpOzwvc3R5bGU+Ci08L0hFQUQ+Ci08Qk9EWT4KLTxIMSBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPlhTTCBDb250ZW50IEFzc2lzdGFuY2U8L0gxPgotPHA+PC9wPgotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+SWRlbnRpZmllcjogPC9oNj5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmNvbnRlbnRBc3Npc3RQcm9jZXNzb3I8cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5TaW5jZTogPC9oNj4xLjEKLTxwPjwvcD4KLQotPGg2IGNsYXNzPSJDYXB0aW9uRmlnQ29sdW1uIFNjaGVtYUhlYWRlciI+RGVzY3JpcHRpb246IDwvaDY+WFNMIENvbnRlbnQgQXNpc3N0YW5jZSBwcm9jZXNzb3IgZXh0ZW5zaW9uIHBvaW50LCBhbGxvd3MgZm9yIHRoZSBjb250cmlidXRpb24gb2YgYWRvcHRlciBkZWZpbmVkIFhTTCBwcm9jZXNzb3IgZXh0ZW5zaW9ucy48cD48L3A+Ci08aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5Db25maWd1cmF0aW9uIE1hcmt1cDo8L2g2PgotPHA+PC9wPgotPHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkIj4mbHQ7IUVMRU1FTlQgPGEgbmFtZT0iZS5leHRlbnNpb24iPmV4dGVuc2lvbjwvYT4gKDxhIGhyZWY9IiNlLnByb2Nlc3NvciI+cHJvY2Vzc29yPC9hPispJmd0OzwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZCI+Jmx0OyFBVFRMSVNUIGV4dGVuc2lvbjwvcD4KLTxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPnBvaW50Jm5ic3A7Q0RBVEEgI1JFUVVJUkVEPC9wPjxwIGNsYXNzPSJjb2RlIFNjaGVtYUR0ZEF0dGxpc3QiPmlkJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q0RBVEEgI0lNUExJRUQ8L3A+PHAgY2xhc3M9ImNvZGUgU2NoZW1hRHRkQXR0bGlzdCI+bmFtZSZuYnNwOyZuYnNwO0NEQVRBICNJTVBMSUVEPC9wPiZndDs8L3A+Ci08cD48L3A+Ci08dWwgY2xhc3M9IkNvbmZpZ01hcmt1cEF0dGxpc3REZXNjIj4KLTxsaT48Yj5wb2ludDwvYj4gLSBBIHVuaXF1ZSBJRCBmb3IgdGhpcyBleHRlbnNpb24gcG9pbnQ8L2xpPgotPGxpPjxiPm5hbWU8L2I+IC0gRXh0ZW5zaW9uIHBvaW50IG5hbWU8L2xpPgotPC91bD4KLTxicj48cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshRUxFTUVOVCA8YSBuYW1lPSJlLnByb2Nlc3NvciI+cHJvY2Vzc29yPC9hPiBFTVBUWSZndDs8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGQiPiZsdDshQVRUTElTVCBwcm9jZXNzb3I8L3A+Ci08cCBjbGFzcz0iY29kZSBTY2hlbWFEdGRBdHRsaXN0Ij5jbGFzcyZuYnNwO0NEQVRBICNSRVFVSVJFRDwvcD4mZ3Q7PC9wPgotPHA+PC9wPgotPHAgY2xhc3M9IkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIj4KLVByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZTwvcD4KLTxicj4KLTx1bCBjbGFzcz0iQ29uZmlnTWFya3VwQXR0bGlzdERlc2MiPgotPGxpPjxiPmNsYXNzPC9iPiAtIFRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGNvbnRlbnQgYXNzaXN0YW50IHByb2Nlc3Nvci48L2xpPgotPC91bD4KLTxicj48aDYgY2xhc3M9IkNhcHRpb25GaWdDb2x1bW4gU2NoZW1hSGVhZGVyIj5FeGFtcGxlczogPC9oNj48cD4mbHQ7ZXh0ZW5zaW9uCi0gICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuY29udGVudEFzc2lzdFByb2Nlc3NvciI+PC9wPgotPHA+JiMxNjA7JiMxNjA7JiMxNjA7Jmx0O3Byb2Nlc3NvcgotICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWE1MQ29udGVudEFzc2lzdFByb2Nlc3NvciI+PC9wPgotPHA+JiMxNjA7JiMxNjA7JiMxNjA7Jmx0Oy9wcm9jZXNzb3I+PC9wPgotPHA+Jmx0Oy9leHRlbnNpb24+PC9wPgotPHA+PC9wPgotCi08YnI+Ci08cCBjbGFzcz0ibm90ZSBTY2hlbWFDb3B5cmlnaHQiPgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLTwvcD4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGI4MWVkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhDb3JlUGx1Z2luPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhDb3JlUGx1Z2luPC9zdHJvbmc+Ci1leHRlbmRzIFBsdWdpbjwvcHJlPlRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9QTFVHSU5fSUQiPlBMVUdJTl9JRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhDb3JlUGx1Z2luIj5YUGF0aENvcmVQbHVnaW48L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREZWZhdWx0Ij5nZXREZWZhdWx0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcCI+c3RvcDwvYT4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfUExVR0lOX0lEIj5QTFVHSU5fSUQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+UExVR0lOX0lEPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aENvcmVQbHVnaW4iPlhQYXRoQ29yZVBsdWdpbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoQ29yZVBsdWdpbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgY29uc3RydWN0b3I8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREZWZhdWx0Ij5nZXREZWZhdWx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW4gPHN0cm9uZz5nZXREZWZhdWx0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbjwvY29kZT4gLSB0aGUgc2hhcmVkIGluc3RhbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0YXJ0Ij5zdGFydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnQ8L3N0cm9uZz4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RvcCI+c3RvcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RvcDwvc3Ryb25nPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWY0NzliLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5YUGF0aCBQcm9jZXNzb3IgcHJlZmVyZW5jZXM8cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF8xXzBfUFJPQ0VTU09SIj5YUEFUSF8xXzBfUFJPQ0VTU09SPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF8yXzBfUFJPQ0VTU09SIj5YUEFUSF8yXzBfUFJPQ0VTU09SPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9PVEhFUiI+WFBBVEhfT1RIRVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMiPlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfWFBBVEhfMV8wX1BST0NFU1NPUiI+WFBBVEhfMV8wX1BST0NFU1NPUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSF8xXzBfUFJPQ0VTU09SPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQQVRIXzJfMF9QUk9DRVNTT1IiPlhQQVRIXzJfMF9QUk9DRVNTT1I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBBVEhfMl8wX1BST0NFU1NPUjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF9PVEhFUiI+WFBBVEhfT1RIRVI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBBVEhfT1RIRVI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXMiPlhQYXRoUHJvY2Vzc29yUHJlZmVyZW5jZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aFByb2Nlc3NvclByZWZlcmVuY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxZWQzMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UHJlZmVyZW5jZUluaXRpYWxpemVyPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyPC9wcmU+UHJlZmVyZW5jZXMgaW5pdGlhbGl6ZXIgZm9yIFhTTCBjb3JlIHByZWZlcmVuY2VzLjxwPjwvcD48aHI+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+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuTm9kZUxpc3RJbXBsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuTm9kZUxpc3RJbXBsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlN2Q5NTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLk5vZGVMaXN0SW1wbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOb2RlTGlzdEltcGw8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5Ob2RlTGlzdEltcGw8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgUmVzdWx0U2VxdWVuY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ycyI+cnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05vZGVMaXN0SW1wbCI+Tm9kZUxpc3RJbXBsPC9hPjwvc3Ryb25nPihSZXN1bHRTZXF1ZW5jZSByZXN1bHQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExlbmd0aCI+Z2V0TGVuZ3RoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXRlbSI+aXRlbTwvYT4oaW50IGFyZzApPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9ycyI+cnM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgUmVzdWx0U2VxdWVuY2UgPHN0cm9uZz5yczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTm9kZUxpc3RJbXBsIj5Ob2RlTGlzdEltcGw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Ob2RlTGlzdEltcGw8L3N0cm9uZz4oUmVzdWx0U2VxdWVuY2UgcmVzdWx0KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGVuZ3RoIj5nZXRMZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0TGVuZ3RoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pdGVtIj5pdGVtPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5pdGVtPC9zdHJvbmc+KGludCBhcmcwKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmcwPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoMjBIZWxwZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aDIwSGVscGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOTVkMDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoMjBIZWxwZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aDIwSGVscGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGgyMEhlbHBlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aDIwSGVscGVyIj5YUGF0aDIwSGVscGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcGlsZSI+Y29tcGlsZTwvYT4oamF2YS5sYW5nLlN0cmluZyB4cGF0aEV4cCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aDIwSGVscGVyIj5YUGF0aDIwSGVscGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGgyMEhlbHBlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21waWxlIj5jb21waWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jb21waWxlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgeHBhdGhFeHApPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnhwYXRoRXhwPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoQ29yZUhlbHBlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoQ29yZUhlbHBlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjkwN2NjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aENvcmVIZWxwZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aENvcmVIZWxwZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aENvcmVIZWxwZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aENvcmVIZWxwZXIiPlhQYXRoQ29yZUhlbHBlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBQcmVmZXJlbmNlczwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcmVmZXJlbmNlcyI+Z2V0UHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aENvcmVIZWxwZXIiPlhQYXRoQ29yZUhlbHBlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoQ29yZUhlbHBlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmVmZXJlbmNlcyI+Z2V0UHJlZmVyZW5jZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUHJlZmVyZW5jZXMgPHN0cm9uZz5nZXRQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlByZWZlcmVuY2VzPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFNMVFhQYXRoSGVscGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFNMVFhQYXRoSGVscGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMjZlYzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVFhQYXRoSGVscGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVFhQYXRoSGVscGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVFhQYXRoSGVscGVyIj5YU0xUWFBhdGhIZWxwZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYWxjdWxhdGVYUGF0aFRvTm9kZSI+Y2FsY3VsYXRlWFBhdGhUb05vZGU8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGEgWFBhdGggZXhwcmVzc2lvbiBnaXZlbiBhIERPTSBOb2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21waWxlIj5jb21waWxlPC9hPihqYXZhLmxhbmcuU3RyaW5nIGV4cHJlc3Npb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsIj5ldmFsPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBFdmFsdWF0ZSBYUGF0aCBzdHJpbmcgdG8gYW4gWE9iamVjdC4gVXNpbmcgdGhpcyBtZXRob2QsIFhQYXRoIG5hbWVzcGFjZQotIHByZWZpeGVzIHdpbGwgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V2YWwiPmV2YWw8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpcyBhIGxpdHRsZQotIHNsb3csIHNpbmNlIGl0IGNyZWF0ZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLiBUaGlzCi0gY291bGQgYmUgb3B0aW1pemVkIHRvIGtlZXAgdGhlIHNhbWUgb2JqZWN0cyBhcm91bmQsIGJ1dCB0aGVuCi0gdGhyZWFkLXNhZmV0eSBpc3N1ZXMgd291bGQgYXJpc2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsIj5ldmFsPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54bWwudXRpbHMuUHJlZml4UmVzb2x2ZXIgcHJlZml4UmVzb2x2ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpcyBhIGxpdHRsZQotIHNsb3csIHNpbmNlIGl0IGNyZWF0ZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLiBUaGlzCi0gY291bGQgYmUgb3B0aW1pemVkIHRvIGtlZXAgdGhlIHNhbWUgb2JqZWN0cyBhcm91bmQsIGJ1dCB0aGVuCi0gdGhyZWFkLXNhZmV0eSBpc3N1ZXMgd291bGQgYXJpc2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyBvcmcuYXBhY2hlLnhwYXRoLmNvbXBpbGVyLkZ1bmN0aW9uVGFibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RnVuY3Rpb25UYWJsZSI+Z2V0RnVuY3Rpb25UYWJsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLnczYy5kb20udHJhdmVyc2FsLk5vZGVJdGVyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3ROb2RlSXRlcmF0b3IiPnNlbGVjdE5vZGVJdGVyYXRvcjwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHROb2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLnczYy5kb20udHJhdmVyc2FsLk5vZGVJdGVyYXRvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3ROb2RlSXRlcmF0b3IiPnNlbGVjdE5vZGVJdGVyYXRvcjwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbmFtZXNwYWNlTm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLk5vZGVMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdE5vZGVMaXN0Ij5zZWxlY3ROb2RlTGlzdDwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHROb2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLnczYy5kb20uTm9kZUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0Tm9kZUxpc3QiPnNlbGVjdE5vZGVMaXN0PC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3RTaW5nbGVOb2RlIj5zZWxlY3RTaW5nbGVOb2RlPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIHNpbmdsZSBub2RlLiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgY29udGV4dCBub2RlLCB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQgKHNlZSB0aGUKLSBuZXh0IG1ldGhvZCkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcudzNjLmRvbS5Ob2RlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdFNpbmdsZU5vZGUiPnNlbGVjdFNpbmdsZU5vZGU8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBzaW5nbGUgbm9kZS4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVFhQYXRoSGVscGVyIj5YU0xUWFBhdGhIZWxwZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xUWFBhdGhIZWxwZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FsY3VsYXRlWFBhdGhUb05vZGUiPmNhbGN1bGF0ZVhQYXRoVG9Ob2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5jYWxjdWxhdGVYUGF0aFRvTm9kZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGEgWFBhdGggZXhwcmVzc2lvbiBnaXZlbiBhIERPTSBOb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBUaGUgRE9NIE5vZGUgdG8gY3JlYXRlIHRoZSBYUGF0aCBleHByZXNzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcGlsZSI+Y29tcGlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y29tcGlsZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGV4cHJlc3Npb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV4cHJlc3Npb248L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ldmFsIj5ldmFsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0IDxzdHJvbmc+ZXZhbDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPkV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBVc2luZyB0aGlzIG1ldGhvZCwgWFBhdGggbmFtZXNwYWNlCi0gcHJlZml4ZXMgd2lsbCBiZSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0PC9jb2RlPiAtIEFuIFhPYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN0cmluZywgbnVtYmVyLCAgICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V2YWwiPmV2YWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3QgPHN0cm9uZz5ldmFsPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjwvcD48cD5FdmFsdWF0ZSBYUGF0aCBzdHJpbmcgdG8gYW4gWE9iamVjdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGlzIGEgbGl0dGxlCi0gc2xvdywgc2luY2UgaXQgY3JlYXRlcyBhIG51bWJlciBvZiBvYmplY3RzIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuIFRoaXMKLSBjb3VsZCBiZSBvcHRpbWl6ZWQgdG8ga2VlcCB0aGUgc2FtZSBvYmplY3RzIGFyb3VuZCwgYnV0IHRoZW4KLSB0aHJlYWQtc2FmZXR5IGlzc3VlcyB3b3VsZCBhcmlzZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxwPjxjb2RlPm5hbWVzcGFjZU5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgZnJvbSB3aGljaCBwcmVmaXhlcyBpbiB0aGUgWFBhdGggd2lsbCBiZSByZXNvbHZlZCB0byAgICAgICAgICAgICBuYW1lc3BhY2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q8L2NvZGU+IC0gQW4gWE9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEgc3RyaW5nLCBudW1iZXIsICAgICAgICAgIG5vZGVsaXN0LCBldGMsIHNob3VsZCBuZXZlciBiZSBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbCI+ZXZhbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdCA8c3Ryb25nPmV2YWw8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy5hcGFjaGUueG1sLnV0aWxzLlByZWZpeFJlc29sdmVyIHByZWZpeFJlc29sdmVyKTwvY29kZT48L3A+PHA+RXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpcyBhIGxpdHRsZQotIHNsb3csIHNpbmNlIGl0IGNyZWF0ZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLiBUaGlzCi0gY291bGQgYmUgb3B0aW1pemVkIHRvIGtlZXAgdGhlIHNhbWUgb2JqZWN0cyBhcm91bmQsIGJ1dCB0aGVuCi0gdGhyZWFkLXNhZmV0eSBpc3N1ZXMgd291bGQgYXJpc2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0Tm9kZTwvY29kZT4gLSBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS48L3A+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIEEgdmFsaWQgWFBhdGggc3RyaW5nLjwvcD48cD48Y29kZT5wcmVmaXhSZXNvbHZlcjwvY29kZT4gLSBXaWxsIGJlIGNhbGxlZCBpZiB0aGUgcGFyc2VyIGVuY291bnRlcnMgbmFtZXNwYWNlIHByZWZpeGVzLCB0byAgICAgICAgICAgICByZXNvbHZlIHRoZSBwcmVmaXhlcyB0byBVUkxzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q8L2NvZGU+IC0gQW4gWE9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEgc3RyaW5nLCBudW1iZXIsICAgICAgICAgIG5vZGVsaXN0LCBldGMsIHNob3VsZCBuZXZlciBiZSBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RnVuY3Rpb25UYWJsZSI+Z2V0RnVuY3Rpb25UYWJsZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuYXBhY2hlLnhwYXRoLmNvbXBpbGVyLkZ1bmN0aW9uVGFibGUgPHN0cm9uZz5nZXRGdW5jdGlvblRhYmxlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmFwYWNoZS54cGF0aC5jb21waWxlci5GdW5jdGlvblRhYmxlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3ROb2RlSXRlcmF0b3IiPnNlbGVjdE5vZGVJdGVyYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS50cmF2ZXJzYWwuTm9kZUl0ZXJhdG9yIDxzdHJvbmc+c2VsZWN0Tm9kZUl0ZXJhdG9yPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+VXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHROb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3I8L2NvZGU+IC0gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0Tm9kZUl0ZXJhdG9yIj5zZWxlY3ROb2RlSXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20udHJhdmVyc2FsLk5vZGVJdGVyYXRvciA8c3Ryb25nPnNlbGVjdE5vZGVJdGVyYXRvcjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48L3A+PHA+VXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0Tm9kZTwvY29kZT4gLSBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS48L3A+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIEEgdmFsaWQgWFBhdGggc3RyaW5nLjwvcD48cD48Y29kZT5uYW1lc3BhY2VOb2RlPC9jb2RlPiAtIFRoZSBub2RlIGZyb20gd2hpY2ggcHJlZml4ZXMgaW4gdGhlIFhQYXRoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gICAgICAgICAgICAgbmFtZXNwYWNlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3I8L2NvZGU+IC0gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0Tm9kZUxpc3QiPnNlbGVjdE5vZGVMaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGVMaXN0IDxzdHJvbmc+c2VsZWN0Tm9kZUxpc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5Vc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgY29udGV4dE5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0Tm9kZTwvY29kZT4gLSBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS48L3A+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIEEgdmFsaWQgWFBhdGggc3RyaW5nLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZUxpc3Q8L2NvZGU+IC0gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0Tm9kZUxpc3QiPnNlbGVjdE5vZGVMaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGVMaXN0IDxzdHJvbmc+c2VsZWN0Tm9kZUxpc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbmFtZXNwYWNlTm9kZSk8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PHA+PGNvZGU+bmFtZXNwYWNlTm9kZTwvY29kZT4gLSBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvICAgICAgICAgICAgIG5hbWVzcGFjZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Ob2RlTGlzdDwvY29kZT4gLSBBIE5vZGVJdGVyYXRvciwgc2hvdWxkIG5ldmVyIGJlIG51bGwuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3RTaW5nbGVOb2RlIj5zZWxlY3RTaW5nbGVOb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5zZWxlY3RTaW5nbGVOb2RlPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+VXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBzaW5nbGUgbm9kZS4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHQgbm9kZSwgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50IChzZWUgdGhlCi0gbmV4dCBtZXRob2QpLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGU8L2NvZGU+IC0gVGhlIGZpcnN0IG5vZGUgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBYUGF0aCwgb3IgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdFNpbmdsZU5vZGUiPnNlbGVjdFNpbmdsZU5vZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20uTm9kZSA8c3Ryb25nPnNlbGVjdFNpbmdsZU5vZGU8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbmFtZXNwYWNlTm9kZSk8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgc2luZ2xlIG5vZGUuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PHA+PGNvZGU+bmFtZXNwYWNlTm9kZTwvY29kZT4gLSBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvICAgICAgICAgICAgIG5hbWVzcGFjZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Ob2RlPC9jb2RlPiAtIFRoZSBmaXJzdCBub2RlIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgWFBhdGgsIG9yIG51bGwuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFVJTWVzc2FnZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVUlNZXNzYWdlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTIxMjMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVUlNZXNzYWdlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWk8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhVSU1lc3NhZ2VzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhVSU1lc3NhZ2VzPC9zdHJvbmc+Ci1leHRlbmRzIE5MUzwvcHJlPlN0cmluZ3MgdXNlZCBieSBYUGF0aCBVSTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9Db250ZXh0Ij5YUGF0aE5hdmlnYXRvcl9Db250ZXh0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9Eb2N1bWVudCI+WFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX0RPTV9UcmVlIj5YUGF0aE5hdmlnYXRvcl9ET01fVHJlZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfRXhwcmVzc2lvbiI+WFBhdGhOYXZpZ2F0b3JfRXhwcmVzc2lvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzIj5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXMiPlhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXNfVGlwIj5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfTm9kZV9jb3VsZF9ub3RfYmVfc2VsZWN0ZWQiPlhQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9Ob3RoaW5nX3NlbGVjdGVkIj5YUGF0aE5hdmlnYXRvcl9Ob3RoaW5nX3NlbGVjdGVkPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzIj5YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzX1RpcCI+WFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXA8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZCI+WFBhdGhOYXZpZ2F0b3JfUnVuX29uX3NlbGVjdGVkPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnkiPlhQYXRoTmF2aWdhdG9yX1J1bl9YUGF0aF9RdWVyeTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdCI+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uIj5YUGF0aE5hdmlnYXRvcl9TZWxlY3Rpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1Nob3dfSW5fU291cmNlIj5YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwIj5YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZV9UaXA8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1RleHQiPlhQYXRoTmF2aWdhdG9yX1RleHQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1hNTF9Tb3VyY2VfRG9jdW1lbnQiPlhQYXRoTmF2aWdhdG9yX1hNTF9Tb3VyY2VfRG9jdW1lbnQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1hQYXRoX0V2YWxfRmFpbGVkIj5YUGF0aE5hdmlnYXRvcl9YUGF0aF9FdmFsX0ZhaWxlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yIj5YUGF0aE5hdmlnYXRvcl9YUGF0aF9OYXZpZ2F0b3I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZCI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfU2hvd19Jbl9Tb3VyY2VfRmFpbGVkPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZXNvdXJjZUJ1bmRsZSI+Z2V0UmVzb3VyY2VCdW5kbGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX0NvbnRleHQiPlhQYXRoTmF2aWdhdG9yX0NvbnRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfQ29udGV4dDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9Eb2N1bWVudCI+WFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfRE9NX1RyZWUiPlhQYXRoTmF2aWdhdG9yX0RPTV9UcmVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX0RPTV9UcmVlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb24iPlhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfRXhwcmVzc2lvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXMiPlhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZV9QcmVmaXhlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlcyI+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXNfVGlwIj5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9Ob2RlX2NvdWxkX25vdF9iZV9zZWxlY3RlZCI+WFBhdGhOYXZpZ2F0b3JfTm9kZV9jb3VsZF9ub3RfYmVfc2VsZWN0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTm9kZV9jb3VsZF9ub3RfYmVfc2VsZWN0ZWQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZCI+WFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9Ob3RoaW5nX3NlbGVjdGVkPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3MiPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzX1RpcCI+WFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXA8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfUnVuX29uX3NlbGVjdGVkIj5YUGF0aE5hdmlnYXRvcl9SdW5fb25fc2VsZWN0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfUnVuX29uX3NlbGVjdGVkPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1J1bl9YUGF0aF9RdWVyeSI+WFBhdGhOYXZpZ2F0b3JfUnVuX1hQYXRoX1F1ZXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1J1bl9YUGF0aF9RdWVyeTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9TZWxlY3Rfc291cmNlX2ZpcnN0Ij5YUGF0aE5hdmlnYXRvcl9TZWxlY3Rfc291cmNlX2ZpcnN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1NlbGVjdF9zb3VyY2VfZmlyc3Q8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uIj5YUGF0aE5hdmlnYXRvcl9TZWxlY3Rpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1Nob3dfSW5fU291cmNlIj5YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZV9UaXAiPlhQYXRoTmF2aWdhdG9yX1Nob3dfSW5fU291cmNlX1RpcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZV9UaXA8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfVGV4dCI+WFBhdGhOYXZpZ2F0b3JfVGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9UZXh0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1hNTF9Tb3VyY2VfRG9jdW1lbnQiPlhQYXRoTmF2aWdhdG9yX1hNTF9Tb3VyY2VfRG9jdW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfWE1MX1NvdXJjZV9Eb2N1bWVudDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9YUGF0aF9FdmFsX0ZhaWxlZCI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfRXZhbF9GYWlsZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfRXZhbF9GYWlsZWQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yIj5YUGF0aE5hdmlnYXRvcl9YUGF0aF9OYXZpZ2F0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZCI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfU2hvd19Jbl9Tb3VyY2VfRmFpbGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRSZXNvdXJjZUJ1bmRsZSI+Z2V0UmVzb3VyY2VCdW5kbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLlJlc291cmNlQnVuZGxlIDxzdHJvbmc+Z2V0UmVzb3VyY2VCdW5kbGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhWaWV3UGx1Z2luLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNDM0YzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhWaWV3UGx1Z2luLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWk8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aFZpZXdQbHVnaW48L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aFZpZXdQbHVnaW48L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aFZpZXdQbHVnaW4iPlhQYXRoVmlld1BsdWdpbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREZWZhdWx0Ij5nZXREZWZhdWx0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQbHVnaW5JZCI+Z2V0UGx1Z2luSWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLlJlc291cmNlQnVuZGxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlc291cmNlQnVuZGxlIj5nZXRSZXNvdXJjZUJ1bmRsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZXNvdXJjZVN0cmluZyI+Z2V0UmVzb3VyY2VTdHJpbmc8L2E+KGphdmEubGFuZy5TdHJpbmcga2V5KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0gb3IgJ2tleScgaWYgbm90IGZvdW5kLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBDb250ZXh0VHlwZVJlZ2lzdHJ5PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnkiPmdldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHhwYXRoPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFRlbXBsYXRlU3RvcmU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0WFBhdGhUZW1wbGF0ZVN0b3JlIj5nZXRYUGF0aFRlbXBsYXRlU3RvcmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBzdG9yZSBmb3IgdGhlIHhwYXRoIHRlbXBsYXRlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbmZvIj5pbmZvPC9hPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdGlhbGl6ZUltYWdlUmVnaXN0cnkiPmluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5PC9hPihJbWFnZVJlZ2lzdHJ5IHJlZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sb2ciPmxvZzwvYT4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlIGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xvZyI+bG9nPC9hPihqYXZhLmxhbmcuVGhyb3dhYmxlIGV4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnRBY3RpdmF0ZWQiPnBhcnRBY3RpdmF0ZWQ8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFydEJyb3VnaHRUb1RvcCI+cGFydEJyb3VnaHRUb1RvcDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0Q2xvc2VkIj5wYXJ0Q2xvc2VkPC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnREZWFjdGl2YXRlZCI+cGFydERlYWN0aXZhdGVkPC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnRIaWRkZW4iPnBhcnRIaWRkZW48L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFydElucHV0Q2hhbmdlZCI+cGFydElucHV0Q2hhbmdlZDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0T3BlbmVkIj5wYXJ0T3BlbmVkPC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnRWaXNpYmxlIj5wYXJ0VmlzaWJsZTwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGFydCI+c3RhcnQ8L2E+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb248L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdG9wIj5zdG9wPC9hPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90aHJvd0NvcmVFeGNlcHRpb24iPnRocm93Q29yZUV4Y2VwdGlvbjwvYT4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlIHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXBkYXRlWFBhdGhOYXZpZ2F0b3JWaWV3Ij51cGRhdGVYUGF0aE5hdmlnYXRvclZpZXc8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfd2FybiI+d2FybjwvYT4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoVmlld1BsdWdpbiI+WFBhdGhWaWV3UGx1Z2luPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhWaWV3UGx1Z2luPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSBjb25zdHJ1Y3Rvci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREZWZhdWx0Ij5nZXREZWZhdWx0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhWaWV3UGx1Z2luIDxzdHJvbmc+Z2V0RGVmYXVsdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGx1Z2luSWQiPmdldFBsdWdpbklkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRQbHVnaW5JZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFJlc291cmNlQnVuZGxlIj5nZXRSZXNvdXJjZUJ1bmRsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGUgPHN0cm9uZz5nZXRSZXNvdXJjZUJ1bmRsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVzb3VyY2VTdHJpbmciPmdldFJlc291cmNlU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRSZXNvdXJjZVN0cmluZzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGtleSk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0gb3IgJ2tleScgaWYgbm90IGZvdW5kLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+a2V5PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0WFBhdGhUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSI+Z2V0WFBhdGhUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBDb250ZXh0VHlwZVJlZ2lzdHJ5IDxzdHJvbmc+Z2V0WFBhdGhUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHhwYXRoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db250ZXh0VHlwZVJlZ2lzdHJ5PC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHhwYXRoPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFhQYXRoVGVtcGxhdGVTdG9yZSI+Z2V0WFBhdGhUZW1wbGF0ZVN0b3JlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFRlbXBsYXRlU3RvcmUgPHN0cm9uZz5nZXRYUGF0aFRlbXBsYXRlU3RvcmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4cGF0aCB0ZW1wbGF0ZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZW1wbGF0ZVN0b3JlPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSBzdG9yZSBmb3IgdGhlIHhwYXRoIHRlbXBsYXRlczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbmZvIj5pbmZvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbmZvPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdGlhbGl6ZUltYWdlUmVnaXN0cnkiPmluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5pbml0aWFsaXplSW1hZ2VSZWdpc3RyeTwvc3Ryb25nPihJbWFnZVJlZ2lzdHJ5IHJlZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2ciPmxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bG9nPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSBleCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT48L3A+PHA+PGNvZGU+ZXg8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xvZyI+bG9nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5sb2c8L3N0cm9uZz4oamF2YS5sYW5nLlRocm93YWJsZSBleCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXg8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRBY3RpdmF0ZWQiPnBhcnRBY3RpdmF0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnBhcnRBY3RpdmF0ZWQ8L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFydEJyb3VnaHRUb1RvcCI+cGFydEJyb3VnaHRUb1RvcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydEJyb3VnaHRUb1RvcDwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0Q2xvc2VkIj5wYXJ0Q2xvc2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0Q2xvc2VkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnREZWFjdGl2YXRlZCI+cGFydERlYWN0aXZhdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0RGVhY3RpdmF0ZWQ8L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFydEhpZGRlbiI+cGFydEhpZGRlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydEhpZGRlbjwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0SW5wdXRDaGFuZ2VkIj5wYXJ0SW5wdXRDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0SW5wdXRDaGFuZ2VkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRPcGVuZWQiPnBhcnRPcGVuZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnBhcnRPcGVuZWQ8L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFydFZpc2libGUiPnBhcnRWaXNpYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0VmlzaWJsZTwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFydCI+c3RhcnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0YXJ0PC9zdHJvbmc+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0b3AiPnN0b3A8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0b3A8L3N0cm9uZz4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+VGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Rocm93Q29yZUV4Y2VwdGlvbiI+dGhyb3dDb3JlRXhjZXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz50aHJvd0NvcmVFeGNlcHRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlIHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9wPjxwPjxjb2RlPnQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5Db3JlRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91cGRhdGVYUGF0aE5hdmlnYXRvclZpZXciPnVwZGF0ZVhQYXRoTmF2aWdhdG9yVmlldzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+dXBkYXRlWFBhdGhOYXZpZ2F0b3JWaWV3PC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3dhcm4iPndhcm48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPndhcm48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tZXNzYWdlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01Ob2RlTGFiZWxQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NTm9kZUxhYmVsUHJvdmlkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1OTZkMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01Ob2RlTGFiZWxQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRE9NTm9kZUxhYmVsUHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5ET01Ob2RlTGFiZWxQcm92aWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBMYWJlbFByb3ZpZGVyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RPTU5vZGVMYWJlbFByb3ZpZGVyIj5ET01Ob2RlTGFiZWxQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9ET01Ob2RlTGFiZWxQcm92aWRlciI+RE9NTm9kZUxhYmVsUHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5ET01Ob2RlTGFiZWxQcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbWFnZSI+Z2V0SW1hZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSW1hZ2UgPHN0cm9uZz5nZXRJbWFnZTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VGV4dDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01UcmVlQ29udGVudFByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01UcmVlQ29udGVudFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYTk5YjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVHJlZUNvbnRlbnRQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRE9NVHJlZUNvbnRlbnRQcm92aWRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRPTVRyZWVDb250ZW50UHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBvcmcudzNjLmRvbS5Ob2RlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfbm9kZSI+bm9kZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OT1RISU5HIj5OT1RISU5HPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9ET01UcmVlQ29udGVudFByb3ZpZGVyIj5ET01UcmVlQ29udGVudFByb3ZpZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+KGphdmEubGFuZy5PYmplY3QgcGFyZW50RWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT4oamF2YS5sYW5nLk9iamVjdCBpbnB1dEVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9oYXNDaGlsZHJlbiI+aGFzQ2hpbGRyZW48L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnB1dENoYW5nZWQiPmlucHV0Q2hhbmdlZDwvYT4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX25vZGUiPm5vZGU8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgb3JnLnczYy5kb20uTm9kZSA8c3Ryb25nPm5vZGU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTk9USElORyI+Tk9USElORzwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5PYmplY3RbXSA8c3Ryb25nPk5PVEhJTkc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RPTVRyZWVDb250ZW50UHJvdmlkZXIiPkRPTVRyZWVDb250ZW50UHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5ET01UcmVlQ29udGVudFByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmRpc3Bvc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENoaWxkcmVuIj5nZXRDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRDaGlsZHJlbjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IHBhcmVudEVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudEVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRFbGVtZW50czwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGlucHV0RWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5wdXRFbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Z2V0UGFyZW50PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc0NoaWxkcmVuIj5oYXNDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aGFzQ2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5wdXRDaGFuZ2VkIj5pbnB1dENoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmlucHV0Q2hhbmdlZDwvc3Ryb25nPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG9sZElucHV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG5ld0lucHV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm9sZElucHV0PC9jb2RlPjwvcD48cD48Y29kZT5uZXdJbnB1dDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVmlld2VyRmlsdGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01WaWV3ZXJGaWx0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcyNGFjZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01WaWV3ZXJGaWx0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERPTVZpZXdlckZpbHRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRPTVZpZXdlckZpbHRlcjwvc3Ryb25nPgotZXh0ZW5kcyBWaWV3ZXJGaWx0ZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRE9NVmlld2VyRmlsdGVyIj5ET01WaWV3ZXJGaWx0ZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdCI+c2VsZWN0PC9hPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IHBhcmVudEVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9ET01WaWV3ZXJGaWx0ZXIiPkRPTVZpZXdlckZpbHRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRPTVZpZXdlckZpbHRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3QiPnNlbGVjdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+c2VsZWN0PC9zdHJvbmc+KFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgcGFyZW50RWxlbWVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnBhcmVudEVsZW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MTkyOWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZzwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2c8L3N0cm9uZz4KLWV4dGVuZHMgRGlhbG9nPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIExhYmVsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZXJyb3JNZXNzYWdlTGFiZWwiPmVycm9yTWVzc2FnZUxhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25hbWVzcGFjZUluZm9MaXN0Ij5uYW1lc3BhY2VJbmZvTGlzdDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVBhdGg8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9yZXNvdXJjZUxvY2F0aW9uIj5yZXNvdXJjZUxvY2F0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nIj5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nPC9hPjwvc3Ryb25nPihTaGVsbCBwYXJlbnRTaGVsbAotICAgICAgICAgLAotICAgICAgSVBhdGggcmVzb3VyY2VMb2NhdGlvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIiPmNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXI8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2w8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlRGlhbG9nQXJlYSI+Y3JlYXRlRGlhbG9nQXJlYTwvYT4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREaWFsb2dBcmVhIj5nZXREaWFsb2dBcmVhPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lc3BhY2VJbmZvTGlzdCI+Z2V0TmFtZXNwYWNlSW5mb0xpc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXROYW1lc3BhY2VJbmZvTGlzdCI+c2V0TmFtZXNwYWNlSW5mb0xpc3Q8L2E+KGphdmEudXRpbC5MaXN0IGxpc3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXBkYXRlRXJyb3JNZXNzYWdlIj51cGRhdGVFcnJvck1lc3NhZ2U8L2E+KGphdmEudXRpbC5MaXN0IG5hbWVzcGFjZUluZm9MaXN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZU9jY3VyZWQiPnVwZGF0ZU9jY3VyZWQ8L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IGFyZyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2Vycm9yTWVzc2FnZUxhYmVsIj5lcnJvck1lc3NhZ2VMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBMYWJlbCA8c3Ryb25nPmVycm9yTWVzc2FnZUxhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX25hbWVzcGFjZUluZm9MaXN0Ij5uYW1lc3BhY2VJbmZvTGlzdDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPm5hbWVzcGFjZUluZm9MaXN0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3Jlc291cmNlTG9jYXRpb24iPnJlc291cmNlTG9jYXRpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVBhdGggPHN0cm9uZz5yZXNvdXJjZUxvY2F0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nIj5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZzwvc3Ryb25nPihTaGVsbCBwYXJlbnRTaGVsbAotICAgICAgICAgLAotICAgICAgSVBhdGggcmVzb3VyY2VMb2NhdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIiPmNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXI8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVEaWFsb2dBcmVhIj5jcmVhdGVEaWFsb2dBcmVhPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2wgPHN0cm9uZz5jcmVhdGVEaWFsb2dBcmVhPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERpYWxvZ0FyZWEiPmdldERpYWxvZ0FyZWE8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbCA8c3Ryb25nPmdldERpYWxvZ0FyZWE8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udHJvbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZXNwYWNlSW5mb0xpc3QiPmdldE5hbWVzcGFjZUluZm9MaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0TmFtZXNwYWNlSW5mb0xpc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0TmFtZXNwYWNlSW5mb0xpc3QiPnNldE5hbWVzcGFjZUluZm9MaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXROYW1lc3BhY2VJbmZvTGlzdDwvc3Ryb25nPihqYXZhLnV0aWwuTGlzdCBsaXN0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5saXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91cGRhdGVFcnJvck1lc3NhZ2UiPnVwZGF0ZUVycm9yTWVzc2FnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dXBkYXRlRXJyb3JNZXNzYWdlPC9zdHJvbmc+KGphdmEudXRpbC5MaXN0IG5hbWVzcGFjZUluZm9MaXN0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lc3BhY2VJbmZvTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlT2NjdXJlZCI+dXBkYXRlT2NjdXJlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dXBkYXRlT2NjdXJlZDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBhcmcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PHA+PGNvZGU+YXJnPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMGZjYzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlcjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgTGFiZWxQcm92aWRlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGNoYXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ESVJUWV9JTkRJQ0FUT1IiPkRJUlRZX0lORElDQVRPUjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBIHN0cmluZyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYW4gZWRpdG9yIGlzIGRpcnR5PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXIiPlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbWFnZSI+Z2V0SW1hZ2U8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZXh0Ij5nZXRUZXh0PC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9ESVJUWV9JTkRJQ0FUT1IiPkRJUlRZX0lORElDQVRPUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGNoYXIgPHN0cm9uZz5ESVJUWV9JTkRJQ0FUT1I8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPkEgc3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhbiBlZGl0b3IgaXMgZGlydHk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyIj5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbWFnZSI+Z2V0SW1hZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSW1hZ2UgPHN0cm9uZz5nZXRJbWFnZTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VGV4dDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYmVjM2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBBY3Rpb248L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcnVuIj5ydW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uIj5YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWNiMDhlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb248L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb248L3N0cm9uZz4KLWV4dGVuZHMgQWN0aW9uPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ydW4iPnJ1bjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3J1biI+cnVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5ydW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM1NzM1OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIiPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT4oamF2YS5sYW5nLk9iamVjdCBpbnB1dEVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5wdXRDaGFuZ2VkIj5pbnB1dENoYW5nZWQ8L2E+KFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3Qgb2xkSW5wdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgbmV3SW5wdXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlciI+WFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RWxlbWVudHMiPmdldEVsZW1lbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXSA8c3Ryb25nPmdldEVsZW1lbnRzPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgaW5wdXRFbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbnB1dEVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbnB1dENoYW5nZWQ8L3N0cm9uZz4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5vbGRJbnB1dDwvY29kZT48L3A+PHA+PGNvZGU+bmV3SW5wdXQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGE0ZDhmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb248L3N0cm9uZz4KLWV4dGVuZHMgQWN0aW9uPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uIj5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcnVuIj5ydW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb248L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM1MTAzMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcjwvc3Ryb25nPgotZXh0ZW5kcyBWaWV3UGFydDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJTWVtZW50bzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX21lbWVudG8iPm1lbWVudG88L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01FTUVOVE9fUVVFUllDT05URVhUX0RPQ1VNRU5UIj5NRU1FTlRPX1FVRVJZQ09OVEVYVF9ET0NVTUVOVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTUVNRU5UT19RVUVSWUNPTlRFWFRfS0VZIj5NRU1FTlRPX1FVRVJZQ09OVEVYVF9LRVk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01FTUVOVE9fUVVFUllDT05URVhUX1NFTEVDVElPTiI+TUVNRU5UT19RVUVSWUNPTlRFWFRfU0VMRUNUSU9OPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NRU1FTlRPX1hQQVRITkFWSUdBVE9SX1NFQ1RJT04iPk1FTUVOVE9fWFBBVEhOQVZJR0FUT1JfU0VDVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTUVNRU5UT19YUEFUSFFVRVJZX0tFWSI+TUVNRU5UT19YUEFUSFFVRVJZX0tFWTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLldlYWtIYXNoTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfbmFtZXNwYWNlSW5mbyI+bmFtZXNwYWNlSW5mbzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IiPlhQYXRoTmF2aWdhdG9yPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyIj5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uIj5YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlciI+WFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVQYXJ0Q29udHJvbCI+Y3JlYXRlUGFydENvbnRyb2w8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZQotIGl0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5FbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFF1ZXJ5Q29udGV4dCI+Z2V0UXVlcnlDb250ZXh0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNlbGVjdGVkRG9jdW1lbnQiPmdldFNlbGVjdGVkRG9jdW1lbnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJVmlld1NpdGUgc2l0ZQotICAgICAgICAgLAotICAgICAgSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZXN0b3JlU3RhdGUiPnJlc3RvcmVTdGF0ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NhdmVTdGF0ZSI+c2F2ZVN0YXRlPC9hPihJTWVtZW50byBtZW1lbnRvKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEZvY3VzIj5zZXRGb2N1czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhc3NpbmcgdGhlIGZvY3VzIHJlcXVlc3QgdG8gdGhlIHZpZXdlcidzIGNvbnRyb2wuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXBkYXRlIj51cGRhdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX21lbWVudG8iPm1lbWVudG88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSU1lbWVudG8gPHN0cm9uZz5tZW1lbnRvPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01FTUVOVE9fUVVFUllDT05URVhUX0RPQ1VNRU5UIj5NRU1FTlRPX1FVRVJZQ09OVEVYVF9ET0NVTUVOVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NRU1FTlRPX1FVRVJZQ09OVEVYVF9ET0NVTUVOVDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NRU1FTlRPX1FVRVJZQ09OVEVYVF9LRVkiPk1FTUVOVE9fUVVFUllDT05URVhUX0tFWTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NRU1FTlRPX1FVRVJZQ09OVEVYVF9LRVk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTUVNRU5UT19RVUVSWUNPTlRFWFRfU0VMRUNUSU9OIj5NRU1FTlRPX1FVRVJZQ09OVEVYVF9TRUxFQ1RJT048L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TUVNRU5UT19RVUVSWUNPTlRFWFRfU0VMRUNUSU9OPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01FTUVOVE9fWFBBVEhOQVZJR0FUT1JfU0VDVElPTiI+TUVNRU5UT19YUEFUSE5BVklHQVRPUl9TRUNUSU9OPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1FTUVOVE9fWFBBVEhOQVZJR0FUT1JfU0VDVElPTjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NRU1FTlRPX1hQQVRIUVVFUllfS0VZIj5NRU1FTlRPX1hQQVRIUVVFUllfS0VZPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1FTUVOVE9fWFBBVEhRVUVSWV9LRVk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfbmFtZXNwYWNlSW5mbyI+bmFtZXNwYWNlSW5mbzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuV2Vha0hhc2hNYXAgPHN0cm9uZz5uYW1lc3BhY2VJbmZvPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aE5hdmlnYXRvciI+WFBhdGhOYXZpZ2F0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVQYXJ0Q29udHJvbCI+Y3JlYXRlUGFydENvbnRyb2w8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNyZWF0ZVBhcnRDb250cm9sPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD5UaGlzIGlzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGFsbG93IHVzIHRvIGNyZWF0ZSB0aGUgdmlld2VyIGFuZCBpbml0aWFsaXplCi0gaXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFF1ZXJ5Q29udGV4dCI+Z2V0UXVlcnlDb250ZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy53M2MuZG9tLkVsZW1lbnQgPHN0cm9uZz5nZXRRdWVyeUNvbnRleHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5FbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTZWxlY3RlZERvY3VtZW50Ij5nZXRTZWxlY3RlZERvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy53M2MuZG9tLkRvY3VtZW50IDxzdHJvbmc+Z2V0U2VsZWN0ZWREb2N1bWVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0Ij5pbml0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbml0PC9zdHJvbmc+KElWaWV3U2l0ZSBzaXRlCi0gICAgICAgICAsCi0gICAgICBJTWVtZW50byBtZW1lbnRvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zaXRlPC9jb2RlPjwvcD48cD48Y29kZT5tZW1lbnRvPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+UGFydEluaXRFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc3RvcmVTdGF0ZSI+cmVzdG9yZVN0YXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5yZXN0b3JlU3RhdGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NhdmVTdGF0ZSI+c2F2ZVN0YXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zYXZlU3RhdGU8L3N0cm9uZz4oSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVtZW50bzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0Rm9jdXMiPnNldEZvY3VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRGb2N1czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5QYXNzaW5nIHRoZSBmb2N1cyByZXF1ZXN0IHRvIHRoZSB2aWV3ZXIncyBjb250cm9sLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91cGRhdGUiPnVwZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dXBkYXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLk1lc3NhZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLk1lc3NhZ2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MTY1YjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5NZXNzYWdlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE1lc3NhZ2VzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzwvcHJlPjxwPjwvcD48cD48L3A+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+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNmFhODMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWYWxpZGF0aW9uUHJlZmVyZW5jZXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5WYWxpZGF0aW9uUHJlZmVyZW5jZXM8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlByZWZlcmVuY2UgY29uc3RhbnRzIHNwZWNpZmljIHRvIHRoZSBYU0wgdmFsaWRhdG9yLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NBTExfVEVNUExBVEVTIj5DQUxMX1RFTVBMQVRFUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYW4gdW5yZXNvbHZlZCBjYWxsZWQgdGVtcGxhdGUgaXMgcmVwb3J0ZWQuIAotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NJUkNVTEFSX1JFRiI+Q0lSQ1VMQVJfUkVGPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhbiBpbmNsdWRlL2ltcG9ydCBjaXJjdWxhciByZWZlcmVuY2VzIGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RVUExJQ0FURV9QQVJBTUVURVIiPkRVUExJQ0FURV9QQVJBTUVURVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGxldmVsIGF0IHdoaWNoIGEgZHVwbGljYXRlIHBhcmFtZXRlciBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FTVBUWV9QQVJBTSI+RU1QVFlfUEFSQU08L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGxldmVsIGF0IHdoaWNoIGEgcGFyYW1ldGVyIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgYW5kIGRvZXMgbm90IHNwZWNpZnkgYSB2YWx1ZSBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NQVhfRVJST1JTIj5NQVhfRVJST1JTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgYWxsb3dlZCBwZXIgWFNMIGZpbGUuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb2YgdHlwZSAmbHQ7Y29kZSZndDtJbnRlZ2VyJmx0Oy9jb2RlJmd0Oy4KLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01JU1NJTkdfSU5DTFVERSI+TUlTU0lOR19JTkNMVURFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhbiB1bnJlc29sdmVkIGltcG9ydCBvciBpbmNsdWRlZCBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NSVNTSU5HX1BBUkFNIj5NSVNTSU5HX1BBUkFNPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIG1pc3NpbmcgcGFyYW1ldGVyIGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05BTUVfQVRUUklCVVRFX0VNUFRZIj5OQU1FX0FUVFJJQlVURV9FTVBUWTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYSBwYXJhbWV0ZXIgd2l0aCBhbiBlbXB0eSBuYW1lIGF0dHJpYnV0ZSBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OQU1FX0FUVFJJQlVURV9NSVNTSU5HIj5OQU1FX0FUVFJJQlVURV9NSVNTSU5HPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB3aXRob3V0IGEgbmFtZSBhdHRyaWJ1dGUgaXMgcmVwb3J0ZWQuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb25lIG9mICZsdDtjb2RlJmd0O0lNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPJmx0Oy9jb2RlJmd0OwotICZsdDsvcCZndDs8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVEVNUExBVEVfQ09ORkxJQ1QiPlRFTVBMQVRFX0NPTkZMSUNUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIHRlbXBsYXRlIGNvbmZsaWN0IGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIUyI+WFBBVEhTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhbiBpbnZhbGlkIFhQYXRoIGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ZhbGlkYXRpb25QcmVmZXJlbmNlcyI+VmFsaWRhdGlvblByZWZlcmVuY2VzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0NBTExfVEVNUExBVEVTIj5DQUxMX1RFTVBMQVRFUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5DQUxMX1RFTVBMQVRFUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGFuIHVucmVzb2x2ZWQgY2FsbGVkIHRlbXBsYXRlIGlzIHJlcG9ydGVkLiAKLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQ0lSQ1VMQVJfUkVGIj5DSVJDVUxBUl9SRUY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Q0lSQ1VMQVJfUkVGPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYW4gaW5jbHVkZS9pbXBvcnQgY2lyY3VsYXIgcmVmZXJlbmNlcyBpcyByZXBvcnRlZC4KLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRFVQTElDQVRFX1BBUkFNRVRFUiI+RFVQTElDQVRFX1BBUkFNRVRFUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5EVVBMSUNBVEVfUEFSQU1FVEVSPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYSBkdXBsaWNhdGUgcGFyYW1ldGVyIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9FTVBUWV9QQVJBTSI+RU1QVFlfUEFSQU08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+RU1QVFlfUEFSQU08L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB0aGF0IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGFuZCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01BWF9FUlJPUlMiPk1BWF9FUlJPUlM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TUFYX0VSUk9SUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyBhbGxvd2VkIHBlciBYU0wgZmlsZS4KLSA8cD4KLSBWYWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkludGVnZXI8L2NvZGU+LgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01JU1NJTkdfSU5DTFVERSI+TUlTU0lOR19JTkNMVURFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1JU1NJTkdfSU5DTFVERTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGFuIHVucmVzb2x2ZWQgaW1wb3J0IG9yIGluY2x1ZGVkIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NSVNTSU5HX1BBUkFNIj5NSVNTSU5HX1BBUkFNPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1JU1NJTkdfUEFSQU08L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIG1pc3NpbmcgcGFyYW1ldGVyIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OQU1FX0FUVFJJQlVURV9FTVBUWSI+TkFNRV9BVFRSSUJVVEVfRU1QVFk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TkFNRV9BVFRSSUJVVEVfRU1QVFk8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB3aXRoIGFuIGVtcHR5IG5hbWUgYXR0cmlidXRlIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OQU1FX0FUVFJJQlVURV9NSVNTSU5HIj5OQU1FX0FUVFJJQlVURV9NSVNTSU5HPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5BTUVfQVRUUklCVVRFX01JU1NJTkc8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB3aXRob3V0IGEgbmFtZSBhdHRyaWJ1dGUgaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RFTVBMQVRFX0NPTkZMSUNUIj5URU1QTEFURV9DT05GTElDVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5URU1QTEFURV9DT05GTElDVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGEgdGVtcGxhdGUgY29uZmxpY3QgaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQQVRIUyI+WFBBVEhTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGFuIGludmFsaWQgWFBhdGggaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9WYWxpZGF0aW9uUHJlZmVyZW5jZXMiPlZhbGlkYXRpb25QcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlZhbGlkYXRpb25QcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgwYzZlNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xDb3JlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMQ29yZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+VGhlIGludGVyZmFjZSB0byBhbGwgYXNwZWN0cyBvZiB0aGUgWFNMIGNvcmUgZnVuY3Rpb25hbGl0eS4KLSA8cD4KLSBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyBhbmQgbWFpbnRhaW5pbmcgdGhlIGNhY2hlIG9mIGJ1aWx0IFhTTAotIG1vZGVscy4KLSA8L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xfQ09OVEVOVF9UWVBFIj5YU0xfQ09OVEVOVF9UWVBFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBYU0wgY29udGVudCB0eXBlICg9IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTF9OQU1FU1BBQ0VfVVJJIj5YU0xfTkFNRVNQQUNFX1VSSTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgWFNMIG5hbWVzcGFjZSBVUkkgKD0gaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtKTwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9idWlsZFN0eWxlc2hlZXQiPmJ1aWxkU3R5bGVzaGVldDwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wbGV0ZWx5IHJlYnVpbGQgdGhlIHNvdXJjZSBmaWxlIGZyb20gaXRzIERPTTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NsZWFuIj5jbGVhbjwvYT4oSVByb2plY3QgcHJvamVjdAotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENsZWFuIGFsbCBvZiB0aGUgc3R5bGVzaGVldHMgZnJvbSB0aGUgZ2l2ZW4gcHJvamVjdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLkF0dHI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q3VycmVudEF0dHJOb2RlIj5nZXRDdXJyZW50QXR0ck5vZGU8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGFuIEF0dHIgbm9kZSBmb3IgdGhlIGN1cnJlbnQgTm9kZSBpZiBvbmUgZXhpdHMgYXQgdGhlIHNwZWNpZmllZAotIG9mZnNldC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q3VycmVudE5vZGUiPmdldEN1cnJlbnROb2RlPC9hPihJRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBOb2RlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBzaW5nbGV0b24gPGNvZGU+WFNMQ29yZTwvY29kZT4gaW5zdGFuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGNhY2hlZCBzdHlsZXNoZWV0LCBvciBidWlsZCBpdCBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGJ1aWx0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1hNTEZpbGUiPmlzWE1MRmlsZTwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBYTUwgZmlsZSBieSBpbnNwZWN0aW5nIGl0cyBjb250ZW50Ci0gdHlwZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzWFNMRmlsZSI+aXNYU0xGaWxlPC9hPihJRmlsZSBmaWxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIERldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGFuIFhTTCBmaWxlIGJ5IGluc3BlY3RpbmcgaXRzIGNvbnRlbnQKLSB0eXBlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNYU0xOYW1lc3BhY2UiPmlzWFNMTmFtZXNwYWNlPC9hPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGFrZXMgYSBnaXZlbiA8Y29kZT5Ob2RlPC9jb2RlPiBhbmQgcmV0dXJucyB3aGV0aGVyIGl0IGlzIHBhcnQgb2YgdGhlIHRoZQotIFhTTFQgTmFtZXNwYWNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgSUZpbGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZUZpbGUiPnJlc29sdmVGaWxlPC9hPihJRmlsZSBjdXJyZW50RmlsZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgTG9jYXRlcyBhIGZpbGUgZm9yIHRoZSBnaXZlbiBjdXJyZW50IGZpbGUgYW5kIFVSSS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTF9DT05URU5UX1RZUEUiPlhTTF9DT05URU5UX1RZUEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMX0NPTlRFTlRfVFlQRTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIFhTTCBjb250ZW50IHR5cGUgKD0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSk8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTF9OQU1FU1BBQ0VfVVJJIj5YU0xfTkFNRVNQQUNFX1VSSTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xfTkFNRVNQQUNFX1VSSTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIFhTTCBuYW1lc3BhY2UgVVJJICg9IGh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2J1aWxkU3R5bGVzaGVldCI+YnVpbGRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwgPHN0cm9uZz5idWlsZFN0eWxlc2hlZXQ8L3N0cm9uZz4oSUZpbGUgZmlsZSk8L2NvZGU+PC9wPjxwPkNvbXBsZXRlbHkgcmVidWlsZCB0aGUgc291cmNlIGZpbGUgZnJvbSBpdHMgRE9NPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDwvY29kZT4gLSB0aGUgc3R5bGVzaGVldCBtb2RlbCwgb3IgbnVsbCBpZiBpdCBjb3VsZCBub3QgYmUgY3JlYXRlZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2xlYW4iPmNsZWFuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jbGVhbjwvc3Ryb25nPihJUHJvamVjdCBwcm9qZWN0Ci0gICAgICAgICAsCi0gICAgICBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjwvcD48cD5DbGVhbiBhbGwgb2YgdGhlIHN0eWxlc2hlZXRzIGZyb20gdGhlIGdpdmVuIHByb2plY3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcm9qZWN0PC9jb2RlPiAtIHRoZSBwcm9qZWN0IHRvIGJlIGNsZWFuZWQ8L3A+PHA+PGNvZGU+bW9uaXRvcjwvY29kZT4gLSBhIHByb2dyZXNzIG1vbml0b3IgdG8gdHJhY2sgdGhlIGNsZWFuIHByb2dyZXNzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEN1cnJlbnRBdHRyTm9kZSI+Z2V0Q3VycmVudEF0dHJOb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkF0dHIgPHN0cm9uZz5nZXRDdXJyZW50QXR0ck5vZGU8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+UmV0dXJucyBhbiBBdHRyIG5vZGUgZm9yIHRoZSBjdXJyZW50IE5vZGUgaWYgb25lIGV4aXRzIGF0IHRoZSBzcGVjaWZpZWQKLSBvZmZzZXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5BdHRyPC9jb2RlPiAtIEEgdzNjLmRvbS5BdHRyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEN1cnJlbnROb2RlIj5nZXRDdXJyZW50Tm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlIDxzdHJvbmc+Z2V0Q3VycmVudE5vZGU8L3N0cm9uZz4oSURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY3VycmVudCBOb2RlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jdW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGU8L2NvZGU+IC0gYW4gdzNjLmRvbS5Ob2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZSA8c3Ryb25nPmdldEluc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgc2luZ2xldG9uIDxjb2RlPlhTTENvcmU8L2NvZGU+IGluc3RhbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU8L2NvZGU+IC0gdGhlIDxjb2RlPlhTTENvcmU8L2NvZGU+IGluc3RhbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbCA8c3Ryb25nPmdldFN0eWxlc2hlZXQ8L3N0cm9uZz4oSUZpbGUgZmlsZSk8L2NvZGU+PC9wPjxwPkdldCB0aGUgY2FjaGVkIHN0eWxlc2hlZXQsIG9yIGJ1aWxkIGl0IGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gYnVpbHQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbDwvY29kZT4gLSBzb3VyY2UgZmlsZSwgb3IgbnVsbCBpZiBjb3VsZCBub3QgYmUgYnVpbHQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNYTUxGaWxlIj5pc1hNTEZpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzWE1MRmlsZTwvc3Ryb25nPihJRmlsZSBmaWxlKTwvY29kZT48L3A+PHA+RGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYW4gWE1MIGZpbGUgYnkgaW5zcGVjdGluZyBpdHMgY29udGVudAotIHR5cGVzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmlsZTwvY29kZT4gLSB0aGUgZmlsZSB0byBpbnNwZWN0PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIHRydWUgaWYgdGhpcyBmaWxlIGlzIGFuIFhNTCBmaWxlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzWFNMRmlsZSI+aXNYU0xGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1hTTEZpbGU8L3N0cm9uZz4oSUZpbGUgZmlsZSk8L2NvZGU+PC9wPjxwPkRldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGFuIFhTTCBmaWxlIGJ5IGluc3BlY3RpbmcgaXRzIGNvbnRlbnQKLSB0eXBlcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+IC0gdGhlIGZpbGUgdG8gaW5zcGVjdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIHRoaXMgZmlsZSBpcyBhbiBYU0wgZmlsZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc1hTTE5hbWVzcGFjZSI+aXNYU0xOYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzWFNMTmFtZXNwYWNlPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZSk8L2NvZGU+PC9wPjxwPlRha2VzIGEgZ2l2ZW4gPGNvZGU+Tm9kZTwvY29kZT4gYW5kIHJldHVybnMgd2hldGhlciBpdCBpcyBwYXJ0IG9mIHRoZSB0aGUKLSBYU0xUIE5hbWVzcGFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gVGhlIE5vZGUgdG8gYmUgY2hlY2tlZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiBwYXJ0IG9mIHRoZSBYU0xUIG5hbWVzcGFjZSwgZmFsc2Ugb3RoZXJ3aXNlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZXNvbHZlRmlsZSI+cmVzb2x2ZUZpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUZpbGUgPHN0cm9uZz5yZXNvbHZlRmlsZTwvc3Ryb25nPihJRmlsZSBjdXJyZW50RmlsZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjwvcD48cD5Mb2NhdGVzIGEgZmlsZSBmb3IgdGhlIGdpdmVuIGN1cnJlbnQgZmlsZSBhbmQgVVJJLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y3VycmVudEZpbGU8L2NvZGU+IC0gdGhlIGZpbGUgdG8gcmVzb2x2ZSByZWxhdGl2ZSB0bzwvcD48cD48Y29kZT51cmk8L2NvZGU+IC0gdGhlIHJlbGF0aXZlIFVSSTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUZpbGU8L2NvZGU+IC0gdGhlIGZpbGUgYXQgdGhlIFVSSSByZWxhdGl2ZSB0byB0aGlzIDxjb2RlPmN1cnJlbnRGaWxlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLk1lc3NhZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLk1lc3NhZ2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNDc4YmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5NZXNzYWdlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE1lc3NhZ2VzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4KLWV4dGVuZHMgTkxTPC9wcmU+PHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzAiPlhJbmNsdWRlVGFza18wPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza18xIj5YSW5jbHVkZVRhc2tfMTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfMiI+WEluY2x1ZGVUYXNrXzI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzMiPlhJbmNsdWRlVGFza18zPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza180Ij5YSW5jbHVkZVRhc2tfNDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfNSI+WEluY2x1ZGVUYXNrXzU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzYiPlhJbmNsdWRlVGFza182PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hJbmNsdWRlVGFza183Ij5YSW5jbHVkZVRhc2tfNzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YSW5jbHVkZVRhc2tfOCI+WEluY2x1ZGVUYXNrXzg8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWEluY2x1ZGVUYXNrXzkiPlhJbmNsdWRlVGFza185PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTENvcmVQbHVnaW5fYmFkSW5pdGlhbGl6YXRpb25EYXRhIj5YU0xDb3JlUGx1Z2luX2JhZEluaXRpYWxpemF0aW9uRGF0YTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xDb3JlUGx1Z2luX2NvcmVFcnJvciI+WFNMQ29yZVBsdWdpbl9jb3JlRXJyb3I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMQ29yZVBsdWdpbl9wYXJzZXJDb25maWd1cmF0aW9uIj5YU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzEiPlhTTFZhbGlkYXRvcl8xPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTAiPlhTTFZhbGlkYXRvcl8xMDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTdHlsZXNoZWV0IGltcG9ydGluZyBpdHNlbGY8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzExIj5YU0xWYWxpZGF0b3JfMTE8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGVtcGxhdGUgY29uZmxpY3QgKGludGVybmFsKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTIiPlhTTFZhbGlkYXRvcl8xMjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUZW1wbGF0ZSBjb25mbGljdCAoaW5jbHVkZWQpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8xMyI+WFNMVmFsaWRhdG9yXzEzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRlbXBsYXRlIGNvbmZsaWN0IChleHRlcm5hbCk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzE0Ij5YU0xWYWxpZGF0b3JfMTQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyYW1ldGVyIG1pc3NpbmcgbmFtZSBhdHRyaWJ1dGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzE1Ij5YU0xWYWxpZGF0b3JfMTU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyYW1ldGVyIHdpdGggZW1wdHkgbmFtZSBhdHRyaWJ1dGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzE2Ij5YU0xWYWxpZGF0b3JfMTY8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRHVwbGljYXRlIHBhcmFtZXRlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMTgiPlhTTFZhbGlkYXRvcl8xODwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVbnJlc29sdmVkIG5hbWVkIHRlbXBsYXRlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl8yIj5YU0xWYWxpZGF0b3JfMjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaXJjdWxhciByZWZlcmVuY2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzIwIj5YU0xWYWxpZGF0b3JfMjA8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGFyYW1ldGVyIHdpdGhvdXQgZGVmYXVsdCB2YWx1ZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0b3JfMjIiPlhTTFZhbGlkYXRvcl8yMjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3Q8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzIzIj5YU0xWYWxpZGF0b3JfMjM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgaHJlZiBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzMiPlhTTFZhbGlkYXRvcl8zPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE1pc3NpbmcgcGFyYW1ldGVyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl80Ij5YU0xWYWxpZGF0b3JfNDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVbnJlc29sdmVkIGluY2x1ZGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdG9yXzYiPlhTTFZhbGlkYXRvcl82PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFN0eWxlc2hlZXQgaW5jbHVkZXMgaXRzZWxmPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRvcl84Ij5YU0xWYWxpZGF0b3JfODwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVbnJlc29sdmVkIGltcG9ydDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9NZXNzYWdlcyI+TWVzc2FnZXM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWxvYWRNZXNzYWdlcyI+cmVsb2FkTWVzc2FnZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzAiPlhJbmNsdWRlVGFza18wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza18wPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzEiPlhJbmNsdWRlVGFza18xPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza18xPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzIiPlhJbmNsdWRlVGFza18yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza18yPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzMiPlhJbmNsdWRlVGFza18zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza18zPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzQiPlhJbmNsdWRlVGFza180PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza180PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzUiPlhJbmNsdWRlVGFza181PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza181PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzYiPlhJbmNsdWRlVGFza182PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza182PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzciPlhJbmNsdWRlVGFza183PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza183PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzgiPlhJbmNsdWRlVGFza184PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza184PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWEluY2x1ZGVUYXNrXzkiPlhJbmNsdWRlVGFza185PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhJbmNsdWRlVGFza185PC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMQ29yZVBsdWdpbl9iYWRJbml0aWFsaXphdGlvbkRhdGEiPlhTTENvcmVQbHVnaW5fYmFkSW5pdGlhbGl6YXRpb25EYXRhPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTENvcmVQbHVnaW5fYmFkSW5pdGlhbGl6YXRpb25EYXRhPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMQ29yZVBsdWdpbl9jb3JlRXJyb3IiPlhTTENvcmVQbHVnaW5fY29yZUVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTENvcmVQbHVnaW5fY29yZUVycm9yPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMQ29yZVBsdWdpbl9wYXJzZXJDb25maWd1cmF0aW9uIj5YU0xDb3JlUGx1Z2luX3BhcnNlckNvbmZpZ3VyYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMQ29yZVBsdWdpbl9wYXJzZXJDb25maWd1cmF0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzEiPlhTTFZhbGlkYXRvcl8xPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xMCI+WFNMVmFsaWRhdG9yXzEwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xMDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+U3R5bGVzaGVldCBpbXBvcnRpbmcgaXRzZWxmPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTEiPlhTTFZhbGlkYXRvcl8xMTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTE8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRlbXBsYXRlIGNvbmZsaWN0IChpbnRlcm5hbCk8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xMiI+WFNMVmFsaWRhdG9yXzEyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xMjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGVtcGxhdGUgY29uZmxpY3QgKGluY2x1ZGVkKTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzEzIj5YU0xWYWxpZGF0b3JfMTM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzEzPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UZW1wbGF0ZSBjb25mbGljdCAoZXh0ZXJuYWwpPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTQiPlhTTFZhbGlkYXRvcl8xNDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhcmFtZXRlciBtaXNzaW5nIG5hbWUgYXR0cmlidXRlPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTUiPlhTTFZhbGlkYXRvcl8xNTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhcmFtZXRlciB3aXRoIGVtcHR5IG5hbWUgYXR0cmlidXRlPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfMTYiPlhTTFZhbGlkYXRvcl8xNjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMTY8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPkR1cGxpY2F0ZSBwYXJhbWV0ZXI8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8xOCI+WFNMVmFsaWRhdG9yXzE4PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8xODwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VW5yZXNvbHZlZCBuYW1lZCB0ZW1wbGF0ZTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzIiPlhTTFZhbGlkYXRvcl8yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8yPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5DaXJjdWxhciByZWZlcmVuY2U8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8yMCI+WFNMVmFsaWRhdG9yXzIwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8yMDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGFyYW1ldGVyIHdpdGhvdXQgZGVmYXVsdCB2YWx1ZTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdG9yXzIyIj5YU0xWYWxpZGF0b3JfMjI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzIyPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3Q8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8yMyI+WFNMVmFsaWRhdG9yXzIzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRvcl8yMzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+aHJlZiBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl8zIj5YU0xWYWxpZGF0b3JfMzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfMzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+TWlzc2luZyBwYXJhbWV0ZXI8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRvcl80Ij5YU0xWYWxpZGF0b3JfNDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0b3JfNDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VW5yZXNvbHZlZCBpbmNsdWRlPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfNiI+WFNMVmFsaWRhdG9yXzY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzY8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlN0eWxlc2hlZXQgaW5jbHVkZXMgaXRzZWxmPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0b3JfOCI+WFNMVmFsaWRhdG9yXzg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdG9yXzg8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlVucmVzb2x2ZWQgaW1wb3J0PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTWVzc2FnZXMiPk1lc3NhZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcmVsb2FkTWVzc2FnZXMiPnJlbG9hZE1lc3NhZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWxvYWRNZXNzYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YURvYzwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmRiZjdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTENvcmVQbHVnaW48L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xDb3JlUGx1Z2luPC9zdHJvbmc+Ci1leHRlbmRzIFBsdWdpbjwvcHJlPlRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9QTFVHSU5fSUQiPlBMVUdJTl9JRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9VU0VfUFJPSkVDVF9TRVRUSU5HUyI+VVNFX1BST0pFQ1RfU0VUVElOR1M8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTENvcmVQbHVnaW4iPlhTTENvcmVQbHVnaW48L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZhY3RvcnkiPmdldEZhY3Rvcnk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gdGhlIHJlZ2lzdGVyZWQgU0FYIHBhcnNlciBmYWN0b3J5IG9yIG51bGwgaWYgb25lCi0gZG9lcyBub3QgZXhpc3QuCSAqIEByZXR1cm48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9nIj5sb2c8L2E+KElTdGF0dXMgc3RhdHVzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIExvZ3MgdGhlIHNwZWNpZmllZCBzdGF0dXMgd2l0aCB0aGlzIHBsdWctaW4ncyBsb2cuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBJU3RhdHVzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25ld0Vycm9yU3RhdHVzIj5uZXdFcnJvclN0YXR1czwvYT4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlIGV4Y2VwdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGEgbmV3IGVycm9yIHN0YXR1cyBmb3IgdGhpcyBwbHVnLWluIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGFydCI+c3RhcnQ8L2E+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdG9wIj5zdG9wPC9hPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9QTFVHSU5fSUQiPlBMVUdJTl9JRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5QTFVHSU5fSUQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9VU0VfUFJPSkVDVF9TRVRUSU5HUyI+VVNFX1BST0pFQ1RfU0VUVElOR1M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VVNFX1BST0pFQ1RfU0VUVElOR1M8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTENvcmVQbHVnaW4iPlhTTENvcmVQbHVnaW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xDb3JlUGx1Z2luPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSBjb25zdHJ1Y3RvcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERlZmF1bHQiPmdldERlZmF1bHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW4gPHN0cm9uZz5nZXREZWZhdWx0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLlhTTENvcmVQbHVnaW48L2NvZGU+IC0gdGhlIHNoYXJlZCBpbnN0YW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRGYWN0b3J5Ij5nZXRGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3RvcnkgPHN0cm9uZz5nZXRGYWN0b3J5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybiB0aGUgcmVnaXN0ZXJlZCBTQVggcGFyc2VyIGZhY3Rvcnkgb3IgbnVsbCBpZiBvbmUKLSBkb2VzIG5vdCBleGlzdC4JICogQHJldHVybjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTwvY29kZT4gLSByZXR1cm5zIGEgU0FYUGFyc2VyRmFjdG9yeTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2ciPmxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bG9nPC9zdHJvbmc+KElTdGF0dXMgc3RhdHVzKTwvY29kZT48L3A+PHA+TG9ncyB0aGUgc3BlY2lmaWVkIHN0YXR1cyB3aXRoIHRoaXMgcGx1Zy1pbidzIGxvZy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0YXR1czwvY29kZT4gLSBzdGF0dXMgdG8gbG9nPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25ld0Vycm9yU3RhdHVzIj5uZXdFcnJvclN0YXR1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJU3RhdHVzIDxzdHJvbmc+bmV3RXJyb3JTdGF0dXM8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlIGV4Y2VwdGlvbik8L2NvZGU+PC9wPjxwPlJldHVybnMgYSBuZXcgZXJyb3Igc3RhdHVzIGZvciB0aGlzIHBsdWctaW4gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT4gLSB0aGUgbWVzc2FnZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc3RhdHVzPC9wPjxwPjxjb2RlPmV4Y2VwdGlvbjwvY29kZT4gLSB0aGUgZXhjZXB0aW9uIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBzdGF0dXMgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVN0YXR1czwvY29kZT4gLSBhIG5ldyBlcnJvciBzdGF0dXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydDwvc3Ryb25nPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9wIj5zdG9wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdG9wPC9zdHJvbmc+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5FeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50LlhJbmNsdWRlVGFzay5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQuWEluY2x1ZGVUYXNrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYzNkYjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQuWEluY2x1ZGVUYXNrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQ8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmFudDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYSW5jbHVkZVRhc2s8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YSW5jbHVkZVRhc2s8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmFwYWNoZS50b29scy5hbnQuVGFzazwvcHJlPlRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gWEluY2x1ZGUgQU5UIHRhc2sgZGVmaW5pdGlvbi48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hJbmNsdWRlVGFzayI+WEluY2x1ZGVUYXNrPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leGVjdXRlIj5leGVjdXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xpc3RGaWxlcyI+bGlzdEZpbGVzPC9hPihqYXZhLmlvLkZpbGUgZGlyZWN0b3J5Ci0gICAgICAgICAsCi0gICAgICBib29sZWFuIHJlY3Vyc2UpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFEb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRJbiI+c2V0SW48L2E+KGphdmEubGFuZy5TdHJpbmcgaW5GaWxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhRG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0T3V0Ij5zZXRPdXQ8L2E+KGphdmEubGFuZy5TdHJpbmcgb3V0RmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YURvYzwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hJbmNsdWRlVGFzayI+WEluY2x1ZGVUYXNrPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WEluY2x1ZGVUYXNrPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2V4ZWN1dGUiPmV4ZWN1dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmV4ZWN1dGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xpc3RGaWxlcyI+bGlzdEZpbGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIDxzdHJvbmc+bGlzdEZpbGVzPC9zdHJvbmc+KGphdmEuaW8uRmlsZSBkaXJlY3RvcnkKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gcmVjdXJzZSk8L2NvZGU+PC9wPjxwPlRPRE86IEFkZCBKYXZhRG9jPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kaXJlY3Rvcnk8L2NvZGU+PC9wPjxwPjxjb2RlPnJlY3Vyc2U8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQ29sbGVjdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0SW4iPnNldEluPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRJbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGluRmlsZSk8L2NvZGU+PC9wPjxwPlRPRE86IEFkZCBKYXZhRG9jPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbkZpbGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldE91dCI+c2V0T3V0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRPdXQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBvdXRGaWxlKTwvY29kZT48L3A+PHA+VE9ETzogQWRkIEphdmFEb2M8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm91dEZpbGU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWFNMRG9jdW1lbnRMb2FkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWFNMRG9jdW1lbnRMb2FkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcyNDBkNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhTTERvY3VtZW50TG9hZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZzwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2Rpbmc8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMRG9jdW1lbnRMb2FkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xEb2N1bWVudExvYWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdERvY3VtZW50TG9hZGVyPC9wcmU+VGhpcyBjbGFzcyByZWFkcyBhbiBYU0wgZmlsZSBhbmQgY3JlYXRlcyBhbiBYTUwgU3RydWN0dXJlZCBNb2RlbC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMRG9jdW1lbnRMb2FkZXIiPlhTTERvY3VtZW50TG9hZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSURvY3VtZW50UGFydGl0aW9uZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVmYXVsdERvY3VtZW50UGFydGl0aW9uZXIiPmdldERlZmF1bHREb2N1bWVudFBhcnRpdGlvbmVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElEb2N1bWVudENoYXJzZXREZXRlY3RvcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREb2N1bWVudEVuY29kaW5nRGV0ZWN0b3IiPmdldERvY3VtZW50RW5jb2RpbmdEZXRlY3RvcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBSZWdpb25QYXJzZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyc2VyIj5nZXRQYXJzZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTcGVjRGVmYXVsdEVuY29kaW5nIj5nZXRTcGVjRGVmYXVsdEVuY29kaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElFbmNvZGVkRG9jdW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmV3RW5jb2RlZERvY3VtZW50Ij5uZXdFbmNvZGVkRG9jdW1lbnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSURvY3VtZW50TG9hZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX25ld0luc3RhbmNlIj5uZXdJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTERvY3VtZW50TG9hZGVyIj5YU0xEb2N1bWVudExvYWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTERvY3VtZW50TG9hZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERlZmF1bHREb2N1bWVudFBhcnRpdGlvbmVyIj5nZXREZWZhdWx0RG9jdW1lbnRQYXJ0aXRpb25lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRQYXJ0aXRpb25lciA8c3Ryb25nPmdldERlZmF1bHREb2N1bWVudFBhcnRpdGlvbmVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SURvY3VtZW50UGFydGl0aW9uZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERvY3VtZW50RW5jb2RpbmdEZXRlY3RvciI+Z2V0RG9jdW1lbnRFbmNvZGluZ0RldGVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElEb2N1bWVudENoYXJzZXREZXRlY3RvciA8c3Ryb25nPmdldERvY3VtZW50RW5jb2RpbmdEZXRlY3Rvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklEb2N1bWVudENoYXJzZXREZXRlY3RvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyc2VyIj5nZXRQYXJzZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUmVnaW9uUGFyc2VyIDxzdHJvbmc+Z2V0UGFyc2VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UmVnaW9uUGFyc2VyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTcGVjRGVmYXVsdEVuY29kaW5nIj5nZXRTcGVjRGVmYXVsdEVuY29kaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTcGVjRGVmYXVsdEVuY29kaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV3RW5jb2RlZERvY3VtZW50Ij5uZXdFbmNvZGVkRG9jdW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSUVuY29kZWREb2N1bWVudCA8c3Ryb25nPm5ld0VuY29kZWREb2N1bWVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklFbmNvZGVkRG9jdW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25ld0luc3RhbmNlIj5uZXdJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRMb2FkZXIgPHN0cm9uZz5uZXdJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklEb2N1bWVudExvYWRlcjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0QnVpbGRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0QnVpbGRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjE0N2NhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHlsZXNoZWV0QnVpbGRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0eWxlc2hlZXRCdWlsZGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5BIGJ1aWxkZXIgdGhhdCBjcmVhdGVzIGFuZCBtYWludGFpbnMgYSBjYWNoZSBvZiA8Y29kZT5TdHlsZXNoZWV0PC9jb2RlPidzLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBzaW5nbGV0b24gPGNvZGU+U3R5bGVzaGVldEJ1aWxkZXI8L2NvZGU+IGluc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPihJRmlsZSBmaWxlCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGZvcmNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBmaWxlLiBJZiBlaXRoZXIKLSB0aGUgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4gaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkIG9yCi0gPGNvZGU+Zm9yY2U8L2NvZGU+IGlzIHNwZWNpZmllZCB0aGVuIHRoZSA8Y29kZT5TdHlsZXNoZWV0PC9jb2RlPiBpcwotIGJ1aWx0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbGVhc2UiPnJlbGVhc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZWxlYXNlcyBhbGwgdGhlIGNhY2hlZCBzdHlsZXNoZWV0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPihJRmlsZSBmaWxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0QnVpbGRlciA8c3Ryb25nPmdldEluc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgc2luZ2xldG9uIDxjb2RlPlN0eWxlc2hlZXRCdWlsZGVyPC9jb2RlPiBpbnN0YW5jZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0QnVpbGRlcjwvY29kZT4gLSB0aGUgPGNvZGU+U3R5bGVzaGVldEJ1aWxkZXI8L2NvZGU+IGluc3RhbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgPHN0cm9uZz5nZXRTdHlsZXNoZWV0PC9zdHJvbmc+KElGaWxlIGZpbGUKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gZm9yY2UpPC9jb2RlPjwvcD48cD5HZXQgdGhlIDxjb2RlPlN0eWxlc2hlZXQ8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZmlsZS4gSWYgZWl0aGVyCi0gdGhlIDxjb2RlPlN0eWxlc2hlZXQ8L2NvZGU+IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZCBvcgotIDxjb2RlPmZvcmNlPC9jb2RlPiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgPGNvZGU+U3R5bGVzaGVldDwvY29kZT4gaXMKLSBidWlsdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+IC0gdGhlIFhTTCBmaWxlPC9wPjxwPjxjb2RlPmZvcmNlPC9jb2RlPiAtIDxjb2RlPnRydWU8L2NvZGU+IHRvIGZvcmNlIGEgcGFyc2Ugb2YgdGhlIGZpbGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0PC9jb2RlPiAtIHRoZSA8Y29kZT5TdHlsZXNoZWV0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWxlYXNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJlbGVhc2VzIGFsbCB0aGUgY2FjaGVkIHN0eWxlc2hlZXRzLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZWxlYXNlPC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YWFkNWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHlsZXNoZWV0UGFyc2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3R5bGVzaGVldFBhcnNlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0eWxlc2hlZXRQYXJzZXIiPlN0eWxlc2hlZXRQYXJzZXI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF93YWxrRG9jdW1lbnQiPndhbGtEb2N1bWVudDwvYT4oSURPTURvY3VtZW50IGRvY3VtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0eWxlc2hlZXRQYXJzZXIiPlN0eWxlc2hlZXRQYXJzZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdHlsZXNoZWV0UGFyc2VyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF93YWxrRG9jdW1lbnQiPndhbGtEb2N1bWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+d2Fsa0RvY3VtZW50PC9zdHJvbmc+KElET01Eb2N1bWVudCBkb2N1bWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jdW1lbnQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlckRhdGEuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlckRhdGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAyYWE2Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3R5bGVzaGVldFBhcnNlckRhdGE8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdHlsZXNoZWV0UGFyc2VyRGF0YTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+VGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhvbGQgRGF0YSBuZWNlc3NhcnkgZm9yIHBhcnNpbmcgYW5kIHdhbGtpbmcKLSBhbiBYU0wgU3R5bGVzaGVldCBpbnRvIGEgTW9kZWwuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3R5bGVzaGVldFBhcnNlckRhdGEiPlN0eWxlc2hlZXRQYXJzZXJEYXRhPC9hPjwvc3Ryb25nPihqYXZhLnV0aWwuU3RhY2sgZWxlbWVudFN0YWNrCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuU3RhY2sgY2FsbFRlbXBsYXRlcwotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLlN0YWNrIGZ1bmN0aW9ucyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuU3RhY2s8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2FsbFRlbXBsYXRlcyI+Z2V0Q2FsbFRlbXBsYXRlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q3VycmVudFRlbXBsYXRlIj5nZXRDdXJyZW50VGVtcGxhdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLlN0YWNrPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVsZW1lbnRTdGFjayI+Z2V0RWxlbWVudFN0YWNrPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5TdGFjazwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGdW5jdGlvbnMiPmdldEZ1bmN0aW9uczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQYXJlbnRFbCI+Z2V0UGFyZW50RWw8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldENhbGxUZW1wbGF0ZXMiPnNldENhbGxUZW1wbGF0ZXM8L2E+KGphdmEudXRpbC5TdGFjayBjYWxsVGVtcGxhdGVzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEN1cnJlbnRUZW1wbGF0ZSI+c2V0Q3VycmVudFRlbXBsYXRlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUgY3VycmVudFRlbXBsYXRlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEVsZW1lbnRTdGFjayI+c2V0RWxlbWVudFN0YWNrPC9hPihqYXZhLnV0aWwuU3RhY2sgZWxlbWVudFN0YWNrKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEZ1bmN0aW9ucyI+c2V0RnVuY3Rpb25zPC9hPihqYXZhLnV0aWwuU3RhY2sgZnVuY3Rpb25zKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFBhcmVudEVsIj5zZXRQYXJlbnRFbDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgcGFyZW50RWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0U3R5bGVzaGVldCI+c2V0U3R5bGVzaGVldDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc2YpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3R5bGVzaGVldFBhcnNlckRhdGEiPlN0eWxlc2hlZXRQYXJzZXJEYXRhPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U3R5bGVzaGVldFBhcnNlckRhdGE8L3N0cm9uZz4oamF2YS51dGlsLlN0YWNrIGVsZW1lbnRTdGFjawotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLlN0YWNrIGNhbGxUZW1wbGF0ZXMKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5TdGFjayBmdW5jdGlvbnMpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDYWxsVGVtcGxhdGVzIj5nZXRDYWxsVGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5TdGFjayA8c3Ryb25nPmdldENhbGxUZW1wbGF0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuU3RhY2s8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEN1cnJlbnRUZW1wbGF0ZSI+Z2V0Q3VycmVudFRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSA8c3Ryb25nPmdldEN1cnJlbnRUZW1wbGF0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RWxlbWVudFN0YWNrIj5nZXRFbGVtZW50U3RhY2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLlN0YWNrIDxzdHJvbmc+Z2V0RWxlbWVudFN0YWNrPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLlN0YWNrPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRGdW5jdGlvbnMiPmdldEZ1bmN0aW9uczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuU3RhY2sgPHN0cm9uZz5nZXRGdW5jdGlvbnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuU3RhY2s8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmVudEVsIj5nZXRQYXJlbnRFbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmdldFBhcmVudEVsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgPHN0cm9uZz5nZXRTdHlsZXNoZWV0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldENhbGxUZW1wbGF0ZXMiPnNldENhbGxUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldENhbGxUZW1wbGF0ZXM8L3N0cm9uZz4oamF2YS51dGlsLlN0YWNrIGNhbGxUZW1wbGF0ZXMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNhbGxUZW1wbGF0ZXM8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEN1cnJlbnRUZW1wbGF0ZSI+c2V0Q3VycmVudFRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRDdXJyZW50VGVtcGxhdGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlIGN1cnJlbnRUZW1wbGF0ZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y3VycmVudFRlbXBsYXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRFbGVtZW50U3RhY2siPnNldEVsZW1lbnRTdGFjazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0RWxlbWVudFN0YWNrPC9zdHJvbmc+KGphdmEudXRpbC5TdGFjayBlbGVtZW50U3RhY2spPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnRTdGFjazwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0RnVuY3Rpb25zIj5zZXRGdW5jdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEZ1bmN0aW9uczwvc3Ryb25nPihqYXZhLnV0aWwuU3RhY2sgZnVuY3Rpb25zKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mdW5jdGlvbnM8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFBhcmVudEVsIj5zZXRQYXJlbnRFbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0UGFyZW50RWw8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgcGFyZW50RWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudEVsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRTdHlsZXNoZWV0Ij5zZXRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRTdHlsZXNoZWV0PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHNmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zZjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xFbGVtZW50RmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xFbGVtZW50RmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGRjYWIyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMRWxlbWVudEZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xFbGVtZW50RmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTEVsZW1lbnRGYWN0b3J5PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5BIEZhY3RvcnkgdGhhdCBjcmVhdGVzIFhTTCBFbGVtZW50cyBvZiB0aGUgcmVxdWVzdGVkIHR5cGUuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xFbGVtZW50RmFjdG9yeSI+WFNMRWxlbWVudEZhY3Rvcnk8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5TdHlsZXNoZWV0UGFyc2VyRGF0YSBkYXRhCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5FbGVtZW50IGVsZW1lbnQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ2FsbFRlbXBsYXRlIj5jcmVhdGVDYWxsVGVtcGxhdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlRnVuY3Rpb24iPmNyZWF0ZUZ1bmN0aW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUltcG9ydCI+Y3JlYXRlSW1wb3J0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUluY2x1ZGUiPmNyZWF0ZUluY2x1ZGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlUGFyYW1hdGVyIj5jcmVhdGVQYXJhbWF0ZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlU3R5bGVTaGVldCI+Y3JlYXRlU3R5bGVTaGVldDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZW1wbGF0ZSI+Y3JlYXRlVGVtcGxhdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVmFyaWFibGUiPmNyZWF0ZVZhcmlhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCB4c2xFbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlV2l0aFBhcmFtUGFybSI+Y3JlYXRlV2l0aFBhcmFtUGFybTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVYU0xFbGVtZW50Ij5jcmVhdGVYU0xFbGVtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMRWxlbWVudEZhY3RvcnkiPlhTTEVsZW1lbnRGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMRWxlbWVudEZhY3Rvcnk8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhIGRhdGEKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLkVsZW1lbnQgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNhbGxUZW1wbGF0ZSI+Y3JlYXRlQ2FsbFRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlQ2FsbFRlbXBsYXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUZ1bmN0aW9uIj5jcmVhdGVGdW5jdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZUZ1bmN0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUltcG9ydCI+Y3JlYXRlSW1wb3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlSW1wb3J0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUluY2x1ZGUiPmNyZWF0ZUluY2x1ZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgPHN0cm9uZz5jcmVhdGVJbmNsdWRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVBhcmFtYXRlciI+Y3JlYXRlUGFyYW1hdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlUGFyYW1hdGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVN0eWxlU2hlZXQiPmNyZWF0ZVN0eWxlU2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgPHN0cm9uZz5jcmVhdGVTdHlsZVNoZWV0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRlbXBsYXRlIj5jcmVhdGVUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZVRlbXBsYXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVZhcmlhYmxlIj5jcmVhdGVWYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCA8c3Ryb25nPmNyZWF0ZVZhcmlhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IHhzbEVsKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT54c2xFbDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVXaXRoUGFyYW1QYXJtIj5jcmVhdGVXaXRoUGFyYW1QYXJtPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlV2l0aFBhcmFtUGFybTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVYU0xFbGVtZW50Ij5jcmVhdGVYU0xFbGVtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IDxzdHJvbmc+Y3JlYXRlWFNMRWxlbWVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTE1vZGVsT2JqZWN0RmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xNb2RlbE9iamVjdEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4YzZkNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTE1vZGVsT2JqZWN0RmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTE1vZGVsT2JqZWN0RmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTE1vZGVsT2JqZWN0RmFjdG9yeTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTE1vZGVsT2JqZWN0RmFjdG9yeSI+WFNMTW9kZWxPYmplY3RGYWN0b3J5PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5FbGVtZW50IGVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IHhzbEVsCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlckRhdGEgZGF0YSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVYU0xNb2RlbE9iamVjdCI+Y3JlYXRlWFNMTW9kZWxPYmplY3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGFuIFhTTCBNb2RlbCBPYmplY3Qgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMTW9kZWxPYmplY3RGYWN0b3J5Ij5YU0xNb2RlbE9iamVjdEZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xNb2RlbE9iamVjdEZhY3Rvcnk8L3N0cm9uZz4ob3JnLnczYy5kb20uRWxlbWVudCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCB4c2xFbAotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhIGRhdGEpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVYU0xNb2RlbE9iamVjdCI+Y3JlYXRlWFNMTW9kZWxPYmplY3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgPHN0cm9uZz5jcmVhdGVYU0xNb2RlbE9iamVjdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGFuIFhTTCBNb2RlbCBPYmplY3Qgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9yWFNMLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYU0wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdmODRkNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYU0wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE1vZGVsSGFuZGxlckZvclhTTDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk1vZGVsSGFuZGxlckZvclhTTDwvc3Ryb25nPgotZXh0ZW5kcyBNb2RlbEhhbmRsZXJGb3JYTUw8L3ByZT5Qcm92aWRlcyBnZW5lcmljIFhNTCBtb2RlbCBoYW5kbGluZy4gSXQgaXMgYWxzbyBtYXJrZWQgYXMgdGhlIGRlZmF1bHQKLSBjb250ZW50IHR5cGUgaGFuZGxlci4gVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGltcGxlbWVudGF0aW9uIG9mIHRoZQotIGRlZmF1bHQuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0Fzc29jaWF0ZWRDb250ZW50VHlwZUlEIj5Bc3NvY2lhdGVkQ29udGVudFR5cGVJRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBOZWVkcyB0byBtYXRjaCB3aGF0J3MgaW4gcGx1Z2luIHJlZ2lzdHJ5LiBJbiBmYWN0LCBjYW4gYmUgb3ZlcndyaXR0ZW4KLSBhdCBydW4gdGltZSB3aXRoIHdoYXQncyBpbiByZWdpc3RyeSEgKHNvIHNob3VsZCBuZXZlciBiZSAnZmluYWwnKTwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Nb2RlbEhhbmRsZXJGb3JYU0wiPk1vZGVsSGFuZGxlckZvclhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElEb2N1bWVudExvYWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREb2N1bWVudExvYWRlciI+Z2V0RG9jdW1lbnRMb2FkZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSURvY3VtZW50Q2hhcnNldERldGVjdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVuY29kaW5nRGV0ZWN0b3IiPmdldEVuY29kaW5nRGV0ZWN0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSU1vZGVsTG9hZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsTG9hZGVyIj5nZXRNb2RlbExvYWRlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfQXNzb2NpYXRlZENvbnRlbnRUeXBlSUQiPkFzc29jaWF0ZWRDb250ZW50VHlwZUlEPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkFzc29jaWF0ZWRDb250ZW50VHlwZUlEPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5OZWVkcyB0byBtYXRjaCB3aGF0J3MgaW4gcGx1Z2luIHJlZ2lzdHJ5LiBJbiBmYWN0LCBjYW4gYmUgb3ZlcndyaXR0ZW4KLSBhdCBydW4gdGltZSB3aXRoIHdoYXQncyBpbiByZWdpc3RyeSEgKHNvIHNob3VsZCBuZXZlciBiZSAnZmluYWwnKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX01vZGVsSGFuZGxlckZvclhTTCI+TW9kZWxIYW5kbGVyRm9yWFNMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TW9kZWxIYW5kbGVyRm9yWFNMPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERvY3VtZW50TG9hZGVyIj5nZXREb2N1bWVudExvYWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRMb2FkZXIgPHN0cm9uZz5nZXREb2N1bWVudExvYWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklEb2N1bWVudExvYWRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RW5jb2RpbmdEZXRlY3RvciI+Z2V0RW5jb2RpbmdEZXRlY3RvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRDaGFyc2V0RGV0ZWN0b3IgPHN0cm9uZz5nZXRFbmNvZGluZ0RldGVjdG9yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SURvY3VtZW50Q2hhcnNldERldGVjdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbExvYWRlciI+Z2V0TW9kZWxMb2FkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSU1vZGVsTG9hZGVyIDxzdHJvbmc+Z2V0TW9kZWxMb2FkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JTW9kZWxMb2FkZXI8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLlhTTE1vZGVsTG9hZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YU0xNb2RlbExvYWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDI1MzE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLlhTTE1vZGVsTG9hZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xNb2RlbExvYWRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTE1vZGVsTG9hZGVyPC9zdHJvbmc+Ci1leHRlbmRzIFhNTE1vZGVsTG9hZGVyPC9wcmU+VGhpcyBjbGFzcyByZWFkcyBhbiBYTUwgZmlsZSBhbmQgY3JlYXRlcyBhbiBYTUwgU3RydWN0dXJlZCBNb2RlbC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMTW9kZWxMb2FkZXIiPlhTTE1vZGVsTG9hZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSURvY3VtZW50TG9hZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldERvY3VtZW50TG9hZGVyIj5nZXREb2N1bWVudExvYWRlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJTW9kZWxMb2FkZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmV3SW5zdGFuY2UiPm5ld0luc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElTdHJ1Y3R1cmVkTW9kZWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmV3TW9kZWwiPm5ld01vZGVsPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJlTG9hZEFkYXB0Ij5wcmVMb2FkQWRhcHQ8L2E+KElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTE1vZGVsTG9hZGVyIj5YU0xNb2RlbExvYWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTE1vZGVsTG9hZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlhNTExvYWRlciBjb25zdHJ1Y3RvciBjb21tZW50LjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERvY3VtZW50TG9hZGVyIj5nZXREb2N1bWVudExvYWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRMb2FkZXIgPHN0cm9uZz5nZXREb2N1bWVudExvYWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklEb2N1bWVudExvYWRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV3SW5zdGFuY2UiPm5ld0luc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElNb2RlbExvYWRlciA8c3Ryb25nPm5ld0luc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SU1vZGVsTG9hZGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXdNb2RlbCI+bmV3TW9kZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSVN0cnVjdHVyZWRNb2RlbCA8c3Ryb25nPm5ld01vZGVsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVN0cnVjdHVyZWRNb2RlbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJlTG9hZEFkYXB0Ij5wcmVMb2FkQWRhcHQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnByZUxvYWRBZGFwdDwvc3Ryb25nPihJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RydWN0dXJlZE1vZGVsPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5YU0xTb3VyY2VQYXJzZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhTTFNvdXJjZVBhcnNlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWRjMDVkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhTTFNvdXJjZVBhcnNlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMU291cmNlUGFyc2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMU291cmNlUGFyc2VyPC9zdHJvbmc+Ci1leHRlbmRzIFhNTFNvdXJjZVBhcnNlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xTb3VyY2VQYXJzZXIiPlhTTFNvdXJjZVBhcnNlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFJlZ2lvblBhcnNlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXdJbnN0YW5jZSI+bmV3SW5zdGFuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJzZU5vZGVzIj5wYXJzZU5vZGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0VG9rZW5pemVyIj5zZXRUb2tlbml6ZXI8L2E+KEJsb2NrVG9rZW5pemVyIG5ld1Rva2VuaXplcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xTb3VyY2VQYXJzZXIiPlhTTFNvdXJjZVBhcnNlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFNvdXJjZVBhcnNlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXdJbnN0YW5jZSI+bmV3SW5zdGFuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUmVnaW9uUGFyc2VyIDxzdHJvbmc+bmV3SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5SZWdpb25QYXJzZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlTm9kZXMiPnBhcnNlTm9kZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA8c3Ryb25nPnBhcnNlTm9kZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRUb2tlbml6ZXIiPnNldFRva2VuaXplcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c2V0VG9rZW5pemVyPC9zdHJvbmc+KEJsb2NrVG9rZW5pemVyIG5ld1Rva2VuaXplcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3VG9rZW5pemVyPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zLlhQYXRoU2VwYXJhdG9yUmVnaW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zLlhQYXRoU2VwYXJhdG9yUmVnaW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NzgxMDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9ucy5YUGF0aFNlcGFyYXRvclJlZ2lvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoU2VwYXJhdG9yUmVnaW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhTZXBhcmF0b3JSZWdpb248L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aFNlcGFyYXRvclJlZ2lvbiI+WFBhdGhTZXBhcmF0b3JSZWdpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoU2VwYXJhdG9yUmVnaW9uIj5YUGF0aFNlcGFyYXRvclJlZ2lvbjwvYT48L3N0cm9uZz4oaW50IHN0YXJ0Ci0gICAgICAgICAsCi0gICAgICBpbnQgdGV4dExlbmd0aAotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkanVzdExlbmd0aCI+YWRqdXN0TGVuZ3RoPC9hPihpbnQgaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGp1c3RTdGFydCI+YWRqdXN0U3RhcnQ8L2E+KGludCBpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkanVzdFRleHRMZW5ndGgiPmFkanVzdFRleHRMZW5ndGg8L2E+KGludCBpKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxdWF0ZVBvc2l0aW9ucyI+ZXF1YXRlUG9zaXRpb25zPC9hPihJVGV4dFJlZ2lvbiByZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbmQiPmdldEVuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TGVuZ3RoIj5nZXRMZW5ndGg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0YXJ0Ij5nZXRTdGFydDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dEVuZCI+Z2V0VGV4dEVuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dExlbmd0aCI+Z2V0VGV4dExlbmd0aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFR5cGUiPmdldFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgU3RydWN0dXJlZERvY3VtZW50RXZlbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXBkYXRlUmVnaW9uIj51cGRhdGVSZWdpb248L2E+KGphdmEubGFuZy5PYmplY3QgcmVxdWVzdGVyCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBjaGFuZ2VzCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVxdWVzdFN0YXJ0Ci0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoVG9SZXBsYWNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoU2VwYXJhdG9yUmVnaW9uIj5YUGF0aFNlcGFyYXRvclJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoU2VwYXJhdG9yUmVnaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aFNlcGFyYXRvclJlZ2lvbiI+WFBhdGhTZXBhcmF0b3JSZWdpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aFNlcGFyYXRvclJlZ2lvbjwvc3Ryb25nPihpbnQgc3RhcnQKLSAgICAgICAgICwKLSAgICAgIGludCB0ZXh0TGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRqdXN0TGVuZ3RoIj5hZGp1c3RMZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkanVzdExlbmd0aDwvc3Ryb25nPihpbnQgaSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRqdXN0U3RhcnQiPmFkanVzdFN0YXJ0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGp1c3RTdGFydDwvc3Ryb25nPihpbnQgaSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRqdXN0VGV4dExlbmd0aCI+YWRqdXN0VGV4dExlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRqdXN0VGV4dExlbmd0aDwvc3Ryb25nPihpbnQgaSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXF1YXRlUG9zaXRpb25zIj5lcXVhdGVQb3NpdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmVxdWF0ZVBvc2l0aW9uczwvc3Ryb25nPihJVGV4dFJlZ2lvbiByZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RW5kIj5nZXRFbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0RW5kPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMZW5ndGgiPmdldExlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRMZW5ndGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0YXJ0Ij5nZXRTdGFydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRTdGFydDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGV4dEVuZCI+Z2V0VGV4dEVuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRUZXh0RW5kPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZXh0TGVuZ3RoIj5nZXRUZXh0TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldFRleHRMZW5ndGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFR5cGUiPmdldFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnRvU3RyaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlUmVnaW9uIj51cGRhdGVSZWdpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgU3RydWN0dXJlZERvY3VtZW50RXZlbnQgPHN0cm9uZz51cGRhdGVSZWdpb248L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCByZXF1ZXN0ZXIKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGNoYW5nZXMKLSAgICAgICAgICwKLSAgICAgIGludCByZXF1ZXN0U3RhcnQKLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGhUb1JlcGxhY2UpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlcXVlc3RlcjwvY29kZT48L3A+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5jaGFuZ2VzPC9jb2RlPjwvcD48cD48Y29kZT5yZXF1ZXN0U3RhcnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmxlbmd0aFRvUmVwbGFjZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlN0cnVjdHVyZWREb2N1bWVudEV2ZW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcwOTI4NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UHJlZmVyZW5jZUluaXRpYWxpemVyPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyPC9wcmU+UHJlZmVyZW5jZXMgaW5pdGlhbGl6ZXIgZm9yIFhTTCBjb3JlIHByZWZlcmVuY2VzLjxwPjwvcD48aHI+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+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFBhdGhSZWdpb25Db250ZXh0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFBhdGhSZWdpb25Db250ZXh0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3OTE4ZjYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhQYXRoUmVnaW9uQ29udGV4dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9uczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9uczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aFJlZ2lvbkNvbnRleHQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YUGF0aFJlZ2lvbkNvbnRleHQ8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0JMT0NLX1RFWFQiPkJMT0NLX1RFWFQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1VOREVGSU5FRCI+VU5ERUZJTkVEPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9XSElURV9TUEFDRSI+V0hJVEVfU1BBQ0U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIX0NPTlRFTlQiPlhQQVRIX0NPTlRFTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIX0ZVTkNUSU9OX05BTUUiPlhQQVRIX0ZVTkNUSU9OX05BTUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfQ0xPU0UiPlhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfQ0xPU0U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfT1BFTiI+WFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19PUEVOPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUEFUSF9TRVBBUkFUT1JfRElWIj5YUEFUSF9TRVBBUkFUT1JfRElWPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0JMT0NLX1RFWFQiPkJMT0NLX1RFWFQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+QkxPQ0tfVEVYVDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9VTkRFRklORUQiPlVOREVGSU5FRDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5VTkRFRklORUQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfV0hJVEVfU1BBQ0UiPldISVRFX1NQQUNFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPldISVRFX1NQQUNFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQQVRIX0NPTlRFTlQiPlhQQVRIX0NPTlRFTlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBBVEhfQ09OVEVOVDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF9GVU5DVElPTl9OQU1FIj5YUEFUSF9GVU5DVElPTl9OQU1FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIX0ZVTkNUSU9OX05BTUU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19DTE9TRSI+WFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19DTE9TRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUEFUSF9GVU5DVElPTl9QQVJBTUVURVJTX0NMT1NFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfT1BFTiI+WFBBVEhfRlVOQ1RJT05fUEFSQU1FVEVSU19PUEVOPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIX0ZVTkNUSU9OX1BBUkFNRVRFUlNfT1BFTjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF9TRVBBUkFUT1JfRElWIj5YUEFUSF9TRVBBUkFUT1JfRElWPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIX1NFUEFSQVRPUl9ESVY8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YU0xQYXJzZXJSZWdpb25GYWN0b3J5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuWFNMUGFyc2VyUmVnaW9uRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDIxZjRiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YU0xQYXJzZXJSZWdpb25GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnJlZ2lvbnM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMUGFyc2VyUmVnaW9uRmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFBhcnNlclJlZ2lvbkZhY3Rvcnk8L3N0cm9uZz4KLWV4dGVuZHMgWE1MUGFyc2VyUmVnaW9uRmFjdG9yeTwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xQYXJzZXJSZWdpb25GYWN0b3J5Ij5YU0xQYXJzZXJSZWdpb25GYWN0b3J5PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xQYXJzZXJSZWdpb25GYWN0b3J5Ij5YU0xQYXJzZXJSZWdpb25GYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMUGFyc2VyUmVnaW9uRmFjdG9yeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LklYU0xQYXJ0aXRpb25zLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQuSVhTTFBhcnRpdGlvbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBjMDA0OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQuSVhTTFBhcnRpdGlvbnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBJWFNMUGFydGl0aW9uczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPklYU0xQYXJ0aXRpb25zPC9zdHJvbmc+Ci1leHRlbmRzIDwvcHJlPlRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZC4KLSBJdCBkZWZpbmVzIHRoZSBwYXJ0aXRpb24gdHlwZXMgZm9yIFhTTC4KLSBDbGllbnRzIHNob3VsZCByZWZlcmVuY2UgdGhlIHBhcnRpdGlvbiB0eXBlIFN0cmluZ3MgZGVmaW5lZCBoZXJlIGRpcmVjdGx5LjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMX1hQQVRIIj5YU0xfWFBBVEg8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfWFNMX1hQQVRIIj5YU0xfWFBBVEg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMX1hQQVRIPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYU0wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwMGVlZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTDwvc3Ryb25nPgotZXh0ZW5kcyBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MPC9wcmU+Q29udGFpbnMgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gc2V0dGluZyB1cCBTdHJ1Y3R1cmVkIERvY3VtZW50IFBhcnRpb25zIAotIGluIFhTTCBkb2N1bWVudHMuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMIj5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb25maWd1cmVkQ29udGVudFR5cGVzIj5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFydGl0aW9uVHlwZSI+Z2V0UGFydGl0aW9uVHlwZTwvYT4oSVRleHRSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJRG9jdW1lbnRQYXJ0aXRpb25lcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9uZXdJbnN0YW5jZSI+bmV3SW5zdGFuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMIj5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTCBhZGRzIHRoZSBuZWNlc3NhcnkKLSBQYXJ0aXRpb24gdHlwZXMgdG8gaGVscCBJZGVudGlmeSBwb3RlbnRpYWwgWFBhdGggYXJlYXMuCi0gVGhpcyBpcyBhbHNvIHVzZWQgZm9yIExpbmUgU3R5bGluZyBhbmQgQ29udGVudCBBc3Npc3RhbmNlLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbmZpZ3VyZWRDb250ZW50VHlwZXMiPmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIDxzdHJvbmc+Z2V0Q29uZmlndXJlZENvbnRlbnRUeXBlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmdbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFydGl0aW9uVHlwZSI+Z2V0UGFydGl0aW9uVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UGFydGl0aW9uVHlwZTwvc3Ryb25nPihJVGV4dFJlZ2lvbiByZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbmV3SW5zdGFuY2UiPm5ld0luc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElEb2N1bWVudFBhcnRpdGlvbmVyIDxzdHJvbmc+bmV3SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRG9jdW1lbnRQYXJ0aXRpb25lcjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRGVidWcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxYzkwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRGVidWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRGVidWc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5EZWJ1Zzwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+RGVidWcgQ2xhc3MgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBEZWJ1Z2dpbmcgb3V0cHV0IHRvIHN5c3RlbSBvdXQuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jaGVja0Zvck1lbW9yeUxlYWtzIj5jaGVja0Zvck1lbW9yeUxlYWtzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jb2xsZWN0U3RhdHMiPmNvbGxlY3RTdGF0czwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ERUJVRyI+REVCVUc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RFQlVHX1RIUkVBRExPQ0FMIj5ERUJVR19USFJFQURMT0NBTDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdCcmVha3BvaW50cyI+ZGVidWdCcmVha3BvaW50czwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdDYXJldE1lZGlhdG9yIj5kZWJ1Z0NhcmV0TWVkaWF0b3I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnRGlzcGxheVRyZWVQb3NpdGlvbnMiPmRlYnVnRGlzcGxheVRyZWVQb3NpdGlvbnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnTGF1bmNoZXIiPmRlYnVnTGF1bmNoZXI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnTWVkaWF0b3IiPmRlYnVnTWVkaWF0b3I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnTm90aWZpY2F0aW9uIj5kZWJ1Z05vdGlmaWNhdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdOb3RpZmljYXRpb25BbmRFdmVudHMiPmRlYnVnTm90aWZpY2F0aW9uQW5kRXZlbnRzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z05vdGlmeURlZmVycmVkIj5kZWJ1Z05vdGlmeURlZmVycmVkPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z1JlY29uY2lsaW5nIj5kZWJ1Z1JlY29uY2lsaW5nPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z1J0ZkZvcm1hdFByb3ZpZGVyIj5kZWJ1Z1J0ZkZvcm1hdFByb3ZpZGVyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z1N0cnVjdHVyZWREb2N1bWVudCI+ZGVidWdTdHJ1Y3R1cmVkRG9jdW1lbnQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnVGFnbGlicyI+ZGVidWdUYWdsaWJzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kZWJ1Z1Rva2VuaXplciI+ZGVidWdUb2tlbml6ZXI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnVHJlZU1vZGVsIj5kZWJ1Z1RyZWVNb2RlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZGVidWdVcGRhdGVUcmVlUG9zaXRpb25zIj5kZWJ1Z1VwZGF0ZVRyZWVQb3NpdGlvbnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2RlYnVnWFNMTW9kZWwiPmRlYnVnWFNMTW9kZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgT3V0cHV0IE1vZGVsaW5nIE1lc3NhZ2VzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kaXNwbGF5SW5mbyI+ZGlzcGxheUluZm88L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2Rpc3BsYXlUb0NvbnNvbGUiPmRpc3BsYXlUb0NvbnNvbGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZWZmZWN0cyBvdXRwdXQgb2YgTG9nZ2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2Rpc3BsYXlXYXJuaW5ncyI+ZGlzcGxheVdhcm5pbmdzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9oZWFkUGFyc2luZyI+aGVhZFBhcnNpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2pzRGVidWdDb250ZXh0QXNzaXN0Ij5qc0RlYnVnQ29udGV4dEFzc2lzdDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfanNEZWJ1Z1N5bnRheENvbG9yaW5nIj5qc0RlYnVnU3ludGF4Q29sb3Jpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0xPQ0tTIj5MT0NLUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGVyZlRlc3QiPnBlcmZUZXN0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9wZXJmVGVzdEFkYXB0ZXJDbGFzc0xvYWRpbmciPnBlcmZUZXN0QWRhcHRlckNsYXNzTG9hZGluZzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGVyZlRlc3RGb3JtYXQiPnBlcmZUZXN0Rm9ybWF0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9wZXJmVGVzdFJhd1N0cnVjdHVyZWREb2N1bWVudE9ubHkiPnBlcmZUZXN0UmF3U3RydWN0dXJlZERvY3VtZW50T25seTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGVyZlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudE9ubHkiPnBlcmZUZXN0U3RydWN0dXJlZERvY3VtZW50RXZlbnRPbmx5PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudE9ubHkiPnBlcmZUZXN0U3RydWN0dXJlZERvY3VtZW50T25seTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfc3ludGF4SGlnaGxpZ2h0aW5nIj5zeW50YXhIaWdobGlnaHRpbmc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3VzZVN0YW5kYXJkRW9sSW5XaWRnZXQiPnVzZVN0YW5kYXJkRW9sSW5XaWRnZXQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RlYnVnIj5EZWJ1ZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2R1bXAiPmR1bXA8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEZvciB0ZXN0cyBhbmQgZGVidWcgb25seTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kdW1wIj5kdW1wPC9hPihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudAotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB2ZXJib3NlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kdW1wIj5kdW1wPC9hPihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIHZlcmJvc2UpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByaW50bG4iPnByaW50bG48L2E+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNpbXBsZSB1dGlsaXR5IHRvIG1ha2Ugc3VyZSBwcmludGxuJ3MgYXJlIHNvbWUgd2hhdCBpbiBvcmRlcjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90b1N0cmluZ1V0aWwiPnRvU3RyaW5nVXRpbDwvYT4oSVN0cnVjdHVyZWREb2N1bWVudCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RvU3RyaW5nVXRpbCI+dG9TdHJpbmdVdGlsPC9hPihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gb2JqZWN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfY2hlY2tGb3JNZW1vcnlMZWFrcyI+Y2hlY2tGb3JNZW1vcnlMZWFrczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5jaGVja0Zvck1lbW9yeUxlYWtzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2NvbGxlY3RTdGF0cyI+Y29sbGVjdFN0YXRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmNvbGxlY3RTdGF0czwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ERUJVRyI+REVCVUc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5ERUJVRzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9ERUJVR19USFJFQURMT0NBTCI+REVCVUdfVEhSRUFETE9DQUw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+REVCVUdfVEhSRUFETE9DQUw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdCcmVha3BvaW50cyI+ZGVidWdCcmVha3BvaW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z0JyZWFrcG9pbnRzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnQ2FyZXRNZWRpYXRvciI+ZGVidWdDYXJldE1lZGlhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnQ2FyZXRNZWRpYXRvcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z0Rpc3BsYXlUcmVlUG9zaXRpb25zIj5kZWJ1Z0Rpc3BsYXlUcmVlUG9zaXRpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnRGlzcGxheVRyZWVQb3NpdGlvbnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdMYXVuY2hlciI+ZGVidWdMYXVuY2hlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z0xhdW5jaGVyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnTWVkaWF0b3IiPmRlYnVnTWVkaWF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdNZWRpYXRvcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z05vdGlmaWNhdGlvbiI+ZGVidWdOb3RpZmljYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdOb3RpZmljYXRpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdOb3RpZmljYXRpb25BbmRFdmVudHMiPmRlYnVnTm90aWZpY2F0aW9uQW5kRXZlbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnTm90aWZpY2F0aW9uQW5kRXZlbnRzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnTm90aWZ5RGVmZXJyZWQiPmRlYnVnTm90aWZ5RGVmZXJyZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGVidWdOb3RpZnlEZWZlcnJlZDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z1JlY29uY2lsaW5nIj5kZWJ1Z1JlY29uY2lsaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnUmVjb25jaWxpbmc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdSdGZGb3JtYXRQcm92aWRlciI+ZGVidWdSdGZGb3JtYXRQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1J0ZkZvcm1hdFByb3ZpZGVyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnU3RydWN0dXJlZERvY3VtZW50Ij5kZWJ1Z1N0cnVjdHVyZWREb2N1bWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1N0cnVjdHVyZWREb2N1bWVudDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z1RhZ2xpYnMiPmRlYnVnVGFnbGliczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1RhZ2xpYnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdUb2tlbml6ZXIiPmRlYnVnVG9rZW5pemVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRlYnVnVG9rZW5pemVyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2RlYnVnVHJlZU1vZGVsIj5kZWJ1Z1RyZWVNb2RlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1RyZWVNb2RlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kZWJ1Z1VwZGF0ZVRyZWVQb3NpdGlvbnMiPmRlYnVnVXBkYXRlVHJlZVBvc2l0aW9uczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1VwZGF0ZVRyZWVQb3NpdGlvbnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGVidWdYU0xNb2RlbCI+ZGVidWdYU0xNb2RlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kZWJ1Z1hTTE1vZGVsPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5PdXRwdXQgTW9kZWxpbmcgTWVzc2FnZXMuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9kaXNwbGF5SW5mbyI+ZGlzcGxheUluZm88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+ZGlzcGxheUluZm88L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZGlzcGxheVRvQ29uc29sZSI+ZGlzcGxheVRvQ29uc29sZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5kaXNwbGF5VG9Db25zb2xlPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5lZmZlY3RzIG91dHB1dCBvZiBMb2dnZXI8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2Rpc3BsYXlXYXJuaW5ncyI+ZGlzcGxheVdhcm5pbmdzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmRpc3BsYXlXYXJuaW5nczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9oZWFkUGFyc2luZyI+aGVhZFBhcnNpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+aGVhZFBhcnNpbmc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfanNEZWJ1Z0NvbnRleHRBc3Npc3QiPmpzRGVidWdDb250ZXh0QXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmpzRGVidWdDb250ZXh0QXNzaXN0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2pzRGVidWdTeW50YXhDb2xvcmluZyI+anNEZWJ1Z1N5bnRheENvbG9yaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPmpzRGVidWdTeW50YXhDb2xvcmluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9MT0NLUyI+TE9DS1M8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+TE9DS1M8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcGVyZlRlc3QiPnBlcmZUZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPnBlcmZUZXN0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3BlcmZUZXN0QWRhcHRlckNsYXNzTG9hZGluZyI+cGVyZlRlc3RBZGFwdGVyQ2xhc3NMb2FkaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgYm9vbGVhbiA8c3Ryb25nPnBlcmZUZXN0QWRhcHRlckNsYXNzTG9hZGluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9wZXJmVGVzdEZvcm1hdCI+cGVyZlRlc3RGb3JtYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+cGVyZlRlc3RGb3JtYXQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcGVyZlRlc3RSYXdTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5Ij5wZXJmVGVzdFJhd1N0cnVjdHVyZWREb2N1bWVudE9ubHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+cGVyZlRlc3RSYXdTdHJ1Y3R1cmVkRG9jdW1lbnRPbmx5PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3BlcmZUZXN0U3RydWN0dXJlZERvY3VtZW50RXZlbnRPbmx5Ij5wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudEV2ZW50T25seTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudEV2ZW50T25seTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudE9ubHkiPnBlcmZUZXN0U3RydWN0dXJlZERvY3VtZW50T25seTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5wZXJmVGVzdFN0cnVjdHVyZWREb2N1bWVudE9ubHk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfc3ludGF4SGlnaGxpZ2h0aW5nIj5zeW50YXhIaWdobGlnaHRpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+c3ludGF4SGlnaGxpZ2h0aW5nPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3VzZVN0YW5kYXJkRW9sSW5XaWRnZXQiPnVzZVN0YW5kYXJkRW9sSW5XaWRnZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBib29sZWFuIDxzdHJvbmc+dXNlU3RhbmRhcmRFb2xJbldpZGdldDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRGVidWciPkRlYnVnPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RGVidWc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+RGVidWcgY29uc3RydWN0b3IgY29tbWVudC48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9kdW1wIj5kdW1wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kdW1wPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50KTwvY29kZT48L3A+PHA+Rm9yIHRlc3RzIGFuZCBkZWJ1ZyBvbmx5PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJ1Y3R1cmVkRG9jdW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2R1bXAiPmR1bXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmR1bXA8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gdmVyYm9zZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RydWN0dXJlZERvY3VtZW50PC9jb2RlPjwvcD48cD48Y29kZT52ZXJib3NlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kdW1wIj5kdW1wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kdW1wPC9zdHJvbmc+KElUZXh0UmVnaW9uQ29sbGVjdGlvbiByZWdpb24KLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gdmVyYm9zZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT52ZXJib3NlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmludGxuIj5wcmludGxuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wcmludGxuPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbXNnKTwvY29kZT48L3A+PHA+U2ltcGxlIHV0aWxpdHkgdG8gbWFrZSBzdXJlIHByaW50bG4ncyBhcmUgc29tZSB3aGF0IGluIG9yZGVyPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tc2c8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RvU3RyaW5nVXRpbCI+dG9TdHJpbmdVdGlsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50b1N0cmluZ1V0aWw8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RvU3RyaW5nVXRpbCI+dG9TdHJpbmdVdGlsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50b1N0cmluZ1V0aWw8L3N0cm9uZz4oSVRleHRSZWdpb25Db2xsZWN0aW9uIG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkZpbGVVdGlsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRmlsZVV0aWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFhZGI1MS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRmlsZVV0aWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgRmlsZVV0aWw8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5GaWxlVXRpbDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+VGhpcyBpcyBhIGdlbmVyYWwgZmlsZSB1dGlsaXR5IGNsYXNzLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRmlsZVV0aWwiPkZpbGVVdGlsPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNYTUxGaWxlIj5pc1hNTEZpbGU8L2E+KElGaWxlIGZpbGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBpZiBhIGZpbGUgaXMgb25lIG9mIHRoZSB2YWxpZCBYTUwgY29udGVudCB0eXBlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNYU0xGaWxlIj5pc1hTTEZpbGU8L2E+KElGaWxlIGZpbGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBpZiBhIGZpbGUgaXMgYSBYU0xUIEZpbGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRmlsZVV0aWwiPkZpbGVVdGlsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RmlsZVV0aWw8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXNYTUxGaWxlIj5pc1hNTEZpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzWE1MRmlsZTwvc3Ryb25nPihJRmlsZSBmaWxlKTwvY29kZT48L3A+PHA+RGV0ZXJtaW5lcyBpZiBhIGZpbGUgaXMgb25lIG9mIHRoZSB2YWxpZCBYTUwgY29udGVudCB0eXBlcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+IC0gVGhlIGlucHV0IElGaWxlIHRvIGNoZWNrPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgaXQgaXMgYSBYTUwgZmlsZSwgZmFsc2Ugb3RoZXJ3aXNlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc1hTTEZpbGUiPmlzWFNMRmlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNYU0xGaWxlPC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD5EZXRlcm1pbmVzIGlmIGEgZmlsZSBpcyBhIFhTTFQgRmlsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+IC0gVGhlIGlucHV0IElGaWxlIHRvIGNoZWNrLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGl0IGlzIGEgWFNMVCBmaWxlLCBmYWxzZSBvdGhlcndpc2UuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuU3RydWN0dXJlZERvY3VtZW50VXRpbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODc0NzI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFN0cnVjdHVyZWREb2N1bWVudFV0aWw8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5HZW5lcmFsIFB1cnBvc2UgdXRpbGl0eSBjbGFzc2VzIHRvIGNvbnZlcnQgZnJvbSBTdHJ1Y3R1cmVkRG9jdW1lbnQgdG8gRE9NLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fU3RydWN0dXJlZERvY3VtZW50VXRpbCI+U3RydWN0dXJlZERvY3VtZW50VXRpbDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBJRE9NTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROb2RlIj5nZXROb2RlPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdpdmVuIGEgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBhIFRleHRSZWdpb24sIHJldHVybiBhCi0gSURPTU5vZGUgZm9yIHRoYXQgcGFydGljdWxhciBwb3NpdGlvbiBpbiB0aGUgU3RydWN0dXJlZERvY3VtZW50PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3RydWN0dXJlZERvY3VtZW50VXRpbCI+U3RydWN0dXJlZERvY3VtZW50VXRpbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0cnVjdHVyZWREb2N1bWVudFV0aWw8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Tm9kZSI+Z2V0Tm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRE9NTm9kZSA8c3Ryb25nPmdldE5vZGU8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gdGV4dFJlZ2lvbik8L2NvZGU+PC9wPjxwPkdpdmVuIGEgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBhIFRleHRSZWdpb24sIHJldHVybiBhCi0gSURPTU5vZGUgZm9yIHRoYXQgcGFydGljdWxhciBwb3NpdGlvbiBpbiB0aGUgU3RydWN0dXJlZERvY3VtZW50PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb2N1bWVudFJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+dGV4dFJlZ2lvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklET01Ob2RlPC9jb2RlPiAtIElET01Ob2RlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5YTUxDb250ZW50VHlwZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlhNTENvbnRlbnRUeXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzY5ZmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLlhNTENvbnRlbnRUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhNTENvbnRlbnRUeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WE1MQ29udGVudFR5cGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlhNTENvbnRldFR5cGUgaGFuZGxlcyB0aGUgZ2F0aGVyaW5nIG9mIFhNTCBjb250ZW50IHR5cGUgcmVsYXRlZCBpbmZvcm1hdGlvbgotIGJldHdlZW4gdGhlIHBsYXRmb3JtcyB4bWwgY29udGVudCB0eXBlIGFuZCBXVFAncyBzcGVjaWZpYyB2ZXJzaW9uLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hNTENvbnRlbnRUeXBlIj5YTUxDb250ZW50VHlwZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmdbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGaWxlRXh0ZW5zaW9ucyI+Z2V0RmlsZUV4dGVuc2lvbnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGFsbCB0aGUgZXh0ZW5zaW9ucyBhc3NvY2lhdGVkIHdpdGggYW4gWE1MIENvbnRlbnQgVHlwZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YTUxDb250ZW50VHlwZSI+WE1MQ29udGVudFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YTUxDb250ZW50VHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRGaWxlRXh0ZW5zaW9ucyI+Z2V0RmlsZUV4dGVuc2lvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIDxzdHJvbmc+Z2V0RmlsZUV4dGVuc2lvbnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyBhbGwgdGhlIGV4dGVuc2lvbnMgYXNzb2NpYXRlZCB3aXRoIGFuIFhNTCBDb250ZW50IFR5cGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nW108L2NvZGU+IC0gVGhlIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9uczwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGIyNGNmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb248L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLkV4Y2VwdGlvbjwvcHJlPkFuIGV4Y2VwdGlvbiB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyBoYXMgYmVlbiByZWFjaGVkIAotIGZvciBhIGdpdmVuIFN0eWxlc2hlZXQgdmFsaWRhdGlvbi48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX01heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uIj5NYXhFcnJvcnNFeGNlZWRlZEV4Y2VwdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24iPk1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25NZXNzYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYjQ1M2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25NZXNzYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFZhbGlkYXRpb25NZXNzYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVmFsaWRhdGlvbk1lc3NhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgVmFsaWRhdGlvbk1lc3NhZ2U8L3ByZT5BIHZhbGlkYXRpb24gbWVzc2FnZSBzcGVjaWZpYyB0byB0aGUgWFNMIHZhbGlkYXRvciB3aGljaCBhZGRzIHRoZSBhYmlsaXR5IAotIHRvIHNwZWNpZnkgdGhlIFhTTCBub2RlLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFZhbGlkYXRpb25NZXNzYWdlIj5YU0xWYWxpZGF0aW9uTWVzc2FnZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBpbnQgbGluZU51bWJlcgotICAgICAgICAgLAotICAgICAgaW50IGNvbHVtbk51bWJlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Tm9kZSI+Z2V0Tm9kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgbm9kZSB0aGF0IHRoaXMgbWVzc2FnZSBhcHBsaWVzIHRvLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UmVhbFNldmVyaXR5Ij5nZXRSZWFsU2V2ZXJpdHk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBXb3JrYXJvdW5kIGZvciBzdXBlcmNsYXNzJ3MgYml6YXJyZSBoYW5kbGluZyBvZiBzZXZlcml0eTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldE5vZGUiPnNldE5vZGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBub2RlIHRoYXQgdGhpcyBtZXNzYWdlIGFwcGxpZXMgdG8uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0U2V2ZXJpdHkiPnNldFNldmVyaXR5PC9hPihpbnQgc2V2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBzZXZlcml0eSBzZXQgaGVyZSBzaG91bGQgYmUgdGhlIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2Ugc2V2ZXJpdHkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVmFsaWRhdGlvbk1lc3NhZ2UiPlhTTFZhbGlkYXRpb25NZXNzYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVmFsaWRhdGlvbk1lc3NhZ2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBpbnQgbGluZU51bWJlcgotICAgICAgICAgLAotICAgICAgaW50IGNvbHVtbk51bWJlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB1cmkpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROb2RlIj5nZXROb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIDxzdHJvbmc+Z2V0Tm9kZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIG5vZGUgdGhhdCB0aGlzIG1lc3NhZ2UgYXBwbGllcyB0by48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlPC9jb2RlPiAtIHRoZSBub2RlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFJlYWxTZXZlcml0eSI+Z2V0UmVhbFNldmVyaXR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldFJlYWxTZXZlcml0eTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Xb3JrYXJvdW5kIGZvciBzdXBlcmNsYXNzJ3MgYml6YXJyZSBoYW5kbGluZyBvZiBzZXZlcml0eTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXROb2RlIj5zZXROb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXROb2RlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIG5vZGUpPC9jb2RlPjwvcD48cD5TZXQgdGhlIG5vZGUgdGhhdCB0aGlzIG1lc3NhZ2UgYXBwbGllcyB0by48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gdGhlIG5vZGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0U2V2ZXJpdHkiPnNldFNldmVyaXR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRTZXZlcml0eTwvc3Ryb25nPihpbnQgc2V2KTwvY29kZT48L3A+PHA+VGhlIHNldmVyaXR5IHNldCBoZXJlIHNob3VsZCBiZSB0aGUgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZSBzZXZlcml0eS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNldjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50b1N0cmluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uUmVwb3J0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvblJlcG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzU3MjIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uUmVwb3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFZhbGlkYXRpb25SZXBvcnQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUmVwb3J0PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5BIHZhbGlkYXRpb24gcmVwb3J0IGZvciB0aGUgWFNMIHZhbGlkYXRvci48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xWYWxpZGF0aW9uUmVwb3J0Ij5YU0xWYWxpZGF0aW9uUmVwb3J0PC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRFcnJvciI+YWRkRXJyb3I8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRJbmZvIj5hZGRJbmZvPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGFuIGluZm8gbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRXYXJuaW5nIj5hZGRXYXJuaW5nPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGFuIHdhcm5pbmcgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFcnJvcnMiPmdldEVycm9yczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGaWxlVVJJIj5nZXRGaWxlVVJJPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBVUkkgdGhhdCB0aGlzIHJlcG9ydCBhcHBsaWVzIHRvLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbmZvcyI+Z2V0SW5mb3M8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5IYXNoTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5lc3RlZE1lc3NhZ2VzIj5nZXROZXN0ZWRNZXNzYWdlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZVtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFZhbGlkYXRpb25NZXNzYWdlcyI+Z2V0VmFsaWRhdGlvbk1lc3NhZ2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRXYXJuaW5ncyI+Z2V0V2FybmluZ3M8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNWYWxpZCI+aXNWYWxpZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciB0aGUgZmlsZSBpcyB2YWxpZC4gVGhlIGZpbGUgbWF5IGhhdmUgd2FybmluZ3MgYXNzb2NpYXRlZCB3aXRoIGl0LjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFZhbGlkYXRpb25SZXBvcnQiPlhTTFZhbGlkYXRpb25SZXBvcnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUmVwb3J0PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkRXJyb3IiPmFkZEVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFZhbGlkYXRpb25NZXNzYWdlIDxzdHJvbmc+YWRkRXJyb3I8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48L3A+PHA+QWRkIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBYU0wgbm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gdGhlIG5vZGUgdGhlIHdhcm5pbmcgYXBwbGllcyB0bzwvcD48cD48Y29kZT5tZXNzYWdlPC9jb2RlPiAtIHRoZSBtZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYWxpZGF0aW9uTWVzc2FnZTwvY29kZT4gLSB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNyZWF0ZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkSW5mbyI+YWRkSW5mbzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZSA8c3Ryb25nPmFkZEluZm88L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48L3A+PHA+QWRkIGFuIGluZm8gbWVzc2FnZSBmb3IgdGhlIGdpdmVuIFhTTCBub2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSB0aGUgbm9kZSB0aGUgd2FybmluZyBhcHBsaWVzIHRvPC9wPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+IC0gdGhlIG1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5vZGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25NZXNzYWdlPC9jb2RlPiAtIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgY3JlYXRlZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRXYXJuaW5nIj5hZGRXYXJuaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFZhbGlkYXRpb25NZXNzYWdlIDxzdHJvbmc+YWRkV2FybmluZzwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjwvcD48cD5BZGQgYW4gd2FybmluZyBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4gWFNMIG5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPiAtIHRoZSBub2RlIHRoZSB3YXJuaW5nIGFwcGxpZXMgdG88L3A+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT4gLSB0aGUgbWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvbk1lc3NhZ2U8L2NvZGU+IC0gdGhlIHZhbGlkYXRpb24gbWVzc2FnZSBjcmVhdGVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVycm9ycyI+Z2V0RXJyb3JzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0RXJyb3JzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHZhbGlkYXRpb24gbWVzc2FnZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmlsZVVSSSI+Z2V0RmlsZVVSSTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RmlsZVVSSTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIFVSSSB0aGF0IHRoaXMgcmVwb3J0IGFwcGxpZXMgdG8uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBVUkk8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5mb3MiPmdldEluZm9zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0SW5mb3M8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdmFsaWRhdGlvbiBtZXNzYWdlczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROZXN0ZWRNZXNzYWdlcyI+Z2V0TmVzdGVkTWVzc2FnZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkhhc2hNYXAgPHN0cm9uZz5nZXROZXN0ZWRNZXNzYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5IYXNoTWFwPC9jb2RlPiAtIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzIj5nZXRWYWxpZGF0aW9uTWVzc2FnZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXSA8c3Ryb25nPmdldFZhbGlkYXRpb25NZXNzYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gbWVzc2FnZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYWxpZGF0aW9uTWVzc2FnZVtdPC9jb2RlPiAtIEFuIGFycmF5IG9mIHZhbGlkYXRpb24gbWVzc2FnZXMuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFdhcm5pbmdzIj5nZXRXYXJuaW5nczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldFdhcm5pbmdzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHZhbGlkYXRpb24gbWVzc2FnZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNWYWxpZCI+aXNWYWxpZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNWYWxpZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHdoZXRoZXIgdGhlIGZpbGUgaXMgdmFsaWQuIFRoZSBmaWxlIG1heSBoYXZlIHdhcm5pbmdzIGFzc29jaWF0ZWQgd2l0aCBpdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gVHJ1ZSBpZiB0aGUgZmlsZSBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNDc3NDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xWYWxpZGF0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xWYWxpZGF0b3I8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRoZSBYU0wgdmFsaWRhdG9yIGZvciB3b3Jrc3BhY2UgWFNMIGZpbGVzLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBzaW5nbGV0b24gWFNMVmFsaWRhdG9yIGluc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT4oSUZpbGUgeHNsRmlsZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBmb3JjZUJ1aWxkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIHRoZSBnaXZlbiBYU0wgZmlsZS4gU2FtZSBhcwotIDxjb2RlPnZhbGlkYXRlKHhzbEZpbGUscmVwb3J0LGZvcmNlQnVpbGQpPC9jb2RlPiBleGNlcHQgYSBuZXcgcmVwb3J0IGlzCi0gY3JlYXRlZCBhbmQgcmV0dXJuZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihJRmlsZSB4c2xGaWxlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydAotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBmb3JjZUJ1aWxkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFZhbGlkYXRlIHRoZSBnaXZlbiBYU0wgZmlsZSB1c2luZyB0aGUgc3BlY2lmaWVkIHJlcG9ydC48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3IgPHN0cm9uZz5nZXRJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHNpbmdsZXRvbiBYU0xWYWxpZGF0b3IgaW5zdGFuY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3I8L2NvZGU+IC0gdGhlIHNpbmdsZXRvbiBYU0xWYWxpZGF0b3IgaW5zdGFuY2U8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFZhbGlkYXRpb25SZXBvcnQgPHN0cm9uZz52YWxpZGF0ZTwvc3Ryb25nPihJRmlsZSB4c2xGaWxlCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGZvcmNlQnVpbGQpPC9jb2RlPjwvcD48cD5WYWxpZGF0ZSB0aGUgZ2l2ZW4gWFNMIGZpbGUuIFNhbWUgYXMKLSA8Y29kZT52YWxpZGF0ZSh4c2xGaWxlLHJlcG9ydCxmb3JjZUJ1aWxkKTwvY29kZT4gZXhjZXB0IGEgbmV3IHJlcG9ydCBpcwotIGNyZWF0ZWQgYW5kIHJldHVybmVkLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHNsRmlsZTwvY29kZT4gLSB0aGUgWFNMIGZpbGU8L3A+PHA+PGNvZGU+Zm9yY2VCdWlsZDwvY29kZT4gLSB0cnVlIGlmIGJ1aWxkIHNob3VsZCBhbHdheXMgYmUgZm9yY2VkPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYWxpZGF0aW9uUmVwb3J0PC9jb2RlPiAtIHRoZSB2YWxpZGF0aW9uIHJlcG9ydDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+Q29yZUV4Y2VwdGlvbiAtIGlmIGFueSBleGNlcHRpb24gb2NjdXJzIHdoaWxlIHZhbGlkYXRpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dmFsaWRhdGU8L3N0cm9uZz4oSUZpbGUgeHNsRmlsZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvblJlcG9ydCByZXBvcnQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gZm9yY2VCdWlsZCk8L2NvZGU+PC9wPjxwPlZhbGlkYXRlIHRoZSBnaXZlbiBYU0wgZmlsZSB1c2luZyB0aGUgc3BlY2lmaWVkIHJlcG9ydC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnhzbEZpbGU8L2NvZGU+IC0gdGhlIFhTTCBmaWxlPC9wPjxwPjxjb2RlPnJlcG9ydDwvY29kZT4gLSB0aGUgcmVwb3J0IHRvIHVzZSBmb3IgcmVwb3J0aW5nIHZhbGlkYXRpb24gZXJyb3JzPC9wPjxwPjxjb2RlPmZvcmNlQnVpbGQ8L2NvZGU+IC0gdHJ1ZSBpZiBidWlsZCBzaG91bGQgYWx3YXlzIGJlIGZvcmNlZDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+Q29yZUV4Y2VwdGlvbiAtIGlmIGFueSBleGNlcHRpb24gb2NjdXJzIHdoaWxlIHZhbGlkYXRpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYjVkNzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWYWxpZGF0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5WYWxpZGF0b3I8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3I8L3ByZT5UaGUgWFNMIHZhbGlkYXRvciBleHRlbmRzIHRoZSBYTUwgPGNvZGU+QWJzdHJhY3ROZXN0ZWRWYWxpZGF0b3I8L2NvZGU+LjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVmFsaWRhdG9yIj5WYWxpZGF0b3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZEluZm9Ub01lc3NhZ2UiPmFkZEluZm9Ub01lc3NhZ2U8L2E+KFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBJTWVzc2FnZSBtZXNzYWdlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NsZWFuIj5jbGVhbjwvYT4oSVByb2plY3QgcHJvamVjdAotICAgICAgICAgLAotICAgICAgVmFsaWRhdGlvblN0YXRlIHN0YXRlCi0gICAgICAgICAsCi0gICAgICBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFZhbGlkYXRpb25SZXN1bHQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihJUmVzb3VyY2UgcmVzb3VyY2UKLSAgICAgICAgICwKLSAgICAgIGludCBraW5kCi0gICAgICAgICAsCi0gICAgICBWYWxpZGF0aW9uU3RhdGUgc3RhdGUKLSAgICAgICAgICwKLSAgICAgIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvblJlcG9ydDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+KGphdmEubGFuZy5TdHJpbmcgdXJpCi0gICAgICAgICAsCi0gICAgICBqYXZhLmlvLklucHV0U3RyZWFtIGlucHV0c3RyZWFtCi0gICAgICAgICAsCi0gICAgICBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElTdGF0dXM8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGVJbkpvYiI+dmFsaWRhdGVJbkpvYjwvYT4oSVZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9WYWxpZGF0b3IiPlZhbGlkYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlZhbGlkYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRJbmZvVG9NZXNzYWdlIj5hZGRJbmZvVG9NZXNzYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGRJbmZvVG9NZXNzYWdlPC9zdHJvbmc+KFZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBJTWVzc2FnZSBtZXNzYWdlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YWxpZGF0aW9uTWVzc2FnZTwvY29kZT48L3A+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2xlYW4iPmNsZWFuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jbGVhbjwvc3Ryb25nPihJUHJvamVjdCBwcm9qZWN0Ci0gICAgICAgICAsCi0gICAgICBWYWxpZGF0aW9uU3RhdGUgc3RhdGUKLSAgICAgICAgICwKLSAgICAgIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJvamVjdDwvY29kZT48L3A+PHA+PGNvZGU+c3RhdGU8L2NvZGU+PC9wPjxwPjxjb2RlPm1vbml0b3I8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uUmVzdWx0IDxzdHJvbmc+dmFsaWRhdGU8L3N0cm9uZz4oSVJlc291cmNlIHJlc291cmNlCi0gICAgICAgICAsCi0gICAgICBpbnQga2luZAotICAgICAgICAgLAotICAgICAgVmFsaWRhdGlvblN0YXRlIHN0YXRlCi0gICAgICAgICAsCi0gICAgICBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlc291cmNlPC9jb2RlPjwvcD48cD48Y29kZT5raW5kPC9jb2RlPjwvcD48cD48Y29kZT5zdGF0ZTwvY29kZT48L3A+PHA+PGNvZGU+bW9uaXRvcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25SZXN1bHQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uUmVwb3J0IDxzdHJvbmc+dmFsaWRhdGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB1cmkKLSAgICAgICAgICwKLSAgICAgIGphdmEuaW8uSW5wdXRTdHJlYW0gaW5wdXRzdHJlYW0KLSAgICAgICAgICwKLSAgICAgIE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dXJpPC9jb2RlPjwvcD48cD48Y29kZT5pbnB1dHN0cmVhbTwvY29kZT48L3A+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25SZXBvcnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlSW5Kb2IiPnZhbGlkYXRlSW5Kb2I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSVN0YXR1cyA8c3Ryb25nPnZhbGlkYXRlSW5Kb2I8L3N0cm9uZz4oSVZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PHA+PGNvZGU+cmVwb3J0ZXI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JU3RhdHVzPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvbkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTNjNTRkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcjIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFZhbGlkYXRvcjI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5WYWxpZGF0b3IyPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0VmFsaWRhdG9yPC9wcmU+VmFsaWRhdG9yIGZvciBib3RoIGJ1aWxkIHZhbGlkYXRpb24gKEFic3RyYWN0VmFsaWRhdG9yKSBhbmQgYXMteW91LXR5cGUgdmFsaWRhdGlvbiAoSVZhbGlkYXRvckpvYikuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9WYWxpZGF0b3IyIj5WYWxpZGF0b3IyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbGVhbiI+Y2xlYW48L2E+KElQcm9qZWN0IHByb2plY3QKLSAgICAgICAgICwKLSAgICAgIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZQotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NsZWFudXAiPmNsZWFudXA8L2E+KElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSVNjaGVkdWxpbmdSdWxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNjaGVkdWxpbmdSdWxlIj5nZXRTY2hlZHVsaW5nUnVsZTwvYT4oSVZhbGlkYXRpb25Db250ZXh0IGhlbHBlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvblJlc3VsdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+KElSZXNvdXJjZSByZXNvdXJjZQotICAgICAgICAgLAotICAgICAgaW50IGtpbmQKLSAgICAgICAgICwKLSAgICAgIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZQotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT4oSVZhbGlkYXRpb25Db250ZXh0IGhlbHBlcgotICAgICAgICAgLAotICAgICAgSVJlcG9ydGVyIHJlcG9ydGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJU3RhdHVzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbGlkYXRlSW5Kb2IiPnZhbGlkYXRlSW5Kb2I8L2E+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9WYWxpZGF0b3IyIj5WYWxpZGF0b3IyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VmFsaWRhdG9yMjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jbGVhbiI+Y2xlYW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNsZWFuPC9zdHJvbmc+KElQcm9qZWN0IHByb2plY3QKLSAgICAgICAgICwKLSAgICAgIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZQotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcm9qZWN0PC9jb2RlPjwvcD48cD48Y29kZT5zdGF0ZTwvY29kZT48L3A+PHA+PGNvZGU+bW9uaXRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2xlYW51cCI+Y2xlYW51cDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2xlYW51cDwvc3Ryb25nPihJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlcG9ydGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTY2hlZHVsaW5nUnVsZSI+Z2V0U2NoZWR1bGluZ1J1bGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSVNjaGVkdWxpbmdSdWxlIDxzdHJvbmc+Z2V0U2NoZWR1bGluZ1J1bGU8L3N0cm9uZz4oSVZhbGlkYXRpb25Db250ZXh0IGhlbHBlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aGVscGVyPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVNjaGVkdWxpbmdSdWxlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFsaWRhdGlvblJlc3VsdCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KElSZXNvdXJjZSByZXNvdXJjZQotICAgICAgICAgLAotICAgICAgaW50IGtpbmQKLSAgICAgICAgICwKLSAgICAgIFZhbGlkYXRpb25TdGF0ZSBzdGF0ZQotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXNvdXJjZTwvY29kZT48L3A+PHA+PGNvZGU+a2luZDwvY29kZT48L3A+PHA+PGNvZGU+c3RhdGU8L2NvZGU+PC9wPjxwPjxjb2RlPm1vbml0b3I8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYWxpZGF0aW9uUmVzdWx0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aGVscGVyPC9jb2RlPjwvcD48cD48Y29kZT5yZXBvcnRlcjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlSW5Kb2IiPnZhbGlkYXRlSW5Kb2I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSVN0YXR1cyA8c3Ryb25nPnZhbGlkYXRlSW5Kb2I8L3N0cm9uZz4oSVZhbGlkYXRpb25Db250ZXh0IGhlbHBlcgotICAgICAgICAgLAotICAgICAgSVJlcG9ydGVyIHJlcG9ydGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5oZWxwZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnJlcG9ydGVyPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVN0YXR1czwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTTFZhbGlkYXRpb25SZXBvcnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTTFZhbGlkYXRpb25SZXBvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzOTgwMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0xWYWxpZGF0aW9uUmVwb3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xWYWxpZGF0aW9uUmVwb3J0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVmFsaWRhdGlvblJlcG9ydDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFZhbGlkYXRpb25SZXBvcnQiPlhTTFZhbGlkYXRpb25SZXBvcnQ8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RmlsZVVSSSI+Z2V0RmlsZVVSSTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuSGFzaE1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROZXN0ZWRNZXNzYWdlcyI+Z2V0TmVzdGVkTWVzc2FnZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYWxpZGF0aW9uTWVzc2FnZXMiPmdldFZhbGlkYXRpb25NZXNzYWdlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzVmFsaWQiPmlzVmFsaWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xWYWxpZGF0aW9uUmVwb3J0Ij5YU0xWYWxpZGF0aW9uUmVwb3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVmFsaWRhdGlvblJlcG9ydDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZpbGVVUkkiPmdldEZpbGVVUkk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEZpbGVVUkk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROZXN0ZWRNZXNzYWdlcyI+Z2V0TmVzdGVkTWVzc2FnZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkhhc2hNYXAgPHN0cm9uZz5nZXROZXN0ZWRNZXNzYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5IYXNoTWFwPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYWxpZGF0aW9uTWVzc2FnZXMiPmdldFZhbGlkYXRpb25NZXNzYWdlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYWxpZGF0aW9uTWVzc2FnZVtdIDxzdHJvbmc+Z2V0VmFsaWRhdGlvbk1lc3NhZ2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFsaWRhdGlvbk1lc3NhZ2VbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNWYWxpZCI+aXNWYWxpZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNWYWxpZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGUuWEluY2x1ZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhpbmNsdWRlLlhJbmNsdWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmYzNjAzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGUuWEluY2x1ZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54aW5jbHVkZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWEluY2x1ZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WEluY2x1ZGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5YSW5jbHVkZXIgd2lsbCByZWFkIGFuIFhNTCBmaWxlLCB0aGF0IGhhcyBlbGVtZW50cyBmcm9tIHRoZSBYSW5jbHVkZQotIG5hbWVzcGFjZSBhbmQgZm9sbG93cyB0aGUgVzNDIFhJbmNsdWRlIHNwZWNpZmljYXRpb24gKGh0dHA6Ly93d3cudzMub3JnL1RSL3hpbmNsdWRlLykuCi0gSXQgd2lsbCBvdXRwdXQgYSBtZXJnZWQgZmlsZS48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hJbmNsdWRlciI+WEluY2x1ZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHRyYWN0WE1MRmlsZSI+ZXh0cmFjdFhNTEZpbGU8L2E+KGphdmEubGFuZy5TdHJpbmcgaW4KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgb3V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIGV4dHJhY1hNTEZpbGUgbWVyZ2VzIHRoZSBmaWxlcyByZWZlcmVuY2VkIGJ5IHhpbmNsdWRlIGluY2x1ZGUgZWxlbWVudHMuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWEluY2x1ZGVyIj5YSW5jbHVkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YSW5jbHVkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXh0cmFjdFhNTEZpbGUiPmV4dHJhY3RYTUxGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5leHRyYWN0WE1MRmlsZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGluCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG91dCk8L2NvZGU+PC9wPjxwPmV4dHJhY1hNTEZpbGUgbWVyZ2VzIHRoZSBmaWxlcyByZWZlcmVuY2VkIGJ5IHhpbmNsdWRlIGluY2x1ZGUgZWxlbWVudHMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbjwvY29kZT4gLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBpbnB1dCBYTUwgZmlsZTwvcD48cD48Y29kZT5vdXQ8L2NvZGU+IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgbWVyZ2VkIFhNTCBmaWxlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkNhbGxUZW1wbGF0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNhZDVmYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkNhbGxUZW1wbGF0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIENhbGxUZW1wbGF0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNhbGxUZW1wbGF0ZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvcHJlPlRoZSA8Y29kZT54c2w6Y2FsbC10ZW1wbGF0ZTwvY29kZT4gbW9kZWwgZWxlbWVudC48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3BhcmFtZXRlcnMiPnBhcmFtZXRlcnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NhbGxUZW1wbGF0ZSI+Q2FsbFRlbXBsYXRlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkUGFyYW1ldGVyIj5hZGRQYXJhbWV0ZXI8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXIgcGFyYW1ldGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhIHBhcmFtZXRlciB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyYW1ldGVycyI+Z2V0UGFyYW1ldGVyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfcGFyYW1ldGVycyI+cGFyYW1ldGVyczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPnBhcmFtZXRlcnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NhbGxUZW1wbGF0ZSI+Q2FsbFRlbXBsYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q2FsbFRlbXBsYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRQYXJhbWV0ZXIiPmFkZFBhcmFtZXRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkUGFyYW1ldGVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXIgcGFyYW1ldGVyKTwvY29kZT48L3A+PHA+QWRkIGEgcGFyYW1ldGVyIHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJhbWV0ZXI8L2NvZGU+IC0gdGhlIHBhcmFtZXRlciB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5nZXRNb2RlbFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIHRlbXBsYXRlIG5hbWUsIG9yIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyYW1ldGVycyI+Z2V0UGFyYW1ldGVyczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldFBhcmFtZXRlcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSBhIGxpc3Qgb2YgcGFyYW1ldGVyczwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkZ1bmN0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkZ1bmN0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2OGQxOTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEZ1bmN0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RnVuY3Rpb248L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L3ByZT48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGFyYW1ldGVycyI+cGFyYW1ldGVyczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF92YXJpYWJsZXMiPnZhcmlhYmxlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRnVuY3Rpb24iPkZ1bmN0aW9uPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkUGFyYW1ldGVyIj5hZGRQYXJhbWV0ZXI8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXIgcGFyYW1ldGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhIHBhcmFtZXRlciB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFZhcmlhYmxlIj5hZGRWYXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlIHZhcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSB2YXJpYWJsZSB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFzVmFsdWUiPmdldEFzVmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0T3ZlclJpZGVWYWx1ZSI+Z2V0T3ZlclJpZGVWYWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQYXJhbWV0ZXJzIj5nZXRQYXJhbWV0ZXJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJuIHRoZSBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhpcyBmdW5jdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFyaWFibGVzIj5nZXRWYXJpYWJsZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIHRoaXMgZnVuY3Rpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9wYXJhbWV0ZXJzIj5wYXJhbWV0ZXJzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+cGFyYW1ldGVyczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF92YXJpYWJsZXMiPnZhcmlhYmxlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPnZhcmlhYmxlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRnVuY3Rpb24iPkZ1bmN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RnVuY3Rpb248L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFBhcmFtZXRlciI+YWRkUGFyYW1ldGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRQYXJhbWV0ZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlciBwYXJhbWV0ZXIpPC9jb2RlPjwvcD48cD5BZGQgYSBwYXJhbWV0ZXIgdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmFtZXRlcjwvY29kZT4gLSB0aGUgcGFyYW1ldGVyIHRvIGFkZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRWYXJpYWJsZSI+YWRkVmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZFZhcmlhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZSB2YXIpPC9jb2RlPjwvcD48cD5BZGQgYSB2YXJpYWJsZSB0byB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmFyPC9jb2RlPiAtIHRoZSB2YXJpYWJsZSB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXNWYWx1ZSI+Z2V0QXNWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0QXNWYWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBmdW5jdGlvbiBuYW1lLCBvciBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE92ZXJSaWRlVmFsdWUiPmdldE92ZXJSaWRlVmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE92ZXJSaWRlVmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJhbWV0ZXJzIj5nZXRQYXJhbWV0ZXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0UGFyYW1ldGVyczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm4gdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGlzIGZ1bmN0aW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhcmlhYmxlcyI+Z2V0VmFyaWFibGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0VmFyaWFibGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybiB0aGUgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhpcyBmdW5jdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkltcG9ydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbXBvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE0NTk2Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkltcG9ydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSW1wb3J0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SW1wb3J0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlPC9wcmU+VGhlIDxjb2RlPnhzbDppbXBvcnQ8L2NvZGU+IG1vZGVsIGVsZW1lbnQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSW1wb3J0Ij5JbXBvcnQ8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9JbXBvcnQiPkltcG9ydDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkltcG9ydDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW5jbHVkZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2I5MWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbmNsdWRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSW5jbHVkZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkluY2x1ZGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L3ByZT5UaGUgPGNvZGU+eHNsOmluY2x1ZGU8L2NvZGU+IG1vZGVsIGVsZW1lbnQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTVBPUlQiPklNUE9SVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb25zdGFudCBpbmRpY2F0aW5nIHRoYXQgdGhpcyBpcyBhbiAmbHQ7Y29kZSZndDtJbXBvcnQmbHQ7L2NvZGUmZ3Q7LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lOQ0xVREUiPklOQ0xVREU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29uc3RhbnQgaW5kaWNhdGluZyB0aGF0IHRoaXMgaXMgYW4gJmx0O2NvZGUmZ3Q7SW5jbHVkZSZsdDsvY29kZSZndDsuPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0luY2x1ZGUiPkluY2x1ZGU8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9JbmNsdWRlIj5JbmNsdWRlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0Ci0gICAgICAgICAsCi0gICAgICBpbnQgdHlwZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEhyZWYiPmdldEhyZWY8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5ocmVmPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUZpbGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SHJlZkFzRmlsZSI+Z2V0SHJlZkFzRmlsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldHMgdGhlIGluY2x1ZGVkIGZpbGUgYXMgYSBzb3VyY2UgZmlsZSwgaWYgcG9zc2libGUgKHJldHVybmVkIGZpbGUgbWF5IGJlIG51bGwgYW5kIG5lZWQgbm90IGV4aXN0KS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluY2x1ZGVUeXBlIj5nZXRJbmNsdWRlVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdHlwZSBvZiBpbmNsdWRlLCB3aGV0aGVyIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+IG9yIGFuIDxjb2RlPkltcG9ydDwvY29kZT4uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9JTVBPUlQiPklNUE9SVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGludCA8c3Ryb25nPklNUE9SVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+Q29uc3RhbnQgaW5kaWNhdGluZyB0aGF0IHRoaXMgaXMgYW4gPGNvZGU+SW1wb3J0PC9jb2RlPi48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lOQ0xVREUiPklOQ0xVREU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBpbnQgPHN0cm9uZz5JTkNMVURFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5Db25zdGFudCBpbmRpY2F0aW5nIHRoYXQgdGhpcyBpcyBhbiA8Y29kZT5JbmNsdWRlPC9jb2RlPi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9JbmNsdWRlIj5JbmNsdWRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SW5jbHVkZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0luY2x1ZGUiPkluY2x1ZGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgPHN0cm9uZz5JbmNsdWRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQKLSAgICAgICAgICwKLSAgICAgIGludCB0eXBlKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMsIHNwZWNpZnlpbmcgd2hldGhlciBhbiA8Y29kZT5JbmNsdWRlPC9jb2RlPiBvciBhbiA8Y29kZT5JbXBvcnQ8L2NvZGU+LjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEhyZWYiPmdldEhyZWY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEhyZWY8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+aHJlZjwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSA8Y29kZT5ocmVmPC9jb2RlPiB2YWx1ZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRIcmVmQXNGaWxlIj5nZXRIcmVmQXNGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElGaWxlIDxzdHJvbmc+Z2V0SHJlZkFzRmlsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXRzIHRoZSBpbmNsdWRlZCBmaWxlIGFzIGEgc291cmNlIGZpbGUsIGlmIHBvc3NpYmxlIChyZXR1cm5lZCBmaWxlIG1heSBiZSBudWxsIGFuZCBuZWVkIG5vdCBleGlzdCkuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRmlsZTwvY29kZT4gLSB0aGUgaW5jbHVkZWQgZmlsZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbmNsdWRlVHlwZSI+Z2V0SW5jbHVkZVR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0SW5jbHVkZVR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB0eXBlIG9mIGluY2x1ZGUsIHdoZXRoZXIgYW4gPGNvZGU+SW5jbHVkZTwvY29kZT4gb3IgYW4gPGNvZGU+SW1wb3J0PC9jb2RlPi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBvbmUgb2YgdGhlIGNvbnN0YW50cyA8Y29kZT5JTkNMVURFPC9jb2RlPiBvciA8Y29kZT5JTVBPUlQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDIzY2RkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUGFyYW1ldGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UGFyYW1ldGVyPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZTwvcHJlPlRoZSA8Y29kZT54c2w6cGFyYW1ldGVyPC9jb2RlPiBvciA8Y29kZT54c2w6d2l0aC1wYXJhbTwvY29kZT4gbW9kZWwgZWxlbWVudC48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9QYXJhbWV0ZXIiPlBhcmFtZXRlcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFzIj5nZXRBczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzVmFsdWUiPmlzVmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgd2hldGhlciB0aGlzIGhhcyBhIHZhbHVlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFZhbHVlIj5zZXRWYWx1ZTwvYT4oYm9vbGVhbiB2YWx1ZVNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgd2hldGhlciB0aGlzIGhhcyBhIHZhbHVlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1BhcmFtZXRlciI+UGFyYW1ldGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UGFyYW1ldGVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBcyI+Z2V0QXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEFzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5nZXRNb2RlbFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNWYWx1ZSI+aXNWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNWYWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgd2hldGhlciB0aGlzIGhhcyBhIHZhbHVlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGhhcyBhIHZhbHVlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFZhbHVlIj5zZXRWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0VmFsdWU8L3N0cm9uZz4oYm9vbGVhbiB2YWx1ZVNldCk8L2NvZGU+PC9wPjxwPlNldCB3aGV0aGVyIHRoaXMgaGFzIGEgdmFsdWUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YWx1ZVNldDwvY29kZT4gLSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGhhcyBhIHZhbHVlPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMzUwY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3R5bGVzaGVldDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlN0eWxlc2hlZXQ8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L3ByZT5UaGUgPGNvZGU+eHNsOnN0eWxlc2hlZXQ8L2NvZGU+IG1vZGVsIGVsZW1lbnQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jYWxsZWRUZW1wbGF0ZXMiPmNhbGxlZFRlbXBsYXRlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9lbGVtZW50cyI+ZWxlbWVudHM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIElGaWxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZmlsZSI+ZmlsZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9mdW5jdGlvbnMiPmZ1bmN0aW9uczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9nbG9iYWxWYXJpYWJsZXMiPmdsb2JhbFZhcmlhYmxlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9pbXBvcnRzIj5pbXBvcnRzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2luY2x1ZGVzIj5pbmNsdWRlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF90ZW1wbGF0ZXMiPnRlbXBsYXRlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3ZlcnNpb24iPnZlcnNpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0eWxlc2hlZXQiPlN0eWxlc2hlZXQ8L2E+PC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRDYWxsZWRUZW1wbGF0ZSI+YWRkQ2FsbGVkVGVtcGxhdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGUgdGVtcGxhdGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgPGNvZGU+Q2FsbFRlbXBsYXRlPC9jb2RlPiB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZEZ1bmN0aW9uIj5hZGRGdW5jdGlvbjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkZ1bmN0aW9uIGZ1bmN0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZEdsb2JhbFZhcmlhYmxlIj5hZGRHbG9iYWxWYXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlIHZhcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSBnbG9iYWwgdmFyaWFibGUgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRJbXBvcnQiPmFkZEltcG9ydDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkltcG9ydCBpbmNsdWRlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhbiA8Y29kZT5JbXBvcnQ8L2NvZGU+IHRvIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkSW5jbHVkZSI+YWRkSW5jbHVkZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkluY2x1ZGUgaW5jbHVkZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYW4gPGNvZGU+SW5jbHVkZTwvY29kZT4gdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRUZW1wbGF0ZSI+YWRkVGVtcGxhdGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSB0ZW1wbGF0ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSA8Y29kZT5UZW1wbGF0ZTwvY29kZT4gdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2FsbGVkVGVtcGxhdGVzIj5nZXRDYWxsZWRUZW1wbGF0ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2YgY2FsbGVkIHRlbXBsYXRlcyBmb3IgdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUZpbGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RmlsZSI+Z2V0RmlsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgZmlsZSB0aGF0IHRoaXMgcmVwcmVzZW50cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RnVuY3Rpb25zIj5nZXRGdW5jdGlvbnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGZvciB0aGlzIHN0eWxlc2hlZXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEdsb2JhbFZhcmlhYmxlcyI+Z2V0R2xvYmFsVmFyaWFibGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltcG9ydHMiPmdldEltcG9ydHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2YgaW1wb3J0cyBmb3IgdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5jbHVkZXMiPmdldEluY2x1ZGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBsaXN0IG9mIGluY2x1ZGVzIGZvciB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRlbXBsYXRlcyI+Z2V0VGVtcGxhdGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IgdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWZXJzaW9uIj5nZXRWZXJzaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBzdHlsZXNoZWV0IHZlcnNpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0VmVyc2lvbiI+c2V0VmVyc2lvbjwvYT4oamF2YS5sYW5nLlN0cmluZyB2ZXJzaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB0aGUgc3R5bGVzaGVldCB2ZXJzaW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfY2FsbGVkVGVtcGxhdGVzIj5jYWxsZWRUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5jYWxsZWRUZW1wbGF0ZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZWxlbWVudHMiPmVsZW1lbnRzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+ZWxlbWVudHM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZmlsZSI+ZmlsZTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBJRmlsZSA8c3Ryb25nPmZpbGU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZnVuY3Rpb25zIj5mdW5jdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5mdW5jdGlvbnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZ2xvYmFsVmFyaWFibGVzIj5nbG9iYWxWYXJpYWJsZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nbG9iYWxWYXJpYWJsZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfaW1wb3J0cyI+aW1wb3J0czwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmltcG9ydHM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfaW5jbHVkZXMiPmluY2x1ZGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+aW5jbHVkZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfdGVtcGxhdGVzIj50ZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz50ZW1wbGF0ZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfdmVyc2lvbiI+dmVyc2lvbjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dmVyc2lvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3R5bGVzaGVldCI+U3R5bGVzaGVldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0eWxlc2hlZXQ8L3N0cm9uZz4oSUZpbGUgZmlsZSk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZENhbGxlZFRlbXBsYXRlIj5hZGRDYWxsZWRUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkQ2FsbGVkVGVtcGxhdGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkNhbGxUZW1wbGF0ZSB0ZW1wbGF0ZSk8L2NvZGU+PC9wPjxwPkFkZCBhIDxjb2RlPkNhbGxUZW1wbGF0ZTwvY29kZT4gdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRlbXBsYXRlPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkRnVuY3Rpb24iPmFkZEZ1bmN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRGdW5jdGlvbjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuRnVuY3Rpb24gZnVuY3Rpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZ1bmN0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRHbG9iYWxWYXJpYWJsZSI+YWRkR2xvYmFsVmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZEdsb2JhbFZhcmlhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZSB2YXIpPC9jb2RlPjwvcD48cD5BZGQgYSBnbG9iYWwgdmFyaWFibGUgdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZhcjwvY29kZT4gLSB0aGUgdmFyaWFibGUgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZEltcG9ydCI+YWRkSW1wb3J0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRJbXBvcnQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkltcG9ydCBpbmNsdWRlKTwvY29kZT48L3A+PHA+QWRkIGFuIDxjb2RlPkltcG9ydDwvY29kZT4gdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmluY2x1ZGU8L2NvZGU+IC0gdGhlIGltcG9ydCB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkSW5jbHVkZSI+YWRkSW5jbHVkZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkSW5jbHVkZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW5jbHVkZSBpbmNsdWRlKTwvY29kZT48L3A+PHA+QWRkIGFuIDxjb2RlPkluY2x1ZGU8L2NvZGU+IHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbmNsdWRlPC9jb2RlPiAtIHRoZSBpbmNsdWRlIHRvIGFkZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRUZW1wbGF0ZSI+YWRkVGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZFRlbXBsYXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSB0ZW1wbGF0ZSk8L2NvZGU+PC9wPjxwPkFkZCBhIDxjb2RlPlRlbXBsYXRlPC9jb2RlPiB0byB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGVtcGxhdGU8L2NvZGU+IC0gdGhlIHRlbXBsYXRlIHRvIGFkZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDYWxsZWRUZW1wbGF0ZXMiPmdldENhbGxlZFRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldENhbGxlZFRlbXBsYXRlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGxpc3Qgb2YgY2FsbGVkIHRlbXBsYXRlcyBmb3IgdGhpcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBsaXN0IG9mIGNhbGxlZCB0ZW1wbGF0ZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmlsZSI+Z2V0RmlsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJRmlsZSA8c3Ryb25nPmdldEZpbGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBmaWxlIHRoYXQgdGhpcyByZXByZXNlbnRzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUZpbGU8L2NvZGU+IC0gdGhlIGZpbGUgdGhhdCB0aGlzIHJlcHJlc2VudHM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RnVuY3Rpb25zIj5nZXRGdW5jdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRGdW5jdGlvbnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBmb3IgdGhpcyBzdHlsZXNoZWV0LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIGxpc3Qgb2YgY2FsbGVkIHRlbXBsYXRlczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRHbG9iYWxWYXJpYWJsZXMiPmdldEdsb2JhbFZhcmlhYmxlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEdsb2JhbFZhcmlhYmxlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbXBvcnRzIj5nZXRJbXBvcnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0SW1wb3J0czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGxpc3Qgb2YgaW1wb3J0cyBmb3IgdGhpcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBsaXN0IG9mIGltcG9ydHM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5jbHVkZXMiPmdldEluY2x1ZGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0SW5jbHVkZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBsaXN0IG9mIGluY2x1ZGVzIGZvciB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIGxpc3Qgb2YgaW5jbHVkZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5nZXRNb2RlbFR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCA8c3Ryb25nPmdldFN0eWxlc2hlZXQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGVtcGxhdGVzIj5nZXRUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRUZW1wbGF0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IgdGhpcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBsaXN0IG9mIHRlbXBsYXRlczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWZXJzaW9uIj5nZXRWZXJzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRWZXJzaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgc3R5bGVzaGVldCB2ZXJzaW9uLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0VmVyc2lvbiI+c2V0VmVyc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0VmVyc2lvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHZlcnNpb24pPC9jb2RlPjwvcD48cD5TZXQgdGhlIHN0eWxlc2hlZXQgdmVyc2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZlcnNpb248L2NvZGU+IC0gdGhlIHZlcnNpb24gdG8gc2V0PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTM5YmM0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldE1vZGVsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3R5bGVzaGVldE1vZGVsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3R5bGVzaGVldE1vZGVsPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdDwvcHJlPlRoZSBjb21wb3NlZCBzdHlsZXNoZWV0LCBjb25zaXN0aW5nIG9mIGFsbCB0ZW1wbGF0ZXMgYW5kIHZhcmlhYmxlcyBhdmFpbGFibGUKLSB2aWEgaW1wb3J0cyBhbmQgaW5jbHVkZXMuCi0gCi0gPHA+Ci0gVGhlIDxjb2RlPmZpeCgpPC9jb2RlPiBtZXRob2QgZG9lcyB0aGUgYWN0dWFsIHdvcmsgb2YgcG9wdWxhdGluZyB0aGUgZmllbGRzCi0gb2YgdGhpcywgc28gaXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYW55IG9mIHRoZSBvdGhlciBtZXRob2RzLgotIDwvcD4KLSAKLSA8cD4KLSBOb3RlIHRoYXQgdGhpcyBtb2RlbCBtYXkgbm90IGJlIHZhbGlkIC0gZm9yIGluc3RhbmNlIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4KLSBvbmUgbmFtZWQgdGVtcGxhdGUgZm9yIGEgZ2l2ZW4gbmFtZSBvciBtb3JlIHRoYW4gb25lIGdsb2JhbCB2YXJpYWJsZSB3aXRoIGEKLSBnaXZlbiBuYW1lLgotIDwvcD48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2NhbGxUZW1wbGF0ZXMiPmNhbGxUZW1wbGF0ZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jaXJjdWxhclJlZmVyZW5jZSI+Y2lyY3VsYXJSZWZlcmVuY2U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5TZXQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9maWxlcyI+ZmlsZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZnVuY3Rpb25zIj5mdW5jdGlvbnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZ2xvYmFsVmFyaWFibGVzIj5nbG9iYWxWYXJpYWJsZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfaW1wb3J0TW9kZWwiPmltcG9ydE1vZGVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2luY2x1ZGVNb2RlbCI+aW5jbHVkZU1vZGVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfc3R5bGVzaGVldHMiPnN0eWxlc2hlZXRzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3RlbXBsYXRlcyI+dGVtcGxhdGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfdGVtcGxhdGVTZXQiPnRlbXBsYXRlU2V0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdHlsZXNoZWV0TW9kZWwiPlN0eWxlc2hlZXRNb2RlbDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9maW5kQWxsTmVzdGVkVGVtcGxhdGVzIj5maW5kQWxsTmVzdGVkVGVtcGxhdGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQSB1dGlsaXR5IG1ldGhvZCB0aGF0IHRyYXZlcnNlcyBhbGwgc3R5bGVzaGVldCBpbiB0aGUgaGllcmFyY2h5IG9mCi0gc3R5bGVzaGVldHMgKG5vdCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgc3R5bGVzaGVldCksIGFuZCBhZGRzIGFsbCB0aGVpcgotIHRlbXBsYXRlcyB0byB0aGUgcmV0dXJuZWQgbGlzdC4gVGhlcmVmb3JlIHRoZSByZXR1cm5lZCBsaXN0IGhhcyBubyByZWdhcmQKLSBmb3Igd2hldGhlciBhIHRlbXBsYXRlIGlzICd2aXNpYmxlJyAoaS5lLiB3aGV0aGVyIGl0IG1pZ2h0IGJlIG92ZXJyaWRkZW4KLSBzaW5jZSBpdCB3YXMgaW5jbHVkZWQgdmlhIGFuIGltcG9ydCkuIFRoZSBvcmRlciBvZiB0aGUgdGVtcGxhdGVzIGluIHRoZQotIGxpc3QgaXMgYXJiaXRyYXJ5LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9maW5kTWF0Y2hpbmciPmZpbmRNYXRjaGluZzwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlIHRvTWF0Y2gpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGFsbCB0ZW1wbGF0ZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gdGVtcGxhdGUgKGRldGVybWluZWQgZnJvbQotIDxjb2RlPlRlbXBsYXRlLmVxdWFscygpPC9jb2RlPikuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZml4Ij5maXg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQZXJmb3JtIHRoZSBwcm9jZXNzIG9mIHRyYXZlcnNpbmcgdGhlIGhpZXJhcmNoeSB0byBkZXRlcm1pbmUgYWxsIG9mIHRoZQotIHByb3BlcnRpZXMgb2YgdGhpcy4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG1heSBmb3JjZSBvdGhlcgotIDxjb2RlPlN0eWxlc2hlZXRNb2RlbDwvY29kZT4ncyB0byBiZSBidWlsdCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgZml4aW5nLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDYWxsVGVtcGxhdGVzIj5nZXRDYWxsVGVtcGxhdGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5TZXQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RmlsZURlcGVuZGVuY2llcyI+Z2V0RmlsZURlcGVuZGVuY2llczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBhbGwgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGdW5jdGlvbkJ5TmFtZSI+Z2V0RnVuY3Rpb25CeU5hbWU8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4gdGhlCi0gaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUgd2hpY2ggaGF2ZSB0aGUgZ2l2ZW4gbmFtZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RnVuY3Rpb25zIj5nZXRGdW5jdGlvbnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgYSBMaXN0IG9mIGFsbCBmdW5jdGlvbnMgdGhhdCBhcmUga25vd24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEdsb2JhbFZhcmlhYmxlcyI+Z2V0R2xvYmFsVmFyaWFibGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGFsbCBnbG9iYWwgdmFyaWFibGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbgotIHRoZSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5jbHVkZXMiPmdldEluY2x1ZGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGFsbCBzdHlsZXNoZWV0cyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4gdGhlCi0gaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGlzIHRoZSBtb2RlbCBmb3IuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRlbXBsYXRlcyI+Z2V0VGVtcGxhdGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGFsbCB0ZW1wbGF0ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZW1wbGF0ZXNCeU5hbWUiPmdldFRlbXBsYXRlc0J5TmFtZTwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCBhbGwgbmFtZWQgdGVtcGxhdGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbgotIHRoZSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZSB3aGljaCBoYXZlIHRoZSBnaXZlbiBuYW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhc0NpcmN1bGFyUmVmZXJlbmNlIj5oYXNDaXJjdWxhclJlZmVyZW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB3aGV0aGVyIHRoaXMgaGFzIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGFueXdoZXJlIGluIGl0cyBpbXBvcnQvaW5jbHVkZWQKLSBoaWVyYXJjaHkuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9jYWxsVGVtcGxhdGVzIj5jYWxsVGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Y2FsbFRlbXBsYXRlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9jaXJjdWxhclJlZmVyZW5jZSI+Y2lyY3VsYXJSZWZlcmVuY2U8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbiA8c3Ryb25nPmNpcmN1bGFyUmVmZXJlbmNlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ZpbGVzIj5maWxlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0IDxzdHJvbmc+ZmlsZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZnVuY3Rpb25zIj5mdW5jdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5mdW5jdGlvbnM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZ2xvYmFsVmFyaWFibGVzIj5nbG9iYWxWYXJpYWJsZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nbG9iYWxWYXJpYWJsZXM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfaW1wb3J0TW9kZWwiPmltcG9ydE1vZGVsPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+aW1wb3J0TW9kZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfaW5jbHVkZU1vZGVsIj5pbmNsdWRlTW9kZWw8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5pbmNsdWRlTW9kZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfc3R5bGVzaGVldHMiPnN0eWxlc2hlZXRzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5TZXQgPHN0cm9uZz5zdHlsZXNoZWV0czwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF90ZW1wbGF0ZXMiPnRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPnRlbXBsYXRlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF90ZW1wbGF0ZVNldCI+dGVtcGxhdGVTZXQ8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLlNldCA8c3Ryb25nPnRlbXBsYXRlU2V0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9TdHlsZXNoZWV0TW9kZWwiPlN0eWxlc2hlZXRNb2RlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0eWxlc2hlZXRNb2RlbDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZmluZEFsbE5lc3RlZFRlbXBsYXRlcyI+ZmluZEFsbE5lc3RlZFRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmZpbmRBbGxOZXN0ZWRUZW1wbGF0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+QSB1dGlsaXR5IG1ldGhvZCB0aGF0IHRyYXZlcnNlcyBhbGwgc3R5bGVzaGVldCBpbiB0aGUgaGllcmFyY2h5IG9mCi0gc3R5bGVzaGVldHMgKG5vdCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgc3R5bGVzaGVldCksIGFuZCBhZGRzIGFsbCB0aGVpcgotIHRlbXBsYXRlcyB0byB0aGUgcmV0dXJuZWQgbGlzdC4gVGhlcmVmb3JlIHRoZSByZXR1cm5lZCBsaXN0IGhhcyBubyByZWdhcmQKLSBmb3Igd2hldGhlciBhIHRlbXBsYXRlIGlzICd2aXNpYmxlJyAoaS5lLiB3aGV0aGVyIGl0IG1pZ2h0IGJlIG92ZXJyaWRkZW4KLSBzaW5jZSBpdCB3YXMgaW5jbHVkZWQgdmlhIGFuIGltcG9ydCkuIFRoZSBvcmRlciBvZiB0aGUgdGVtcGxhdGVzIGluIHRoZQotIGxpc3QgaXMgYXJiaXRyYXJ5LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gYW4gdW5vcmRlcmVkIGxpc3Qgb2YgYWxsIHRlbXBsYXRlcyBmcm9tIGFsbCBzdHlsZXNoZWV0cy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZmluZE1hdGNoaW5nIj5maW5kTWF0Y2hpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5maW5kTWF0Y2hpbmc8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlIHRvTWF0Y2gpPC9jb2RlPjwvcD48cD5HZXQgYWxsIHRlbXBsYXRlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiB0ZW1wbGF0ZSAoZGV0ZXJtaW5lZCBmcm9tCi0gPGNvZGU+VGVtcGxhdGUuZXF1YWxzKCk8L2NvZGU+KS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRvTWF0Y2g8L2NvZGU+IC0gdGhlIHRlbXBsYXRlIHRvIG1hdGNoPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IG1hdGNoPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZpeCI+Zml4PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5maXg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UGVyZm9ybSB0aGUgcHJvY2VzcyBvZiB0cmF2ZXJzaW5nIHRoZSBoaWVyYXJjaHkgdG8gZGV0ZXJtaW5lIGFsbCBvZiB0aGUKLSBwcm9wZXJ0aWVzIG9mIHRoaXMuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBtYXkgZm9yY2Ugb3RoZXIKLSA8Y29kZT5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+J3MgdG8gYmUgYnVpbHQgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGZpeGluZy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q2FsbFRlbXBsYXRlcyI+Z2V0Q2FsbFRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldENhbGxUZW1wbGF0ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmlsZURlcGVuZGVuY2llcyI+Z2V0RmlsZURlcGVuZGVuY2llczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuU2V0IDxzdHJvbmc+Z2V0RmlsZURlcGVuZGVuY2llczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgYWxsIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoaXMgc3R5bGVzaGVldCBhbnl3aGVyZSBpbiB0aGUKLSBoaWVyYXJjaHkgdmlhIGVpdGhlciBpbXBvcnQgb3IgaW5jbHVkZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5TZXQ8L2NvZGU+IC0gdGhlIHNldCBvZiBmaWxlcyBpbiB0aGUgZW50aXJlIGhpZXJhcmNoeTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRGdW5jdGlvbkJ5TmFtZSI+Z2V0RnVuY3Rpb25CeU5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRGdW5jdGlvbkJ5TmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD5HZXQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4gdGhlCi0gaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUgd2hpY2ggaGF2ZSB0aGUgZ2l2ZW4gbmFtZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gdGhlIHRlbXBsYXRlIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBzZXQgb2YgbmFtZWQgdGVtcGxhdGVzIHdpdGggdGhlIGdpdmVuIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RnVuY3Rpb25zIj5nZXRGdW5jdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRGdW5jdGlvbnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IGEgTGlzdCBvZiBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGtub3duLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEdsb2JhbFZhcmlhYmxlcyI+Z2V0R2xvYmFsVmFyaWFibGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0R2xvYmFsVmFyaWFibGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCBhbGwgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4KLSB0aGUgaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgc2V0IG9mIGZpbGVzIGluIHRoZSBlbnRpcmUgaGllcmFyY2h5PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluY2x1ZGVzIj5nZXRJbmNsdWRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEluY2x1ZGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCBhbGwgc3R5bGVzaGVldHMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhpcyBzdHlsZXNoZWV0IGFueXdoZXJlIGluIHRoZQotIGhpZXJhcmNoeSB2aWEgZWl0aGVyIGltcG9ydCBvciBpbmNsdWRlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIHNldCBvZiBzdHlsZXNoZWV0cyBpbiB0aGUgZW50aXJlIGhpZXJhcmNoeTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IDxzdHJvbmc+Z2V0U3R5bGVzaGVldDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGlzIHRoZSBtb2RlbCBmb3IuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDwvY29kZT4gLSB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgaXMgdGhlIG1vZGVsIGZvcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZW1wbGF0ZXMiPmdldFRlbXBsYXRlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldFRlbXBsYXRlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgYWxsIHRlbXBsYXRlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4gdGhlCi0gaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgc2V0IG9mIHRlbXBsYXRlcyBpbiB0aGUgZW50aXJlIGhpZXJhcmNoeTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZW1wbGF0ZXNCeU5hbWUiPmdldFRlbXBsYXRlc0J5TmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldFRlbXBsYXRlc0J5TmFtZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD5HZXQgYWxsIG5hbWVkIHRlbXBsYXRlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGlzIHN0eWxlc2hlZXQgYW55d2hlcmUgaW4KLSB0aGUgaGllcmFyY2h5IHZpYSBlaXRoZXIgaW1wb3J0IG9yIGluY2x1ZGUgd2hpY2ggaGF2ZSB0aGUgZ2l2ZW4gbmFtZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gdGhlIHRlbXBsYXRlIG5hbWU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPiAtIHRoZSBzZXQgb2YgbmFtZWQgdGVtcGxhdGVzIHdpdGggdGhlIGdpdmVuIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzQ2lyY3VsYXJSZWZlcmVuY2UiPmhhc0NpcmN1bGFyUmVmZXJlbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5oYXNDaXJjdWxhclJlZmVyZW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgd2hldGhlciB0aGlzIGhhcyBhIGNpcmN1bGFyIHJlZmVyZW5jZSBhbnl3aGVyZSBpbiBpdHMgaW1wb3J0L2luY2x1ZGVkCi0gaGllcmFyY2h5LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGhhcyBhIGNpcmN1bGFyIHJlZmVyZW5jZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ODU5ZWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFRlbXBsYXRlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VGVtcGxhdGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQ8L3ByZT5UaGUgPGNvZGU+eHNsOnRlbXBsYXRlPC9jb2RlPiBtb2RlbCBlbGVtZW50LjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcGFyYW1ldGVycyI+cGFyYW1ldGVyczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF92YXJpYWJsZXMiPnZhcmlhYmxlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVGVtcGxhdGUiPlRlbXBsYXRlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkUGFyYW1ldGVyIj5hZGRQYXJhbWV0ZXI8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5QYXJhbWV0ZXIgcGFyYW1ldGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhIHBhcmFtZXRlciB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFZhcmlhYmxlIj5hZGRWYXJpYWJsZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlIHZhcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSB2YXJpYWJsZSB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VxdWFscyI+ZXF1YWxzPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iaik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNYXRjaCI+Z2V0TWF0Y2g8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5tYXRjaDwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZSI+Z2V0TW9kZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm1vZGU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyYW1ldGVycyI+Z2V0UGFyYW1ldGVyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIG9mIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJpb3JpdHkiPmdldFByaW9yaXR5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+cHJpb3JpdHk8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzaENvZGUiPmhhc2hDb2RlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWF0Y2hlc0J5TWF0Y2hPck5hbWUiPm1hdGNoZXNCeU1hdGNoT3JOYW1lPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUgaW5jbHVkZWRUZW1wbGF0ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX3BhcmFtZXRlcnMiPnBhcmFtZXRlcnM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5wYXJhbWV0ZXJzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3ZhcmlhYmxlcyI+dmFyaWFibGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+dmFyaWFibGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UZW1wbGF0ZSI+VGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UZW1wbGF0ZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkUGFyYW1ldGVyIj5hZGRQYXJhbWV0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZFBhcmFtZXRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyIHBhcmFtZXRlcik8L2NvZGU+PC9wPjxwPkFkZCBhIHBhcmFtZXRlciB0byB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyYW1ldGVyPC9jb2RlPiAtIHRoZSBwYXJhbWV0ZXIgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFZhcmlhYmxlIj5hZGRWYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkVmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlIHZhcik8L2NvZGU+PC9wPjxwPkFkZCBhIHZhcmlhYmxlIHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52YXI8L2NvZGU+IC0gdGhlIHZhcmlhYmxlIHRvIGFkZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcXVhbHMiPmVxdWFsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXF1YWxzPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgb2JqKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmo8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNYXRjaCI+Z2V0TWF0Y2g8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE1hdGNoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm1hdGNoPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIG1hdGNoIHZhbHVlLCBvciBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGUiPmdldE1vZGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE1vZGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bW9kZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBtb2RlIHZhbHVlLCBvciBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSBuYW1lLCBvciBudWxsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmFtZXRlcnMiPmdldFBhcmFtZXRlcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRQYXJhbWV0ZXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIG9mIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByaW9yaXR5Ij5nZXRQcmlvcml0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJpb3JpdHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+cHJpb3JpdHk8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgcHJpb3JpdHkgdmFsdWUsIG9yIG51bGw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzaENvZGUiPmhhc2hDb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmhhc2hDb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tYXRjaGVzQnlNYXRjaE9yTmFtZSI+bWF0Y2hlc0J5TWF0Y2hPck5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPm1hdGNoZXNCeU1hdGNoT3JOYW1lPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSBpbmNsdWRlZFRlbXBsYXRlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbmNsdWRlZFRlbXBsYXRlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50b1N0cmluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVmFyaWFibGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVmFyaWFibGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFkNjg2ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlZhcmlhYmxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVmFyaWFibGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5WYXJpYWJsZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudDwvcHJlPlRoZSA8Y29kZT54c2w6dmFyaWFibGU8L2NvZGU+IG1vZGVsIGVsZW1lbnQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVmFyaWFibGUiPlZhcmlhYmxlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXMiPmdldEFzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgSWYgYW4gWFNMVCAyLjAsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPmFzPC9jb2RlPiBhdHRyaWJ1dGUgaWYgb25lIGV4aXN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U2VsZWN0Ij5nZXRTZWxlY3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5zZWxlY3Q8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1ZhcmlhYmxlIj5WYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlZhcmlhYmxlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBcyI+Z2V0QXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEFzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPklmIGFuIFhTTFQgMi4wLCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSA8Y29kZT5hczwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBhcyB2YWx1ZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXROYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZSBpZiBvbmUgZXhpc3RzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgdmFyaWFibGUgbmFtZSwgb3IgbnVsbDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTZWxlY3QiPmdldFNlbGVjdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U2VsZWN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIDxjb2RlPnNlbGVjdDwvY29kZT4gYXR0cmlidXRlIGlmIG9uZSBleGlzdHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBzZWxlY3QgdmFsdWUsIG9yIG51bGw8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MGY1ZjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xBdHRyaWJ1dGU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xBdHRyaWJ1dGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE5vZGU8L3ByZT5BbiBhdHRyaWJ1dGUgb2YgYW4gZWxlbWVudCBpbiB0aGUgWFNMIG5hbWVzcGFjZS48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfbmFtZSI+bmFtZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3ZhbHVlIj52YWx1ZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMQXR0cmlidXRlIj5YU0xBdHRyaWJ1dGU8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IGVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB2YWx1ZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIG5hbWUgb2YgdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYWx1ZSI+Z2V0VmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhbHVlIG9mIHRoaXMuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9uYW1lIj5uYW1lPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5uYW1lPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTEF0dHJpYnV0ZSI+WFNMQXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMQXR0cmlidXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IGVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB2YWx1ZSk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBuYW1lIG9mIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBhdHRyaWJ1dGUncyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhbHVlIj5nZXRWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YWx1ZSBvZiB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgYXR0cmlidXRlJ3MgdmFsdWU8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgwYjBmMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xFbGVtZW50PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMRWxlbWVudDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZTwvcHJlPkFuIGVsZW1lbnQgaW4gdGhlIFhTTCBuYW1lc3BhY2UuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2F0dHJpYnV0ZXMiPmF0dHJpYnV0ZXM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfY2hpbGRFbGVtZW50cyI+Y2hpbGRFbGVtZW50czwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMRWxlbWVudCI+WFNMRWxlbWVudDwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZENoaWxkIj5hZGRDaGlsZDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEVsZW1lbnQgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSBjaGlsZCBlbGVtZW50IG9mIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXR0cmlidXRlIj5nZXRBdHRyaWJ1dGU8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEF0dHJpYnV0ZXMiPmdldEF0dHJpYnV0ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGF0dHJpYnV0ZXMga2V5ZWQgYnkgdGhlaXIgbmFtZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXR0cmlidXRlVmFsdWUiPmdldEF0dHJpYnV0ZVZhbHVlPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENoaWxkRWxlbWVudHMiPmdldENoaWxkRWxlbWVudHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2YgY2hpbGQgZWxlbWVudHM8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TW9kZWxUeXBlIj5nZXRNb2RlbFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRBdHRyaWJ1dGUiPnNldEF0dHJpYnV0ZTwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZSBhdHRyaWJ1dGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGFuIGF0dHJpYnV0ZSBvZiB0aGlzPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9hdHRyaWJ1dGVzIj5hdHRyaWJ1dGVzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5NYXAgPHN0cm9uZz5hdHRyaWJ1dGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2NoaWxkRWxlbWVudHMiPmNoaWxkRWxlbWVudHM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5jaGlsZEVsZW1lbnRzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xFbGVtZW50Ij5YU0xFbGVtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMRWxlbWVudDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkQ2hpbGQiPmFkZENoaWxkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRDaGlsZDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMRWxlbWVudCBlbGVtZW50KTwvY29kZT48L3A+PHA+QWRkIGEgY2hpbGQgZWxlbWVudCBvZiB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT4gLSB0aGUgY2hvbGQgZWxlbWVudDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBdHRyaWJ1dGUiPmdldEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlIDxzdHJvbmc+Z2V0QXR0cmlidXRlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PC9wPjxwPkdldCB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPiAtIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGU8L2NvZGU+IC0gdGhlIGF0dHJpYnV0ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBdHRyaWJ1dGVzIj5nZXRBdHRyaWJ1dGVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5NYXAgPHN0cm9uZz5nZXRBdHRyaWJ1dGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgYXR0cmlidXRlcyBrZXllZCBieSB0aGVpciBuYW1lcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5NYXA8L2NvZGU+IC0gdGhlIG1hcCBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kIGluc3RhbmNlczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBdHRyaWJ1dGVWYWx1ZSI+Z2V0QXR0cmlidXRlVmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEF0dHJpYnV0ZVZhbHVlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBhdHRyaWJ1dGUgdmFsdWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q2hpbGRFbGVtZW50cyI+Z2V0Q2hpbGRFbGVtZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldENoaWxkRWxlbWVudHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBsaXN0IG9mIGNoaWxkIGVsZW1lbnRzPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT4gLSB0aGUgbGlzdCBvZiBjaGlsZHJlbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPmdldE1vZGVsVHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRBdHRyaWJ1dGUiPnNldEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0QXR0cmlidXRlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xBdHRyaWJ1dGUgYXR0cmlidXRlKTwvY29kZT48L3A+PHA+QWRkIGFuIGF0dHJpYnV0ZSBvZiB0aGlzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hdHRyaWJ1dGU8L2NvZGU+IC0gdGhlIGF0dHJpYnV0ZSB0byBhZGQ8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4NzEzMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xNb2RlbE9iamVjdC5UeXBlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMTW9kZWxPYmplY3QuVHlwZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuRW51bTwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQVRUUklCVVRFIj5BVFRSSUJVVEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9DQUxMX1RFTVBMQVRFIj5DQUxMX1RFTVBMQVRFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRlVOQ1RJT04iPkZVTkNUSU9OPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1QT1JUIj5JTVBPUlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTkNMVURFIj5JTkNMVURFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfT1RIRVJfRUxFTUVOVCI+T1RIRVJfRUxFTUVOVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1BBUkFNIj5QQVJBTTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1NUWUxFU0hFRVQiPlNUWUxFU0hFRVQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9TVFlMRVNIRUVUX01PREVMIj5TVFlMRVNIRUVUX01PREVMPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVEVNUExBVEUiPlRFTVBMQVRFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVkFSSUFCTEUiPlZBUklBQkxFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ZhbHVlT2YiPnZhbHVlT2Y8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsdWVzIj52YWx1ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FUVFJJQlVURSI+QVRUUklCVVRFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5BVFRSSUJVVEU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQ0FMTF9URU1QTEFURSI+Q0FMTF9URU1QTEFURTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Q0FMTF9URU1QTEFURTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9GVU5DVElPTiI+RlVOQ1RJT048L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSA8c3Ryb25nPkZVTkNUSU9OPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNUE9SVCI+SU1QT1JUPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5JTVBPUlQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU5DTFVERSI+SU5DTFVERTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+SU5DTFVERTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9PVEhFUl9FTEVNRU5UIj5PVEhFUl9FTEVNRU5UPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5PVEhFUl9FTEVNRU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1BBUkFNIj5QQVJBTTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+UEFSQU08L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfU1RZTEVTSEVFVCI+U1RZTEVTSEVFVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+U1RZTEVTSEVFVDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9TVFlMRVNIRUVUX01PREVMIj5TVFlMRVNIRUVUX01PREVMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5TVFlMRVNIRUVUX01PREVMPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RFTVBMQVRFIj5URU1QTEFURTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+VEVNUExBVEU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVkFSSUFCTEUiPlZBUklBQkxFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGUgPHN0cm9uZz5WQVJJQUJMRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWx1ZU9mIj52YWx1ZU9mPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+dmFsdWVPZjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsdWVzIj52YWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGVbXSA8c3Ryb25nPnZhbHVlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlW108L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU1OTkyZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xNb2RlbE9iamVjdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTE1vZGVsT2JqZWN0PC9zdHJvbmc+Ci1leHRlbmRzIFBsYXRmb3JtT2JqZWN0PC9wcmU+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xNb2RlbE9iamVjdCI+WFNMTW9kZWxPYmplY3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNb2RlbFR5cGUiPmdldE1vZGVsVHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTE1vZGVsT2JqZWN0Ij5YU0xNb2RlbE9iamVjdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTE1vZGVsT2JqZWN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsVHlwZSI+Z2V0TW9kZWxUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIDxzdHJvbmc+Z2V0TW9kZWxUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0LlR5cGU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYjBlM2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMTm9kZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTE5vZGU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTE1vZGVsT2JqZWN0PC9wcmU+QSBub2RlIGluIHRoZSBYU0wgbmFtZXNwYWNlLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgc2hvcnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BVFRSSUJVVEVfTk9ERSI+QVRUUklCVVRFX05PREU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQSBjb25zdGFudCBmb3IgdGhlIGF0dHJpYnV0ZSBub2RlICg9ICZsdDtjb2RlJmd0O29yZy53M2MuZG9tLk5vZGUuQVRUUklCVVRFX05PREUmbHQ7L2NvZGUmZ3Q7KTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jb2x1bW5OdW1iZXIiPmNvbHVtbk51bWJlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBzaG9ydDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0VMRU1FTlRfTk9ERSI+RUxFTUVOVF9OT0RFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEEgY29uc3RhbnQgZm9yIHRoZSBlbGVtZW50IG5vZGUgKD0gJmx0O2NvZGUmZ3Q7b3JnLnczYy5kb20uTm9kZS5FTEVNRU5UX05PREUmbHQ7L2NvZGUmZ3Q7KTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9saW5lTnVtYmVyIj5saW5lTnVtYmVyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xOb2RlIj5YU0xOb2RlPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0Ci0gICAgICAgICAsCi0gICAgICBzaG9ydCB0eXBlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb2x1bW5OdW1iZXIiPmdldENvbHVtbk51bWJlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB0aGUgY29sdW1uIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExlbmd0aCI+Z2V0TGVuZ3RoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBsZW5ndGggb2YgdGhpcyBub2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TGluZU51bWJlciI+Z2V0TGluZU51bWJlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzaG9ydDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROb2RlVHlwZSI+Z2V0Tm9kZVR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHR5cGUgb2Ygbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE9mZnNldCI+Z2V0T2Zmc2V0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBkb2N1bWVudCBvZmZzZXQgd2hlcmUgdGhpcyBub2RlIG9jY3Vycy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc3R5bGVzaGVldCB0aGF0IHRoaXMgYmVsb25ncyB0by48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRDb2x1bW5OdW1iZXIiPnNldENvbHVtbk51bWJlcjwvYT4oaW50IGNvbHVtbk51bWJlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIGNvbHVtbnMgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldExlbmd0aCI+c2V0TGVuZ3RoPC9hPihpbnQgbGVuZ3RoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB0aGUgbGVuZ3RoIG9mIHRoaXMgbm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRMaW5lTnVtYmVyIj5zZXRMaW5lTnVtYmVyPC9hPihpbnQgbGluZU51bWJlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldE5hbWUiPnNldE5hbWU8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRPZmZzZXQiPnNldE9mZnNldDwvYT4oaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIGRvY3VtZW50IG9mZnNldCB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfQVRUUklCVVRFX05PREUiPkFUVFJJQlVURV9OT0RFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgc2hvcnQgPHN0cm9uZz5BVFRSSUJVVEVfTk9ERTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+QSBjb25zdGFudCBmb3IgdGhlIGF0dHJpYnV0ZSBub2RlICg9IDxjb2RlPm9yZy53M2MuZG9tLk5vZGUuQVRUUklCVVRFX05PREU8L2NvZGU+KTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfY29sdW1uTnVtYmVyIj5jb2x1bW5OdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgaW50IDxzdHJvbmc+Y29sdW1uTnVtYmVyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0VMRU1FTlRfTk9ERSI+RUxFTUVOVF9OT0RFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgc2hvcnQgPHN0cm9uZz5FTEVNRU5UX05PREU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPkEgY29uc3RhbnQgZm9yIHRoZSBlbGVtZW50IG5vZGUgKD0gPGNvZGU+b3JnLnczYy5kb20uTm9kZS5FTEVNRU5UX05PREU8L2NvZGU+KTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfbGluZU51bWJlciI+bGluZU51bWJlcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBpbnQgPHN0cm9uZz5saW5lTnVtYmVyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xOb2RlIj5YU0xOb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMTm9kZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldCBzdHlsZXNoZWV0Ci0gICAgICAgICAsCi0gICAgICBzaG9ydCB0eXBlKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29sdW1uTnVtYmVyIj5nZXRDb2x1bW5OdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0Q29sdW1uTnVtYmVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlNldCB0aGUgY29sdW1uIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgY29sdW1uIG51bWJlciB3aGVyZSB0aGlzIG5vZGUgb2NjdXJzIGluIHRoZSBYU0wgZmlsZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGVuZ3RoIj5nZXRMZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0TGVuZ3RoPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGVuZ3RoIG9mIHRoaXMgbm9kZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgbm9kZSBsZW5ndGg8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGluZU51bWJlciI+Z2V0TGluZU51bWJlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRMaW5lTnVtYmVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlNldCB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXROYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Tm9kZVR5cGUiPmdldE5vZGVUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHNob3J0IDxzdHJvbmc+Z2V0Tm9kZVR5cGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB0eXBlIG9mIG5vZGUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5zaG9ydDwvY29kZT4gLSBvbmUgb2YgPGNvZGU+RUxFTUVOVF9OT0RFPC9jb2RlPiBvciA8Y29kZT5BVFRSSUJVVEVfTk9ERTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0T2Zmc2V0Ij5nZXRPZmZzZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0T2Zmc2V0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgZG9jdW1lbnQgb2Zmc2V0IHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIGRvY3VtZW50IG9mZnNldDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZXNoZWV0Ij5nZXRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IDxzdHJvbmc+Z2V0U3R5bGVzaGVldDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHN0eWxlc2hlZXQgdGhhdCB0aGlzIGJlbG9uZ3MgdG8uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuU3R5bGVzaGVldDwvY29kZT4gLSB0aGUgc3R5bGVzaGVldDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRDb2x1bW5OdW1iZXIiPnNldENvbHVtbk51bWJlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0Q29sdW1uTnVtYmVyPC9zdHJvbmc+KGludCBjb2x1bW5OdW1iZXIpPC9jb2RlPjwvcD48cD5TZXQgdGhlIGNvbHVtbnMgbnVtYmVyIHdoZXJlIHRoaXMgbm9kZSBvY2N1cnMgaW4gdGhlIFhTTCBmaWxlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29sdW1uTnVtYmVyPC9jb2RlPiAtIHRoZSBjb2x1bW4gbnVtYmVyPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldExlbmd0aCI+c2V0TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRMZW5ndGg8L3N0cm9uZz4oaW50IGxlbmd0aCk8L2NvZGU+PC9wPjxwPlNldCB0aGUgbGVuZ3RoIG9mIHRoaXMgbm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmxlbmd0aDwvY29kZT4gLSB0aGUgbm9kZSBsZW5ndGg8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0TGluZU51bWJlciI+c2V0TGluZU51bWJlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0TGluZU51bWJlcjwvc3Ryb25nPihpbnQgbGluZU51bWJlcik8L2NvZGU+PC9wPjxwPlNldCB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhpcyBub2RlIG9jY3VycyBpbiB0aGUgWFNMIGZpbGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5saW5lTnVtYmVyPC9jb2RlPiAtIHRoZSBsaW5lIG51bWJlcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXROYW1lIj5zZXROYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXROYW1lPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0T2Zmc2V0Ij5zZXRPZmZzZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldE9mZnNldDwvc3Ryb25nPihpbnQgb2Zmc2V0KTwvY29kZT48L3A+PHA+U2V0IHRoZSBkb2N1bWVudCBvZmZzZXQgd2hlcmUgdGhpcyBub2RlIG9jY3Vycy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9mZnNldDwvY29kZT4gLSB0aGUgZG9jdW1lbnQgb2Zmc2V0PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RvU3RyaW5nIj50b1N0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dG9TdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlJlc29sdmVyRXh0ZW5zaW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlJlc29sdmVyRXh0ZW5zaW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NjhjOGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFJlc29sdmVyRXh0ZW5zaW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UmVzb2x2ZXJFeHRlbnNpb248L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlRPRE86IEphdmFkb2M8cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1Jlc29sdmVyRXh0ZW5zaW9uIj5SZXNvbHZlckV4dGVuc2lvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZSI+cmVzb2x2ZTwvYT4oSUZpbGUgZmlsZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBiYXNlTG9jYXRpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUmVzb2x2ZXJFeHRlbnNpb24iPlJlc29sdmVyRXh0ZW5zaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UmVzb2x2ZXJFeHRlbnNpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZSI+cmVzb2x2ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+cmVzb2x2ZTwvc3Ryb25nPihJRmlsZSBmaWxlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGJhc2VMb2NhdGlvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwdWJsaWNJZAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzeXN0ZW1JZCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmlsZTwvY29kZT48L3A+PHA+PGNvZGU+YmFzZUxvY2F0aW9uPC9jb2RlPjwvcD48cD48Y29kZT5wdWJsaWNJZDwvY29kZT48L3A+PHA+PGNvZGU+c3lzdGVtSWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlN0b3BQYXJzaW5nRXhjZXB0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlN0b3BQYXJzaW5nRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjY2U1MmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5TdG9wUGFyc2luZ0V4Y2VwdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU3RvcFBhcnNpbmdFeGNlcHRpb248L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5TdG9wUGFyc2luZ0V4Y2VwdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcueG1sLnNheC5TQVhFeGNlcHRpb248L3ByZT5BbiBleGNlcHRpb24gaW5kaWNhdGluZyB0aGF0IHRoZSBwYXJzaW5nIHNob3VsZCBzdG9wLiBUaGlzIGlzIHVzdWFsbHkKLSB0cmlnZ2VyZWQgd2hlbiB0aGUgdG9wLWxldmVsIGVsZW1lbnQgaGFzIGJlZW4gZm91bmQuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdG9wUGFyc2luZ0V4Y2VwdGlvbiI+U3RvcFBhcnNpbmdFeGNlcHRpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0b3BQYXJzaW5nRXhjZXB0aW9uIj5TdG9wUGFyc2luZ0V4Y2VwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0b3BQYXJzaW5nRXhjZXB0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdHMgYW4gaW5zdGFuY2Ugb2YgPGNvZGU+U3RvcFBhcnNpbmdFeGNlcHRpb248L2NvZGU+IHdpdGggYQotIDxjb2RlPm51bGw8L2NvZGU+IGRldGFpbCBtZXNzYWdlLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlhTTFZlcnNpb25IYW5kbGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlhTTFZlcnNpb25IYW5kbGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMGYzMWEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFZlcnNpb25IYW5kbGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVmVyc2lvbkhhbmRsZXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlcjwvcHJlPkEgc2ltcGxlIFhNTCBwYXJzZXIgdG8gZmluZCB0aGUgWFNMIHZlcnNpb24gb2YgYSBnaXZlbiBYTUwgZmlsZSwgZXhwZWN0ZWRseSBhIFhTTFQgc3R5bGVzaGVldC48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVmVyc2lvbkhhbmRsZXIiPlhTTFZlcnNpb25IYW5kbGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21tZW50Ij5jb21tZW50PC9hPihjaGFyW10gY2gKLSAgICAgICAgICwKLSAgICAgIGludCBzdGFydAotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbmRDREFUQSI+ZW5kQ0RBVEE8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbmREVEQiPmVuZERURDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VuZEVudGl0eSI+ZW5kRW50aXR5PC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXJyb3IiPmVycm9yPC9hPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZhdGFsRXJyb3IiPmZhdGFsRXJyb3I8L2E+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uIGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmVyc2lvbkF0dHJpYnV0ZSI+Z2V0VmVyc2lvbkF0dHJpYnV0ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhZG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFyc2VDb250ZW50cyI+cGFyc2VDb250ZW50czwvYT4ob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UgY29udGVudHMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVE9ETzogQWRkIEphdmFkb2M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZUVudGl0eSI+cmVzb2x2ZUVudGl0eTwvYT4oamF2YS5sYW5nLlN0cmluZyBwdWJsaWNJZAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzeXN0ZW1JZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGFydENEQVRBIj5zdGFydENEQVRBPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnREVEQiPnN0YXJ0RFREPC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRFbGVtZW50Ij5zdGFydEVsZW1lbnQ8L2E+KGphdmEubGFuZy5TdHJpbmcgdXJpCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGVsZW1lbnROYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHF1YWxpZmllZE5hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMgYXR0cmlidXRlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGFydEVudGl0eSI+c3RhcnRFbnRpdHk8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF93YXJuaW5nIj53YXJuaW5nPC9hPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFZlcnNpb25IYW5kbGVyIj5YU0xWZXJzaW9uSGFuZGxlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFZlcnNpb25IYW5kbGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRPRE86IEFkZCBKYXZhZG9jPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29tbWVudCI+Y29tbWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y29tbWVudDwvc3Ryb25nPihjaGFyW10gY2gKLSAgICAgICAgICwKLSAgICAgIGludCBzdGFydAotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2g8L2NvZGU+PC9wPjxwPjxjb2RlPnN0YXJ0PC9jb2RlPjwvcD48cD48Y29kZT5sZW5ndGg8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VuZENEQVRBIj5lbmRDREFUQTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZW5kQ0RBVEE8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VuZERURCI+ZW5kRFREPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5lbmREVEQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VuZEVudGl0eSI+ZW5kRW50aXR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5lbmRFbnRpdHk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcnJvciI+ZXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmVycm9yPC9zdHJvbmc+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZhdGFsRXJyb3IiPmZhdGFsRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmZhdGFsRXJyb3I8L3N0cm9uZz4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24gZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmVyc2lvbkF0dHJpYnV0ZSI+Z2V0VmVyc2lvbkF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VmVyc2lvbkF0dHJpYnV0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YWRvYzwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFyc2VDb250ZW50cyI+cGFyc2VDb250ZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+cGFyc2VDb250ZW50czwvc3Ryb25nPihvcmcueG1sLnNheC5JbnB1dFNvdXJjZSBjb250ZW50cyk8L2NvZGU+PC9wPjxwPlRPRE86IEFkZCBKYXZhZG9jPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZW50czwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmlvLklPRXhjZXB0aW9uPC9jb2RlPjwvcD48cD48Y29kZT5qYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uPC9jb2RlPjwvcD48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc29sdmVFbnRpdHkiPnJlc29sdmVFbnRpdHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2UgPHN0cm9uZz5yZXNvbHZlRW50aXR5PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnB1YmxpY0lkPC9jb2RlPjwvcD48cD48Y29kZT5zeXN0ZW1JZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LklucHV0U291cmNlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFydENEQVRBIj5zdGFydENEQVRBPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydENEQVRBPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFydERURCI+c3RhcnREVEQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0YXJ0RFREPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwdWJsaWNJZAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzeXN0ZW1JZCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT48L3A+PHA+PGNvZGU+cHVibGljSWQ8L2NvZGU+PC9wPjxwPjxjb2RlPnN5c3RlbUlkPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFydEVsZW1lbnQiPnN0YXJ0RWxlbWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnRFbGVtZW50PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGVsZW1lbnROYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHF1YWxpZmllZE5hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy54bWwuc2F4LkF0dHJpYnV0ZXMgYXR0cmlidXRlcyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dXJpPC9jb2RlPjwvcD48cD48Y29kZT5lbGVtZW50TmFtZTwvY29kZT48L3A+PHA+PGNvZGU+cXVhbGlmaWVkTmFtZTwvY29kZT48L3A+PHA+PGNvZGU+YXR0cmlidXRlczwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnRFbnRpdHkiPnN0YXJ0RW50aXR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydEVudGl0eTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3dhcm5pbmciPndhcm5pbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPndhcm5pbmc8L3N0cm9uZz4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24gZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLk1lc3NhZ2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjOWU3ZTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBNZXNzYWdlczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk1lc3NhZ2VzPC9zdHJvbmc+Ci1leHRlbmRzIE5MUzwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VKb2IiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZUpvYjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlTWJUZXh0Ij5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VNYlRleHQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVByb2plY3QiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVByb2plY3Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVdvcmtzcGFjZSI+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlV29ya3NwYWNlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lIj5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lRmlsZSI+Q2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZUZpbGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0Vycm9yTGV2ZWxUZXh0Ij5FcnJvckxldmVsVGV4dDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdCI+RXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSWdub3JlTGV2ZWxUZXh0Ij5JZ25vcmVMZXZlbFRleHQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01haW5QcmVmZXJlbmNlUGFnZSI+TWFpblByZWZlcmVuY2VQYWdlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xDb2x1bW5UZW1wbGF0ZURlc2NyaXB0aW9uIj5OZXdYU0xDb2x1bW5UZW1wbGF0ZURlc2NyaXB0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xDb2x1bW5UZW1wbGF0ZU5hbWUiPk5ld1hTTENvbHVtblRlbXBsYXRlTmFtZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTmV3WFNMRmlsZUFscmVhZEV4aXN0c0Vycm9yIj5OZXdYU0xGaWxlQWxyZWFkRXhpc3RzRXJyb3I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05ld1hTTEZpbGVQYWdlRGVzY3JpcHRpb24iPk5ld1hTTEZpbGVQYWdlRGVzY3JpcHRpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05ld1hTTEZpbGVQYWdlVGl0bGUiPk5ld1hTTEZpbGVQYWdlVGl0bGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05ld1hTTEZpbGVQYWdlV2luZG93VGl0bGUiPk5ld1hTTEZpbGVQYWdlV2luZG93VGl0bGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05ld1hTTEZpbGVXaXphcmRFeHRlbnNpb25FcnJvciI+TmV3WFNMRmlsZVdpemFyZEV4dGVuc2lvbkVycm9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xMaW5rUHJlZmVyZW5jZVBhZ2UiPk5ld1hTTExpbmtQcmVmZXJlbmNlUGFnZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTmV3WFNMU2VsZWN0VGVtcGxhdGUiPk5ld1hTTFNlbGVjdFRlbXBsYXRlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xUZW1wbGF0ZURlc2NyaXB0aW9uIj5OZXdYU0xUZW1wbGF0ZURlc2NyaXB0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OZXdYU0xUZW1wbGF0ZVByZXZpZXdUaXRsZSI+TmV3WFNMVGVtcGxhdGVQcmV2aWV3VGl0bGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05ld1hTTFVzZVRlbXBsYXRlQnV0dG9uVGV4dCI+TmV3WFNMVXNlVGVtcGxhdGVCdXR0b25UZXh0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9Ob0NvbnRlbnRBc3Npc3RhbmNlIj5Ob0NvbnRlbnRBc3Npc3RhbmNlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9PcGVuIj5PcGVuPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyUGFnZURlc2NyaXB0aW9uIj5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyUGFnZURlc2NyaXB0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9XYXJuaW5nTGV2ZWxUZXh0Ij5XYXJuaW5nTGV2ZWxUZXh0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlIj5YU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlTW9kZSI+WFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZU1vZGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFN5bnRheENvbG9yaW5nUGFnZSI+WFNMU3ludGF4Q29sb3JpbmdQYWdlPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF94c2x0U3R5bGVEb2N1bWVudCI+eHNsdFN0eWxlRG9jdW1lbnQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QYWdlU2V2ZXJpdHlMZXZlbCI+WFNMVmFsaWRhdGlvblBhZ2VTZXZlcml0eUxldmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUNhbGxUZW1wbGF0ZXNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VDYWxsVGVtcGxhdGVzTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2lyY3VsYXJSZWZlcmVuY2VzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlQ2lyY3VsYXJSZWZlcmVuY2VzTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlRHVwbGljYXRlUGFyYW1ldGVyTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlRHVwbGljYXRlUGFyYW1ldGVyTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlSW1wb3J0c0luY2x1ZGVzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlSW1wb3J0c0luY2x1ZGVzTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTXNnRXJyb3IiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTXNnRXJyb3I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtZXRlckF0dHJpYnV0ZUxhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW10ZXJzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtdGVyc0xhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU5hbWVkVGVtcGxhdGVzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTmFtZWRUZW1wbGF0ZXNMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlRGVzY3JpcHRpb24iPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZURlc2NyaXB0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2VUaXRsZSI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlVGl0bGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW1ldGVyRW1wdHlBdHRyaWJ1dGVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbWV0ZXJFbXB0eUF0dHJpYnV0ZUxhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVRlbXBsYXRlQ29uZmxpY3RzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVGVtcGxhdGVDb25mbGljdHNMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVkVGVtcGxhdGVzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlZFRlbXBsYXRlc0xhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZUltcG9ydEluY2x1ZGVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVJbXBvcnRJbmNsdWRlTGFiZWw8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aExhYmVsPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVhQYXRoU3ludGF4TGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhTeW50YXhMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTWVzc2FnZXMiPk1lc3NhZ2VzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZUpvYiI+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlSm9iPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZUpvYjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VNYlRleHQiPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZU1iVGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VNYlRleHQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlUHJvamVjdCI+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlUHJvamVjdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2VQcm9qZWN0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVdvcmtzcGFjZSI+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlV29ya3NwYWNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZVdvcmtzcGFjZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lIj5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0VGVtcGxhdGVOYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFRlbXBsYXRlTmFtZUZpbGUiPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWVGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RUZW1wbGF0ZU5hbWVGaWxlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0Vycm9yTGV2ZWxUZXh0Ij5FcnJvckxldmVsVGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5FcnJvckxldmVsVGV4dDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0Ij5FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3Q8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSWdub3JlTGV2ZWxUZXh0Ij5JZ25vcmVMZXZlbFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SWdub3JlTGV2ZWxUZXh0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01haW5QcmVmZXJlbmNlUGFnZSI+TWFpblByZWZlcmVuY2VQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1haW5QcmVmZXJlbmNlUGFnZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xDb2x1bW5UZW1wbGF0ZURlc2NyaXB0aW9uIj5OZXdYU0xDb2x1bW5UZW1wbGF0ZURlc2NyaXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTENvbHVtblRlbXBsYXRlRGVzY3JpcHRpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMQ29sdW1uVGVtcGxhdGVOYW1lIj5OZXdYU0xDb2x1bW5UZW1wbGF0ZU5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TmV3WFNMQ29sdW1uVGVtcGxhdGVOYW1lPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTEZpbGVBbHJlYWRFeGlzdHNFcnJvciI+TmV3WFNMRmlsZUFscmVhZEV4aXN0c0Vycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTEZpbGVBbHJlYWRFeGlzdHNFcnJvcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xGaWxlUGFnZURlc2NyaXB0aW9uIj5OZXdYU0xGaWxlUGFnZURlc2NyaXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTEZpbGVQYWdlRGVzY3JpcHRpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMRmlsZVBhZ2VUaXRsZSI+TmV3WFNMRmlsZVBhZ2VUaXRsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xGaWxlUGFnZVRpdGxlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTEZpbGVQYWdlV2luZG93VGl0bGUiPk5ld1hTTEZpbGVQYWdlV2luZG93VGl0bGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TmV3WFNMRmlsZVBhZ2VXaW5kb3dUaXRsZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xGaWxlV2l6YXJkRXh0ZW5zaW9uRXJyb3IiPk5ld1hTTEZpbGVXaXphcmRFeHRlbnNpb25FcnJvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xGaWxlV2l6YXJkRXh0ZW5zaW9uRXJyb3I8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMTGlua1ByZWZlcmVuY2VQYWdlIj5OZXdYU0xMaW5rUHJlZmVyZW5jZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TmV3WFNMTGlua1ByZWZlcmVuY2VQYWdlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTFNlbGVjdFRlbXBsYXRlIj5OZXdYU0xTZWxlY3RUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5OZXdYU0xTZWxlY3RUZW1wbGF0ZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OZXdYU0xUZW1wbGF0ZURlc2NyaXB0aW9uIj5OZXdYU0xUZW1wbGF0ZURlc2NyaXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTFRlbXBsYXRlRGVzY3JpcHRpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTmV3WFNMVGVtcGxhdGVQcmV2aWV3VGl0bGUiPk5ld1hTTFRlbXBsYXRlUHJldmlld1RpdGxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTFRlbXBsYXRlUHJldmlld1RpdGxlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05ld1hTTFVzZVRlbXBsYXRlQnV0dG9uVGV4dCI+TmV3WFNMVXNlVGVtcGxhdGVCdXR0b25UZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5ld1hTTFVzZVRlbXBsYXRlQnV0dG9uVGV4dDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9Ob0NvbnRlbnRBc3Npc3RhbmNlIj5Ob0NvbnRlbnRBc3Npc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5vQ29udGVudEFzc2lzdGFuY2U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfT3BlbiI+T3BlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5PcGVuPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1ZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJQYWdlRGVzY3JpcHRpb24iPlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJQYWdlRGVzY3JpcHRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclBhZ2VEZXNjcmlwdGlvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9XYXJuaW5nTGV2ZWxUZXh0Ij5XYXJuaW5nTGV2ZWxUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPldhcm5pbmdMZXZlbFRleHQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZSI+WFNMRWRpdG9yT3ZlcnJpZGVUZW1wbGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTEVkaXRvck92ZXJyaWRlVGVtcGxhdGVNb2RlIj5YU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlTW9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xFZGl0b3JPdmVycmlkZVRlbXBsYXRlTW9kZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xTeW50YXhDb2xvcmluZ1BhZ2UiPlhTTFN5bnRheENvbG9yaW5nUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xTeW50YXhDb2xvcmluZ1BhZ2U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfeHNsdFN0eWxlRG9jdW1lbnQiPnhzbHRTdHlsZURvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnhzbHRTdHlsZURvY3VtZW50PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QYWdlU2V2ZXJpdHlMZXZlbCI+WFNMVmFsaWRhdGlvblBhZ2VTZXZlcml0eUxldmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QYWdlU2V2ZXJpdHlMZXZlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUNhbGxUZW1wbGF0ZXNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VDYWxsVGVtcGxhdGVzTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VDYWxsVGVtcGxhdGVzTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VDaXJjdWxhclJlZmVyZW5jZXNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VDaXJjdWxhclJlZmVyZW5jZXNMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUNpcmN1bGFyUmVmZXJlbmNlc0xhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlRHVwbGljYXRlUGFyYW1ldGVyTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlRHVwbGljYXRlUGFyYW1ldGVyTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VEdXBsaWNhdGVQYXJhbWV0ZXJMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZUltcG9ydHNJbmNsdWRlc0xhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlSW1wb3J0c0luY2x1ZGVzTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1heEVycm9yc0xhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTXNnRXJyb3IiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWF4RXJyb3JzTXNnRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VNYXhFcnJvcnNNc2dFcnJvcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZU1pc3NpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW1ldGVyQXR0cmlidXRlTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW1ldGVyQXR0cmlidXRlTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VNaXNzaW5nUGFyYW10ZXJzTGFiZWwiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtdGVyc0xhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTWlzc2luZ1BhcmFtdGVyc0xhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlTmFtZWRUZW1wbGF0ZXNMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VOYW1lZFRlbXBsYXRlc0xhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlTmFtZWRUZW1wbGF0ZXNMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2VEZXNjcmlwdGlvbiI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlRGVzY3JpcHRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlRGVzY3JpcHRpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlVGl0bGUiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZVRpdGxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZVRpdGxlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW1ldGVyRW1wdHlBdHRyaWJ1dGVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYXJhbWV0ZXJFbXB0eUF0dHJpYnV0ZUxhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW1ldGVyRW1wdHlBdHRyaWJ1dGVMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhcmFtdGVyc1dpdGhvdXRWYWx1ZUxhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFyYW10ZXJzV2l0aG91dFZhbHVlTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VUZW1wbGF0ZUNvbmZsaWN0c0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVRlbXBsYXRlQ29uZmxpY3RzTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VUZW1wbGF0ZUNvbmZsaWN0c0xhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlVW5yZXNvbHZlZFRlbXBsYXRlc0xhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZWRUZW1wbGF0ZXNMYWJlbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZWRUZW1wbGF0ZXNMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVVucmVzb2x2ZUltcG9ydEluY2x1ZGVMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVJbXBvcnRJbmNsdWRlTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VVbnJlc29sdmVJbXBvcnRJbmNsdWRlTGFiZWw8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aExhYmVsIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVhQYXRoTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aExhYmVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhTeW50YXhMYWJlbCI+WFNMVmFsaWRhdGlvblByZWZlcmVuY2VYUGF0aFN5bnRheExhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlWFBhdGhTeW50YXhMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTWVzc2FnZXMiPk1lc3NhZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuUHJlZmVyZW5jZUluaXRpYWxpemVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMzdhMTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuUHJlZmVyZW5jZUluaXRpYWxpemVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlByZWZlcmVuY2VJbml0aWFsaXplcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPlByZWZlcmVuY2VJbml0aWFsaXplcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyI+aW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1ByZWZlcmVuY2VJbml0aWFsaXplciI+UHJlZmVyZW5jZUluaXRpYWxpemVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UHJlZmVyZW5jZUluaXRpYWxpemVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMiPmluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzk1ZjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0w8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0w8L3N0cm9uZz4KLWV4dGVuZHMgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MPC9wcmU+U3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMIGltcGxlbWVudHMgY29udGVudCBhc3Npc3RhbmNlIGZvcgotIGF0dHJpYnV0ZXMgYW5kIG90aGVyIFhQYXRoIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1N0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTCI+U3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbmZpZ3VyZWRDb250ZW50VHlwZXMiPmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXM8L2E+KElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb250ZW50QXNzaXN0UHJvY2Vzc29ycyI+Z2V0Q29udGVudEFzc2lzdFByb2Nlc3NvcnM8L2E+KElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHBhcnRpdGlvblR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJuIHRoZSBwcm9jZXNzb3JzIGZvciB0aGUgY3VycmVudCBjb250ZW50IHR5cGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElIeXBlcmxpbmtEZXRlY3RvcltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEh5cGVybGlua0RldGVjdG9ycyI+Z2V0SHlwZXJsaW5rRGV0ZWN0b3JzPC9hPihJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIExpbmVTdHlsZVByb3ZpZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExpbmVTdHlsZVByb3ZpZGVyRm9yWFNMIj5nZXRMaW5lU3R5bGVQcm92aWRlckZvclhTTDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhTTCI+U3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+U3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWFNMPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbmZpZ3VyYXRpb24gZm9yIFhTTCBDb250ZW50IFR5cGVzPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyI+Z2V0Q29uZmlndXJlZENvbnRlbnRUeXBlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gPHN0cm9uZz5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzPC9zdHJvbmc+KElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c291cmNlVmlld2VyPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZ1tdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZW50QXNzaXN0UHJvY2Vzc29ycyI+Z2V0Q29udGVudEFzc2lzdFByb2Nlc3NvcnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSUNvbnRlbnRBc3Npc3RQcm9jZXNzb3JbXSA8c3Ryb25nPmdldENvbnRlbnRBc3Npc3RQcm9jZXNzb3JzPC9zdHJvbmc+KElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHBhcnRpdGlvblR5cGUpPC9jb2RlPjwvcD48cD5SZXR1cm4gdGhlIHByb2Nlc3NvcnMgZm9yIHRoZSBjdXJyZW50IGNvbnRlbnQgdHlwZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNvdXJjZVZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+cGFydGl0aW9uVHlwZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklDb250ZW50QXNzaXN0UHJvY2Vzc29yW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEh5cGVybGlua0RldGVjdG9ycyI+Z2V0SHlwZXJsaW5rRGV0ZWN0b3JzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElIeXBlcmxpbmtEZXRlY3RvcltdIDxzdHJvbmc+Z2V0SHlwZXJsaW5rRGV0ZWN0b3JzPC9zdHJvbmc+KElTb3VyY2VWaWV3ZXIgc291cmNlVmlld2VyKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c291cmNlVmlld2VyPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUh5cGVybGlua0RldGVjdG9yW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldExpbmVTdHlsZVByb3ZpZGVyRm9yWFNMIj5nZXRMaW5lU3R5bGVQcm92aWRlckZvclhTTDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBMaW5lU3R5bGVQcm92aWRlciA8c3Ryb25nPmdldExpbmVTdHlsZVByb3ZpZGVyRm9yWFNMPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+TGluZVN0eWxlUHJvdmlkZXI8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJQ29uc3RhbnRzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjA3ZjRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJQ29uc3RhbnRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWw8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xVSUNvbnN0YW50czwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFVJQ29uc3RhbnRzPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTkVXX0ZJTEVfVEVNUExBVEVfTkFNRSI+TkVXX0ZJTEVfVEVNUExBVEVfTkFNRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVEVNUExBVEVfQ09OVEVYVF9YU0xfTkVXIj5URU1QTEFURV9DT05URVhUX1hTTF9ORVc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFVJQ29uc3RhbnRzIj5YU0xVSUNvbnN0YW50czwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9ORVdfRklMRV9URU1QTEFURV9OQU1FIj5ORVdfRklMRV9URU1QTEFURV9OQU1FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5FV19GSUxFX1RFTVBMQVRFX05BTUU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVEVNUExBVEVfQ09OVEVYVF9YU0xfTkVXIj5URU1QTEFURV9DT05URVhUX1hTTF9ORVc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VEVNUExBVEVfQ09OVEVYVF9YU0xfTkVXPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xVSUNvbnN0YW50cyI+WFNMVUlDb25zdGFudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xVSUNvbnN0YW50czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW4uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMmJhZGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW4uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFVJUGx1Z2luPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVUlQbHVnaW48L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbjwvcHJlPlRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9QTFVHSU5fSUQiPlBMVUdJTl9JRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgcGx1Z2luIGlkIGZvciB0aGlzIHBsdWdpbi48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVUlQbHVnaW4iPlhTTFVJUGx1Z2luPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBDb250ZXh0VHlwZVJlZ2lzdHJ5PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5Ij5nZXRUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHRlbXBsYXRlIGNvbnRleHQgdHlwZSByZWdpc3RyeSBmb3IgdGhlIHhzbCBwbHVnaW4uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFRlbXBsYXRlU3RvcmU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGVtcGxhdGVTdG9yZSI+Z2V0VGVtcGxhdGVTdG9yZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHRlbXBsYXRlIHN0b3JlIGZvciB0aGUgeHNsIHRlbXBsYXRlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9nIj5sb2c8L2E+KGphdmEubGFuZy5FeGNlcHRpb24gZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9nIj5sb2c8L2E+KENvcmVFeGNlcHRpb24gZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEuaW8uRmlsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tYWtlRmlsZUZvciI+bWFrZUZpbGVGb3I8L2E+KGphdmEubGFuZy5TdHJpbmcgZGlyZWN0b3J5Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbGVuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0Ij5zdGFydDwvYT4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0b3AiPnN0b3A8L2E+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1BMVUdJTl9JRCI+UExVR0lOX0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlBMVUdJTl9JRDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIHBsdWdpbiBpZCBmb3IgdGhpcyBwbHVnaW4uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVUlQbHVnaW4iPlhTTFVJUGx1Z2luPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVUlQbHVnaW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VGhlIGNvbnN0cnVjdG9yPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJUGx1Z2luIDxzdHJvbmc+Z2V0RGVmYXVsdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW48L2NvZGU+IC0gdGhlIHNoYXJlZCBpbnN0YW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZW1wbGF0ZUNvbnRleHRSZWdpc3RyeSI+Z2V0VGVtcGxhdGVDb250ZXh0UmVnaXN0cnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgQ29udGV4dFR5cGVSZWdpc3RyeSA8c3Ryb25nPmdldFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHRlbXBsYXRlIGNvbnRleHQgdHlwZSByZWdpc3RyeSBmb3IgdGhlIHhzbCBwbHVnaW4uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db250ZXh0VHlwZVJlZ2lzdHJ5PC9jb2RlPiAtIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IHR5cGUgcmVnaXN0cnkgZm9yIHRoZSB4c2wgcGx1Z2luPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRlbXBsYXRlU3RvcmUiPmdldFRlbXBsYXRlU3RvcmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVGVtcGxhdGVTdG9yZSA8c3Ryb25nPmdldFRlbXBsYXRlU3RvcmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4c2wgdGVtcGxhdGVzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGVtcGxhdGVTdG9yZTwvY29kZT4gLSB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4c2wgdGVtcGxhdGVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xvZyI+bG9nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5sb2c8L3N0cm9uZz4oamF2YS5sYW5nLkV4Y2VwdGlvbiBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2ciPmxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bG9nPC9zdHJvbmc+KENvcmVFeGNlcHRpb24gZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbWFrZUZpbGVGb3IiPm1ha2VGaWxlRm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEuaW8uRmlsZSA8c3Ryb25nPm1ha2VGaWxlRm9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZGlyZWN0b3J5Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbGVuYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kaXJlY3Rvcnk8L2NvZGU+PC9wPjxwPjxjb2RlPmZpbGVuYW1lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5pby5GaWxlPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5pby5JT0V4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydDwvc3Ryb25nPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9wIj5zdG9wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdG9wPC9zdHJvbmc+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5FeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3RFRERmlsZVdpemFyZERlbGVnYXRlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjdhNzkxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3RFRERmlsZVdpemFyZERlbGVnYXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTmV3RFRERmlsZVdpemFyZERlbGVnYXRlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TmV3RFRERmlsZVdpemFyZERlbGVnYXRlPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTmV3RFRERmlsZVdpemFyZERlbGVnYXRlIj5OZXdEVERGaWxlV2l6YXJkRGVsZWdhdGU8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJV29ya2JlbmNoV2luZG93IHdpbmRvdyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ydW4iPnJ1bjwvYT4oSUFjdGlvbiBhY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0aW9uQ2hhbmdlZCI+c2VsZWN0aW9uQ2hhbmdlZDwvYT4oSUFjdGlvbiBhY3Rpb24KLSAgICAgICAgICwKLSAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX05ld0RUREZpbGVXaXphcmREZWxlZ2F0ZSI+TmV3RFRERmlsZVdpemFyZERlbGVnYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TmV3RFRERmlsZVdpemFyZERlbGVnYXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmRpc3Bvc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXQiPmluaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXQ8L3N0cm9uZz4oSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPndpbmRvdzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcnVuIj5ydW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJ1bjwvc3Ryb25nPihJQWN0aW9uIGFjdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWN0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3Rpb25DaGFuZ2VkIj5zZWxlY3Rpb25DaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZWxlY3Rpb25DaGFuZ2VkPC9zdHJvbmc+KElBY3Rpb24gYWN0aW9uCi0gICAgICAgICAsCi0gICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YWN0aW9uPC9jb2RlPjwvcD48cD48Y29kZT5zZWxlY3Rpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNzg2MTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9uczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld1dTRExGaWxlV2l6YXJkRGVsZWdhdGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlIj5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+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+PGgyPjxhIG5hbWU9ImNvbl9OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlIj5OZXdXU0RMRmlsZVdpemFyZERlbGVnYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TmV3V1NETEZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+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+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dpemFyZEFjdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXaXphcmRBY3Rpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRlMmIzOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dpemFyZEFjdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld1dpemFyZEFjdGlvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld1dpemFyZEFjdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBBY3Rpb248L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTmV3V2l6YXJkQWN0aW9uIj5OZXdXaXphcmRBY3Rpb248L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgaWQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ydW4iPnJ1bjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFNlbGVjdGlvbiI+c2V0U2VsZWN0aW9uPC9hPihJU2VsZWN0aW9uIHNlbGVjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OZXdXaXphcmRBY3Rpb24iPk5ld1dpemFyZEFjdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld1dpemFyZEFjdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGlkKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcnVuIj5ydW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJ1bjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0U2VsZWN0aW9uIj5zZXRTZWxlY3Rpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFNlbGVjdGlvbjwvc3Ryb25nPihJU2VsZWN0aW9uIHNlbGVjdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c2VsZWN0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAwYjdmNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZSI+TmV3WE1MRmlsZVdpemFyZERlbGVnYXRlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+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+PGgyPjxhIG5hbWU9ImNvbl9OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUiPk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld1hNTEZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+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+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjYjM3MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05ld1hTREZpbGVXaXphcmREZWxlZ2F0ZSI+TmV3WFNERmlsZVdpemFyZERlbGVnYXRlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+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+PGgyPjxhIG5hbWU9ImNvbl9OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUiPk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld1hTREZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+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+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMwNmFmOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZSI+TmV3WFNMRmlsZVdpemFyZERlbGVnYXRlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+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+PGgyPjxhIG5hbWU9ImNvbl9OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUiPk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+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+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmJmNjc1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9wcmU+VGhpcyBjbGFzcyBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgZm9yIGF0dHJpYnV0ZXMgdGhhdCBjb250YWluIHRoZSAieyIgY2hhcmFjdGVyIGF0dHJpYnV0ZS48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BdHRyaWJ1dGVDb250ZW50QXNzaXN0Ij5BdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0F0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiPkF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciB0aGUgWFNMIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgdGhlIHRlc3QgYXR0cmlidXRlLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTdjNjc3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9wcmU+Q2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdGFuY2UgcHJvdmlkZXMgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGZvcgotIDx4c2w6Y2FsbC13aXRoPiB0ZW1wbGF0ZXMuICAgSXQgd2lsbCBwcm92aWRlIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlCi0gbmFtZWQgdGVtcGxhdGVzLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQ2FsbFRlbXBsYXRlQ29udGVudEFzc2lzdFJlcXVlc3QiPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBZGRpdGlvbmFsSW5mbyI+Z2V0QWRkaXRpb25hbEluZm88L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5UZW1wbGF0ZSB0ZW1wbGF0ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEFkZGl0aW9uYWxJbmZvIj5nZXRBZGRpdGlvbmFsSW5mbzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0QWRkaXRpb25hbEluZm88L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlIHRlbXBsYXRlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZW1wbGF0ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGZhNmFjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFByb2Nlc3NvckZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBDb250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5BIGZhY3RvcnkgY2xhc3MgdGhhdCByZWFkcyBhbiBlY2xpcHNlIGV4dGVuc2lvbiBwb2ludCBmb3IgQ29udGVudCBBc3Npc3QKLSBQcm9jZXNzb3JzLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5Ij5Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBJQ29udGVudEFzc2lzdFByb2Nlc3NvcltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVByb2Nlc3NvcnMiPmNyZWF0ZVByb2Nlc3NvcnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIHRoZSBuZWNlc3NhcnkgQ29udGVudCBBc3Npc3QgUHJvY2Vzc29ycyB0aGF0IGhhdmUgYmVlbgotIENvbnRyaWJ1dGVkIHRvIHRoZSBYU0wgRWRpdG9yIGNvbmZpZ3VyYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQ29udGVudEFzc2lzdFByb2Nlc3NvckZhY3RvcnkiPkNvbnRlbnRBc3Npc3RQcm9jZXNzb3JGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q29udGVudEFzc2lzdFByb2Nlc3NvckZhY3Rvcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlUHJvY2Vzc29ycyI+Y3JlYXRlUHJvY2Vzc29yczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJQ29udGVudEFzc2lzdFByb2Nlc3NvcltdIDxzdHJvbmc+Y3JlYXRlUHJvY2Vzc29yczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGVzIHRoZSBuZWNlc3NhcnkgQ29udGVudCBBc3Npc3QgUHJvY2Vzc29ycyB0aGF0IGhhdmUgYmVlbgotIENvbnRyaWJ1dGVkIHRvIHRoZSBYU0wgRWRpdG9yIGNvbmZpZ3VyYXRpb24uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29udGVudEFzc2lzdFByb2Nlc3NvcltdPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWYxOGU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9wcmU+UHJvdmlkZXMgY29udGVudCBhc3Npc3RhbmNlIGZvciB4c2wgZWxlbWVudHMgdGhhdCBoYXZlIHRoZQotIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIGF0dHJpYnV0ZS4gIFRoaXMgd2lsbCBwcm92aWRlIGEgbGlzdCAKLSBvZiBhbGwga25vd24gcmVzdWx0IHByZWZpeGVzIHRoYXQgYXJlbid0IGN1cnJlbnRseSBpbiB0aGUgYXR0cmlidXRlCi0gbGlzdC4gIFRoaXMgbGlzdCBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0LiAgIFRoZSBYU0wgcHJlZml4IGlzCi0gZXhjbHVkZWQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZ1tdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfdG9rZW5zIj50b2tlbnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0V4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3QiPkV4Y2x1ZGVSZXN1bHRQcmVmaXhlc0NvbnRlbnRBc3Npc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5jbHVkZVByZWZpeCI+aW5jbHVkZVByZWZpeDwvYT4oTmFtZXNwYWNlSW5mbyBuYW1lc3BhY2UpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJlZml4RXhpc3RzIj5wcmVmaXhFeGlzdHM8L2E+KGphdmEubGFuZy5TdHJpbmcgcHJlZml4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfdG9rZW5zIj50b2tlbnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZ1tdIDxzdHJvbmc+dG9rZW5zPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0Ij5FeGNsdWRlUmVzdWx0UHJlZml4ZXNDb250ZW50QXNzaXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luY2x1ZGVQcmVmaXgiPmluY2x1ZGVQcmVmaXg8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmluY2x1ZGVQcmVmaXg8L3N0cm9uZz4oTmFtZXNwYWNlSW5mbyBuYW1lc3BhY2UpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWVzcGFjZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ByZWZpeEV4aXN0cyI+cHJlZml4RXhpc3RzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5wcmVmaXhFeGlzdHM8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcmVmaXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByZWZpeDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NGQxYjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q8L3ByZT5UaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgdGhlIFhTTCBzZWxlY3QgYXR0cmlidXRlLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1NFTEVDVF9BVFRSSUJVVEUiPlNFTEVDVF9BVFRSSUJVVEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1NlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiPlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFNlbGVjdFByb3Bvc2FscyI+YWRkU2VsZWN0UHJvcG9zYWxzPC9hPihvcmcudzNjLmRvbS5FbGVtZW50IHJvb3RFbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFRlbXBsYXRlcyI+YWRkVGVtcGxhdGVzPC9hPihqYXZhLmxhbmcuU3RyaW5nIGNvbnRleHQKLSAgICAgICAgICwKLSAgICAgIGludCBzdGFydE9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGRzIFhQYXRoIHJlbGF0ZWQgdGVtcGxhdGVzIHRvIHRoZSBsaXN0IG9mIHByb3Bvc2FsczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkanVzdFhQYXRoU3RhcnQiPmFkanVzdFhQYXRoU3RhcnQ8L2E+KGphdmEubGFuZy5TdHJpbmcgYXR0ck5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhpcyBuZWVkcyB0byBzZXR1cCB0aGUgY29udGVudCBhc3Npc3RhbmNlIGNvcnJlY3RseS4gSGVyZSBpcyB3aGF0IG5lZWRzCi0gdG8gaGFwcGVuOiAxLiBBZGp1c3QgdGhlIG1hdGNoU3RyaW5nIChUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2FsY3VsYXRlZAotIGVhcmxpZXIpIDIuIEdldCB0aGUgY3VycmVudCB0b2tlbnMgb2Zmc2V0IHBvc2l0aW9uLi50aGlzIHdpbGwgYmUgdGhlCi0gc3RhcnRpbmcgb2Zmc2V0LiAzLiBHZXQgdGhlIHJlcGxhY2VtZW50IGxlbmd0aC4uLnRoaXMgaXMgdGhlIGRpZmZlcmVuY2UKLSBiZXR3ZWVuIHRoZSB0b2tlbiBvZmZzZXQgYW5kIHRoZSBuZXh0IHRva2VuIG9yIGVuZCBvZiB0aGUgc3RyaW5nPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXh0cmFjdFhQYXRoTWF0Y2hTdHJpbmciPmV4dHJhY3RYUGF0aE1hdGNoU3RyaW5nPC9hPihJRE9NQXR0ciBub2RlCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBhUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJRE9NQXR0cjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBdHRyaWJ1dGUiPmdldEF0dHJpYnV0ZTwvYT4oamF2YS5sYW5nLlN0cmluZyBhdHRyTmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0WFBhdGhTZXBlcmF0b3JQb3MiPmdldFhQYXRoU2VwZXJhdG9yUG9zPC9hPihpbnQgY29sdW1uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIG5vZGVWYWx1ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1NFTEVDVF9BVFRSSUJVVEUiPlNFTEVDVF9BVFRSSUJVVEU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+U0VMRUNUX0FUVFJJQlVURTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdCI+U2VsZWN0QXR0cmlidXRlQ29udGVudEFzc2lzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3A+PHA+SGFuZGxlcyBDb250ZW50IEFzc2lzdGFuY2UgcmVxdWVzdHMgZm9yIFNlbGVjdCBBdHRyaWJ1dGVzLiBUaGlzIGlzIGNhbGxlZAotIGFuIGluc3RhbnRpYXRlZCB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIGNvbXB1dGVQcm9wb3NhbHMgbWV0aG9kIGZyb20gdGhlCi0gWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci4gSXQgd2lsbCBjYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSBwcm9wb3NhbHMgdGhhdAotIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBYU0wgc2VsZWN0IGF0dHJpYnV0ZS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRTZWxlY3RQcm9wb3NhbHMiPmFkZFNlbGVjdFByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkU2VsZWN0UHJvcG9zYWxzPC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgcm9vdEVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJvb3RFbGVtZW50PC9jb2RlPjwvcD48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFRlbXBsYXRlcyI+YWRkVGVtcGxhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGRUZW1wbGF0ZXM8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBjb250ZXh0Ci0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnRPZmZzZXQpPC9jb2RlPjwvcD48cD5BZGRzIFhQYXRoIHJlbGF0ZWQgdGVtcGxhdGVzIHRvIHRoZSBsaXN0IG9mIHByb3Bvc2FsczwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PHA+PGNvZGU+c3RhcnRPZmZzZXQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkanVzdFhQYXRoU3RhcnQiPmFkanVzdFhQYXRoU3RhcnQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmFkanVzdFhQYXRoU3RhcnQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBhdHRyTmFtZSk8L2NvZGU+PC9wPjxwPlRoaXMgbmVlZHMgdG8gc2V0dXAgdGhlIGNvbnRlbnQgYXNzaXN0YW5jZSBjb3JyZWN0bHkuIEhlcmUgaXMgd2hhdCBuZWVkcwotIHRvIGhhcHBlbjogMS4gQWRqdXN0IHRoZSBtYXRjaFN0cmluZyAoVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQKLSBlYXJsaWVyKSAyLiBHZXQgdGhlIGN1cnJlbnQgdG9rZW5zIG9mZnNldCBwb3NpdGlvbi4udGhpcyB3aWxsIGJlIHRoZQotIHN0YXJ0aW5nIG9mZnNldC4gMy4gR2V0IHRoZSByZXBsYWNlbWVudCBsZW5ndGguLi50aGlzIGlzIHRoZSBkaWZmZXJlbmNlCi0gYmV0d2VlbiB0aGUgdG9rZW4gb2Zmc2V0IGFuZCB0aGUgbmV4dCB0b2tlbiBvciBlbmQgb2YgdGhlIHN0cmluZzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXR0ck5hbWU8L2NvZGU+IC0gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byB1c2UgYXMgdGhlIHN0YXJ0aW5nIG5vZGUuPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V4dHJhY3RYUGF0aE1hdGNoU3RyaW5nIj5leHRyYWN0WFBhdGhNYXRjaFN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+ZXh0cmFjdFhQYXRoTWF0Y2hTdHJpbmc8L3N0cm9uZz4oSURPTUF0dHIgbm9kZQotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gYVJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT48L3A+PHA+PGNvZGU+YVJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXR0cmlidXRlIj5nZXRBdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSURPTUF0dHIgPHN0cm9uZz5nZXRBdHRyaWJ1dGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBhdHRyTmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXR0ck5hbWU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRE9NQXR0cjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYUGF0aFNlcGVyYXRvclBvcyI+Z2V0WFBhdGhTZXBlcmF0b3JQb3M8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+Z2V0WFBhdGhTZXBlcmF0b3JQb3M8L3N0cm9uZz4oaW50IGNvbHVtbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBub2RlVmFsdWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbHVtbjwvY29kZT48L3A+PHA+PGNvZGU+bm9kZVZhbHVlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzY4YTY3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5UZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9wcmU+VGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdCBwcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgcHJvcG9zYWxzIGZvcgotIDx4c2w6dGVtcGxhdGVzPiB3aXRoIGEgbW9kZSBhdHRyaWJ1dGUuICAgSXQgbG9va3MgYXQgYWxsIHRoZSBtb2RlcyBkZWZpbmVkCi0gd2l0aGluIHRoZSB4c2wgbW9kZWwsIGFuZCBwdWxscyBvdXQgYW55IG1vZGVzIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdCI+VGVtcGxhdGVNb2RlQXR0cmlidXRlQ29udGVudEFzc2lzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkTW9kZVByb3Bvc2FscyI+YWRkTW9kZVByb3Bvc2FsczwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbCBtb2RlbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIG1haW4gbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wb3NhbHMuIFJldHVybnMgdGhlIGF2YWlsYWJsZQotIG1vZGVzIHRoYXQgaGF2ZSBiZWVuIGRlZmluZWQgaW4gdGhlIHtAbGluayBTdHlsZXNoZWV0TW9kZWx9LiAgSWYgbm8gcHJvcG9zYWxzCi0gYXJlIGZvdW5kIGl0IHJldHVybnMgYSBOVUxMIHZhbHVlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1RlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiPlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UZW1wbGF0ZU1vZGVBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyB0aGUgVGVtcGxhdGVNb2RlIENvbnRlbnQgQXNzaXN0YW5jZSBjbGFzcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRNb2RlUHJvcG9zYWxzIj5hZGRNb2RlUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGRNb2RlUHJvcG9zYWxzPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwgbW9kZWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1vZGVsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSBtYWluIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcG9zYWxzLiBSZXR1cm5zIHRoZSBhdmFpbGFibGUKLSBtb2RlcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGluIHRoZSB7QGxpbmsgU3R5bGVzaGVldE1vZGVsfS4gIElmIG5vIHByb3Bvc2FscwotIGFyZSBmb3VuZCBpdCByZXR1cm5zIGEgTlVMTCB2YWx1ZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+IC0gSUNvbXBsZXRpb25Qcm9wc2FsW108L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4MmZiOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBUZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvcHJlPlByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgWFNMVCBOYW1lZCBUZW1wbGF0ZXMuICAgSXQgcHJvdmlkZXMgYSBsaXN0Ci0gb2YgYXZhaWxhYmxlIGNhbGwtdGVtcGxhdGUgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiB1c2VkIHdpdGggaW4gdGhlCi0gc3R5bGVzaGVldC48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9UZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0Ij5UZW1wbGF0ZU5hbWVBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdCI+VGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlRlbXBsYXRlTmFtZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3A+PHA+UHJvdmlkZXMgY29udGVudCBhc3Npc3RhbmNlIGZvciBYU0xUIE5hbWVkIFRlbXBsYXRlcy4gIFdpbGwgcHJvdmlkZSBhIGxpc3QKLSBvZiBwcm9wb3NhbHMgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBuYW1lZC10ZW1wbGF0ZXMgaWYgYW55IGFyZSBkZWZpbmVkIGluCi0gdGhlIFhTTCBTdHlsZXNoZWV0IG1vZGVsLiAgIE9ubHkgcHJvdmlkZXMgYSBsaXN0IG9mIG5hbWVkIHRlbXBsYXRlcyB0aGF0IGhhdmVuJ3QgYWxyZWFkeQotIGJlZW4gYWRkZWQgYXMgYSBwcm9wb3NhbC4gIERvZXMgbm90IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFscmVhZHkgaXMgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzdHlsZXNoZWV0LjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZThmMzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFRlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlNlbGVjdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L3ByZT5UaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgdGhlIHhzbCA8ZW1waGFzaXM+dGVzdDwvZW1waGFpcz4gYXR0cmlidXRlLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1Rlc3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0Ij5UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdCI+VGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgdGhlIFhTTCBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHRoZSB0ZXN0IGF0dHJpYnV0ZS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjQ4YzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9wcmU+VGhpcyBjbGFzcyBwcm92aWRlcyBYTUwgRWxlbWVudCBwcm9wb3NhbHMgd2l0aGluIFhQYXRoIHJlbGF0ZWQgaXRlbXMgbGlrZQotIHNlbGVjdCwgdGVzdCwgYW5kIG1hdGNoIGF0dHJpYnV0ZXMuICBUaGlzIHdpbGwgbGV2ZXJhZ2UgYW4gQ29udGVudE1vZGVsIHRoYXQKLSBoYXMgYmVlbiBsb2FkZWQgYW5kIHRyeSB0byBwcm92aWRlIGFsbCBhdmFpbGFibGUgWE1MIGVsZW1lbnRzIHRoYXQgY291bGQgYmUgdXNlZC4KLSBJdCBzaG91bGQgYmUgZW5oYW5jZWQgdG8ga25vdyB0aGUgZWxlbWVudHMgdG8gYmUgdXNlZCBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tCi0gdGhlIFhQYXRoLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoRWxlbWVudENvbnRlbnRBc3Npc3QiPlhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQcm92aWRlcyBhIGxpc3Qgb2YgcG9zc2libGUgcHJvcG9zYWxzIGZvciB0aGUgWE1MIEVsZW1lbnRzIHdpdGhpbiB0aGUgY3VycmVudAotIHNjb3BlLiAgVGhpcyBsZXZlcmFnZXMgdGhlIENvbnRlbnRNb2RlbCB0aGF0IHdhcyBsb2FkZWQgYnkgdGhlIFhNTCBDYXRhbG9nLCAKLSBDdXN0b20gUmVzb2x2ZXIsIG9yIHRoZSBpbmZlcnJlZCBncmFtbWFyLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoRWxlbWVudENvbnRlbnRBc3Npc3QiPlhQYXRoRWxlbWVudENvbnRlbnRBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aEVsZW1lbnRDb250ZW50QXNzaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UHJvdmlkZXMgYSBsaXN0IG9mIHBvc3NpYmxlIHByb3Bvc2FscyBmb3IgdGhlIFhNTCBFbGVtZW50cyB3aXRoaW4gdGhlIGN1cnJlbnQKLSBzY29wZS4gIFRoaXMgbGV2ZXJhZ2VzIHRoZSBDb250ZW50TW9kZWwgdGhhdCB3YXMgbG9hZGVkIGJ5IHRoZSBYTUwgQ2F0YWxvZywgCi0gQ3VzdG9tIFJlc29sdmVyLCBvciB0aGUgaW5mZXJyZWQgZ3JhbW1hci48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNDIzYTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvcHJlPlRoZSBYU0wgQ29udGVudCBBc3Npc3QgUHJvY2Vzc29yIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgdmFyaW91cwotIGF0dHJpYnV0ZXMgdmFsdWVzIHdpdGhpbiB0aGUgWFNMIEVkaXRvci4gVGhpcyBpbmNsdWRlcyBzdXBwb3J0IGZvciB4cGF0aHMgb24KLSBzZWxlY3Qgc3RhdGVtZW50cyBhcyB3ZWxsIGFzIG9uIHRlc3QgYW5kIG1hdGNoIGF0dHJpYnV0ZXMuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciI+WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYXNzaXN0YW5jZU9uQXR0cmlidXRlIj5hc3Npc3RhbmNlT25BdHRyaWJ1dGU8L2E+KElET01Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGFSZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21wdXRlQ29tcGxldGlvblByb3Bvc2FscyI+Y29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KElUZXh0Vmlld2VyIHRleHRWaWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBkb2N1bWVudFBvc2l0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENPTlRFTlQgQVNTSVNUIFNUQVJUUyBIRVJFCi0gCi0gUmV0dXJuIGEgbGlzdCBvZiBwcm9wb3NlZCBjb2RlIGNvbXBsZXRpb25zIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQKLSBsb2NhdGlvbiB3aXRoaW4gdGhlIGRvY3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgY3Vyc29yCi0gcG9zaXRpb24gd2l0aGluIHRoZSB0ZXh0LWVkaXRvciBjb250cm9sLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29udGV4dEluZm9ybWF0aW9uW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcHV0ZUNvbnRleHRJbmZvcm1hdGlvbiI+Y29tcHV0ZUNvbnRleHRJbmZvcm1hdGlvbjwvYT4oSVRleHRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgY2hhcltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycyI+Z2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvciI+Z2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1heGltdW1WZXJzaW9uIj5nZXRNYXhpbXVtVmVyc2lvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1pbmltdW1WZXJzaW9uIj5nZXRNaW5pbXVtVmVyc2lvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWVzcGFjZXMiPmdldE5hbWVzcGFjZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yIj5YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Qcm92aWRlcyBhbiBYU0wgQ29udGVudCBBc3Npc3QgUHJvY2Vzc29yIGNsYXNzIHRoYXQgaXMgWFNMIGF3YXJlIGFuZCBYTUwKLSBhd2FyZS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hc3Npc3RhbmNlT25BdHRyaWJ1dGUiPmFzc2lzdGFuY2VPbkF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+YXNzaXN0YW5jZU9uQXR0cmlidXRlPC9zdHJvbmc+KElET01Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGFSZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmFSZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wdXRlQ29tcGxldGlvblByb3Bvc2FscyI+Y29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIDxzdHJvbmc+Y29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oSVRleHRWaWV3ZXIgdGV4dFZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IGRvY3VtZW50UG9zaXRpb24pPC9jb2RlPjwvcD48cD5DT05URU5UIEFTU0lTVCBTVEFSVFMgSEVSRQotIAotIFJldHVybiBhIGxpc3Qgb2YgcHJvcG9zZWQgY29kZSBjb21wbGV0aW9ucyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkCi0gbG9jYXRpb24gd2l0aGluIHRoZSBkb2N1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IGN1cnNvcgotIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGV4dC1lZGl0b3IgY29udHJvbC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRleHRWaWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPmRvY3VtZW50UG9zaXRpb248L2NvZGU+IC0gLSB0aGUgY3Vyc29yIGxvY2F0aW9uIHdpdGhpbiB0aGUgZG9jdW1lbnQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklDb21wbGV0aW9uUHJvcG9zYWxbXTwvY29kZT4gLSBhbiBhcnJheSBvZiBJQ29tcGxldGlvblByb3Bvc2FsPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVDb250ZXh0SW5mb3JtYXRpb24iPmNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvbltdIDxzdHJvbmc+Y29tcHV0ZUNvbnRleHRJbmZvcm1hdGlvbjwvc3Ryb25nPihJVGV4dFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklDb250ZXh0SW5mb3JtYXRpb25bXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzIj5nZXRDb250ZXh0SW5mb3JtYXRpb25BdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgY2hhcltdIDxzdHJvbmc+Z2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmNoYXJbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yIj5nZXRDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvciA8c3Ryb25nPmdldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNYXhpbXVtVmVyc2lvbiI+Z2V0TWF4aW11bVZlcnNpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE1heGltdW1WZXJzaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TWluaW11bVZlcnNpb24iPmdldE1pbmltdW1WZXJzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRNaW5pbXVtVmVyc2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWVzcGFjZXMiPmdldE5hbWVzcGFjZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldE5hbWVzcGFjZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlMDUxMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QSBGYWN0b3J5IHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBDb250ZW50IEFzc2lzdCBSZXF1ZXN0IGNsYXNzIGlzIG5lZWRlZCBhbmQKLSByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBjbGFzcy48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkiPlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeTwvYT48L3N0cm9uZz4oSVRleHRWaWV3ZXIgdGV4dFZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IGRvY3VtZW50UG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIElET01Ob2RlIHhtbE5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2RSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbWF0Y2hTdHJpbmcpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5nZXRDb250ZW50QXNzaXN0UmVxdWVzdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgYXBwcm9wcmlhdGUgY29udGVudCBhc3Npc3QgcmVxdWVzdCBjbGFzcyBmb3IgdGhlIFhTTCByZXF1ZXN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2hhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbiI+aGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uPC9hPihqYXZhLmxhbmcuU3RyaW5nIGF0dHJOYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXAgbm9kZU1hcAotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gYVJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xDb250ZW50QXNzaXN0UmVxdWVzdEZhY3RvcnkiPlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeTwvc3Ryb25nPihJVGV4dFZpZXdlciB0ZXh0Vmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgZG9jdW1lbnRQb3NpdGlvbgotICAgICAgICAgLAotICAgICAgSURPTU5vZGUgeG1sTm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzZFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBtYXRjaFN0cmluZyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5nZXRDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QgPHN0cm9uZz5nZXRDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGFwcHJvcHJpYXRlIGNvbnRlbnQgYXNzaXN0IHJlcXVlc3QgY2xhc3MgZm9yIHRoZSBYU0wgcmVxdWVzdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzQXR0cmlidXRlQXRUZXh0UmVnaW9uIj5oYXNBdHRyaWJ1dGVBdFRleHRSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmhhc0F0dHJpYnV0ZUF0VGV4dFJlZ2lvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGF0dHJOYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXAgbm9kZU1hcAotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gYVJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXR0ck5hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPm5vZGVNYXA8L2NvZGU+PC9wPjxwPjxjb2RlPmFSZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgwNmQ2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q8L3ByZT5UaGlzIGNsYXNzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBwcm9wb3NhbHMgb3V0c2lkZSBvZiB0aGUgWFNMIG5hbWVzcGFjZS4gIE5vcm1hbAotIFhNTCBlZGl0b3IgY29udGVudCBhc3Npc3RhbmNlIG9ubHkgcHJvdmlkZXMgcHJvcG9zYWxzIGZvciBpdGVtcyB3aXRoaW4gdGhlIHNhbWUgbmFtZXNwYWNlCi0gb3IgaWYgYW4gZWxlbWVudCBoYXMgY2hpbGRyZW4gZWxlbWVudHMuICAgVGhpcyBjbGFzcyBleHRlbmRzIHRoaXMgZnVuY3Rpb25hbGl0eSBieSBjaGVja2luZwotIGZvciB0aGUgZmlyc3QgWFNMIGFuY2VzdG9yIGFuZCB1c2VzIHRoYXQgdG8gZGV0ZXJtaW5lIHdoYXQgcHJvcG9zYWxzIHNob3VsZCBiZQotIHByb3ZpZGVkIGluIHRoZSB3YXkgb2YgeHNsIGVsZW1lbnRzLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdCI+WFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21wdXRlVGFnTmFtZVByb3Bvc2FscyI+Y29tcHV0ZVRhZ05hbWVQcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDYWxjdWxhdGVzIHRoZSBwcm9wb3NhbHMgZm9yIHRoZSBYTUwgVGFnIE5hbWUgUmVnaW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbXB1dGVUYWdPcGVuUHJvcG9zYWxzIj5jb21wdXRlVGFnT3BlblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENhbGN1bGF0ZSBwcm9wb3NhbHMgZm9yIG9wZW4gY29udGVudCByZWdpb25zLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQcm92aWRlcyBhIGxpc3Qgb2YgcG9zc2libGUgcHJvcG9zYWxzIGZvciB0aGUgWFNMIEVsZW1lbnRzIHdpdGhpbiB0aGUgY3VycmVudAotIHNjb3BlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdCI+WFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVUYWdOYW1lUHJvcG9zYWxzIj5jb21wdXRlVGFnTmFtZVByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+Y29tcHV0ZVRhZ05hbWVQcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2FsY3VsYXRlcyB0aGUgcHJvcG9zYWxzIGZvciB0aGUgWE1MIFRhZyBOYW1lIFJlZ2lvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcHV0ZVRhZ09wZW5Qcm9wb3NhbHMiPmNvbXB1dGVUYWdPcGVuUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5jb21wdXRlVGFnT3BlblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DYWxjdWxhdGUgcHJvcG9zYWxzIGZvciBvcGVuIGNvbnRlbnQgcmVnaW9ucy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0Q29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Qcm92aWRlcyBhIGxpc3Qgb2YgcG9zc2libGUgcHJvcG9zYWxzIGZvciB0aGUgWFNMIEVsZW1lbnRzIHdpdGhpbiB0aGUgY3VycmVudAotIHNjb3BlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOGQxOTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3I8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5YU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3I8L3N0cm9uZz4KLWV4dGVuZHMgVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yPC9wcmU+Q29tcGxldGlvbiBwcm9jZXNzb3IgZm9yIFhNTCBUZW1wbGF0ZXMuIE1vc3Qgb2YgdGhlIHdvcmsgaXMgYWxyZWFkeSBkb25lIGJ5Ci0gdGhlIFhNTCBDb250ZW50IEFzc2lzdCBwcm9jZXNzb3IsIHNvIGJ5IHRoZSB0aW1lIHRoZQotIFhNTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciBpcyBhc2tlZCBmb3IgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzLCB0aGUKLSBYTUwgY29udGVudCBhc3Npc3QgcHJvY2Vzc29yIGhhcyBhbHJlYWR5IHNldCB0aGUgY29udGV4dCB0eXBlIGZvcgotIHRlbXBsYXRlcy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yIj5YU0xUZW1wbGF0ZUNvbXBsZXRpb25Qcm9jZXNzb3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMiPmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzPC9hPihJVGV4dFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElDb21wbGV0aW9uUHJvcG9zYWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlUHJvcG9zYWwiPmNyZWF0ZVByb3Bvc2FsPC9hPihUZW1wbGF0ZSB0ZW1wbGF0ZQotICAgICAgICAgLAotICAgICAgVGVtcGxhdGVDb250ZXh0IGNvbnRleHQKLSAgICAgICAgICwKLSAgICAgIElSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgcmVsZXZhbmNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBUZW1wbGF0ZUNvbnRleHRUeXBlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRleHRUeXBlIj5nZXRDb250ZXh0VHlwZTwvYT4oSVRleHRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBJUmVnaW9uIHJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSW1hZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPihUZW1wbGF0ZSB0ZW1wbGF0ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGVtcGxhdGVbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZW1wbGF0ZXMiPmdldFRlbXBsYXRlczwvYT4oamF2YS5sYW5nLlN0cmluZyBjb250ZXh0VHlwZUlkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldENvbnRleHRUeXBlIj5zZXRDb250ZXh0VHlwZTwvYT4oamF2YS5sYW5nLlN0cmluZyBjb250ZXh0VHlwZUlkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3NvciI+WFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+WFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzIj5jb21wdXRlQ29tcGxldGlvblByb3Bvc2FsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW10gPHN0cm9uZz5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fsczwvc3Ryb25nPihJVGV4dFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVQcm9wb3NhbCI+Y3JlYXRlUHJvcG9zYWw8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSUNvbXBsZXRpb25Qcm9wb3NhbCA8c3Ryb25nPmNyZWF0ZVByb3Bvc2FsPC9zdHJvbmc+KFRlbXBsYXRlIHRlbXBsYXRlCi0gICAgICAgICAsCi0gICAgICBUZW1wbGF0ZUNvbnRleHQgY29udGV4dAotICAgICAgICAgLAotICAgICAgSVJlZ2lvbiByZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCByZWxldmFuY2UpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRlbXBsYXRlPC9jb2RlPjwvcD48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPnJlbGV2YW5jZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklDb21wbGV0aW9uUHJvcG9zYWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbnRleHRUeXBlIj5nZXRDb250ZXh0VHlwZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBUZW1wbGF0ZUNvbnRleHRUeXBlIDxzdHJvbmc+Z2V0Q29udGV4dFR5cGU8L3N0cm9uZz4oSVRleHRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBJUmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZW1wbGF0ZUNvbnRleHRUeXBlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbWFnZSI+Z2V0SW1hZ2U8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSW1hZ2UgPHN0cm9uZz5nZXRJbWFnZTwvc3Ryb25nPihUZW1wbGF0ZSB0ZW1wbGF0ZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGVtcGxhdGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JbWFnZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGVtcGxhdGVzIj5nZXRUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgVGVtcGxhdGVbXSA8c3Ryb25nPmdldFRlbXBsYXRlczwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGNvbnRleHRUeXBlSWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHRUeXBlSWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZW1wbGF0ZVtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRDb250ZXh0VHlwZSI+c2V0Q29udGV4dFR5cGU8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZCA8c3Ryb25nPnNldENvbnRleHRUeXBlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgY29udGV4dFR5cGVJZCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dFR5cGVJZDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNDY4ZmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPlhTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21wdXRlQ29tcGxldGlvblByb3Bvc2FscyI+Y29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KElUZXh0Vmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvbltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbXB1dGVDb250ZXh0SW5mb3JtYXRpb24iPmNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb248L2E+KElUZXh0Vmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgY2hhcltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycyI+Z2V0Q29udGV4dEluZm9ybWF0aW9uQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yIj5nZXRDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNYXhpbXVtVmVyc2lvbiI+Z2V0TWF4aW11bVZlcnNpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNaW5pbXVtVmVyc2lvbiI+Z2V0TWluaW11bVZlcnNpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lc3BhY2VzIj5nZXROYW1lc3BhY2VzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yIj5YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xUZW1wbGF0ZUNvbnRlbnRBc3Npc3RQcm9jZXNzb3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMiPmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXSA8c3Ryb25nPmNvbXB1dGVDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KElUZXh0Vmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVDb250ZXh0SW5mb3JtYXRpb24iPmNvbXB1dGVDb250ZXh0SW5mb3JtYXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSUNvbnRleHRJbmZvcm1hdGlvbltdIDxzdHJvbmc+Y29tcHV0ZUNvbnRleHRJbmZvcm1hdGlvbjwvc3Ryb25nPihJVGV4dFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUNvbnRleHRJbmZvcm1hdGlvbltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZXh0SW5mb3JtYXRpb25BdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnMiPmdldENvbnRleHRJbmZvcm1hdGlvbkF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVyczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBjaGFyW10gPHN0cm9uZz5nZXRDb250ZXh0SW5mb3JtYXRpb25BdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5jaGFyW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbnRleHRJbmZvcm1hdGlvblZhbGlkYXRvciI+Z2V0Q29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3IgPHN0cm9uZz5nZXRDb250ZXh0SW5mb3JtYXRpb25WYWxpZGF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29udGV4dEluZm9ybWF0aW9uVmFsaWRhdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNYXhpbXVtVmVyc2lvbiI+Z2V0TWF4aW11bVZlcnNpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE1heGltdW1WZXJzaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TWluaW11bVZlcnNpb24iPmdldE1pbmltdW1WZXJzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRNaW5pbXVtVmVyc2lvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWVzcGFjZXMiPmdldE5hbWVzcGFjZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldE5hbWVzcGFjZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmNvbnRlbnRtb2RlbC5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsLlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTgxNDk0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsLlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuY29udGVudG1vZGVsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMQ29udGVudE1vZGVsR2VuZXJhdG9yPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0Q29udGVudE1vZGVsR2VuZXJhdG9yPC9wcmU+VGhpcyBwcm92aWRlcyB0aGUgQ29udGVudE1vZGVsIGJhc2VkIG9mZiB0aGUgWFNMIHhtbCBzY2hlbWEgZ3JhbW1hcnMgYW5kIG90aGVyCi0gZ3JhbW1hcnMgcHJvdmlkZWQgYnkgdGhlIHhtbCBlZGl0b3IuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xDb250ZW50TW9kZWxHZW5lcmF0b3IiPlhTTENvbnRlbnRNb2RlbEdlbmVyYXRvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2VuZXJhdGVBdHRyaWJ1dGUiPmdlbmVyYXRlQXR0cmlidXRlPC9hPihDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJEZWNsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2VuZXJhdGVFbmRUYWciPmdlbmVyYXRlRW5kVGFnPC9hPihqYXZhLmxhbmcuU3RyaW5nIHRhZ05hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgcGFyZW50Tm9kZQotICAgICAgICAgLAotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYnVmZmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dlbmVyYXRlUmVxdWlyZWRBdHRyaWJ1dGUiPmdlbmVyYXRlUmVxdWlyZWRBdHRyaWJ1dGU8L2E+KG9yZy53M2MuZG9tLk5vZGUgb3duZXJOb2RlCi0gICAgICAgICAsCi0gICAgICBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJEZWNsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZW5lcmF0ZVN0YXJ0VGFnIj5nZW5lcmF0ZVN0YXJ0VGFnPC9hPihqYXZhLmxhbmcuU3RyaW5nIHRhZ05hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgcGFyZW50Tm9kZQotICAgICAgICAgLAotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYnVmZmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TWluaW1hbFN0YXJ0VGFnTGVuZ3RoIj5nZXRNaW5pbWFsU3RhcnRUYWdMZW5ndGg8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE90aGVyQ2xvc2UiPmdldE90aGVyQ2xvc2U8L2E+KG9yZy53M2MuZG9tLk5vZGUgbm90QVRhZ05vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3RhcnRUYWdDbG9zZSI+Z2V0U3RhcnRUYWdDbG9zZTwvYT4ob3JnLnczYy5kb20uTm9kZSBwYXJlbnROb2RlCi0gICAgICAgICAsCi0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yIj5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+WFNMQ29udGVudE1vZGVsR2VuZXJhdG9yIGNvbnN0cnVjdG9yIGNvbW1lbnQuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2VuZXJhdGVBdHRyaWJ1dGUiPmdlbmVyYXRlQXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5nZW5lcmF0ZUF0dHJpYnV0ZTwvc3Ryb25nPihDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJEZWNsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmF0dHJEZWNsPC9jb2RlPjwvcD48cD48Y29kZT5idWZmZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dlbmVyYXRlRW5kVGFnIj5nZW5lcmF0ZUVuZFRhZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+Z2VuZXJhdGVFbmRUYWc8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0YWdOYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIHBhcmVudE5vZGUKLSAgICAgICAgICwKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGJ1ZmZlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGFnTmFtZTwvY29kZT48L3A+PHA+PGNvZGU+cGFyZW50Tm9kZTwvY29kZT48L3A+PHA+PGNvZGU+ZWxlbWVudERlY2w8L2NvZGU+PC9wPjxwPjxjb2RlPmJ1ZmZlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2VuZXJhdGVSZXF1aXJlZEF0dHJpYnV0ZSI+Z2VuZXJhdGVSZXF1aXJlZEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Z2VuZXJhdGVSZXF1aXJlZEF0dHJpYnV0ZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG93bmVyTm9kZQotICAgICAgICAgLAotICAgICAgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyRGVjbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBidWZmZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm93bmVyTm9kZTwvY29kZT48L3A+PHA+PGNvZGU+YXR0ckRlY2w8L2NvZGU+PC9wPjxwPjxjb2RlPmJ1ZmZlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2VuZXJhdGVTdGFydFRhZyI+Z2VuZXJhdGVTdGFydFRhZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+Z2VuZXJhdGVTdGFydFRhZzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHRhZ05hbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgcGFyZW50Tm9kZQotICAgICAgICAgLAotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYnVmZmVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50YWdOYW1lPC9jb2RlPjwvcD48cD48Y29kZT5wYXJlbnROb2RlPC9jb2RlPjwvcD48cD48Y29kZT5lbGVtZW50RGVjbDwvY29kZT48L3A+PHA+PGNvZGU+YnVmZmVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNaW5pbWFsU3RhcnRUYWdMZW5ndGgiPmdldE1pbmltYWxTdGFydFRhZ0xlbmd0aDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRNaW5pbWFsU3RhcnRUYWdMZW5ndGg8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50RGVjbCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmVsZW1lbnREZWNsPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRPdGhlckNsb3NlIj5nZXRPdGhlckNsb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRPdGhlckNsb3NlPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm90QVRhZ05vZGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vdEFUYWdOb2RlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3RhcnRUYWdDbG9zZSI+Z2V0U3RhcnRUYWdDbG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U3RhcnRUYWdDbG9zZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIHBhcmVudE5vZGUKLSAgICAgICAgICwKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50Tm9kZTwvY29kZT48L3A+PHA+PGNvZGU+ZWxlbWVudERlY2w8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWYuSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWYuSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmY1ZDAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuaHJlZjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBIcmVmQ29udGVudEFzc2lzdFJlcXVlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5IcmVmQ29udGVudEFzc2lzdFJlcXVlc3Q8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3Q8L3ByZT48cD5UaGlzIHByb3ZpZGVzIGNvbnRlbnQgYXNzaXN0YW5jZSBwcm9wb3NhbHMgZm9yIGhyZWYgYXR0cmlidXRlcyB3aXRoIGEgbW9kZSBhdHRyaWJ1dGUuPC9wPgotIDxwPkNvbnRlbnQgYXNzaXN0YW5jZSBpcyByZXN0cmljdGVkIHRvIGZpbGVzIHdpdGggdGhlIFhTTCBjb250ZW50IHR5cGUgdGhhdCBhcmUgaW4gdGhlIHNhbWUgcHJvamVjdCBhcyB0aGUgZmlsZSBjdXJyZW50bHkgCi0gYmVpbmcgZWRpdGVkLiBUaGlzIGlzIGJlY2F1c2UgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSBjYW4gaGF2ZSBjb21wbGV0ZWx5IGRpZmZlcmVudCBwaHlzaWNhbCBmaWxlIGxvY2F0aW9ucywgbGVhZGluZyB0byAKLSBjb25mdXNpb24gaW4gcmVsYXRpdmUgZmlsZSBwYXRocyBhY3Jvc3MgcHJvamVjdHMuIFNpbWlsYXJseSwgbm8gY29udGVudCBhc3Npc3RhbmNlIGlzIGdpdmVuIGZvciBmaWxlcyBleHRlcm5hbCB0byB0aGUgd29ya3NwYWNlLiAKLSBTdWNoIGZpbGVzIHNob3VsZCBiZSBhc3NpZ25lZCBhbiBhYnNvbHV0ZSAnZmlsZTovLy8nIFVSTC48L3A+PHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5IcmVmQ29udGVudEFzc2lzdFJlcXVlc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbWFpbiBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIHByb3Bvc2Fscy4gUmV0dXJucyByZWxhdGl2ZSBwYXRocyB0byBmaWxlcyBpbiB0aGUgY3VycmVudCBwcm9qZWN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zb3J0UHJvcG9zYWxzIj5zb3J0UHJvcG9zYWxzPC9hPihqYXZhLnV0aWwuTGlzdCBwcm9wb3NhbHNJbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEbyBub3Qgd2lzaCB0byBzb3J0IHRoZSBwcm9wb3NhbHMgLSB0aGV5IGFyZSBhbHJlYWR5IHNvcnRlZDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0hyZWZDb250ZW50QXNzaXN0UmVxdWVzdCI+SHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPkNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyB0aGUgSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0IGNsYXNzLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VGhlIG1haW4gbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wb3NhbHMuIFJldHVybnMgcmVsYXRpdmUgcGF0aHMgdG8gZmlsZXMgaW4gdGhlIGN1cnJlbnQgcHJvamVjdC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+IC0gSUNvbXBsZXRpb25Qcm9wb3NhbFtdPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NvcnRQcm9wb3NhbHMiPnNvcnRQcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5zb3J0UHJvcG9zYWxzPC9zdHJvbmc+KGphdmEudXRpbC5MaXN0IHByb3Bvc2Fsc0luKTwvY29kZT48L3A+PHA+RG8gbm90IHdpc2ggdG8gc29ydCB0aGUgcHJvcG9zYWxzIC0gdGhleSBhcmUgYWxyZWFkeSBzb3J0ZWQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByb3Bvc2Fsc0luPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIHNhbWUgbGlzdCwgaW4gdGhlIHNhbWUgb3JkZXI8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLlBhdGhDb21wYXJhdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWYuUGF0aENvbXBhcmF0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkxOGQwNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWYuUGF0aENvbXBhcmF0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWY8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWY8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUGF0aENvbXBhcmF0b3I8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5QYXRoQ29tcGFyYXRvcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1BhdGhDb21wYXJhdG9yIj5QYXRoQ29tcGFyYXRvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21wYXJlIj5jb21wYXJlPC9hPihJUGF0aCBvMQotICAgICAgICAgLAotICAgICAgSVBhdGggbzIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUGF0aENvbXBhcmF0b3IiPlBhdGhDb21wYXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+UGF0aENvbXBhcmF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcGFyZSI+Y29tcGFyZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5jb21wYXJlPC9zdHJvbmc+KElQYXRoIG8xCi0gICAgICAgICAsCi0gICAgICBJUGF0aCBvMik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bzE8L2NvZGU+PC9wPjxwPjxjb2RlPm8yPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5BdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZiMmNkNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5BdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUxhYmVsUHJvdmlkZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQVRUUl9JRCI+QVRUUl9JRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQVRUUl9OQU1FIj5BVFRSX05BTUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9mU2hvd0F0dHJpYnV0ZXMiPmZTaG93QXR0cmlidXRlczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIiPkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyPC9hPjwvc3Ryb25nPihib29sZWFuIHNob3dBdHRyaWJ1dGVzKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRvb2xUaXBUZXh0Ij5nZXRUb29sVGlwVGV4dDwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzTGFiZWxQcm9wZXJ0eSI+aXNMYWJlbFByb3BlcnR5PC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJvcGVydHkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0U2hvd0F0dHJpYnV0ZXMiPnNldFNob3dBdHRyaWJ1dGVzPC9hPihib29sZWFuIGZTaG93QXR0cmlidXRlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FUVFJfSUQiPkFUVFJfSUQ8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+QVRUUl9JRDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9BVFRSX05BTUUiPkFUVFJfTkFNRTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BVFRSX05BTUU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZlNob3dBdHRyaWJ1dGVzIj5mU2hvd0F0dHJpYnV0ZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgYm9vbGVhbiA8c3Ryb25nPmZTaG93QXR0cmlidXRlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXIiPkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QXR0cmlidXRlU2hvd2luZ0xhYmVsUHJvdmlkZXI8L3N0cm9uZz4oYm9vbGVhbiBzaG93QXR0cmlidXRlcyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VG9vbFRpcFRleHQiPmdldFRvb2xUaXBUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUb29sVGlwVGV4dDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0xhYmVsUHJvcGVydHkiPmlzTGFiZWxQcm9wZXJ0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNMYWJlbFByb3BlcnR5PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcm9wZXJ0eSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PHA+PGNvZGU+cHJvcGVydHk8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRTaG93QXR0cmlidXRlcyI+c2V0U2hvd0F0dHJpYnV0ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFNob3dBdHRyaWJ1dGVzPC9zdHJvbmc+KGJvb2xlYW4gZlNob3dBdHRyaWJ1dGVzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mU2hvd0F0dHJpYnV0ZXM8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI5OGE0ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBKRmFjZU5vZGVBZGFwdGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SkZhY2VOb2RlQWRhcHRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QWRhcHRzIGEgRE9NIG5vZGUgdG8gYSBKRmFjZSB2aWV3ZXIuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLkNsYXNzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfQURBUFRFUl9LRVkiPkFEQVBURVJfS0VZPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZkFkYXB0ZXJGYWN0b3J5Ij5mQWRhcHRlckZhY3Rvcnk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuUmVmcmVzaFN0cnVjdHVyZUpvYjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2ZSZWZyZXNoSm9iIj5mUmVmcmVzaEpvYjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSkZhY2VOb2RlQWRhcHRlciI+SkZhY2VOb2RlQWRhcHRlcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVJbWFnZSI+Y3JlYXRlSW1hZ2U8L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVYTUxJbWFnZURlc2NyaXB0b3IiPmNyZWF0ZVhNTEltYWdlRGVzY3JpcHRvcjwvYT4oamF2YS5sYW5nLlN0cmluZyBpbWFnZVJlc291cmNlTmFtZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENoaWxkcmVuIj5nZXRDaGlsZHJlbjwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+KGphdmEubGFuZy5PYmplY3Qgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGFuIGVudW1lcmF0aW9uIHdpdGggdGhlIGVsZW1lbnRzIGJlbG9uZ2luZyB0byB0aGUgcGFzc2VkCi0gZWxlbWVudC4gVGhlc2UgYXJlIHRoZSB0b3AgbGV2ZWwgaXRlbXMgaW4gYSBsaXN0LCB0cmVlLCB0YWJsZSwgZXRjLi4uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExhYmVsSW1hZ2UiPmdldExhYmVsSW1hZ2U8L2E+KGphdmEubGFuZy5PYmplY3Qgbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBGZXRjaGVzIHRoZSBsYWJlbCBpbWFnZSBzcGVjaWZpYyB0byB0aGlzIG9iamVjdCBpbnN0YW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMYWJlbFRleHQiPmdldExhYmVsVGV4dDwvYT4oamF2YS5sYW5nLk9iamVjdCBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEZldGNoZXMgdGhlIGxhYmVsIHRleHQgc3BlY2lmaWMgdG8gdGhpcyBvYmplY3QgaW5zdGFuY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJbWFnZURlc2NyaXB0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0WFNMSW1hZ2UiPmdldFhTTEltYWdlPC9hPihvcmcudzNjLmRvbS5FbGVtZW50IG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzQ2hpbGRyZW4iPmhhc0NoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0FkYXB0ZXJGb3JUeXBlIj5pc0FkYXB0ZXJGb3JUeXBlPC9hPihqYXZhLmxhbmcuT2JqZWN0IHR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ub3RpZnlDaGFuZ2VkIj5ub3RpZnlDaGFuZ2VkPC9hPihJTm9kZU5vdGlmaWVyIG5vdGlmaWVyCi0gICAgICAgICAsCi0gICAgICBpbnQgZXZlbnRUeXBlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IGNoYW5nZWRGZWF0dXJlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG9sZFZhbHVlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG5ld1ZhbHVlCi0gICAgICAgICAsCi0gICAgICBpbnQgcG9zKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENhbGxlZCBieSB0aGUgb2JqZWN0IGJlaW5nIGFkYXB0ZXIgKHRoZSBub3RpZmllcikgd2hlbiBzb21ldGhpbmcgaGFzCi0gY2hhbmdlZC48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FEQVBURVJfS0VZIj5BREFQVEVSX0tFWTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5DbGFzcyA8c3Ryb25nPkFEQVBURVJfS0VZPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2ZBZGFwdGVyRmFjdG9yeSI+ZkFkYXB0ZXJGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkgPHN0cm9uZz5mQWRhcHRlckZhY3Rvcnk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZlJlZnJlc2hKb2IiPmZSZWZyZXNoSm9iPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuUmVmcmVzaFN0cnVjdHVyZUpvYiA8c3Ryb25nPmZSZWZyZXNoSm9iPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9KRmFjZU5vZGVBZGFwdGVyIj5KRmFjZU5vZGVBZGFwdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SkZhY2VOb2RlQWRhcHRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlSW1hZ2UiPmNyZWF0ZUltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIEltYWdlIDxzdHJvbmc+Y3JlYXRlSW1hZ2U8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVYTUxJbWFnZURlc2NyaXB0b3IiPmNyZWF0ZVhNTEltYWdlRGVzY3JpcHRvcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJbWFnZSA8c3Ryb25nPmNyZWF0ZVhNTEltYWdlRGVzY3JpcHRvcjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGltYWdlUmVzb3VyY2VOYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbWFnZVJlc291cmNlTmFtZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0Q2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RWxlbWVudHMiPmdldEVsZW1lbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXSA8c3Ryb25nPmdldEVsZW1lbnRzPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgbm9kZSk8L2NvZGU+PC9wPjxwPlJldHVybnMgYW4gZW51bWVyYXRpb24gd2l0aCB0aGUgZWxlbWVudHMgYmVsb25naW5nIHRvIHRoZSBwYXNzZWQKLSBlbGVtZW50LiBUaGVzZSBhcmUgdGhlIHRvcCBsZXZlbCBpdGVtcyBpbiBhIGxpc3QsIHRyZWUsIHRhYmxlLCBldGMuLi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldExhYmVsSW1hZ2UiPmdldExhYmVsSW1hZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSW1hZ2UgPHN0cm9uZz5nZXRMYWJlbEltYWdlPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgbm9kZSk8L2NvZGU+PC9wPjxwPkZldGNoZXMgdGhlIGxhYmVsIGltYWdlIHNwZWNpZmljIHRvIHRoaXMgb2JqZWN0IGluc3RhbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT4gLSBET00gTm9kZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2U8L2NvZGU+IC0gSW1hZ2UgZm9yIHRoZSBsYWJlbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGFiZWxUZXh0Ij5nZXRMYWJlbFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldExhYmVsVGV4dDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG5vZGUpPC9jb2RlPjwvcD48cD5GZXRjaGVzIHRoZSBsYWJlbCB0ZXh0IHNwZWNpZmljIHRvIHRoaXMgb2JqZWN0IGluc3RhbmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gTm9kZSBOYW1lIGZvciB0aGUgTGFiZWw8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmdldFBhcmVudDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0WFNMSW1hZ2UiPmdldFhTTEltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIEltYWdlRGVzY3JpcHRvciA8c3Ryb25nPmdldFhTTEltYWdlPC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgbm9kZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlRGVzY3JpcHRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzQ2hpbGRyZW4iPmhhc0NoaWxkcmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5oYXNDaGlsZHJlbjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNBZGFwdGVyRm9yVHlwZSI+aXNBZGFwdGVyRm9yVHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNBZGFwdGVyRm9yVHlwZTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IHR5cGUpPC9jb2RlPjwvcD48cD5BbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUgYWxsb3dzIGl0Ci0gdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHlwZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX25vdGlmeUNoYW5nZWQiPm5vdGlmeUNoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPm5vdGlmeUNoYW5nZWQ8L3N0cm9uZz4oSU5vZGVOb3RpZmllciBub3RpZmllcgotICAgICAgICAgLAotICAgICAgaW50IGV2ZW50VHlwZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBjaGFuZ2VkRmVhdHVyZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRWYWx1ZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdWYWx1ZQotICAgICAgICAgLAotICAgICAgaW50IHBvcyk8L2NvZGU+PC9wPjxwPkNhbGxlZCBieSB0aGUgb2JqZWN0IGJlaW5nIGFkYXB0ZXIgKHRoZSBub3RpZmllcikgd2hlbiBzb21ldGhpbmcgaGFzCi0gY2hhbmdlZC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vdGlmaWVyPC9jb2RlPjwvcD48cD48Y29kZT5ldmVudFR5cGU8L2NvZGU+PC9wPjxwPjxjb2RlPmNoYW5nZWRGZWF0dXJlPC9jb2RlPjwvcD48cD48Y29kZT5vbGRWYWx1ZTwvY29kZT48L3A+PHA+PGNvZGU+bmV3VmFsdWU8L2NvZGU+PC9wPjxwPjxjb2RlPnBvczwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZWUyMjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGw8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbCI+SkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGw8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhY2hlQ2xlYXJlZCI+Y2FjaGVDbGVhcmVkPC9hPihDTURvY3VtZW50Q2FjaGUgY2FjaGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY2FjaGVVcGRhdGVkIj5jYWNoZVVwZGF0ZWQ8L2E+KENNRG9jdW1lbnRDYWNoZSBjYWNoZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB1cmkKLSAgICAgICAgICwKLSAgICAgIGludCBvbGRTdGF0dXMKLSAgICAgICAgICwKLSAgICAgIGludCBuZXdTdGF0dXMKLSAgICAgICAgICwKLSAgICAgIENNRG9jdW1lbnQgY21Eb2N1bWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wcm9wZXJ0eUNoYW5nZWQiPnByb3BlcnR5Q2hhbmdlZDwvYT4oQ01Eb2N1bWVudE1hbmFnZXIgY21Eb2N1bWVudE1hbmFnZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJvcGVydHlOYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0pGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsIj5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5LkNNRG9jdW1lbnRNYW5hZ2VyTGlzdGVuZXJJbXBsPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NhY2hlQ2xlYXJlZCI+Y2FjaGVDbGVhcmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jYWNoZUNsZWFyZWQ8L3N0cm9uZz4oQ01Eb2N1bWVudENhY2hlIGNhY2hlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jYWNoZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2FjaGVVcGRhdGVkIj5jYWNoZVVwZGF0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNhY2hlVXBkYXRlZDwvc3Ryb25nPihDTURvY3VtZW50Q2FjaGUgY2FjaGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdXJpCi0gICAgICAgICAsCi0gICAgICBpbnQgb2xkU3RhdHVzCi0gICAgICAgICAsCi0gICAgICBpbnQgbmV3U3RhdHVzCi0gICAgICAgICAsCi0gICAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNhY2hlPC9jb2RlPjwvcD48cD48Y29kZT51cmk8L2NvZGU+PC9wPjxwPjxjb2RlPm9sZFN0YXR1czwvY29kZT48L3A+PHA+PGNvZGU+bmV3U3RhdHVzPC9jb2RlPjwvcD48cD48Y29kZT5jbURvY3VtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcm9wZXJ0eUNoYW5nZWQiPnByb3BlcnR5Q2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cHJvcGVydHlDaGFuZ2VkPC9zdHJvbmc+KENNRG9jdW1lbnRNYW5hZ2VyIGNtRG9jdW1lbnRNYW5hZ2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByb3BlcnR5TmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y21Eb2N1bWVudE1hbmFnZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnByb3BlcnR5TmFtZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNWQyMzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RBZGFwdGVyRmFjdG9yeTwvcHJlPkFuIGFkYXB0ZXIgZmFjdG9yeSB0byBjcmVhdGUgSkZhY2VOb2RlQWRhcHRlcnMuIFVzZSB0aGlzIGFkYXB0ZXIgZmFjdG9yeQotIHdpdGggYSBKRmFjZUFkYXB0ZXJDb250ZW50UHJvdmlkZXIgdG8gZGlzcGxheSBET00gbm9kZXMgaW4gYSB0cmVlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJTm9kZUFkYXB0ZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9zaW5nbGV0b25BZGFwdGVyIj5zaW5nbGV0b25BZGFwdGVyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSI+SkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0pGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5Ij5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBhZGFwdGVyS2V5Ci0gICAgICAgICAsCi0gICAgICBib29sZWFuIHJlZ2lzdGVyQWRhcHRlcnMpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbCI+SkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGw8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZExpc3RlbmVyIj5hZGRMaXN0ZW5lcjwvYT4oamF2YS5sYW5nLk9iamVjdCBsaXN0ZW5lcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSU5vZGVBZGFwdGVyRmFjdG9yeTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb3B5Ij5jb3B5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElOb2RlQWRhcHRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVBZGFwdGVyIj5jcmVhdGVBZGFwdGVyPC9hPihJTm9kZU5vdGlmaWVyIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IEpGYWNlIGFkYXB0ZXIgZm9yIHRoZSBET00gbm9kZSBwYXNzZWQgaW48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkNvbGxlY3Rpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TGlzdGVuZXJzIj5nZXRMaXN0ZW5lcnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICByZXR1cm5zICJjb3B5IiBzbyBubyBvbmUgY2FuIG1vZGlmeSBvdXIgbGlzdC4gSXQgaXMgYSBzaGFsbG93IGNvcHkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdEFkYXB0ZXIiPmluaXRBZGFwdGVyPC9hPihJTm9kZUFkYXB0ZXIgYWRhcHRlcgotICAgICAgICAgLAotICAgICAgSU5vZGVOb3RpZmllciBub2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbGVhc2UiPnJlbGVhc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZW1vdmVMaXN0ZW5lciI+cmVtb3ZlTGlzdGVuZXI8L2E+KGphdmEubGFuZy5PYmplY3QgbGlzdGVuZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9zaW5nbGV0b25BZGFwdGVyIj5zaW5nbGV0b25BZGFwdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElOb2RlQWRhcHRlciA8c3Ryb25nPnNpbmdsZXRvbkFkYXB0ZXI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0pGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5Ij5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGYWNlTm9kZUFkYXB0ZXJGYWN0b3J5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSI+SkZhY2VOb2RlQWRhcHRlckZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGFkYXB0ZXJLZXkKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gcmVnaXN0ZXJBZGFwdGVycyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZExpc3RlbmVyIj5hZGRMaXN0ZW5lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkTGlzdGVuZXI8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBsaXN0ZW5lcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bGlzdGVuZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvcHkiPmNvcHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSU5vZGVBZGFwdGVyRmFjdG9yeSA8c3Ryb25nPmNvcHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JTm9kZUFkYXB0ZXJGYWN0b3J5PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVBZGFwdGVyIj5jcmVhdGVBZGFwdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElOb2RlQWRhcHRlciA8c3Ryb25nPmNyZWF0ZUFkYXB0ZXI8L3N0cm9uZz4oSU5vZGVOb3RpZmllciBub2RlKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IEpGYWNlIGFkYXB0ZXIgZm9yIHRoZSBET00gbm9kZSBwYXNzZWQgaW48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JTm9kZUFkYXB0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldExpc3RlbmVycyI+Z2V0TGlzdGVuZXJzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIDxzdHJvbmc+Z2V0TGlzdGVuZXJzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPnJldHVybnMgImNvcHkiIHNvIG5vIG9uZSBjYW4gbW9kaWZ5IG91ciBsaXN0LiBJdCBpcyBhIHNoYWxsb3cgY29weS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5Db2xsZWN0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0QWRhcHRlciI+aW5pdEFkYXB0ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmluaXRBZGFwdGVyPC9zdHJvbmc+KElOb2RlQWRhcHRlciBhZGFwdGVyCi0gICAgICAgICAsCi0gICAgICBJTm9kZU5vdGlmaWVyIG5vZGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFkYXB0ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbGVhc2UiPnJlbGVhc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbGVhc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbW92ZUxpc3RlbmVyIj5yZW1vdmVMaXN0ZW5lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVtb3ZlTGlzdGVuZXI8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBsaXN0ZW5lcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bGlzdGVuZXI8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0Mjg4MzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBKRmFjZU5vZGVDb250ZW50UHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5KRmFjZU5vZGVDb250ZW50UHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkFuIElUcmVlQ29udGVudFByb3ZpZGVyIGZvciBhIFRyZWVWaWV3ZXJzIHVzZWQgdG8gZGlzcGxheSBET00gbm9kZXMuIFRoaXMKLSBjb250ZW50IHByb3ZpZGVyIHRha2VzIGFuIGFkYXB0ZXIgZmFjdG9yeSB0byBjcmVhdGUgSkZhY2UgYWRhcHRlcnMgZm9yIHRoZQotIG5vZGVzIGluIHRoZSB0cmVlLjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9KRmFjZU5vZGVDb250ZW50UHJvdmlkZXIiPkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSB2aXN1YWwgcGFydCB0aGF0IGlzIHVzaW5nIHRoaXMgY29udGVudCBwcm92aWRlciBpcyBhYm91dCB0byBiZQotIGRpc3Bvc2VkLiBEZWFsbG9jYXRlIGFsbCBhbGxvY2F0ZWQgU1dUIHJlc291cmNlcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSUpGYWNlTm9kZUFkYXB0ZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QWRhcHRlciI+Z2V0QWRhcHRlcjwvYT4oamF2YS5sYW5nLk9iamVjdCBhZGFwdGFibGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgSkZhY2UgYWRhcHRlciBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqZWN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RWxlbWVudHMiPmdldEVsZW1lbnRzPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzQ2hpbGRyZW4iPmhhc0NoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbnB1dENoYW5nZWQiPmlucHV0Q2hhbmdlZDwvYT4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9KRmFjZU5vZGVDb250ZW50UHJvdmlkZXIiPkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkpGYWNlTm9kZUNvbnRlbnRQcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlRoZSB2aXN1YWwgcGFydCB0aGF0IGlzIHVzaW5nIHRoaXMgY29udGVudCBwcm92aWRlciBpcyBhYm91dCB0byBiZQotIGRpc3Bvc2VkLiBEZWFsbG9jYXRlIGFsbCBhbGxvY2F0ZWQgU1dUIHJlc291cmNlcy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QWRhcHRlciI+Z2V0QWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJSkZhY2VOb2RlQWRhcHRlciA8c3Ryb25nPmdldEFkYXB0ZXI8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBhZGFwdGFibGUpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBKRmFjZSBhZGFwdGVyIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFkYXB0YWJsZTwvY29kZT4gLSBqYXZhLmxhbmcuT2JqZWN0IFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBhZGFwdGVyIGZvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUpGYWNlTm9kZUFkYXB0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENoaWxkcmVuIj5nZXRDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRDaGlsZHJlbjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0RWxlbWVudHM8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iamVjdDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmdldFBhcmVudDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzQ2hpbGRyZW4iPmhhc0NoaWxkcmVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5oYXNDaGlsZHJlbjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5wdXRDaGFuZ2VkIj5pbnB1dENoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmlucHV0Q2hhbmdlZDwvc3Ryb25nPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG9sZElucHV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG5ld0lucHV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm9sZElucHV0PC9jb2RlPjwvcD48cD48Y29kZT5uZXdJbnB1dDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlTGFiZWxQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlTGFiZWxQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTIzYTcwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkpGYWNlTm9kZUxhYmVsUHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEpGYWNlTm9kZUxhYmVsUHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5KRmFjZU5vZGVMYWJlbFByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIENvbHVtbkxhYmVsUHJvdmlkZXI8L3ByZT5BIChjb2x1bW4pIGxhYmVsIHByb3ZpZGVyIGJhY2tlZCBieSBKRmFjZU5vZGVBZGFwdGVycy48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSkZhY2VOb2RlTGFiZWxQcm92aWRlciI+SkZhY2VOb2RlTGFiZWxQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElKRmFjZU5vZGVBZGFwdGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFkYXB0ZXIiPmdldEFkYXB0ZXI8L2E+KGphdmEubGFuZy5PYmplY3QgYWRhcHRhYmxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIEpGYWNlIGFkYXB0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJbWFnZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbWFnZSI+Z2V0SW1hZ2U8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZXh0Ij5nZXRUZXh0PC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNMYWJlbFByb3BlcnR5Ij5pc0xhYmVsUHJvcGVydHk8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcm9wZXJ0eSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9KRmFjZU5vZGVMYWJlbFByb3ZpZGVyIj5KRmFjZU5vZGVMYWJlbFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+SkZhY2VOb2RlTGFiZWxQcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5KRmFjZU5vZGVMYWJlbFByb3ZpZGVyIGNvbnN0cnVjdG9yIGNvbW1lbnQuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QWRhcHRlciI+Z2V0QWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJSkZhY2VOb2RlQWRhcHRlciA8c3Ryb25nPmdldEFkYXB0ZXI8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBhZGFwdGFibGUpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBKRmFjZSBhZGFwdGVyIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFkYXB0YWJsZTwvY29kZT4gLSBqYXZhLmxhbmcuT2JqZWN0IFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBhZGFwdGVyIGZvcjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUpGYWNlTm9kZUFkYXB0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJbWFnZSA8c3Ryb25nPmdldEltYWdlPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZXh0Ij5nZXRUZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUZXh0PC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzTGFiZWxQcm9wZXJ0eSI+aXNMYWJlbFByb3BlcnR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0xhYmVsUHJvcGVydHk8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByb3BlcnR5KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48cD48Y29kZT5wcm9wZXJ0eTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlJlZnJlc2hTdHJ1Y3R1cmVKb2IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlJlZnJlc2hTdHJ1Y3R1cmVKb2IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJjMjVlMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5SZWZyZXNoU3RydWN0dXJlSm9iLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBSZWZyZXNoU3RydWN0dXJlSm9iPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+UmVmcmVzaFN0cnVjdHVyZUpvYjwvc3Ryb25nPgotZXh0ZW5kcyBKb2I8L3ByZT5UaGlzIGpvYiBob2xkcyBhIHF1ZXVlIG9mIHVwZGF0ZXMgKGFmZmVjdGVkIG5vZGVzKSBmb3IgbXVsdGlwbGUgc3RydWN0dXJlZAotIHZpZXdlcnMuIFdoZW4gYSBuZXcgcmVxdWVzdCBjb21lcyBpbiwgdGhlIGN1cnJlbnQgcnVuIGlzIGNhbmNlbGxlZCwgdGhlIG5ldwotIHJlcXVlc3QgaXMgYWRkZWQgdG8gdGhlIHF1ZXVlLCB0aGVuIHRoZSBqb2IgaXMgcmUtc2NoZWR1bGVkLiBTdXBwb3J0IGZvcgotIG11bHRpcGxlIHN0cnVjdHVyZWQgdmlld2VycyBpcyByZXF1aXJlZCBiZWNhdXNlIHJlZnJlc2ggdXBkYXRlcyBhcmUgdXN1YWxseQotIHRyaWdnZXJlZCBieSBtb2RlbCBjaGFuZ2VzLCBhbmQgdGhlIG1vZGVsIG1heSBiZSB2aXNpYmxlIGluIG1vcmUgdGhhbiBvbmUKLSB2aWV3ZXIuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ERUJVRyI+REVCVUc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgZGVidWcgZmxhZzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZlJlZnJlc2hWaWV3ZXJzIj5mUmVmcmVzaFZpZXdlcnM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgdGhlIHN0cnVjdHVyZWQgdmlld2VyczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLnV0aWwuU2V0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfZlVwZGF0ZVZpZXdlcnMiPmZVcGRhdGVWaWV3ZXJzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9SZWZyZXNoU3RydWN0dXJlSm9iIj5SZWZyZXNoU3RydWN0dXJlSm9iPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYW5jZWxpbmciPmNhbmNlbGluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlZnJlc2giPnJlZnJlc2g8L2E+KFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgSW52b2tlIGEgcmVmcmVzaCBvbiB0aGUgdmlld2VyIG9uIHRoZSBnaXZlbiBub2RlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJU3RhdHVzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXBkYXRlIj51cGRhdGU8L2E+KFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdbXSBwcm9wZXJ0aWVzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEludm9rZSBhIHJlZnJlc2ggb24gdGhlIHZpZXdlciBvbiB0aGUgZ2l2ZW4gbm9kZS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0RFQlVHIj5ERUJVRzwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGJvb2xlYW4gPHN0cm9uZz5ERUJVRzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+ZGVidWcgZmxhZzwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZlJlZnJlc2hWaWV3ZXJzIj5mUmVmcmVzaFZpZXdlcnM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS51dGlsLlNldCA8c3Ryb25nPmZSZWZyZXNoVmlld2Vyczwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+dGhlIHN0cnVjdHVyZWQgdmlld2VyczwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfZlVwZGF0ZVZpZXdlcnMiPmZVcGRhdGVWaWV3ZXJzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEudXRpbC5TZXQgPHN0cm9uZz5mVXBkYXRlVmlld2Vyczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUmVmcmVzaFN0cnVjdHVyZUpvYiI+UmVmcmVzaFN0cnVjdHVyZUpvYjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJlZnJlc2hTdHJ1Y3R1cmVKb2I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FuY2VsaW5nIj5jYW5jZWxpbmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmNhbmNlbGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVmcmVzaCI+cmVmcmVzaDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVmcmVzaDwvc3Ryb25nPihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48L3A+PHA+SW52b2tlIGEgcmVmcmVzaCBvbiB0aGUgdmlld2VyIG9uIHRoZSBnaXZlbiBub2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJU3RhdHVzIDxzdHJvbmc+cnVuPC9zdHJvbmc+KElQcm9ncmVzc01vbml0b3IgbW9uaXRvcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bW9uaXRvcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTdGF0dXM8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VwZGF0ZSI+dXBkYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz51cGRhdGU8L3N0cm9uZz4oU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ1tdIHByb3BlcnRpZXMpPC9jb2RlPjwvcD48cD5JbnZva2UgYSByZWZyZXNoIG9uIHRoZSB2aWV3ZXIgb24gdGhlIGdpdmVuIG5vZGUuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPnByb3BlcnRpZXM8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhNTE5vZGVBY3Rpb25NYW5hZ2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YTUxOb2RlQWN0aW9uTWFuYWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQyNDc3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhNTE5vZGVBY3Rpb25NYW5hZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYTUxOb2RlQWN0aW9uTWFuYWdlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhNTE5vZGVBY3Rpb25NYW5hZ2VyPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0Tm9kZUFjdGlvbk1hbmFnZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWE1MTm9kZUFjdGlvbk1hbmFnZXIiPlhNTE5vZGVBY3Rpb25NYW5hZ2VyPC9hPjwvc3Ryb25nPihJU3RydWN0dXJlZE1vZGVsIG1vZGVsCi0gICAgICAgICAsCi0gICAgICBWaWV3ZXIgdmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVmb3JtYXQiPnJlZm9ybWF0PC9hPihvcmcudzNjLmRvbS5Ob2RlIG5ld0VsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gZGVlcCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRNb2RlbCI+c2V0TW9kZWw8L2E+KElTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0TW9kZWxRdWVyeSI+c2V0TW9kZWxRdWVyeTwvYT4oTW9kZWxRdWVyeSBuZXdNb2RlbFF1ZXJ5KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hNTE5vZGVBY3Rpb25NYW5hZ2VyIj5YTUxOb2RlQWN0aW9uTWFuYWdlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhNTE5vZGVBY3Rpb25NYW5hZ2VyPC9zdHJvbmc+KElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwKLSAgICAgICAgICwKLSAgICAgIFZpZXdlciB2aWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZWZvcm1hdCI+cmVmb3JtYXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlZm9ybWF0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbmV3RWxlbWVudAotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBkZWVwKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uZXdFbGVtZW50PC9jb2RlPjwvcD48cD48Y29kZT5kZWVwPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRNb2RlbCI+c2V0TW9kZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldE1vZGVsPC9zdHJvbmc+KElTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld01vZGVsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRNb2RlbFF1ZXJ5Ij5zZXRNb2RlbFF1ZXJ5PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5zZXRNb2RlbFF1ZXJ5PC9zdHJvbmc+KE1vZGVsUXVlcnkgbmV3TW9kZWxRdWVyeSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3TW9kZWxRdWVyeTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuWFNMQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE3NjMzNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBYTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb248L3ByZT5Nb3JlIGFkdmFuY2VkIE91dGxpbmUgQ29uZmlndXJhdGlvbiBmb3IgWE1MIHN1cHBvcnQuICBFeHBlY3RzIHRoYXQgdGhlIHZpZXdlcidzCi0gaW5wdXQgd2lsbCBiZSB0aGUgRE9NIE1vZGVsLjxwPjwvcD48cD48L3A+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+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiI+WFNMQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSUNvbnRyaWJ1dGlvbkl0ZW1bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVNZW51Q29udHJpYnV0aW9ucyI+Y3JlYXRlTWVudUNvbnRyaWJ1dGlvbnM8L2E+KFRyZWVWaWV3ZXIgdmlld2VyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2VuYWJsZVNob3dBdHRyaWJ1dGVzIj5lbmFibGVTaG93QXR0cmlidXRlczwvYT4oYm9vbGVhbiBzaG93QXR0cmlidXRlcwotICAgICAgICAgLAotICAgICAgVHJlZVZpZXdlciB0cmVlVmlld2VyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE5vdGlmaWVzIHRoaXMgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90Ci0gdG8gc2hvdyBhdHRyaWJ1dGUgdmFsdWVzIGluIHRoZSB0cmVlIHZpZXdlciBoYXMgY2hhbmdlZC4gVGhlIHRyZWUKLSB2aWV3ZXIgaXMgYXV0b21hdGljYWxseSByZWZyZXNoZWQgYWZ0ZXJ3YXJkcyB0byB1cGRhdGUgdGhlIGxhYmVscy4KLSAKLSBDbGllbnRzIHNob3VsZCBub3QgY2FsbCB0aGlzIG1ldGhvZCwgYnV0IHJhdGhlciBzaG91bGQgcmVhY3QgdG8gaXQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElDb250ZW50UHJvdmlkZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29udGVudFByb3ZpZGVyIj5nZXRDb250ZW50UHJvdmlkZXI8L2E+KFRyZWVWaWV3ZXIgdmlld2VyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJTGFiZWxQcm92aWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMYWJlbFByb3ZpZGVyIj5nZXRMYWJlbFByb3ZpZGVyPC9hPihUcmVlVmlld2VyIHZpZXdlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSVNlbGVjdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTZWxlY3Rpb24iPmdldFNlbGVjdGlvbjwvYT4oVHJlZVZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfQVRUUl9JRCI+QVRUUl9JRDwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5BVFRSX0lEPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0FUVFJfTkFNRSI+QVRUUl9OQU1FPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkFUVFJfTkFNRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9mU2hvd0F0dHJpYnV0ZXMiPmZTaG93QXR0cmlidXRlczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBib29sZWFuIDxzdHJvbmc+ZlNob3dBdHRyaWJ1dGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24iPlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGUgbmV3IGluc3RhbmNlIG9mIFhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZU1lbnVDb250cmlidXRpb25zIj5jcmVhdGVNZW51Q29udHJpYnV0aW9uczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJQ29udHJpYnV0aW9uSXRlbVtdIDxzdHJvbmc+Y3JlYXRlTWVudUNvbnRyaWJ1dGlvbnM8L3N0cm9uZz4oVHJlZVZpZXdlciB2aWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklDb250cmlidXRpb25JdGVtW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2VuYWJsZVNob3dBdHRyaWJ1dGVzIj5lbmFibGVTaG93QXR0cmlidXRlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZW5hYmxlU2hvd0F0dHJpYnV0ZXM8L3N0cm9uZz4oYm9vbGVhbiBzaG93QXR0cmlidXRlcwotICAgICAgICAgLAotICAgICAgVHJlZVZpZXdlciB0cmVlVmlld2VyKTwvY29kZT48L3A+PHA+Tm90aWZpZXMgdGhpcyBjb25maWd1cmF0aW9uIHRoYXQgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QKLSB0byBzaG93IGF0dHJpYnV0ZSB2YWx1ZXMgaW4gdGhlIHRyZWUgdmlld2VyIGhhcyBjaGFuZ2VkLiBUaGUgdHJlZQotIHZpZXdlciBpcyBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlZCBhZnRlcndhcmRzIHRvIHVwZGF0ZSB0aGUgbGFiZWxzLgotIAotIENsaWVudHMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgbWV0aG9kLCBidXQgcmF0aGVyIHNob3VsZCByZWFjdCB0byBpdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNob3dBdHRyaWJ1dGVzPC9jb2RlPiAtIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBzaG93IGF0dHJpYnV0ZSB2YWx1ZXMgaW4gICAgICAgICAgICAgdGhlIHRyZWUgdmlld2VyPC9wPjxwPjxjb2RlPnRyZWVWaWV3ZXI8L2NvZGU+IC0gdGhlIFRyZWVWaWV3ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb250ZW50UHJvdmlkZXIiPmdldENvbnRlbnRQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJQ29udGVudFByb3ZpZGVyIDxzdHJvbmc+Z2V0Q29udGVudFByb3ZpZGVyPC9zdHJvbmc+KFRyZWVWaWV3ZXIgdmlld2VyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29udGVudFByb3ZpZGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMYWJlbFByb3ZpZGVyIj5nZXRMYWJlbFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElMYWJlbFByb3ZpZGVyIDxzdHJvbmc+Z2V0TGFiZWxQcm92aWRlcjwvc3Ryb25nPihUcmVlVmlld2VyIHZpZXdlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SUxhYmVsUHJvdmlkZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFNlbGVjdGlvbiI+Z2V0U2VsZWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElTZWxlY3Rpb24gPHN0cm9uZz5nZXRTZWxlY3Rpb248L3N0cm9uZz4oVHJlZVZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIElTZWxlY3Rpb24gc2VsZWN0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnNlbGVjdGlvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTZWxlY3Rpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrLlhTTERvdWJsZUNsaWNrU3RyYXRlZ3kuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrLlhTTERvdWJsZUNsaWNrU3RyYXRlZ3kuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ3OGUzNC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljay5YU0xEb3VibGVDbGlja1N0cmF0ZWd5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZG91YmxlY2xpY2s8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5kb3VibGVjbGljazwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xEb3VibGVDbGlja1N0cmF0ZWd5PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMRG91YmxlQ2xpY2tTdHJhdGVneTwvc3Ryb25nPgotZXh0ZW5kcyBYTUxEb3VibGVDbGlja1N0cmF0ZWd5PC9wcmU+WFNMRG91YmxlQ2xpY2tTdHJhdGVneSBleHRlbmRzIHRoZSBYTUxEb3VibGVjbGlja1N0cmF0ZWd5IHRvIHRha2UgaW50bwotIGFjY291bnQgdGhvc2UgYXJlYXMgdGhhdCBtYXkgYmUgaW52b2x2ZWQgaW4gWFBhdGggRXhwcmVzc2lvbnMuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGNoYXJbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hNTF9ERUxJTUlURVJTIj5YTUxfREVMSU1JVEVSUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBjaGFyW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YTUxfUEFSRU5USEVTSVMiPlhNTF9QQVJFTlRIRVNJUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMRG91YmxlQ2xpY2tTdHJhdGVneSI+WFNMRG91YmxlQ2xpY2tTdHJhdGVneTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFBvaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFdvcmQiPmdldFdvcmQ8L2E+KGphdmEubGFuZy5TdHJpbmcgc3RyaW5nCi0gICAgICAgICAsCi0gICAgICBpbnQgY3Vyc29yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRPZldvcmQiPnN0YXJ0T2ZXb3JkPC9hPihqYXZhLmxhbmcuU3RyaW5nIHN0cmluZwotICAgICAgICAgLAotICAgICAgaW50IGN1cnNvcgotICAgICAgICAgLAotICAgICAgaW50IHdvcmRTdGFydCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hNTF9ERUxJTUlURVJTIj5YTUxfREVMSU1JVEVSUzwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGNoYXJbXSA8c3Ryb25nPlhNTF9ERUxJTUlURVJTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hNTF9QQVJFTlRIRVNJUyI+WE1MX1BBUkVOVEhFU0lTPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgY2hhcltdIDxzdHJvbmc+WE1MX1BBUkVOVEhFU0lTPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xEb3VibGVDbGlja1N0cmF0ZWd5Ij5YU0xEb3VibGVDbGlja1N0cmF0ZWd5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMRG91YmxlQ2xpY2tTdHJhdGVneTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRXb3JkIj5nZXRXb3JkPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFBvaW50IDxzdHJvbmc+Z2V0V29yZDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHN0cmluZwotICAgICAgICAgLAotICAgICAgaW50IGN1cnNvcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RyaW5nPC9jb2RlPjwvcD48cD48Y29kZT5jdXJzb3I8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Qb2ludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnRPZldvcmQiPnN0YXJ0T2ZXb3JkPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPnN0YXJ0T2ZXb3JkPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgc3RyaW5nCi0gICAgICAgICAsCi0gICAgICBpbnQgY3Vyc29yCi0gICAgICAgICAsCi0gICAgICBpbnQgd29yZFN0YXJ0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJpbmc8L2NvZGU+PC9wPjxwPjxjb2RlPmN1cnNvcjwvY29kZT48L3A+PHA+PGNvZGU+d29yZFN0YXJ0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmQ3YTJhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBPdmVycmlkZUluZGljYXRvcjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPk92ZXJyaWRlSW5kaWNhdG9yPC9zdHJvbmc+Ci1leHRlbmRzIEFubm90YXRpb248L3ByZT5PdmVyd3JpdGUgYW5kIG92ZXJyaWRlIGluZGljYXRvciBhbm5vdGF0aW9uLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fT3ZlcnJpZGVJbmRpY2F0b3IiPk92ZXJyaWRlSW5kaWNhdG9yPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHRleHQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcga2V5KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfb3BlbiI+b3BlbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIE9wZW5zIGFuZCByZXZlYWxzIHRoZSBkZWZpbmluZyBtZXRob2QuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fT3ZlcnJpZGVJbmRpY2F0b3IiPk92ZXJyaWRlSW5kaWNhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+T3ZlcnJpZGVJbmRpY2F0b3I8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB0ZXh0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBuZXcgb3ZlcnJpZGUgYW5ub3RhdGlvbi48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9vcGVuIj5vcGVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5vcGVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPk9wZW5zIGFuZCByZXZlYWxzIHRoZSBkZWZpbmluZyBtZXRob2QuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmNTc3ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE92ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk92ZXJyaWRlSW5kaWNhdG9ySW1hZ2VQcm92aWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+SW1hZ2UgcHJvdmlkZXIgZm9yIHtAbGluayBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5qZHQuaW50ZXJuYWwudWkuamF2YWVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXIuT3ZlcnJpZGVJbmRpY2F0b3J9IGFubm90YXRpb25zLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyIj5PdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJbWFnZURlc2NyaXB0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW1hZ2VEZXNjcmlwdG9yIj5nZXRJbWFnZURlc2NyaXB0b3I8L2E+KGphdmEubGFuZy5TdHJpbmcgaW1hZ2VEZXNjcml0cG9ySWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW1hZ2VEZXNjcmlwdG9ySWQiPmdldEltYWdlRGVzY3JpcHRvcklkPC9hPihBbm5vdGF0aW9uIGFubm90YXRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1hbmFnZWRJbWFnZSI+Z2V0TWFuYWdlZEltYWdlPC9hPihBbm5vdGF0aW9uIGFubm90YXRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhpcyBkb2VzIG5vdCBzdXBwb3J0IG1hbmFnaW5nIGl0cyBvd24gaW1hZ2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyIj5PdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5PdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1hZ2VEZXNjcmlwdG9yIj5nZXRJbWFnZURlc2NyaXB0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSW1hZ2VEZXNjcmlwdG9yIDxzdHJvbmc+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgaW1hZ2VEZXNjcml0cG9ySWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmltYWdlRGVzY3JpdHBvcklkPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbWFnZURlc2NyaXB0b3JJZCI+Z2V0SW1hZ2VEZXNjcmlwdG9ySWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEltYWdlRGVzY3JpcHRvcklkPC9zdHJvbmc+KEFubm90YXRpb24gYW5ub3RhdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5ub3RhdGlvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1hbmFnZWRJbWFnZSI+Z2V0TWFuYWdlZEltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlIDxzdHJvbmc+Z2V0TWFuYWdlZEltYWdlPC9zdHJvbmc+KEFubm90YXRpb24gYW5ub3RhdGlvbik8L2NvZGU+PC9wPjxwPlRoaXMgZG9lcyBub3Qgc3VwcG9ydCBtYW5hZ2luZyBpdHMgb3duIGltYWdlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5ub3RhdGlvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPiAtIG51bGw8L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmZlNDFkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvck1hbmFnZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+T3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5NYW5hZ2VzIHRoZSBvdmVycmlkZSBhbmQgb3ZlcndyaXRlIGluZGljYXRvcnMgZm9yIHRoZSBnaXZlbiBKYXZhIGVsZW1lbnQgYW5kIGFubm90YXRpb24gbW9kZWwuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9BTk5PVEFUSU9OX1RZUEUiPkFOTk9UQVRJT05fVFlQRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyIj5PdmVycmlkZUluZGljYXRvck1hbmFnZXI8L2E+PC9zdHJvbmc+KElBbm5vdGF0aW9uTW9kZWwgYW5ub3RhdGlvbk1vZGVsCi0gICAgICAgICAsCi0gICAgICBJRmlsZSBmaWxlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVtb3ZlQW5ub3RhdGlvbnMiPnJlbW92ZUFubm90YXRpb25zPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmVtb3ZlcyBhbGwgb3ZlcnJpZGUgaW5kaWNhdG9ycyBmcm9tIHRoaXMgbWFuYWdlcidzIGFubm90YXRpb24gbW9kZWwuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXBkYXRlQW5ub3RhdGlvbnMiPnVwZGF0ZUFubm90YXRpb25zPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXBkYXRlcyB0aGUgb3ZlcnJpZGUgYW5kIGltcGxlbWVudHMgYW5ub3RhdGlvbnMgYmFzZWQgb24gdGhlIGdpdmVuIEFTVC48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0FOTk9UQVRJT05fVFlQRSI+QU5OT1RBVElPTl9UWVBFPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkFOTk9UQVRJT05fVFlQRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyIj5PdmVycmlkZUluZGljYXRvck1hbmFnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5PdmVycmlkZUluZGljYXRvck1hbmFnZXI8L3N0cm9uZz4oSUFubm90YXRpb25Nb2RlbCBhbm5vdGF0aW9uTW9kZWwKLSAgICAgICAgICwKLSAgICAgIElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciByZXF1aXJlcyB0aGUgZWRpdG9ycyBhbm5vdGF0aW9uIG1vZGVsIGFuZCB0aGUgZmlsZSB0aGUgZWRpdG9yIGlzIGxvb2tpbmcgYXQuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcmVtb3ZlQW5ub3RhdGlvbnMiPnJlbW92ZUFubm90YXRpb25zPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQgPHN0cm9uZz5yZW1vdmVBbm5vdGF0aW9uczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZW1vdmVzIGFsbCBvdmVycmlkZSBpbmRpY2F0b3JzIGZyb20gdGhpcyBtYW5hZ2VyJ3MgYW5ub3RhdGlvbiBtb2RlbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlQW5ub3RhdGlvbnMiPnVwZGF0ZUFubm90YXRpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz51cGRhdGVBbm5vdGF0aW9uczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5VcGRhdGVzIHRoZSBvdmVycmlkZSBhbmQgaW1wbGVtZW50cyBhbm5vdGF0aW9ucyBiYXNlZCBvbiB0aGUgZ2l2ZW4gQVNULjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuU291cmNlRmlsZUh5cGVybGluay5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlNvdXJjZUZpbGVIeXBlcmxpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBkNDQwZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuU291cmNlRmlsZUh5cGVybGluay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTb3VyY2VGaWxlSHlwZXJsaW5rPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U291cmNlRmlsZUh5cGVybGluazwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Tb3VyY2VGaWxlSHlwZXJsaW5rIj5Tb3VyY2VGaWxlSHlwZXJsaW5rPC9hPjwvc3Ryb25nPihJUmVnaW9uIGh5cGVyTGlua1JlZ2lvbgotICAgICAgICAgLAotICAgICAgSUZpbGUgbGlua2VkRmlsZSk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1NvdXJjZUZpbGVIeXBlcmxpbmsiPlNvdXJjZUZpbGVIeXBlcmxpbms8L2E+PC9zdHJvbmc+KElSZWdpb24gaHlwZXJMaW5rUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJRmlsZSBsaW5rZWRGaWxlCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTm9kZSBub2RlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SHlwZXJsaW5rUmVnaW9uIj5nZXRIeXBlcmxpbmtSZWdpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRIeXBlcmxpbmtUZXh0Ij5nZXRIeXBlcmxpbmtUZXh0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VHlwZUxhYmVsIj5nZXRUeXBlTGFiZWw8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9vcGVuIj5vcGVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU291cmNlRmlsZUh5cGVybGluayI+U291cmNlRmlsZUh5cGVybGluazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlNvdXJjZUZpbGVIeXBlcmxpbms8L3N0cm9uZz4oSVJlZ2lvbiBoeXBlckxpbmtSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElGaWxlIGxpbmtlZEZpbGUpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fU291cmNlRmlsZUh5cGVybGluayI+U291cmNlRmlsZUh5cGVybGluazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlNvdXJjZUZpbGVIeXBlcmxpbms8L3N0cm9uZz4oSVJlZ2lvbiBoeXBlckxpbmtSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElGaWxlIGxpbmtlZEZpbGUKLSAgICAgICAgICwKLSAgICAgIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIG5vZGUpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRIeXBlcmxpbmtSZWdpb24iPmdldEh5cGVybGlua1JlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJUmVnaW9uIDxzdHJvbmc+Z2V0SHlwZXJsaW5rUmVnaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVJlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SHlwZXJsaW5rVGV4dCI+Z2V0SHlwZXJsaW5rVGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0SHlwZXJsaW5rVGV4dDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFR5cGVMYWJlbCI+Z2V0VHlwZUxhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUeXBlTGFiZWw8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9vcGVuIj5vcGVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5vcGVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMRWRpdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMRWRpdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZmMzNGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEVkaXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xFZGl0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xFZGl0b3I8L3N0cm9uZz4KLWV4dGVuZHMgU3RydWN0dXJlZFRleHRFZGl0b3I8L3ByZT5YU0wgc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byB0aGUgU1NFIFVJIHRoYXQgaGF2ZW4ndCB5ZXQgYmVlbiBtYWRlCi0gYXZhaWxhYmxlIHRvIHRoZSBTU0UuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xFZGl0b3IiPlhTTEVkaXRvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZG9TZXRJbnB1dCI+ZG9TZXRJbnB1dDwvYT4oSUVkaXRvcklucHV0IGlucHV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFkYXB0ZXIiPmdldEFkYXB0ZXI8L2E+KGphdmEubGFuZy5DbGFzcyByZXF1aXJlZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRPdmVycmlkZUluZGljYXRvck1hbmFnZXIiPmdldE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luc3RhbGxPdmVycmlkZUluZGljYXRvciI+aW5zdGFsbE92ZXJyaWRlSW5kaWNhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMRWRpdG9yIj5YU0xFZGl0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xFZGl0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZG9TZXRJbnB1dCI+ZG9TZXRJbnB1dDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZG9TZXRJbnB1dDwvc3Ryb25nPihJRWRpdG9ySW5wdXQgaW5wdXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlucHV0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QWRhcHRlciI+Z2V0QWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+Z2V0QWRhcHRlcjwvc3Ryb25nPihqYXZhLmxhbmcuQ2xhc3MgcmVxdWlyZWQpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXF1aXJlZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlciI+Z2V0T3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlciA8c3Ryb25nPmdldE92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5zdGFsbE92ZXJyaWRlSW5kaWNhdG9yIj5pbnN0YWxsT3ZlcnJpZGVJbmRpY2F0b3I8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmluc3RhbGxPdmVycmlkZUluZGljYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEh5cGVybGlua0RldGVjdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMSHlwZXJsaW5rRGV0ZWN0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc0M2IyOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMSHlwZXJsaW5rRGV0ZWN0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3I8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMSHlwZXJsaW5rRGV0ZWN0b3I8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xIeXBlcmxpbmtEZXRlY3Rvcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdEh5cGVybGlua0RldGVjdG9yPC9wcmU+QSBoeXBlcmxpbmsgZGV0ZWN0b3IgZm9yIFhTTCBmaWxlcy4KLSAKLSBUaGUgZGV0ZWN0b3IgbWFrZXMgdXNlIG9mIHRoZSBtb2RlbCBidWlsdCBieSBTU0UgdmFsaWRhdGlvbiAoZm91bmQgaW4gPGNvZGU+WFNMQ29yZTwvY29kZT4pLgotIAotIEN1cnJlbnRseSBzdXBwb3J0cyBoeXBlcmxpbmtpbmcgZm9yIGluY2x1ZGVzLCBpbXBvcnRzIG9yIGNhbGxlZCB0ZW1wbGF0ZXMuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xIeXBlcmxpbmtEZXRlY3RvciI+WFNMSHlwZXJsaW5rRGV0ZWN0b3I8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJSHlwZXJsaW5rW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGV0ZWN0SHlwZXJsaW5rcyI+ZGV0ZWN0SHlwZXJsaW5rczwvYT4oSVRleHRWaWV3ZXIgdGV4dFZpZXdlcgotICAgICAgICAgLAotICAgICAgSVJlZ2lvbiByZWdpb24KLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gY2FuU2hvd011bHRpcGxlSHlwZXJsaW5rcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUcnkgdG8gY3JlYXRlIGh5cGVybGlua3MgZm9yIHZpZXdlciBhbmQgcmVnaW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElIeXBlcmxpbmtbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZXRlY3RIeXBlcmxpbmtzIj5kZXRlY3RIeXBlcmxpbmtzPC9hPihJRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIElSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGNhblNob3dNdWx0aXBsZUh5cGVybGlua3MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVHJ5IHRvIGNyZWF0ZSBoeXBlcmxpbmtzIGZvciBkb2N1bWVudCBhbmQgcmVnaW9uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMSHlwZXJsaW5rRGV0ZWN0b3IiPlhTTEh5cGVybGlua0RldGVjdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMSHlwZXJsaW5rRGV0ZWN0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGV0ZWN0SHlwZXJsaW5rcyI+ZGV0ZWN0SHlwZXJsaW5rczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJSHlwZXJsaW5rW10gPHN0cm9uZz5kZXRlY3RIeXBlcmxpbmtzPC9zdHJvbmc+KElUZXh0Vmlld2VyIHRleHRWaWV3ZXIKLSAgICAgICAgICwKLSAgICAgIElSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBib29sZWFuIGNhblNob3dNdWx0aXBsZUh5cGVybGlua3MpPC9jb2RlPjwvcD48cD5UcnkgdG8gY3JlYXRlIGh5cGVybGlua3MgZm9yIHZpZXdlciBhbmQgcmVnaW9uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZXh0Vmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPmNhblNob3dNdWx0aXBsZUh5cGVybGlua3M8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JSHlwZXJsaW5rW108L2NvZGU+IC0gYXJyYXkgb2YgaHlwZXJsaW5rcyBmb3IgY3VycmVudCByZWdpb248L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZGV0ZWN0SHlwZXJsaW5rcyI+ZGV0ZWN0SHlwZXJsaW5rczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJSHlwZXJsaW5rW10gPHN0cm9uZz5kZXRlY3RIeXBlcmxpbmtzPC9zdHJvbmc+KElEb2N1bWVudCBkb2N1bWVudAotICAgICAgICAgLAotICAgICAgSVJlZ2lvbiByZWdpb24KLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gY2FuU2hvd011bHRpcGxlSHlwZXJsaW5rcyk8L2NvZGU+PC9wPjxwPlRyeSB0byBjcmVhdGUgaHlwZXJsaW5rcyBmb3IgZG9jdW1lbnQgYW5kIHJlZ2lvbjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jdW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPnJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+Y2FuU2hvd011bHRpcGxlSHlwZXJsaW5rczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklIeXBlcmxpbmtbXTwvY29kZT4gLSBhcnJheSBvZiBoeXBlcmxpbmtzIGZvciBjdXJyZW50IHJlZ2lvbjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5oYW5kbGVycy5PcGVuRGVjbGFyYXRpb25IYW5kbGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5oYW5kbGVycy5PcGVuRGVjbGFyYXRpb25IYW5kbGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NzFmMmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnMuT3BlbkRlY2xhcmF0aW9uSGFuZGxlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5oYW5kbGVyczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBPcGVuRGVjbGFyYXRpb25IYW5kbGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+T3BlbkRlY2xhcmF0aW9uSGFuZGxlcjwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fT3BlbkRlY2xhcmF0aW9uSGFuZGxlciI+T3BlbkRlY2xhcmF0aW9uSGFuZGxlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhlY3V0ZSI+ZXhlY3V0ZTwvYT4oRXhlY3V0aW9uRXZlbnQgZXZlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fT3BlbkRlY2xhcmF0aW9uSGFuZGxlciI+T3BlbkRlY2xhcmF0aW9uSGFuZGxlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk9wZW5EZWNsYXJhdGlvbkhhbmRsZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXhlY3V0ZSI+ZXhlY3V0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IDxzdHJvbmc+ZXhlY3V0ZTwvc3Ryb25nPihFeGVjdXRpb25FdmVudCBldmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+RXhlY3V0aW9uRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTA0MzYyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJvcGVydHlQcmVmZXJlbmNlUGFnZTwvcHJlPkJhc2VkIG9uIG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5PcHRpb25zQ29uZmlndXJhdGlvbkJsb2NrPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0Fic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZSI+QWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29tYm88L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkQ29tYm9Cb3giPmFkZENvbWJvQm94PC9hPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleQotICAgICAgICAgLAotICAgICAgaW50W10gdmFsdWVzCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nW10gdmFsdWVMYWJlbHMKLSAgICAgICAgICwKLSAgICAgIGludCBpbmRlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIENvbWJvIHdpZGdldCBpbiB0aGUgY29tcG9zaXRlIDxjb2RlPnBhcmVudDwvY29kZT4uIFRoZSBkYXRhCi0gaW4gdGhlIENvbWJvIGlzIGFzc29jaWF0ZWQgd2l0aCA8Y29kZT5rZXk8L2NvZGU+LiBUaGUgQ29tYm8gZGF0YSBpcwotIGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgaW50ZWdlciA8Y29kZT52YWx1ZXM8L2NvZGU+IHdoZXJlIHRoZSBpbmRleAotIG9mIDxjb2RlPnZhbHVlczwvY29kZT4gY29ycmVzcG9uZHMgdG8gdGhlIGluZGV4IG9mIDxjb2RlPnZhbHVlTGFiZWxzPC9jb2RlPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnRyb2xDaGFuZ2VkIj5jb250cm9sQ2hhbmdlZDwvYT4oV2lkZ2V0IHdpZGdldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgRXhwYW5kYWJsZUNvbXBvc2l0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUd2lzdGllIj5jcmVhdGVUd2lzdGllPC9hPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBpbnQgbkNvbHVtbnMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXhwYW5kZWRTdGF0ZUNoYW5nZWQiPmV4cGFuZGVkU3RhdGVDaGFuZ2VkPC9hPihFeHBhbmRhYmxlQ29tcG9zaXRlIGV4cGFuZGFibGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIEV4cGFuZGFibGVDb21wb3NpdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50RXhwYW5kYWJsZUNvbXBvc2l0ZSI+Z2V0UGFyZW50RXhwYW5kYWJsZUNvbXBvc2l0ZTwvYT4oQ29udHJvbCBjb250cm9sKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBTY3JvbGxlZFBhZ2VDb250ZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlIj5nZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZTwvYT4oQ29udHJvbCBjb250cm9sKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBTZWxlY3Rpb25MaXN0ZW5lcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTZWxlY3Rpb25MaXN0ZW5lciI+Z2V0U2VsZWN0aW9uTGlzdGVuZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29tYm88L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbmV3Q29tYm9Db250cm9sIj5uZXdDb21ib0NvbnRyb2w8L2E+KENvbXBvc2l0ZSBjb21wb3NpdGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcga2V5Ci0gICAgICAgICAsCi0gICAgICBpbnRbXSB2YWx1ZXMKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmdbXSB2YWx1ZUxhYmVscyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDcmVhdGVzIGEgY29tYm8gYm94IGFuZCBhc3NvY2lhdGVzIHRoZSBjb21ibyBkYXRhIHdpdGggdGhlCi0gY29tYm8gYm94LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlcmZvcm1PayI+cGVyZm9ybU9rPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzZXRTZXZlcml0aWVzIj5yZXNldFNldmVyaXRpZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZXN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyI+cmVzdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXM8L2E+KElEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zaG91bGRSZXZhbGlkYXRlT25TZXR0aW5nc0NoYW5nZSI+c2hvdWxkUmV2YWxpZGF0ZU9uU2V0dGluZ3NDaGFuZ2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXMiPnN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlczwvYT4oSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcmVWYWx1ZXMiPnN0b3JlVmFsdWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQWJzdHJhY3RWYWxpZGF0aW9uU2V0dGluZ3NQYWdlIj5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkQ29tYm9Cb3giPmFkZENvbWJvQm94PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbWJvIDxzdHJvbmc+YWRkQ29tYm9Cb3g8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBrZXkKLSAgICAgICAgICwKLSAgICAgIGludFtdIHZhbHVlcwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZ1tdIHZhbHVlTGFiZWxzCi0gICAgICAgICAsCi0gICAgICBpbnQgaW5kZW50KTwvY29kZT48L3A+PHA+Q3JlYXRlcyBhIENvbWJvIHdpZGdldCBpbiB0aGUgY29tcG9zaXRlIDxjb2RlPnBhcmVudDwvY29kZT4uIFRoZSBkYXRhCi0gaW4gdGhlIENvbWJvIGlzIGFzc29jaWF0ZWQgd2l0aCA8Y29kZT5rZXk8L2NvZGU+LiBUaGUgQ29tYm8gZGF0YSBpcwotIGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgaW50ZWdlciA8Y29kZT52YWx1ZXM8L2NvZGU+IHdoZXJlIHRoZSBpbmRleAotIG9mIDxjb2RlPnZhbHVlczwvY29kZT4gY29ycmVzcG9uZHMgdG8gdGhlIGluZGV4IG9mIDxjb2RlPnZhbHVlTGFiZWxzPC9jb2RlPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPiAtIHRoZSBjb21wb3NpdGUgdG8gY3JlYXRlIHRoZSBjb21ibyBib3ggaW48L3A+PHA+PGNvZGU+bGFiZWw8L2NvZGU+IC0gdGhlIGxhYmVsIHRvIGdpdmUgdGhlIGNvbWJvIGJveDwvcD48cD48Y29kZT5rZXk8L2NvZGU+IC0gdGhlIHVuaXF1ZSBrZXkgdG8gaWRlbnRpZnkgdGhlIGNvbWJvIGJveDwvcD48cD48Y29kZT52YWx1ZXM8L2NvZGU+IC0gdGhlIHZhbHVlcyByZXByZXNlbnRlZCBieSB0aGUgY29tYm8gb3B0aW9uczwvcD48cD48Y29kZT52YWx1ZUxhYmVsczwvY29kZT4gLSB0aGUgY2FsdWVzIGRpc3BsYXllZCBpbiB0aGUgY29tYm8gYm94PC9wPjxwPjxjb2RlPmluZGVudDwvY29kZT4gLSBob3cgZmFyIHRvIGluZGVudCB0aGUgY29tYm8gYm94IGxhYmVsPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db21ibzwvY29kZT4gLSB0aGUgZ2VuZXJhdGVkIGNvbWJvIGJveDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb250cm9sQ2hhbmdlZCI+Y29udHJvbENoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmNvbnRyb2xDaGFuZ2VkPC9zdHJvbmc+KFdpZGdldCB3aWRnZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPndpZGdldDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVHdpc3RpZSI+Y3JlYXRlVHdpc3RpZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBFeHBhbmRhYmxlQ29tcG9zaXRlIDxzdHJvbmc+Y3JlYXRlVHdpc3RpZTwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBpbnQgbkNvbHVtbnMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+bGFiZWw8L2NvZGU+PC9wPjxwPjxjb2RlPm5Db2x1bW5zPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+RXhwYW5kYWJsZUNvbXBvc2l0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXhwYW5kZWRTdGF0ZUNoYW5nZWQiPmV4cGFuZGVkU3RhdGVDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5leHBhbmRlZFN0YXRlQ2hhbmdlZDwvc3Ryb25nPihFeHBhbmRhYmxlQ29tcG9zaXRlIGV4cGFuZGFibGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV4cGFuZGFibGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmVudEV4cGFuZGFibGVDb21wb3NpdGUiPmdldFBhcmVudEV4cGFuZGFibGVDb21wb3NpdGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgRXhwYW5kYWJsZUNvbXBvc2l0ZSA8c3Ryb25nPmdldFBhcmVudEV4cGFuZGFibGVDb21wb3NpdGU8L3N0cm9uZz4oQ29udHJvbCBjb250cm9sKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250cm9sPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+RXhwYW5kYWJsZUNvbXBvc2l0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyZW50U2Nyb2xsZWRDb21wb3NpdGUiPmdldFBhcmVudFNjcm9sbGVkQ29tcG9zaXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFNjcm9sbGVkUGFnZUNvbnRlbnQgPHN0cm9uZz5nZXRQYXJlbnRTY3JvbGxlZENvbXBvc2l0ZTwvc3Ryb25nPihDb250cm9sIGNvbnRyb2wpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRyb2w8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5TY3JvbGxlZFBhZ2VDb250ZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTZWxlY3Rpb25MaXN0ZW5lciI+Z2V0U2VsZWN0aW9uTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgU2VsZWN0aW9uTGlzdGVuZXIgPHN0cm9uZz5nZXRTZWxlY3Rpb25MaXN0ZW5lcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlNlbGVjdGlvbkxpc3RlbmVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9uZXdDb21ib0NvbnRyb2wiPm5ld0NvbWJvQ29udHJvbDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb21ibyA8c3Ryb25nPm5ld0NvbWJvQ29udHJvbDwvc3Ryb25nPihDb21wb3NpdGUgY29tcG9zaXRlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleQotICAgICAgICAgLAotICAgICAgaW50W10gdmFsdWVzCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nW10gdmFsdWVMYWJlbHMpPC9jb2RlPjwvcD48cD5DcmVhdGVzIGEgY29tYm8gYm94IGFuZCBhc3NvY2lhdGVzIHRoZSBjb21ibyBkYXRhIHdpdGggdGhlCi0gY29tYm8gYm94LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29tcG9zaXRlPC9jb2RlPiAtIHRoZSBjb21wb3NpdGUgdG8gY3JlYXRlIHRoZSBjb21ibyBib3ggaW48L3A+PHA+PGNvZGU+a2V5PC9jb2RlPiAtIHRoZSB1bmlxdWUga2V5IHRvIGlkZW50aWZ5IHRoZSBjb21ibyBib3g8L3A+PHA+PGNvZGU+dmFsdWVzPC9jb2RlPiAtIHRoZSB2YWx1ZXMgcmVwcmVzZW50ZWQgYnkgdGhlIGNvbWJvIG9wdGlvbnM8L3A+PHA+PGNvZGU+dmFsdWVMYWJlbHM8L2NvZGU+IC0gdGhlIHZhbHVlcyBkaXNwbGF5ZWQgaW4gdGhlIGNvbWJvIGJveDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29tYm88L2NvZGU+IC0gdGhlIGdlbmVyYXRlZCBjb21ibyBib3g8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1Pazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc2V0U2V2ZXJpdGllcyI+cmVzZXRTZXZlcml0aWVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5yZXNldFNldmVyaXRpZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc3RvcmVTZWN0aW9uRXhwYW5zaW9uU3RhdGVzIj5yZXN0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cmVzdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXM8L3N0cm9uZz4oSURpYWxvZ1NldHRpbmdzIHNldHRpbmdzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zZXR0aW5nczwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2hvdWxkUmV2YWxpZGF0ZU9uU2V0dGluZ3NDaGFuZ2UiPnNob3VsZFJldmFsaWRhdGVPblNldHRpbmdzQ2hhbmdlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5zaG91bGRSZXZhbGlkYXRlT25TZXR0aW5nc0NoYW5nZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0b3JlU2VjdGlvbkV4cGFuc2lvblN0YXRlcyI+c3RvcmVTZWN0aW9uRXhwYW5zaW9uU3RhdGVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5zdG9yZVNlY3Rpb25FeHBhbnNpb25TdGF0ZXM8L3N0cm9uZz4oSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNlY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0b3JlVmFsdWVzIj5zdG9yZVZhbHVlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c3RvcmVWYWx1ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4N2U4YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZTwvc3Ryb25nPgotZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VQYWdlPC9wcmU+QXVnbWVudHMgdGhlIFNTRSA8Y29kZT5BYnN0cmFjdFByZWZlcmVuY2VQYWdlPC9jb2RlPiB3aXRoIHN1cHBvcnQgZm9yIGV4cGFuZGFibGUgY29tcG9zaXRlcyAodHdpc3RpZXMpIGFuZCBjb21ib3MuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZSI+QWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbWJvPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNvbWJvIj5jcmVhdGVDb21ibzwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcmVmS2V5KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb21wb3NpdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ29tbW9uQ29udGVudHMiPmNyZWF0ZUNvbW1vbkNvbnRlbnRzPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENhbGxlZCBieSBjcmVhdGVDb250ZW50cyBhbmQgbXVzdCBiZSBpbXBsZW1lbnRlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb250ZW50cyI+Y3JlYXRlQ29udGVudHM8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbXBvc2l0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUd2lzdGllIj5jcmVhdGVUd2lzdGllPC9hPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBpbnQgY29scyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2F2ZXMgdGhlIGV4cGFuc2lvbiBzdGF0ZXMgYmVmb3JlIGNhbGxpbmcgc3VwZXIuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFByZWZlcmVuY2VzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsUHJlZmVyZW5jZXMiPmdldE1vZGVsUHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNhdmUgdGhlIHByZWZlcmVuY2VzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0Fic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UiPkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbWJvIj5jcmVhdGVDb21ibzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb21ibyA8c3Ryb25nPmNyZWF0ZUNvbWJvPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJlZktleSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5sYWJlbDwvY29kZT48L3A+PHA+PGNvZGU+cHJlZktleTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbWJvPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb21tb25Db250ZW50cyI+Y3JlYXRlQ29tbW9uQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29tcG9zaXRlIDxzdHJvbmc+Y3JlYXRlQ29tbW9uQ29udGVudHM8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPkNhbGxlZCBieSBjcmVhdGVDb250ZW50cyBhbmQgbXVzdCBiZSBpbXBsZW1lbnRlZC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbXBvc2l0ZTwvY29kZT4gLSB0aGUgY29tcG9zaXRlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbnRlbnRzIj5jcmVhdGVDb250ZW50czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb250cm9sIDxzdHJvbmc+Y3JlYXRlQ29udGVudHM8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udHJvbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVHdpc3RpZSI+Y3JlYXRlVHdpc3RpZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb21wb3NpdGUgPHN0cm9uZz5jcmVhdGVUd2lzdGllPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGludCBjb2xzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmxhYmVsPC9jb2RlPjwvcD48cD48Y29kZT5jb2xzPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29tcG9zaXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlNhdmVzIHRoZSBleHBhbnNpb24gc3RhdGVzIGJlZm9yZSBjYWxsaW5nIHN1cGVyLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNb2RlbFByZWZlcmVuY2VzIj5nZXRNb2RlbFByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFByZWZlcmVuY2VzIDxzdHJvbmc+Z2V0TW9kZWxQcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlByZWZlcmVuY2VzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+cGVyZm9ybU9rPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlNhdmUgdGhlIHByZWZlcmVuY2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQ29tYm9EYXRhLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Db21ib0RhdGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyYjQyZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Db21ib0RhdGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIENvbWJvRGF0YTwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPkNvbWJvRGF0YTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX29yaWdpbmFsU2V2ZXJpdHkiPm9yaWdpbmFsU2V2ZXJpdHk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NvbWJvRGF0YSI+Q29tYm9EYXRhPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGtleQotICAgICAgICAgLAotICAgICAgaW50W10gc2V2ZXJpdGllcwotICAgICAgICAgLAotICAgICAgaW50IGluZGV4KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbmRleCI+Z2V0SW5kZXg8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRLZXkiPmdldEtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U2V2ZXJpdHkiPmdldFNldmVyaXR5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNDaGFuZ2VkIj5pc0NoYW5nZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRJbmRleCI+c2V0SW5kZXg8L2E+KGludCBpbmRleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRTZXZlcml0eSI+c2V0U2V2ZXJpdHk8L2E+KGludCBzZXZlcml0eSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXRzIHRoZSBzZXZlcml0eSBpbmRleCBiYXNlZCBvbiA8Y29kZT5zZXZlcml0eTwvY29kZT4uCi0gSWYgdGhlIHNldmVyaXR5IGRvZXNuJ3QgZXhpc3QsIHRoZSBpbmRleCBpcyBzZXQgdG8gLTEuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9vcmlnaW5hbFNldmVyaXR5Ij5vcmlnaW5hbFNldmVyaXR5PC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGludCA8c3Ryb25nPm9yaWdpbmFsU2V2ZXJpdHk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0NvbWJvRGF0YSI+Q29tYm9EYXRhPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q29tYm9EYXRhPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcga2V5Ci0gICAgICAgICAsCi0gICAgICBpbnRbXSBzZXZlcml0aWVzCi0gICAgICAgICAsCi0gICAgICBpbnQgaW5kZXgpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbmRleCI+Z2V0SW5kZXg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0SW5kZXg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEtleSI+Z2V0S2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTZXZlcml0eSI+Z2V0U2V2ZXJpdHk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0U2V2ZXJpdHk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzQ2hhbmdlZCI+aXNDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGJvb2xlYW4gPHN0cm9uZz5pc0NoYW5nZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRJbmRleCI+c2V0SW5kZXg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEluZGV4PC9zdHJvbmc+KGludCBpbmRleCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5kZXg8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFNldmVyaXR5Ij5zZXRTZXZlcml0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0U2V2ZXJpdHk8L3N0cm9uZz4oaW50IHNldmVyaXR5KTwvY29kZT48L3A+PHA+U2V0cyB0aGUgc2V2ZXJpdHkgaW5kZXggYmFzZWQgb24gPGNvZGU+c2V2ZXJpdHk8L2NvZGU+LgotIElmIHRoZSBzZXZlcml0eSBkb2Vzbid0IGV4aXN0LCB0aGUgaW5kZXggaXMgc2V0IHRvIC0xLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c2V2ZXJpdHk8L2NvZGU+IC0gdGhlIHNldmVyaXR5IGxldmVsPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLk1haW5QcmVmZXJlbmNlUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuTWFpblByZWZlcmVuY2VQYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjQ3ZGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuTWFpblByZWZlcmVuY2VQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBNYWluUHJlZmVyZW5jZVBhZ2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5NYWluUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgUHJlZmVyZW5jZVBhZ2U8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTWFpblByZWZlcmVuY2VQYWdlIj5NYWluUHJlZmVyZW5jZVBhZ2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb250cm9sPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNvbnRlbnRzIj5jcmVhdGVDb250ZW50czwvYT4oQ29tcG9zaXRlIGFuY2VzdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2ggd29ya2JlbmNoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9NYWluUHJlZmVyZW5jZVBhZ2UiPk1haW5QcmVmZXJlbmNlUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk1haW5QcmVmZXJlbmNlUGFnZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5NYWluUHJlZmVybmNlUGFnZSBpcyB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBYU0wgUHJlZmVyZW5jZSBQYWdlPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQ29udGVudHMiPmNyZWF0ZUNvbnRlbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2wgPHN0cm9uZz5jcmVhdGVDb250ZW50czwvc3Ryb25nPihDb21wb3NpdGUgYW5jZXN0b3IpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFuY2VzdG9yPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udHJvbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoIHdvcmtiZW5jaCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPndvcmtiZW5jaDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1Pazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNWQ4MGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJvcGVydHlQcmVmZXJlbmNlUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUHJvcGVydHlQcmVmZXJlbmNlUGFnZTwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlByb3BlcnR5UHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgUHJvcGVydHlQYWdlPC9wcmU+QmFzZWQgbG9vc2VseSBvbiBvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuUHJvcGVydHlBbmRQcmVmZXJlbmNlUGFnZTxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlIj5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hcHBseURhdGEiPmFwcGx5RGF0YTwvYT4oamF2YS5sYW5nLk9iamVjdCBkYXRhKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb250cm9sPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNvbW1vbkNvbnRlbnRzIj5jcmVhdGVDb21tb25Db250ZW50czwvYT4oQ29tcG9zaXRlIGNvbXBvc2l0ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgQ29udHJvbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb250ZW50cyI+Y3JlYXRlQ29udGVudHM8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElTY29wZUNvbnRleHRbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVQcmVmZXJlbmNlU2NvcGVzIj5jcmVhdGVQcmVmZXJlbmNlU2NvcGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW5hYmxlUHJlZmVyZW5jZUNvbnRlbnQiPmVuYWJsZVByZWZlcmVuY2VDb250ZW50PC9hPihib29sZWFuIGVuYWJsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb250cm9scyB0aGUgZW5hYmxlbWVudCBvZiB0aGUgY29tbW9uIGNvbnRlbnQgcmVnaW9uCi0gb2YgYSBwcm9wZXJ0eSBvciBwcmVmZXJlbmNlIHBhZ2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllciI+Z2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcmVmZXJlbmNlUGFnZUlEIj5nZXRQcmVmZXJlbmNlUGFnZUlEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElQcm9qZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFByb2plY3QiPmdldFByb2plY3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcm9qZWN0U2V0dGluZ3NLZXkiPmdldFByb2plY3RTZXR0aW5nc0tleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFByb3BlcnR5UGFnZUlEIj5nZXRQcm9wZXJ0eVBhZ2VJRDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzRWxlbWVudFNldHRpbmdzRW5hYmxlZCI+aXNFbGVtZW50U2V0dGluZ3NFbmFibGVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfb3BlblByb2plY3RTZXR0aW5ncyI+b3BlblByb2plY3RTZXR0aW5nczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX29wZW5Xb3Jrc3BhY2VTZXR0aW5ncyI+b3BlbldvcmtzcGFjZVNldHRpbmdzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybURlZmF1bHRzIj5wZXJmb3JtRGVmYXVsdHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1Byb3BlcnR5UHJlZmVyZW5jZVBhZ2UiPlByb3BlcnR5UHJlZmVyZW5jZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FwcGx5RGF0YSI+YXBwbHlEYXRhPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hcHBseURhdGE8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBkYXRhKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kYXRhPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb21tb25Db250ZW50cyI+Y3JlYXRlQ29tbW9uQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29udHJvbCA8c3Ryb25nPmNyZWF0ZUNvbW1vbkNvbnRlbnRzPC9zdHJvbmc+KENvbXBvc2l0ZSBjb21wb3NpdGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbXBvc2l0ZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbnRlbnRzIj5jcmVhdGVDb250ZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBDb250cm9sIDxzdHJvbmc+Y3JlYXRlQ29udGVudHM8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udHJvbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlUHJlZmVyZW5jZVNjb3BlcyI+Y3JlYXRlUHJlZmVyZW5jZVNjb3BlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJU2NvcGVDb250ZXh0W10gPHN0cm9uZz5jcmVhdGVQcmVmZXJlbmNlU2NvcGVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVNjb3BlQ29udGV4dFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmFibGVQcmVmZXJlbmNlQ29udGVudCI+ZW5hYmxlUHJlZmVyZW5jZUNvbnRlbnQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmVuYWJsZVByZWZlcmVuY2VDb250ZW50PC9zdHJvbmc+KGJvb2xlYW4gZW5hYmxlKTwvY29kZT48L3A+PHA+Q29udHJvbHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGNvbW1vbiBjb250ZW50IHJlZ2lvbgotIG9mIGEgcHJvcGVydHkgb3IgcHJlZmVyZW5jZSBwYWdlPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbmFibGU8L2NvZGU+IC0gdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIGNvbW1vbiBjb250ZW50ICBhcmVhPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyIj5nZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmVmZXJlbmNlUGFnZUlEIj5nZXRQcmVmZXJlbmNlUGFnZUlEPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRQcmVmZXJlbmNlUGFnZUlEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJvamVjdCI+Z2V0UHJvamVjdDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJUHJvamVjdCA8c3Ryb25nPmdldFByb2plY3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JUHJvamVjdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJvamVjdFNldHRpbmdzS2V5Ij5nZXRQcm9qZWN0U2V0dGluZ3NLZXk8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFByb2plY3RTZXR0aW5nc0tleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByb3BlcnR5UGFnZUlEIj5nZXRQcm9wZXJ0eVBhZ2VJRDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJvcGVydHlQYWdlSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc0VsZW1lbnRTZXR0aW5nc0VuYWJsZWQiPmlzRWxlbWVudFNldHRpbmdzRW5hYmxlZDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+aXNFbGVtZW50U2V0dGluZ3NFbmFibGVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfb3BlblByb2plY3RTZXR0aW5ncyI+b3BlblByb2plY3RTZXR0aW5nczwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkIDxzdHJvbmc+b3BlblByb2plY3RTZXR0aW5nczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfb3BlbldvcmtzcGFjZVNldHRpbmdzIj5vcGVuV29ya3NwYWNlU2V0dGluZ3M8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZCA8c3Ryb25nPm9wZW5Xb3Jrc3BhY2VTZXR0aW5nczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybURlZmF1bHRzIj5wZXJmb3JtRGVmYXVsdHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnBlcmZvcm1EZWZhdWx0czwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1Pazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDM4MzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlPC9wcmU+UHJlZmVyZW5jZSBwYWdlIGZvciBYU0wgdmFsaWRhdG9yIHByZWZlcmVuY2VzLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZSI+VmFsaWRhdGlvblByZWZlcmVuY2VQYWdlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ29tYm88L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ29tYm8iPmNyZWF0ZUNvbWJvPC9hPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByZWZLZXkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIENvbXBvc2l0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb21tb25Db250ZW50cyI+Y3JlYXRlQ29tbW9uQ29udGVudHM8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdGlhbGl6ZVZhbHVlcyI+aW5pdGlhbGl6ZVZhbHVlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlcmZvcm1EZWZhdWx0cyI+cGVyZm9ybURlZmF1bHRzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcmVWYWx1ZXMiPnN0b3JlVmFsdWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGVWYWx1ZXMiPnZhbGlkYXRlVmFsdWVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlIj5WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQ29tYm8iPmNyZWF0ZUNvbWJvPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbWJvIDxzdHJvbmc+Y3JlYXRlQ29tYm88L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBwcmVmS2V5KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmxhYmVsPC9jb2RlPjwvcD48cD48Y29kZT5wcmVmS2V5PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29tYm88L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbW1vbkNvbnRlbnRzIj5jcmVhdGVDb21tb25Db250ZW50czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb21wb3NpdGUgPHN0cm9uZz5jcmVhdGVDb21tb25Db250ZW50czwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db21wb3NpdGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXRpYWxpemVWYWx1ZXMiPmluaXRpYWxpemVWYWx1ZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmluaXRpYWxpemVWYWx1ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BlcmZvcm1EZWZhdWx0cyI+cGVyZm9ybURlZmF1bHRzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5wZXJmb3JtRGVmYXVsdHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0b3JlVmFsdWVzIj5zdG9yZVZhbHVlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c3RvcmVWYWx1ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlVmFsdWVzIj52YWxpZGF0ZVZhbHVlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+dmFsaWRhdGVWYWx1ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFN5bnRheENvbG9yaW5nUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMU3ludGF4Q29sb3JpbmdQYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOWE3NmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMU3ludGF4Q29sb3JpbmdQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xTeW50YXhDb2xvcmluZ1BhZ2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xTeW50YXhDb2xvcmluZ1BhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgUHJlZmVyZW5jZVBhZ2U8L3ByZT5BIHByZWZlcmVuY2UgcGFnZSB0byBjb25maWd1cmUgb3VyIFhTTCBzeW50YXggY29sb3IuIEl0IHJlc2VtYmxlcyB0aGUgWE1MCi0gcGFnZXMuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xTeW50YXhDb2xvcmluZ1BhZ2UiPlhTTFN5bnRheENvbG9yaW5nUGFnZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYXBwbHlTdHlsZXMiPmFwcGx5U3R5bGVzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ29sb3IgdGhlIHRleHQgaW4gdGhlIHNhbXBsZSBhcmVhIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwcmVmZXJlbmNlczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBCdXR0b248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlQ2hlY2tib3giPmNyZWF0ZUNoZWNrYm94PC9hPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb250cm9sPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNvbnRlbnRzIj5jcmVhdGVDb250ZW50czwvYT4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElQcmVmZXJlbmNlU3RvcmU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZG9HZXRQcmVmZXJlbmNlU3RvcmUiPmRvR2V0UHJlZmVyZW5jZVN0b3JlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdCI+aW5pdDwvYT4oSVdvcmtiZW5jaCB3b3JrYmVuY2gpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybURlZmF1bHRzIj5wZXJmb3JtRGVmYXVsdHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFN5bnRheENvbG9yaW5nUGFnZSI+WFNMU3ludGF4Q29sb3JpbmdQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMU3ludGF4Q29sb3JpbmdQYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FwcGx5U3R5bGVzIj5hcHBseVN0eWxlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YXBwbHlTdHlsZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q29sb3IgdGhlIHRleHQgaW4gdGhlIHNhbXBsZSBhcmVhIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwcmVmZXJlbmNlczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDaGVja2JveCI+Y3JlYXRlQ2hlY2tib3g8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgQnV0dG9uIDxzdHJvbmc+Y3JlYXRlQ2hlY2tib3g8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5sYWJlbDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkJ1dHRvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlQ29udGVudHMiPmNyZWF0ZUNvbnRlbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENvbnRyb2wgPHN0cm9uZz5jcmVhdGVDb250ZW50czwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db250cm9sPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kb0dldFByZWZlcmVuY2VTdG9yZSI+ZG9HZXRQcmVmZXJlbmNlU3RvcmU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVByZWZlcmVuY2VTdG9yZSA8c3Ryb25nPmRvR2V0UHJlZmVyZW5jZVN0b3JlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVByZWZlcmVuY2VTdG9yZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoIHdvcmtiZW5jaCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+d29ya2JlbmNoPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZXJmb3JtRGVmYXVsdHMiPnBlcmZvcm1EZWZhdWx0czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cGVyZm9ybURlZmF1bHRzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+cGVyZm9ybU9rPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjkwNTIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIFhNTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2U8L3ByZT5YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlIHNldHMgdXAgdGhlIHRlbXBsYXRlIHByZWZlcmVuY2UgcGFnZSB0aGF0Ci0gY29udGFpbnMgdGhlIHRlbXBsYXRlcyBmb3IgeHBhdGgsIHhwYXRoIDIuMCwgYXhpcywgb3BlcmF0b3JzLCBhbmQgCi0gZXhzbHQgZnVuY3Rpb25zLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSI+WFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZTwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZSI+WFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcGVyZm9ybU9rIj5wZXJmb3JtT2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1Pazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVUlQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkzMTEwYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xVSVByZWZlcmVuY2VJbml0aWFsaXplcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyPC9wcmU+U2V0cyBkZWZhdWx0IHZhbHVlcyBmb3IgWFNMIFVJIHByZWZlcmVuY2VzPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyIj5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcyI+aW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyIj5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMiPmluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmM2YzYzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFZhbGlkYXRpb25TZXR0aW5nc1BhZ2U8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlIj5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2U8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb21ibzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb21ibyI+Y3JlYXRlQ29tYm88L2E+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcga2V5KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb250cm9sPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZUNvbW1vbkNvbnRlbnRzIj5jcmVhdGVDb21tb25Db250ZW50czwvYT4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgTGFiZWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlTGFiZWwiPmNyZWF0ZUxhYmVsPC9hPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFRleHQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVGV4dEZpZWxkIj5jcmVhdGVUZXh0RmllbGQ8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIEV4cGFuZGFibGVDb21wb3NpdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVHdpc3RpZSI+Y3JlYXRlVHdpc3RpZTwvYT4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgaW50IG5Db2x1bW5zKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb21wb3NpdGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVmFsaWRhdGlvblNlY3Rpb24iPmNyZWF0ZVZhbGlkYXRpb25TZWN0aW9uPC9hPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbmFibGVWYWx1ZXMiPmVuYWJsZVZhbHVlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3M8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGlhbG9nU2V0dGluZ3MiPmdldERpYWxvZ1NldHRpbmdzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIFByZWZlcmVuY2VzPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1vZGVsUHJlZmVyZW5jZXMiPmdldE1vZGVsUHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllciI+Z2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcmVmZXJlbmNlUGFnZUlEIj5nZXRQcmVmZXJlbmNlUGFnZUlEPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJvamVjdFNldHRpbmdzS2V5Ij5nZXRQcm9qZWN0U2V0dGluZ3NLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcm9wZXJ0eVBhZ2VJRCI+Z2V0UHJvcGVydHlQYWdlSUQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRRdWFsaWZpZXIiPmdldFF1YWxpZmllcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2ggd29ya2JlbmNoKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXRpYWxpemVWYWx1ZXMiPmluaXRpYWxpemVWYWx1ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sb2FkUHJlZmVyZW5jZXMiPmxvYWRQcmVmZXJlbmNlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX21vZGlmeVRleHQiPm1vZGlmeVRleHQ8L2E+KE1vZGlmeUV2ZW50IGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVyZm9ybURlZmF1bHRzIj5wZXJmb3JtRGVmYXVsdHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdG9yZVZhbHVlcyI+c3RvcmVWYWx1ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZVZhbHVlcyI+dmFsaWRhdGVWYWx1ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UiPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVDb21ibyI+Y3JlYXRlQ29tYm88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29tYm8gPHN0cm9uZz5jcmVhdGVDb21ibzwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGxhYmVsCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGtleSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5sYWJlbDwvY29kZT48L3A+PHA+PGNvZGU+a2V5PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29tYm88L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbW1vbkNvbnRlbnRzIj5jcmVhdGVDb21tb25Db250ZW50czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBDb250cm9sIDxzdHJvbmc+Y3JlYXRlQ29tbW9uQ29udGVudHM8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udHJvbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlTGFiZWwiPmNyZWF0ZUxhYmVsPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIExhYmVsIDxzdHJvbmc+Y3JlYXRlTGFiZWw8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB0ZXh0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5MYWJlbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGV4dEZpZWxkIj5jcmVhdGVUZXh0RmllbGQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgVGV4dCA8c3Ryb25nPmNyZWF0ZVRleHRGaWVsZDwvc3Ryb25nPihDb21wb3NpdGUgcGFyZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZXh0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVUd2lzdGllIj5jcmVhdGVUd2lzdGllPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIEV4cGFuZGFibGVDb21wb3NpdGUgPHN0cm9uZz5jcmVhdGVUd2lzdGllPC9zdHJvbmc+KENvbXBvc2l0ZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGludCBuQ29sdW1ucyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5sYWJlbDwvY29kZT48L3A+PHA+PGNvZGU+bkNvbHVtbnM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5FeHBhbmRhYmxlQ29tcG9zaXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVWYWxpZGF0aW9uU2VjdGlvbiI+Y3JlYXRlVmFsaWRhdGlvblNlY3Rpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29tcG9zaXRlIDxzdHJvbmc+Y3JlYXRlVmFsaWRhdGlvblNlY3Rpb248L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29tcG9zaXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmFibGVWYWx1ZXMiPmVuYWJsZVZhbHVlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZW5hYmxlVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREaWFsb2dTZXR0aW5ncyI+Z2V0RGlhbG9nU2V0dGluZ3M8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIDxzdHJvbmc+Z2V0RGlhbG9nU2V0dGluZ3M8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JRGlhbG9nU2V0dGluZ3M8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1vZGVsUHJlZmVyZW5jZXMiPmdldE1vZGVsUHJlZmVyZW5jZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgUHJlZmVyZW5jZXMgPHN0cm9uZz5nZXRNb2RlbFByZWZlcmVuY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+UHJlZmVyZW5jZXM8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByZWZlcmVuY2VOb2RlUXVhbGlmaWVyIj5nZXRQcmVmZXJlbmNlTm9kZVF1YWxpZmllcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJlZmVyZW5jZU5vZGVRdWFsaWZpZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmVmZXJlbmNlUGFnZUlEIj5nZXRQcmVmZXJlbmNlUGFnZUlEPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRQcmVmZXJlbmNlUGFnZUlEPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJvamVjdFNldHRpbmdzS2V5Ij5nZXRQcm9qZWN0U2V0dGluZ3NLZXk8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFByb2plY3RTZXR0aW5nc0tleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFByb3BlcnR5UGFnZUlEIj5nZXRQcm9wZXJ0eVBhZ2VJRDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UHJvcGVydHlQYWdlSUQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRRdWFsaWZpZXIiPmdldFF1YWxpZmllcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UXVhbGlmaWVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoIHdvcmtiZW5jaCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+d29ya2JlbmNoPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0aWFsaXplVmFsdWVzIj5pbml0aWFsaXplVmFsdWVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5pbml0aWFsaXplVmFsdWVzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2FkUHJlZmVyZW5jZXMiPmxvYWRQcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+bG9hZFByZWZlcmVuY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbW9kaWZ5VGV4dCI+bW9kaWZ5VGV4dDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bW9kaWZ5VGV4dDwvc3Ryb25nPihNb2RpZnlFdmVudCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZXJmb3JtRGVmYXVsdHMiPnBlcmZvcm1EZWZhdWx0czwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cGVyZm9ybURlZmF1bHRzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZXJmb3JtT2siPnBlcmZvcm1PazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+cGVyZm9ybU9rPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0b3JlVmFsdWVzIj5zdG9yZVZhbHVlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c3RvcmVWYWx1ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlVmFsdWVzIj52YWxpZGF0ZVZhbHVlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+dmFsaWRhdGVWYWx1ZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0Lk92ZXJyaWRlUXVpY2tBc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0Lk92ZXJyaWRlUXVpY2tBc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk1MGY3Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5PdmVycmlkZVF1aWNrQXNzaXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBPdmVycmlkZVF1aWNrQXNzaXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+T3ZlcnJpZGVRdWlja0Fzc2lzdDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX092ZXJyaWRlUXVpY2tBc3Npc3QiPk92ZXJyaWRlUXVpY2tBc3Npc3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbkFzc2lzdCI+Y2FuQXNzaXN0PC9hPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYW5GaXgiPmNhbkZpeDwvYT4oQW5ub3RhdGlvbiBhbm5vdGF0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcHV0ZVF1aWNrQXNzaXN0UHJvcG9zYWxzIj5jb21wdXRlUXVpY2tBc3Npc3RQcm9wb3NhbHM8L2E+KElRdWlja0Fzc2lzdEludm9jYXRpb25Db250ZXh0IGludm9jYXRpb25Db250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVycm9yTWVzc2FnZSI+Z2V0RXJyb3JNZXNzYWdlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fT3ZlcnJpZGVRdWlja0Fzc2lzdCI+T3ZlcnJpZGVRdWlja0Fzc2lzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk92ZXJyaWRlUXVpY2tBc3Npc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FuQXNzaXN0Ij5jYW5Bc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmNhbkFzc2lzdDwvc3Ryb25nPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW52b2NhdGlvbkNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYW5GaXgiPmNhbkZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+Y2FuRml4PC9zdHJvbmc+KEFubm90YXRpb24gYW5ub3RhdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5ub3RhdGlvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2FscyI+Y29tcHV0ZVF1aWNrQXNzaXN0UHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXSA8c3Ryb25nPmNvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2Fsczwvc3Ryb25nPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW52b2NhdGlvbkNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVycm9yTWVzc2FnZSI+Z2V0RXJyb3JNZXNzYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRFcnJvck1lc3NhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5WYWxpZGF0aW9uUXVpY2tBc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0LlZhbGlkYXRpb25RdWlja0Fzc2lzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDRkYTgwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0LlZhbGlkYXRpb25RdWlja0Fzc2lzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucXVpY2thc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVmFsaWRhdGlvblF1aWNrQXNzaXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmFsaWRhdGlvblF1aWNrQXNzaXN0PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVmFsaWRhdGlvblF1aWNrQXNzaXN0Ij5WYWxpZGF0aW9uUXVpY2tBc3Npc3Q8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NhbkFzc2lzdCI+Y2FuQXNzaXN0PC9hPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jYW5GaXgiPmNhbkZpeDwvYT4oQW5ub3RhdGlvbiBhbm5vdGF0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBJQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcHV0ZVF1aWNrQXNzaXN0UHJvcG9zYWxzIj5jb21wdXRlUXVpY2tBc3Npc3RQcm9wb3NhbHM8L2E+KElRdWlja0Fzc2lzdEludm9jYXRpb25Db250ZXh0IGludm9jYXRpb25Db250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEVycm9yTWVzc2FnZSI+Z2V0RXJyb3JNZXNzYWdlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVmFsaWRhdGlvblF1aWNrQXNzaXN0Ij5WYWxpZGF0aW9uUXVpY2tBc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYWxpZGF0aW9uUXVpY2tBc3Npc3Q8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY2FuQXNzaXN0Ij5jYW5Bc3Npc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmNhbkFzc2lzdDwvc3Ryb25nPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW52b2NhdGlvbkNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jYW5GaXgiPmNhbkZpeDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+Y2FuRml4PC9zdHJvbmc+KEFubm90YXRpb24gYW5ub3RhdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YW5ub3RhdGlvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2FscyI+Y29tcHV0ZVF1aWNrQXNzaXN0UHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElDb21wbGV0aW9uUHJvcG9zYWxbXSA8c3Ryb25nPmNvbXB1dGVRdWlja0Fzc2lzdFByb3Bvc2Fsczwvc3Ryb25nPihJUXVpY2tBc3Npc3RJbnZvY2F0aW9uQ29udGV4dCBpbnZvY2F0aW9uQ29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW52b2NhdGlvbkNvbnRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JQ29tcGxldGlvblByb3Bvc2FsW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVycm9yTWVzc2FnZSI+Z2V0RXJyb3JNZXNzYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRFcnJvck1lc3NhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Njg5NWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnJlZ2lzdHJ5PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucmVnaXN0cnk8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYU0w8L3N0cm9uZz4KLWV4dGVuZHMgQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhNTDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMIj5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRBZGFwdGVyRmFjdG9yaWVzIj5hZGRBZGFwdGVyRmFjdG9yaWVzPC9hPihJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRDb250ZW50QmFzZWRGYWN0b3JpZXMiPmFkZENvbnRlbnRCYXNlZEZhY3RvcmllczwvYT4oSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaXNGb3IiPmlzRm9yPC9hPihJRG9jdW1lbnRUeXBlSGFuZGxlciBjb250ZW50VHlwZURlc2NyaXB0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlaW5pdGlhbGl6ZUZhY3RvcmllcyI+cmVpbml0aWFsaXplRmFjdG9yaWVzPC9hPihJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMIj5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRBZGFwdGVyRmFjdG9yaWVzIj5hZGRBZGFwdGVyRmFjdG9yaWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRBZGFwdGVyRmFjdG9yaWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJ1Y3R1cmVkTW9kZWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZENvbnRlbnRCYXNlZEZhY3RvcmllcyI+YWRkQ29udGVudEJhc2VkRmFjdG9yaWVzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGRDb250ZW50QmFzZWRGYWN0b3JpZXM8L3N0cm9uZz4oSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cnVjdHVyZWRNb2RlbDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNGb3IiPmlzRm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc0Zvcjwvc3Ryb25nPihJRG9jdW1lbnRUeXBlSGFuZGxlciBjb250ZW50VHlwZURlc2NyaXB0aW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZW50VHlwZURlc2NyaXB0aW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVpbml0aWFsaXplRmFjdG9yaWVzIj5yZWluaXRpYWxpemVGYWN0b3JpZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlaW5pdGlhbGl6ZUZhY3Rvcmllczwvc3Ryb25nPihJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c3RydWN0dXJlZE1vZGVsPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNzVkZTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZzwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmc8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nIj5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgUG9zaXRpb25bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBQb3NpdGlvbltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN1bWVzIj5jb25zdW1lczwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSW5kZXhlZFJlZ2lvbiBpbmRleGVkUmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyI+Y3JlYXRlU2VtYW50aWNQb3NpdGlvbnM8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHJlZ2lvblR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Qm9sZFByZWZlcmVuY2VLZXkiPmdldEJvbGRQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29sb3JQcmVmZXJlbmNlS2V5Ij5nZXRDb2xvclByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREaXNwbGF5TmFtZSI+Z2V0RGlzcGxheU5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbmFibGVkUHJlZmVyZW5jZUtleSI+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJdGFsaWNQcmVmZXJlbmNlS2V5Ij5nZXRJdGFsaWNQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIElQcmVmZXJlbmNlU3RvcmU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UHJlZmVyZW5jZVN0b3JlIj5nZXRQcmVmZXJlbmNlU3RvcmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHJpa2V0aHJvdWdoUHJlZmVyZW5jZUtleSI+Z2V0U3RyaWtldGhyb3VnaFByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHlsZVByZWZlcmVuY2VLZXkiPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFVuZGVybGluZVByZWZlcmVuY2VLZXkiPmdldFVuZGVybGluZVByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nIj5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUG9zaXRpb25bXSA8c3Ryb25nPmNvbnN1bWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Qb3NpdGlvbltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUG9zaXRpb25bXSA8c3Ryb25nPmNvbnN1bWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIEluZGV4ZWRSZWdpb24gaW5kZXhlZFJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jdW1lbnRSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPmluZGV4ZWRSZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Qb3NpdGlvbltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyI+Y3JlYXRlU2VtYW50aWNQb3NpdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5jcmVhdGVTZW1hbnRpY1Bvc2l0aW9uczwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyByZWdpb25UeXBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPnJlZ2lvblR5cGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Qm9sZFByZWZlcmVuY2VLZXkiPmdldEJvbGRQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRCb2xkUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbG9yUHJlZmVyZW5jZUtleSI+Z2V0Q29sb3JQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRDb2xvclByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREaXNwbGF5TmFtZSI+Z2V0RGlzcGxheU5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldERpc3BsYXlOYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEl0YWxpY1ByZWZlcmVuY2VLZXkiPmdldEl0YWxpY1ByZWZlcmVuY2VLZXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEl0YWxpY1ByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmVmZXJlbmNlU3RvcmUiPmdldFByZWZlcmVuY2VTdG9yZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBJUHJlZmVyZW5jZVN0b3JlIDxzdHJvbmc+Z2V0UHJlZmVyZW5jZVN0b3JlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVByZWZlcmVuY2VTdG9yZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3RyaWtldGhyb3VnaFByZWZlcmVuY2VLZXkiPmdldFN0cmlrZXRocm91Z2hQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTdHJpa2V0aHJvdWdoUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlUHJlZmVyZW5jZUtleSI+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRVbmRlcmxpbmVQcmVmZXJlbmNlS2V5Ij5nZXRVbmRlcmxpbmVQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRVbmRlcmxpbmVQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuSVN0eWxlQ29uc3RhbnRzWFNMLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5JU3R5bGVDb25zdGFudHNYU0wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJjYjU3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5JU3R5bGVDb25zdGFudHNYU0wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIElTdHlsZUNvbnN0YW50c1hTTDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPklTdHlsZUNvbnN0YW50c1hTTDwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5Db250YWlucyB0aGUgc3ltYm9saWMgbmFtZSBvZiBzdHlsZXMgdXNlZCBieSBMaW5lU3R5bGVQcm92aWRlciwKLSBDb2xvck1hbmFnZXIsIGFuZCBhbnkgb3RoZXJzIHdobyBtYXkgYmUgaW50ZXJlc3RlZDxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9CQUNLR1JPVU5EIj5CQUNLR1JPVU5EPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ERUNMX0JPUkRFUiI+REVDTF9CT1JERVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0ZPUkVHUk9VTkQiPkZPUkVHUk9VTkQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RBR19BVFRSSUJVVEVfRVFVQUxTIj5UQUdfQVRUUklCVVRFX0VRVUFMUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVEFHX0FUVFJJQlVURV9OQU1FIj5UQUdfQVRUUklCVVRFX05BTUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RBR19BVFRSSUJVVEVfVkFMVUUiPlRBR19BVFRSSUJVVEVfVkFMVUU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RBR19CT1JERVIiPlRBR19CT1JERVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RBR19OQU1FIj5UQUdfTkFNRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9CQUNLR1JPVU5EIj5CQUNLR1JPVU5EPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkJBQ0tHUk9VTkQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfREVDTF9CT1JERVIiPkRFQ0xfQk9SREVSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkRFQ0xfQk9SREVSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0ZPUkVHUk9VTkQiPkZPUkVHUk9VTkQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Rk9SRUdST1VORDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9UQUdfQVRUUklCVVRFX0VRVUFMUyI+VEFHX0FUVFJJQlVURV9FUVVBTFM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VEFHX0FUVFJJQlVURV9FUVVBTFM8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVEFHX0FUVFJJQlVURV9OQU1FIj5UQUdfQVRUUklCVVRFX05BTUU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VEFHX0FUVFJJQlVURV9OQU1FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RBR19BVFRSSUJVVEVfVkFMVUUiPlRBR19BVFRSSUJVVEVfVkFMVUU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VEFHX0FUVFJJQlVURV9WQUxVRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9UQUdfQk9SREVSIj5UQUdfQk9SREVSPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlRBR19CT1JERVI8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVEFHX05BTUUiPlRBR19OQU1FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlRBR19OQU1FPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlckZvclhTTC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXJGb3JYU0wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkNmQwOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlckZvclhTTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIExpbmVTdHlsZVByb3ZpZGVyRm9yWFNMPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TGluZVN0eWxlUHJvdmlkZXJGb3JYU0w8L3N0cm9uZz4KLWV4dGVuZHMgQWJzdHJhY3RMaW5lU3R5bGVQcm92aWRlcjwvcHJlPlRoaXMgaW1wbGVtZW50cyBhIFN5bnRheCBMaW5lIFN0eWxlIFByb3ZpZGVyIGZvciBYU0wuIEl0IGxldmVyYWdlcyBzb21lCi0gaW5mb3JtYXRpb24gZnJvbSB0aGUgWE1MIFN5bnRheCBDb2xvcmluZywgYnV0IGFkZHMgc3BlY2lmaWMgY29sb3JpbmcgZm9yIFhTTAotIHNwZWNpZmljIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLjxwPjwvcD48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBIaWdobGlnaHRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2hpZ2hsaWdodGVyIj5oaWdobGlnaHRlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgUmVjb25jaWxlckhpZ2hsaWdodGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcmVjSGlnaGxpZ2h0ZXIiPnJlY0hpZ2hsaWdodGVyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfc3RydWN0dXJlZERvY3VtZW50Ij5zdHJ1Y3R1cmVkRG9jdW1lbnQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0xpbmVTdHlsZVByb3ZpZGVyRm9yWFNMIj5MaW5lU3R5bGVQcm92aWRlckZvclhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkVGV4dEF0dHJpYnV0ZSI+YWRkVGV4dEF0dHJpYnV0ZTwvYT4oamF2YS5sYW5nLlN0cmluZyBjb2xvcktleSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBMb29rcyB1cCB0aGUgY29sb3JLZXkgaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUgYW5kIGFkZHMgdGhlIHN0eWxlCi0gaW5mb3JtYXRpb24gdG8gbGlzdCBvZiBUZXh0QXR0cmlidXRlczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbW1vbkluaXQiPmNvbW1vbkluaXQ8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBUZXh0QXR0cmlidXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVRleHRBdHRyaWJ1dGUiPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L2E+KFJHQiBmb3JlZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBSR0IgYmFja2dyb3VuZAotICAgICAgICAgLAotICAgICAgYm9vbGVhbiBib2xkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBUZXh0QXR0cmlidXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVRleHRBdHRyaWJ1dGUiPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L2E+KFJHQiBmb3JlZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBSR0IgYmFja2dyb3VuZAotICAgICAgICAgLAotICAgICAgaW50IHN0eWxlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBUZXh0QXR0cmlidXRlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEF0dHJpYnV0ZUZvciI+Z2V0QXR0cmlidXRlRm9yPC9hPihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gY29sbGVjdGlvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gdGV4dFJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBdHRyaWJ1dGVGb3IiPmdldEF0dHJpYnV0ZUZvcjwvYT4oSVRleHRSZWdpb24gcmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJUHJlZmVyZW5jZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbG9yUHJlZmVyZW5jZXMiPmdldENvbG9yUHJlZmVyZW5jZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXREb2N1bWVudCI+Z2V0RG9jdW1lbnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSGlnaGxpZ2h0ZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SGlnaGxpZ2h0ZXIiPmdldEhpZ2hsaWdodGVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFuZGxlUHJvcGVydHlDaGFuZ2UiPmhhbmRsZVByb3BlcnR5Q2hhbmdlPC9hPihQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBJU291cmNlVmlld2VyIHNvdXJjZVZpZXdlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0Ij5pbml0PC9hPihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudAotICAgICAgICAgLAotICAgICAgUmVjb25jaWxlckhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lzSW5pdGlhbGl6ZWQiPmlzSW5pdGlhbGl6ZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBpbml0aWFsaXplZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sb2FkQ29sb3JzIj5sb2FkQ29sb3JzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJlcGFyZVJlZ2lvbnMiPnByZXBhcmVSZWdpb25zPC9hPihJVHlwZWRSZWdpb24gdHlwZWRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBsaW5lUmVxdWVzdFN0YXJ0Ci0gICAgICAgICAsCi0gICAgICBpbnQgbGluZVJlcXVlc3RMZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGhvbGRSZXN1bHRzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3ByZXBhcmVUZXh0UmVnaW9uIj5wcmVwYXJlVGV4dFJlZ2lvbjwvYT4oSVRleHRSZWdpb25Db2xsZWN0aW9uIGJsb2NrZWRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBwYXJ0aXRpb25TdGFydE9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IHBhcnRpdGlvbkxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLkNvbGxlY3Rpb24gaG9sZFJlc3VsdHMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcHJlcGFyZVRleHRSZWdpb25zIj5wcmVwYXJlVGV4dFJlZ2lvbnM8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgcGFydGl0aW9uU3RhcnRPZmZzZXQKLSAgICAgICAgICwKLSAgICAgIGludCBwYXJ0aXRpb25MZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGhvbGRSZXN1bHRzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXIiPnJlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZWxlYXNlIj5yZWxlYXNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdW5SZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyIj51blJlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2hpZ2hsaWdodGVyIj5oaWdobGlnaHRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBIaWdobGlnaHRlciA8c3Ryb25nPmhpZ2hsaWdodGVyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3JlY0hpZ2hsaWdodGVyIj5yZWNIaWdobGlnaHRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBSZWNvbmNpbGVySGlnaGxpZ2h0ZXIgPHN0cm9uZz5yZWNIaWdobGlnaHRlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9zdHJ1Y3R1cmVkRG9jdW1lbnQiPnN0cnVjdHVyZWREb2N1bWVudDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IDxzdHJvbmc+c3RydWN0dXJlZERvY3VtZW50PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9MaW5lU3R5bGVQcm92aWRlckZvclhTTCI+TGluZVN0eWxlUHJvdmlkZXJGb3JYU0w8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5MaW5lU3R5bGVQcm92aWRlckZvclhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRUZXh0QXR0cmlidXRlIj5hZGRUZXh0QXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGRUZXh0QXR0cmlidXRlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgY29sb3JLZXkpPC9jb2RlPjwvcD48cD5Mb29rcyB1cCB0aGUgY29sb3JLZXkgaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUgYW5kIGFkZHMgdGhlIHN0eWxlCi0gaW5mb3JtYXRpb24gdG8gbGlzdCBvZiBUZXh0QXR0cmlidXRlczwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29sb3JLZXk8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbW1vbkluaXQiPmNvbW1vbkluaXQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmNvbW1vbkluaXQ8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudAotICAgICAgICAgLAotICAgICAgSGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48cD48Y29kZT5oaWdobGlnaHRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVGV4dEF0dHJpYnV0ZSI+Y3JlYXRlVGV4dEF0dHJpYnV0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBUZXh0QXR0cmlidXRlIDxzdHJvbmc+Y3JlYXRlVGV4dEF0dHJpYnV0ZTwvc3Ryb25nPihSR0IgZm9yZWdyb3VuZAotICAgICAgICAgLAotICAgICAgUkdCIGJhY2tncm91bmQKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gYm9sZCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Zm9yZWdyb3VuZDwvY29kZT48L3A+PHA+PGNvZGU+YmFja2dyb3VuZDwvY29kZT48L3A+PHA+PGNvZGU+Ym9sZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlRleHRBdHRyaWJ1dGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRleHRBdHRyaWJ1dGUiPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZSA8c3Ryb25nPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L3N0cm9uZz4oUkdCIGZvcmVncm91bmQKLSAgICAgICAgICwKLSAgICAgIFJHQiBiYWNrZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBpbnQgc3R5bGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZvcmVncm91bmQ8L2NvZGU+PC9wPjxwPjxjb2RlPmJhY2tncm91bmQ8L2NvZGU+PC9wPjxwPjxjb2RlPnN0eWxlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGV4dEF0dHJpYnV0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0QXR0cmlidXRlRm9yIj5nZXRBdHRyaWJ1dGVGb3I8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZSA8c3Ryb25nPmdldEF0dHJpYnV0ZUZvcjwvc3Ryb25nPihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gY29sbGVjdGlvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gdGV4dFJlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29sbGVjdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+dGV4dFJlZ2lvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlRleHRBdHRyaWJ1dGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEF0dHJpYnV0ZUZvciI+Z2V0QXR0cmlidXRlRm9yPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGUgPHN0cm9uZz5nZXRBdHRyaWJ1dGVGb3I8L3N0cm9uZz4oSVRleHRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZXh0QXR0cmlidXRlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb2xvclByZWZlcmVuY2VzIj5nZXRDb2xvclByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElQcmVmZXJlbmNlU3RvcmUgPHN0cm9uZz5nZXRDb2xvclByZWZlcmVuY2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVByZWZlcmVuY2VTdG9yZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RG9jdW1lbnQiPmdldERvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnQgPHN0cm9uZz5nZXREb2N1bWVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklTdHJ1Y3R1cmVkRG9jdW1lbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEhpZ2hsaWdodGVyIj5nZXRIaWdobGlnaHRlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBIaWdobGlnaHRlciA8c3Ryb25nPmdldEhpZ2hsaWdodGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SGlnaGxpZ2h0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhbmRsZVByb3BlcnR5Q2hhbmdlIj5oYW5kbGVQcm9wZXJ0eUNoYW5nZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+aGFuZGxlUHJvcGVydHlDaGFuZ2U8L3N0cm9uZz4oUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXZlbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXQiPmluaXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmluaXQ8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudAotICAgICAgICAgLAotICAgICAgSGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48cD48Y29kZT5oaWdobGlnaHRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudAotICAgICAgICAgLAotICAgICAgSVNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cnVjdHVyZWREb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+c291cmNlVmlld2VyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0Ij5pbml0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbml0PC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBSZWNvbmNpbGVySGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cnVjdHVyZWREb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+aGlnaGxpZ2h0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzSW5pdGlhbGl6ZWQiPmlzSW5pdGlhbGl6ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzSW5pdGlhbGl6ZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIGJvb2xlYW48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbG9hZENvbG9ycyI+bG9hZENvbG9yczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+bG9hZENvbG9yczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJlcGFyZVJlZ2lvbnMiPnByZXBhcmVSZWdpb25zPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5wcmVwYXJlUmVnaW9uczwvc3Ryb25nPihJVHlwZWRSZWdpb24gdHlwZWRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBsaW5lUmVxdWVzdFN0YXJ0Ci0gICAgICAgICAsCi0gICAgICBpbnQgbGluZVJlcXVlc3RMZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGhvbGRSZXN1bHRzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50eXBlZFJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+bGluZVJlcXVlc3RTdGFydDwvY29kZT48L3A+PHA+PGNvZGU+bGluZVJlcXVlc3RMZW5ndGg8L2NvZGU+PC9wPjxwPjxjb2RlPmhvbGRSZXN1bHRzPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHJlcGFyZVRleHRSZWdpb24iPnByZXBhcmVUZXh0UmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW4gPHN0cm9uZz5wcmVwYXJlVGV4dFJlZ2lvbjwvc3Ryb25nPihJVGV4dFJlZ2lvbkNvbGxlY3Rpb24gYmxvY2tlZFJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IHBhcnRpdGlvblN0YXJ0T2Zmc2V0Ci0gICAgICAgICAsCi0gICAgICBpbnQgcGFydGl0aW9uTGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuQ29sbGVjdGlvbiBob2xkUmVzdWx0cyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YmxvY2tlZFJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+cGFydGl0aW9uU3RhcnRPZmZzZXQ8L2NvZGU+PC9wPjxwPjxjb2RlPnBhcnRpdGlvbkxlbmd0aDwvY29kZT48L3A+PHA+PGNvZGU+aG9sZFJlc3VsdHM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wcmVwYXJlVGV4dFJlZ2lvbnMiPnByZXBhcmVUZXh0UmVnaW9uczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+cHJlcGFyZVRleHRSZWdpb25zPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgcGFydGl0aW9uU3RhcnRPZmZzZXQKLSAgICAgICAgICwKLSAgICAgIGludCBwYXJ0aXRpb25MZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Db2xsZWN0aW9uIGhvbGRSZXN1bHRzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPnBhcnRpdGlvblN0YXJ0T2Zmc2V0PC9jb2RlPjwvcD48cD48Y29kZT5wYXJ0aXRpb25MZW5ndGg8L2NvZGU+PC9wPjxwPjxjb2RlPmhvbGRSZXN1bHRzPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVnaXN0ZXJQcmVmZXJlbmNlTWFuYWdlciI+cmVnaXN0ZXJQcmVmZXJlbmNlTWFuYWdlcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cmVnaXN0ZXJQcmVmZXJlbmNlTWFuYWdlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVsZWFzZSI+cmVsZWFzZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVsZWFzZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdW5SZWdpc3RlclByZWZlcmVuY2VNYW5hZ2VyIj51blJlZ2lzdGVyUHJlZmVyZW5jZU1hbmFnZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnVuUmVnaXN0ZXJQcmVmZXJlbmNlTWFuYWdlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxSZWdpb25NYXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmODc5MC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxSZWdpb25NYXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhNTFJlZ2lvbk1hcDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhNTFJlZ2lvbk1hcDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+VGhlIFhNTFJlZ2lvbk1hcCBjbGFzcyBoYW5kbGVzIG1hcHBpbmcgZHV0aWVzIGZyb20gYW4gWE1MIFJlZ2lvbiB0bwotIGEgTGluZSBTdHlsZSBDb25zdGFudC48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIFhNTFJlZ2lvbk1hcCBDbGFzczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlZ2lvbk1hcCI+Z2V0UmVnaW9uTWFwPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhIG1hcHBpbmcgb2YgWE1MIFJlZ2lvbnMgdG8gU3R5bGUgQ29uc3RhbnRzPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxSZWdpb25NYXAgPHN0cm9uZz5nZXRJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBYTUxSZWdpb25NYXAgQ2xhc3M8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MUmVnaW9uTWFwPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRSZWdpb25NYXAiPmdldFJlZ2lvbk1hcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwIDxzdHJvbmc+Z2V0UmVnaW9uTWFwPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgYSBtYXBwaW5nIG9mIFhNTCBSZWdpb25zIHRvIFN0eWxlIENvbnN0YW50czwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLk1hcDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MVGV4dEF0dHJpYnV0ZU1hcC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MVGV4dEF0dHJpYnV0ZU1hcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDRmODZjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFRleHRBdHRyaWJ1dGVNYXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhNTFRleHRBdHRyaWJ1dGVNYXA8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YTUxUZXh0QXR0cmlidXRlTWFwPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5YTWxUZXh0QXR0cmlidXRlTWFwIGhhbmRsZXMgdGhlIG1hcHBpbmcgb2YgWE1MIFN0eWxlIENvbnN0YW50cyB0byBUZXh0QXR0cmlidXRlcy48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZXh0QXR0cmlidXRlIj5jcmVhdGVUZXh0QXR0cmlidXRlPC9hPihSR0IgZm9yZWdyb3VuZAotICAgICAgICAgLAotICAgICAgUkdCIGJhY2tncm91bmQKLSAgICAgICAgICwKLSAgICAgIGludCBzdHlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MVGV4dEF0dHJpYnV0ZU1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBbiBpbnN0YW5jZSBvZiBYTUxUZXh0QXR0cmlidXRlTWFwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRleHRBdHRyaWJ1dGVNYXAiPmdldFRleHRBdHRyaWJ1dGVNYXA8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGEgTWFwIG9mIFN0eWxlIENvbnN0YW50cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgVGV4dCBBdHRyaWJ1dGU8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVRleHRBdHRyaWJ1dGUiPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZSA8c3Ryb25nPmNyZWF0ZVRleHRBdHRyaWJ1dGU8L3N0cm9uZz4oUkdCIGZvcmVncm91bmQKLSAgICAgICAgICwKLSAgICAgIFJHQiBiYWNrZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBpbnQgc3R5bGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZvcmVncm91bmQ8L2NvZGU+PC9wPjxwPjxjb2RlPmJhY2tncm91bmQ8L2NvZGU+PC9wPjxwPjxjb2RlPnN0eWxlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGV4dEF0dHJpYnV0ZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWE1MVGV4dEF0dHJpYnV0ZU1hcCA8c3Ryb25nPmdldEluc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkFuIGluc3RhbmNlIG9mIFhNTFRleHRBdHRyaWJ1dGVNYXAuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFRleHRBdHRyaWJ1dGVNYXA8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHRBdHRyaWJ1dGVNYXAiPmdldFRleHRBdHRyaWJ1dGVNYXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcCA8c3Ryb25nPmdldFRleHRBdHRyaWJ1dGVNYXA8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyBhIE1hcCBvZiBTdHlsZSBDb25zdGFudHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFRleHQgQXR0cmlidXRlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTWFwPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYWYxYTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmc8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmciPlhTTEF0dHJOYW1lU2VtYW50aWNIaWdobGlnaHRpbmc8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBQb3NpdGlvbltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN1bWVzIj5jb25zdW1lczwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nIj5YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUG9zaXRpb25bXSA8c3Ryb25nPmNvbnN1bWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Qb3NpdGlvbltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbmFibGVkUHJlZmVyZW5jZUtleSI+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjM3MDk3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTEF0dHJWYWx1ZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZzwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZyI+WFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmc8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBQb3NpdGlvbltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbnN1bWVzIj5jb25zdW1lczwvYT4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZyI+WFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUG9zaXRpb25bXSA8c3Ryb25nPmNvbnN1bWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Qb3NpdGlvbltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbmFibGVkUHJlZmVyZW5jZUtleSI+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMUmVnaW9uTWFwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MGQ1YmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMUmVnaW9uTWFwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFJlZ2lvbk1hcDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFJlZ2lvbk1hcDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+WFNMUmVnaW9uTWFwIGhhbmRsZXMgdGhlIG1hcHBpbmcgb2YgWE1MIFJlZ2lvbnMgdG8gWFNMIFN0eWxlIENvbnN0YW50cy48cD48L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMUmVnaW9uTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgWFNMUmVnaW9uTWFwLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlZ2lvbk1hcCI+Z2V0UmVnaW9uTWFwPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhIE1BUCBvZiBYU0wgUmVnaW9ucyBhbmQgU3R5bGUgQ29uc3RhbnRzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMUmVnaW9uTWFwIDxzdHJvbmc+Z2V0SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyBhbiBpbnN0YW5jZSBvZiBYU0xSZWdpb25NYXAuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFJlZ2lvbk1hcDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVnaW9uTWFwIj5nZXRSZWdpb25NYXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcCA8c3Ryb25nPmdldFJlZ2lvbk1hcDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGEgTUFQIG9mIFhTTCBSZWdpb25zIGFuZCBTdHlsZSBDb25zdGFudHMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTWFwPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzljODUyYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmc8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkFic3RyYWN0WFNMU2VtYW50aWNIaWdobGlnaHRpbmc8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmciPlhTTFRhZ0RlbGltc1NlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgUG9zaXRpb25bXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyI+Y3JlYXRlU2VtYW50aWNQb3NpdGlvbnM8L2E+KElUZXh0UmVnaW9uIHRleHRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHJlZ2lvblR5cGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVQcmVmZXJlbmNlS2V5Ij5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZyI+WFNMVGFnRGVsaW1zU2VtYW50aWNIaWdobGlnaHRpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25zdW1lcyI+Y29uc3VtZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgUG9zaXRpb25bXSA8c3Ryb25nPmNvbnN1bWVzPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Qb3NpdGlvbltdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVTZW1hbnRpY1Bvc2l0aW9ucyI+Y3JlYXRlU2VtYW50aWNQb3NpdGlvbnM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5jcmVhdGVTZW1hbnRpY1Bvc2l0aW9uczwvc3Ryb25nPihJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyByZWdpb25UeXBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50ZXh0UmVnaW9uPC9jb2RlPjwvcD48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPnJlZ2lvblR5cGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RW5hYmxlZFByZWZlcmVuY2VLZXkiPmdldEVuYWJsZWRQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlUHJlZmVyZW5jZUtleSI+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTdHlsZVByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzA0MGYyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGU8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZzwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmciPlhTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZzwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFBvc2l0aW9uW108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29uc3VtZXMiPmNvbnN1bWVzPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbmFibGVkUHJlZmVyZW5jZUtleSI+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHlsZVByZWZlcmVuY2VLZXkiPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFRhZ05hbWVTZW1hbnRpY0hpZ2hsaWdodGluZyI+WFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVGFnTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbnN1bWVzIj5jb25zdW1lczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBQb3NpdGlvbltdIDxzdHJvbmc+Y29uc3VtZXM8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlZ2lvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlBvc2l0aW9uW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVuYWJsZWRQcmVmZXJlbmNlS2V5Ij5nZXRFbmFibGVkUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RW5hYmxlZFByZWZlcmVuY2VLZXk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTdHlsZVByZWZlcmVuY2VLZXkiPmdldFN0eWxlUHJlZmVyZW5jZUtleTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U3R5bGVQcmVmZXJlbmNlS2V5PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGV4dEF0dHJpYnV0ZU1hcC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGV4dEF0dHJpYnV0ZU1hcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWE5YjA4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRleHRBdHRyaWJ1dGVNYXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFRleHRBdHRyaWJ1dGVNYXA8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xUZXh0QXR0cmlidXRlTWFwPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5IYW5kbGVzIHRoZSBtYXBwaW5nIG9mIHRoZSBTdHlsZSBDb25zdGFudHMgdG8gVGV4dCBBdHRyaWJ1dGVzIGZvciBYU0wuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkWFNMVGV4dEF0dHJpYnV0ZSI+YWRkWFNMVGV4dEF0dHJpYnV0ZTwvYT4oamF2YS5sYW5nLlN0cmluZyBjb2xvcktleSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgVGV4dEF0dHJpYnV0ZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVUZXh0QXR0cmlidXRlIj5jcmVhdGVUZXh0QXR0cmlidXRlPC9hPihSR0IgZm9yZWdyb3VuZAotICAgICAgICAgLAotICAgICAgUkdCIGJhY2tncm91bmQKLSAgICAgICAgICwKLSAgICAgIGludCBzdHlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGV4dEF0dHJpYnV0ZU1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFhTTFRleHRBdHRyaWJ1dGVNYXA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZXh0QXR0cmlidXRlTWFwIj5nZXRUZXh0QXR0cmlidXRlTWFwPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0J3MgYSBNYXAgb2YgWFNMIFN0eWxlIENvbnN0YW50cyB0byBUZXh0IEF0dHJpYnV0ZXMuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRYU0xUZXh0QXR0cmlidXRlIj5hZGRYU0xUZXh0QXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5hZGRYU0xUZXh0QXR0cmlidXRlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgY29sb3JLZXkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbG9yS2V5PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVUZXh0QXR0cmlidXRlIj5jcmVhdGVUZXh0QXR0cmlidXRlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIFRleHRBdHRyaWJ1dGUgPHN0cm9uZz5jcmVhdGVUZXh0QXR0cmlidXRlPC9zdHJvbmc+KFJHQiBmb3JlZ3JvdW5kCi0gICAgICAgICAsCi0gICAgICBSR0IgYmFja2dyb3VuZAotICAgICAgICAgLAotICAgICAgaW50IHN0eWxlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mb3JlZ3JvdW5kPC9jb2RlPjwvcD48cD48Y29kZT5iYWNrZ3JvdW5kPC9jb2RlPjwvcD48cD48Y29kZT5zdHlsZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlRleHRBdHRyaWJ1dGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRleHRBdHRyaWJ1dGVNYXAgPHN0cm9uZz5nZXRJbnN0YW5jZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIGFuIGluc3RhbmNlIG9mIFhTTFRleHRBdHRyaWJ1dGVNYXA8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMVGV4dEF0dHJpYnV0ZU1hcDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGV4dEF0dHJpYnV0ZU1hcCI+Z2V0VGV4dEF0dHJpYnV0ZU1hcDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwIDxzdHJvbmc+Z2V0VGV4dEF0dHJpYnV0ZU1hcDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQncyBhIE1hcCBvZiBYU0wgU3R5bGUgQ29uc3RhbnRzIHRvIFRleHQgQXR0cmlidXRlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5NYXA8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhTTC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTY2MDdmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFRlbXBsYXRlQ29udGV4dFR5cGVYU0w8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMPC9zdHJvbmc+Ci1leHRlbmRzIFRlbXBsYXRlQ29udGV4dFR5cGU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMX0FUVFIiPlhTTF9BVFRSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xfTkVXIj5YU0xfTkVXPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xfVEFHIj5YU0xfVEFHPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9UZW1wbGF0ZUNvbnRleHRUeXBlWFNMIj5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1hTTF9BVFRSIj5YU0xfQVRUUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xfQVRUUjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YU0xfTkVXIj5YU0xfTkVXPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTF9ORVc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMX1RBRyI+WFNMX1RBRzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xfVEFHPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UZW1wbGF0ZUNvbnRleHRUeXBlWFNMIj5UZW1wbGF0ZUNvbnRleHRUeXBlWFNMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VGVtcGxhdGVDb250ZXh0VHlwZVhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5WZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYzczMzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWZXJzaW9uVGVtcGxhdGVWYXJpYWJsZVJlc29sdmVyWFNMPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTDwvc3Ryb25nPgotZXh0ZW5kcyBTaW1wbGVUZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTCI+VmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzb2x2ZSI+cmVzb2x2ZTwvYT4oVGVtcGxhdGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTCI+VmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0w8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZSI+cmVzb2x2ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+cmVzb2x2ZTwvc3Ryb25nPihUZW1wbGF0ZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5YU0xUZW1wbGF0ZXNQYWdlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuWFNMVGVtcGxhdGVzUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjVkZmY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnRlbXBsYXRlcy5YU0xUZW1wbGF0ZXNQYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFRlbXBsYXRlc1BhZ2U8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xUZW1wbGF0ZXNQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0VGVtcGxhdGVzUGFnZTwvcHJlPlRoZSBYU0wgVGVtcGxhdGVzIFBhZ2UgaXMgdXNlZCBieSB0aGUgVGVtcGxhdGVzVmlld2VyIHRvIGRpc3BsYXkgYXZhaWxhYmxlCi0gWFNMIFRlbXBsYXRlcyBmb3IgdXNlIHdpdGhpbiBhIFhTTCBTdHJ1Y3R1cmVkIFRleHQgRWRpdG9yLiBJdCBpcyBwcm92aWRlZCBhcwotIGFuIGV4YW1wbGUgb24gaG93IG90aGVyIFNTRSBlZGl0b3JzIGNhbiBjb250cmlidXRlIHRoZWlyIHRlbXBsYXRlcyB0byB0aGUKLSBwYWdlLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMVGVtcGxhdGVzUGFnZSI+WFNMVGVtcGxhdGVzUGFnZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuWFNMRWRpdG9yIHhzbFRleHRFZGl0b3IpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZ1tdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRleHRUeXBlSWRzIj5nZXRDb250ZXh0VHlwZUlkczwvYT4oSURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBDb250ZXh0VHlwZVJlZ2lzdHJ5PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbnRleHRUeXBlUmVnaXN0cnkiPmdldENvbnRleHRUeXBlUmVnaXN0cnk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcmVmZXJlbmNlUGFnZUlkIj5nZXRQcmVmZXJlbmNlUGFnZUlkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElQcmVmZXJlbmNlU3RvcmU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGVtcGxhdGVQcmVmZXJlbmNlU3RvcmUiPmdldFRlbXBsYXRlUHJlZmVyZW5jZVN0b3JlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFRlbXBsYXRlU3RvcmU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGVtcGxhdGVTdG9yZSI+Z2V0VGVtcGxhdGVTdG9yZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luc2VydFRlbXBsYXRlIj5pbnNlcnRUZW1wbGF0ZTwvYT4oVGVtcGxhdGUgdGVtcGxhdGUKLSAgICAgICAgICwKLSAgICAgIElEb2N1bWVudCBkb2N1bWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1ZhbGlkVGVtcGxhdGUiPmlzVmFsaWRUZW1wbGF0ZTwvYT4oSURvY3VtZW50IGRvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBUZW1wbGF0ZSB0ZW1wbGF0ZQotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xUZW1wbGF0ZXNQYWdlIj5YU0xUZW1wbGF0ZXNQYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVGVtcGxhdGVzUGFnZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xFZGl0b3IgeHNsVGV4dEVkaXRvcik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbnRleHRUeXBlSWRzIj5nZXRDb250ZXh0VHlwZUlkczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nW10gPHN0cm9uZz5nZXRDb250ZXh0VHlwZUlkczwvc3Ryb25nPihJRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nW108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbnRleHRUeXBlUmVnaXN0cnkiPmdldENvbnRleHRUeXBlUmVnaXN0cnk8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgQ29udGV4dFR5cGVSZWdpc3RyeSA8c3Ryb25nPmdldENvbnRleHRUeXBlUmVnaXN0cnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5Db250ZXh0VHlwZVJlZ2lzdHJ5PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQcmVmZXJlbmNlUGFnZUlkIj5nZXRQcmVmZXJlbmNlUGFnZUlkPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRQcmVmZXJlbmNlUGFnZUlkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGVtcGxhdGVQcmVmZXJlbmNlU3RvcmUiPmdldFRlbXBsYXRlUHJlZmVyZW5jZVN0b3JlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElQcmVmZXJlbmNlU3RvcmUgPHN0cm9uZz5nZXRUZW1wbGF0ZVByZWZlcmVuY2VTdG9yZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklQcmVmZXJlbmNlU3RvcmU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRlbXBsYXRlU3RvcmUiPmdldFRlbXBsYXRlU3RvcmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVGVtcGxhdGVTdG9yZSA8c3Ryb25nPmdldFRlbXBsYXRlU3RvcmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5UZW1wbGF0ZVN0b3JlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbnNlcnRUZW1wbGF0ZSI+aW5zZXJ0VGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmluc2VydFRlbXBsYXRlPC9zdHJvbmc+KFRlbXBsYXRlIHRlbXBsYXRlCi0gICAgICAgICAsCi0gICAgICBJRG9jdW1lbnQgZG9jdW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRlbXBsYXRlPC9jb2RlPjwvcD48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNWYWxpZFRlbXBsYXRlIj5pc1ZhbGlkVGVtcGxhdGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmlzVmFsaWRUZW1wbGF0ZTwvc3Ryb25nPihJRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIFRlbXBsYXRlIHRlbXBsYXRlCi0gICAgICAgICAsCi0gICAgICBpbnQgb2Zmc2V0Ci0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+dGVtcGxhdGU8L2NvZGU+PC9wPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PHA+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTczMWI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xQbHVnaW5JbWFnZUhlbHBlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFBsdWdpbkltYWdlSGVscGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5IZWxwZXIgY2xhc3MgdG8gaGFuZGxlIGltYWdlcyBwcm92aWRlZCBieSB0aGlzIHBsdWctaW4uCi0gCi0gTk9URTogRm9yIGludGVybmFsIHVzZSBvbmx5LiBGb3IgaW1hZ2VzIHVzZWQgZXh0ZXJuYWxseSwgcGxlYXNlIHVzZSB0aGUKLSBTaGFyZWQqKipJbWFnZUhlbHBlciBjbGFzcyBpbnN0ZWFkLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMUGx1Z2luSW1hZ2VIZWxwZXIiPlhTTFBsdWdpbkltYWdlSGVscGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSW1hZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPihqYXZhLmxhbmcuU3RyaW5nIHJlc291cmNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIGZyb20gdGhlIGltYWdlIHJlZ2lzdHJ5LgotIElmIHRoZSBpbWFnZSBjYW5ub3QgYmUgcmV0cmlldmVkLCBhdHRlbXB0IHRvIGZpbmQgYW5kIGxvYWQgdGhlIGltYWdlIGF0Ci0gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbiByZXNvdXJjZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPihqYXZhLmxhbmcuU3RyaW5nIHJlc291cmNlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHJpZXZlcyB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggcmVzb3VyY2UgZnJvbSB0aGUgaW1hZ2UKLSBkZXNjcmlwdG9yIHJlZ2lzdHJ5LiBJZiB0aGUgaW1hZ2UgZGVzY3JpcHRvciBjYW5ub3QgYmUgcmV0cmlldmVkLAotIGF0dGVtcHQgdG8gZmluZCBhbmQgbG9hZCB0aGUgaW1hZ2UgZGVzY3JpcHRvciBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkCi0gaW4gcmVzb3VyY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW5zdGFuY2UiPmdldEluc3RhbmNlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0cyB0aGUgaW5zdGFuY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMUGx1Z2luSW1hZ2VIZWxwZXIiPlhTTFBsdWdpbkltYWdlSGVscGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMUGx1Z2luSW1hZ2VIZWxwZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlIDxzdHJvbmc+Z2V0SW1hZ2U8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZXNvdXJjZSk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgaW1hZ2UgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIGZyb20gdGhlIGltYWdlIHJlZ2lzdHJ5LgotIElmIHRoZSBpbWFnZSBjYW5ub3QgYmUgcmV0cmlldmVkLCBhdHRlbXB0IHRvIGZpbmQgYW5kIGxvYWQgdGhlIGltYWdlIGF0Ci0gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbiByZXNvdXJjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlc291cmNlPC9jb2RlPiAtIHRoZSBpbWFnZSB0byByZXRyaWV2ZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2U8L2NvZGU+IC0gSW1hZ2UgdGhlIGltYWdlIGFzc29jaWF0ZWQgd2l0aCByZXNvdXJjZSBvciBudWxsIGlmIG9uZSBjb3VsZCAgICAgICAgICBub3QgYmUgZm91bmQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW1hZ2VEZXNjcmlwdG9yIj5nZXRJbWFnZURlc2NyaXB0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgSW1hZ2VEZXNjcmlwdG9yIDxzdHJvbmc+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVzb3VyY2UpPC9jb2RlPjwvcD48cD5SZXRyaWV2ZXMgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHJlc291cmNlIGZyb20gdGhlIGltYWdlCi0gZGVzY3JpcHRvciByZWdpc3RyeS4gSWYgdGhlIGltYWdlIGRlc2NyaXB0b3IgY2Fubm90IGJlIHJldHJpZXZlZCwKLSBhdHRlbXB0IHRvIGZpbmQgYW5kIGxvYWQgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZAotIGluIHJlc291cmNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVzb3VyY2U8L2NvZGU+IC0gdGhlIGltYWdlIGRlc2NyaXB0b3IgdG8gcmV0cmlldmU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlRGVzY3JpcHRvcjwvY29kZT4gLSBJbWFnZURlc2NyaXB0b3IgdGhlIGltYWdlIGRlc2NyaXB0b3IgYXNzb2NhdGVkIHdpdGggcmVzb3VyY2Ugb3IgICAgICAgICAgdGhlIGRlZmF1bHQgIm1pc3NpbmciIGltYWdlIGRlc2NyaXB0b3IgaWYgb25lIGNvdWxkIG5vdCBiZSAgICAgICAgICBmb3VuZDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRJbnN0YW5jZSI+Z2V0SW5zdGFuY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyIDxzdHJvbmc+Z2V0SW5zdGFuY2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0cyB0aGUgaW5zdGFuY2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VIZWxwZXI8L2NvZGU+IC0gUmV0dXJucyBhIFhNTEVkaXRvclBsdWdpbkltYWdlSGVscGVyPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjkzYmNjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwuWFNMUGx1Z2luSW1hZ2VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWw8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMUGx1Z2luSW1hZ2VzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMUGx1Z2luSW1hZ2VzPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5CdW5kbGUgb2YgbW9zdCBpbWFnZXMgdXNlZCBieSB0aGUgWFNMIFBsdWdpbnM8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX0VMTV9GVU5DVElPTiI+SU1HX0VMTV9GVU5DVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX0VMTV9JTVBPUlRfSU5DTFVERSI+SU1HX0VMTV9JTVBPUlRfSU5DTFVERTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX0VMTV9TVFlMRVNIRVQiPklNR19FTE1fU1RZTEVTSEVUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfRUxNX1RFTVBMQVRFIj5JTUdfRUxNX1RFTVBMQVRFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfRUxNX1RFTVBMQVRFX05BTUUiPklNR19FTE1fVEVNUExBVEVfTkFNRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX0VMTV9WQVJJQUJMRSI+SU1HX0VMTV9WQVJJQUJMRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX01PREUiPklNR19NT0RFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIFhTTCBtb2RlIEltYWdlIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19PUEVSQVRPUiI+SU1HX09QRVJBVE9SPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfUFJFRklYIj5JTUdfUFJFRklYPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIFhNTCBQcmVmaXggSW1hZ2UgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfSU1HX1RFTVBMQVRFIj5JTUdfVEVNUExBVEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGF0aCB0byB0aGUgeHNsIHRlbXBsYXRlIGltYWdlIHVzZSBmb3IgQ29udGVudCBBc3Npc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfVkFSSUFCTEVTIj5JTUdfVkFSSUFCTEVTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfWFBBVEhfQVhJUyI+SU1HX1hQQVRIX0FYSVM8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0lNR19YUEFUSF9GVU5DVElPTiI+SU1HX1hQQVRIX0ZVTkNUSU9OPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9JTUdfWFNMX0ZJTEUiPklNR19YU0xfRklMRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXRoIHRvIHRoZSBYU0wgRmlsZSBpbWFnZSB1c2UgZm9yIENvbnRlbnQgQXNzaXN0YW5jZS48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMUGx1Z2luSW1hZ2VzIj5YU0xQbHVnaW5JbWFnZXM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfSU1HX0VMTV9GVU5DVElPTiI+SU1HX0VMTV9GVU5DVElPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfRUxNX0ZVTkNUSU9OPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19FTE1fSU1QT1JUX0lOQ0xVREUiPklNR19FTE1fSU1QT1JUX0lOQ0xVREU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX0VMTV9JTVBPUlRfSU5DTFVERTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfRUxNX1NUWUxFU0hFVCI+SU1HX0VMTV9TVFlMRVNIRVQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX0VMTV9TVFlMRVNIRVQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX0VMTV9URU1QTEFURSI+SU1HX0VMTV9URU1QTEFURTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfRUxNX1RFTVBMQVRFPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19FTE1fVEVNUExBVEVfTkFNRSI+SU1HX0VMTV9URU1QTEFURV9OQU1FPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19FTE1fVEVNUExBVEVfTkFNRTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfRUxNX1ZBUklBQkxFIj5JTUdfRUxNX1ZBUklBQkxFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19FTE1fVkFSSUFCTEU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX01PREUiPklNR19NT0RFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19NT0RFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHRoZSBYU0wgbW9kZSBJbWFnZSB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX09QRVJBVE9SIj5JTUdfT1BFUkFUT1I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX09QRVJBVE9SPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19QUkVGSVgiPklNR19QUkVGSVg8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX1BSRUZJWDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGF0aCB0byB0aGUgWE1MIFByZWZpeCBJbWFnZSB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX1RFTVBMQVRFIj5JTUdfVEVNUExBVEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+SU1HX1RFTVBMQVRFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHRoZSB4c2wgdGVtcGxhdGUgaW1hZ2UgdXNlIGZvciBDb250ZW50IEFzc2lzdGFuY2UuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfVkFSSUFCTEVTIj5JTUdfVkFSSUFCTEVTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19WQVJJQUJMRVM8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhdGggdG8gdGhlIFhQQVRIIEltYWdlcyB1c2VkIGZvciBDb250ZW50IEFzc2lzdDwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfSU1HX1hQQVRIX0FYSVMiPklNR19YUEFUSF9BWElTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19YUEFUSF9BWElTPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5QYXRoIHRvIHRoZSBYUEFUSCBJbWFnZXMgdXNlZCBmb3IgQ29udGVudCBBc3Npc3Q8L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX0lNR19YUEFUSF9GVU5DVElPTiI+SU1HX1hQQVRIX0ZVTkNUSU9OPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPklNR19YUEFUSF9GVU5DVElPTjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+UGF0aCB0byB0aGUgWFBBVEggSW1hZ2VzIHVzZWQgZm9yIENvbnRlbnQgQXNzaXN0PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9JTUdfWFNMX0ZJTEUiPklNR19YU0xfRklMRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5JTUdfWFNMX0ZJTEU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlBhdGggdG8gdGhlIFhTTCBGaWxlIGltYWdlIHVzZSBmb3IgQ29udGVudCBBc3Npc3RhbmNlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFBsdWdpbkltYWdlcyI+WFNMUGx1Z2luSW1hZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMUGx1Z2luSW1hZ2VzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGNlMTQxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb248L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0w8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMPC9zdHJvbmc+Ci1leHRlbmRzIERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3I8L3ByZT5UaGlzIHBlcmZvcm1zIHRoZSBhcy15b3UtdHlwZSB2YWxpZGF0aW9uIGZvciB4c2wgZmlsZXM8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTCI+RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTDwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElWYWxpZGF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVsZWdhdGVWYWxpZGF0b3IiPmdldERlbGVnYXRlVmFsaWRhdG9yPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdXBkYXRlVmFsaWRhdGlvbk1lc3NhZ2VzIj51cGRhdGVWYWxpZGF0aW9uTWVzc2FnZXM8L2E+KGphdmEudXRpbC5MaXN0IG1lc3NhZ2VzCi0gICAgICAgICAsCi0gICAgICBJRE9NRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMIj5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhTTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvcjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERlbGVnYXRlVmFsaWRhdG9yIj5nZXREZWxlZ2F0ZVZhbGlkYXRvcjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJVmFsaWRhdG9yIDxzdHJvbmc+Z2V0RGVsZWdhdGVWYWxpZGF0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JVmFsaWRhdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF91cGRhdGVWYWxpZGF0aW9uTWVzc2FnZXMiPnVwZGF0ZVZhbGlkYXRpb25NZXNzYWdlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+dXBkYXRlVmFsaWRhdGlvbk1lc3NhZ2VzPC9zdHJvbmc+KGphdmEudXRpbC5MaXN0IG1lc3NhZ2VzCi0gICAgICAgICAsCi0gICAgICBJRE9NRG9jdW1lbnQgZG9jdW1lbnQKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVzc2FnZXM8L2NvZGU+PC9wPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48cD48Y29kZT5yZXBvcnRlcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz52YWxpZGF0ZTwvc3Ryb25nPihJVmFsaWRhdGlvbkNvbnRleHQgaGVscGVyCi0gICAgICAgICAsCi0gICAgICBJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmhlbHBlcjwvY29kZT48L3A+PHA+PGNvZGU+cmVwb3J0ZXI8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5WYWxpZGF0aW9uRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTEVycm9yTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMRXJyb3JMaXN0ZW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWMwYTI0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMRXJyb3JMaXN0ZW5lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb248L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTEVycm9yTGlzdGVuZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YU0xFcnJvckxpc3RlbmVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UaGlzIGNsYXNzIGxpc3RlbnMgZm9yIEVycm9ycyB0b3NzZWQgYnkgYSBYU0wgUHJvY2Vzc29yLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMRXJyb3JMaXN0ZW5lciI+WFNMRXJyb3JMaXN0ZW5lcjwvYT48L3N0cm9uZz4oamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyIGxvZ2dlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Vycm9yIj5lcnJvcjwvYT4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2ZhdGFsRXJyb3IiPmZhdGFsRXJyb3I8L2E+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF93YXJuaW5nIj53YXJuaW5nPC9hPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFNMRXJyb3JMaXN0ZW5lciI+WFNMRXJyb3JMaXN0ZW5lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTEVycm9yTGlzdGVuZXI8L3N0cm9uZz4oamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyIGxvZ2dlcik8L2NvZGU+PC9wPjxwPlRPRE86IEFkZCBKYXZhZG9jPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXJyb3IiPmVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5lcnJvcjwvc3Ryb25nPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV4Y2VwdGlvbjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2ZhdGFsRXJyb3IiPmZhdGFsRXJyb3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmZhdGFsRXJyb3I8L3N0cm9uZz4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5leGNlcHRpb248L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF93YXJuaW5nIj53YXJuaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz53YXJuaW5nPC9zdHJvbmc+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTE1hcmt1cFZhbGlkYXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xNYXJrdXBWYWxpZGF0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiNGNlMC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTE1hcmt1cFZhbGlkYXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb248L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTE1hcmt1cFZhbGlkYXRvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTE1hcmt1cFZhbGlkYXRvcjwvc3Ryb25nPgotZXh0ZW5kcyBNYXJrdXBWYWxpZGF0b3I8L3ByZT48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTE1hcmt1cFZhbGlkYXRvciI+WFNMTWFya3VwVmFsaWRhdG9yPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jbGVhbnVwIj5jbGVhbnVwPC9hPihJUmVwb3J0ZXIgcmVwb3J0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Nvbm5lY3QiPmNvbm5lY3Q8L2E+KElEb2N1bWVudCBkb2N1bWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzY29ubmVjdCI+ZGlzY29ubmVjdDwvYT4oSURvY3VtZW50IGRvY3VtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+KElSZWdpb24gZGlydHlSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICAobm9uLUphdmFkb2MpPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGUiPnZhbGlkYXRlPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVJlcG9ydGVyIHJlcG9ydGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xNYXJrdXBWYWxpZGF0b3IiPlhTTE1hcmt1cFZhbGlkYXRvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhTTE1hcmt1cFZhbGlkYXRvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jbGVhbnVwIj5jbGVhbnVwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jbGVhbnVwPC9zdHJvbmc+KElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlcG9ydGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb25uZWN0Ij5jb25uZWN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jb25uZWN0PC9zdHJvbmc+KElEb2N1bWVudCBkb2N1bWVudCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNjb25uZWN0Ij5kaXNjb25uZWN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNjb25uZWN0PC9zdHJvbmc+KElEb2N1bWVudCBkb2N1bWVudCk8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmRvY3VtZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF92YWxpZGF0ZSI+dmFsaWRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnZhbGlkYXRlPC9zdHJvbmc+KElWYWxpZGF0aW9uQ29udGV4dCBoZWxwZXIKLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aGVscGVyPC9jb2RlPjwvcD48cD48Y29kZT5yZXBvcnRlcjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPlZhbGlkYXRpb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dmFsaWRhdGU8L3N0cm9uZz4oSVJlZ2lvbiBkaXJ0eVJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVZhbGlkYXRpb25Db250ZXh0IGhlbHBlcgotICAgICAgICAgLAotICAgICAgSVJlcG9ydGVyIHJlcG9ydGVyKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZGlydHlSZWdpb248L2NvZGU+PC9wPjxwPjxjb2RlPmhlbHBlcjwvY29kZT48L3A+PHA+PGNvZGU+cmVwb3J0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3ZhbGlkYXRlIj52YWxpZGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dmFsaWRhdGU8L3N0cm9uZz4oSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElSZXBvcnRlciByZXBvcnRlcik8L2NvZGU+PC9wPjxwPihub24tSmF2YWRvYyk8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjwvY29kZT48L3A+PHA+PGNvZGU+cmVwb3J0ZXI8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuTGlzdFdvcmtiZW5jaEFkYXB0ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuTGlzdFdvcmtiZW5jaEFkYXB0ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM3MDhjOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0Lkxpc3RXb3JrYmVuY2hBZGFwdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQ8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTGlzdFdvcmtiZW5jaEFkYXB0ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5MaXN0V29ya2JlbmNoQWRhcHRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0xpc3RXb3JrYmVuY2hBZGFwdGVyIj5MaXN0V29ya2JlbmNoQWRhcHRlcjwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXQgc3R5bGVzaGVldAotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLkxpc3QgbGlzdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBsYWJlbAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBpbWdQYXRoKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMYWJlbCI+Z2V0TGFiZWw8L2E+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0xpc3RXb3JrYmVuY2hBZGFwdGVyIj5MaXN0V29ya2JlbmNoQWRhcHRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkxpc3RXb3JrYmVuY2hBZGFwdGVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IHN0eWxlc2hlZXQKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5MaXN0IGxpc3QKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgbGFiZWwKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgaW1nUGF0aCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENoaWxkcmVuIj5nZXRDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRDaGlsZHJlbjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm88L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlRGVzY3JpcHRvciA8c3Ryb25nPmdldEltYWdlRGVzY3JpcHRvcjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMYWJlbCI+Z2V0TGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldExhYmVsPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmVudCI+Z2V0UGFyZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5nZXRQYXJlbnQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5TdHlsZXNoZWV0TW9kZWxWaWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlN0eWxlc2hlZXRNb2RlbFZpZXcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwYzQyOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlN0eWxlc2hlZXRNb2RlbFZpZXcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHlsZXNoZWV0TW9kZWxWaWV3PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3R5bGVzaGVldE1vZGVsVmlldzwvc3Ryb25nPgotZXh0ZW5kcyBWaWV3UGFydDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdHlsZXNoZWV0TW9kZWxWaWV3Ij5TdHlsZXNoZWV0TW9kZWxWaWV3PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVQYXJ0Q29udHJvbCI+Y3JlYXRlUGFydENvbnRyb2w8L2E+KENvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElWaWV3U2l0ZSBzaXRlCi0gICAgICAgICAsCi0gICAgICBJTWVtZW50byBtZW1lbnRvKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEZvY3VzIj5zZXRGb2N1czwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1N0eWxlc2hlZXRNb2RlbFZpZXciPlN0eWxlc2hlZXRNb2RlbFZpZXc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5TdHlsZXNoZWV0TW9kZWxWaWV3PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVBhcnRDb250cm9sIj5jcmVhdGVQYXJ0Q29udHJvbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y3JlYXRlUGFydENvbnRyb2w8L3N0cm9uZz4oQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbml0Ij5pbml0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbml0PC9zdHJvbmc+KElWaWV3U2l0ZSBzaXRlCi0gICAgICAgICAsCi0gICAgICBJTWVtZW50byBtZW1lbnRvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zaXRlPC9jb2RlPjwvcD48cD48Y29kZT5tZW1lbnRvPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+UGFydEluaXRFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEZvY3VzIj5zZXRGb2N1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0Rm9jdXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuWFNMTW9kZWxBZGFwdGVyRmFjdG9yeS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNjBiNDMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQ8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFNMTW9kZWxBZGFwdGVyRmFjdG9yeTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTE1vZGVsQWRhcHRlckZhY3Rvcnk8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5Ij5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5PC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBZGFwdGVyIj5nZXRBZGFwdGVyPC9hPihqYXZhLmxhbmcuT2JqZWN0IGFkYXB0YWJsZU9iamVjdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLkNsYXNzIGFkYXB0ZXJUeXBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuQ2xhc3NbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRBZGFwdGVyTGlzdCI+Z2V0QWRhcHRlckxpc3Q8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5Ij5YU0xNb2RlbEFkYXB0ZXJGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMTW9kZWxBZGFwdGVyRmFjdG9yeTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBZGFwdGVyIj5nZXRBZGFwdGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5nZXRBZGFwdGVyPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgYWRhcHRhYmxlT2JqZWN0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuQ2xhc3MgYWRhcHRlclR5cGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFkYXB0YWJsZU9iamVjdDwvY29kZT48L3A+PHA+PGNvZGU+YWRhcHRlclR5cGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBZGFwdGVyTGlzdCI+Z2V0QWRhcHRlckxpc3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLkNsYXNzW10gPHN0cm9uZz5nZXRBZGFwdGVyTGlzdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5DbGFzc1tdPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTFdvcmtiZW5jaEFkYXB0ZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuWFNMV29ya2JlbmNoQWRhcHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmUwNzdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuWFNMV29ya2JlbmNoQWRhcHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQ8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFdvcmtiZW5jaEFkYXB0ZXI8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5YU0xXb3JrYmVuY2hBZGFwdGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFNMV29ya2JlbmNoQWRhcHRlciI+WFNMV29ya2JlbmNoQWRhcHRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgSW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRMYWJlbCI+Z2V0TGFiZWw8L2E+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFdvcmtiZW5jaEFkYXB0ZXIiPlhTTFdvcmtiZW5jaEFkYXB0ZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5YU0xXb3JrYmVuY2hBZGFwdGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENoaWxkcmVuIj5nZXRDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRDaGlsZHJlbjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG8pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm88L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlRGVzY3JpcHRvciI+Z2V0SW1hZ2VEZXNjcmlwdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlRGVzY3JpcHRvciA8c3Ryb25nPmdldEltYWdlRGVzY3JpcHRvcjwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+b2JqZWN0PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2VEZXNjcmlwdG9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMYWJlbCI+Z2V0TGFiZWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldExhYmVsPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgbyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmVudCI+Z2V0UGFyZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3QgPHN0cm9uZz5nZXRQYXJlbnQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDAyZDdlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBOZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlPC9zdHJvbmc+Ci1leHRlbmRzIFdpemFyZFBhZ2U8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UiPk5ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVDb250cm9sIj5jcmVhdGVDb250cm9sPC9hPihDb21wb3NpdGUgYW5jZXN0b3IpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW5hYmxlVGVtcGxhdGVzIj5lbmFibGVUZW1wbGF0ZXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZW1wbGF0ZVN0cmluZyI+Z2V0VGVtcGxhdGVTdHJpbmc8L2E+KGludFtdIG9mZnNldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9saW5rQ2xpY2tlZCI+bGlua0NsaWNrZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zYXZlTGFzdFNhdmVkUHJlZmVyZW5jZXMiPnNhdmVMYXN0U2F2ZWRQcmVmZXJlbmNlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZVZpZXdlcklucHV0Ij51cGRhdGVWaWV3ZXJJbnB1dDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX05ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlIj5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZUNvbnRyb2wiPmNyZWF0ZUNvbnRyb2w8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNyZWF0ZUNvbnRyb2w8L3N0cm9uZz4oQ29tcG9zaXRlIGFuY2VzdG9yKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hbmNlc3RvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZW5hYmxlVGVtcGxhdGVzIj5lbmFibGVUZW1wbGF0ZXM8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZCA8c3Ryb25nPmVuYWJsZVRlbXBsYXRlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VGVtcGxhdGVTdHJpbmciPmdldFRlbXBsYXRlU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUZW1wbGF0ZVN0cmluZzwvc3Ryb25nPihpbnRbXSBvZmZzZXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9mZnNldDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2xpbmtDbGlja2VkIj5saW5rQ2xpY2tlZDwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkIDxzdHJvbmc+bGlua0NsaWNrZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NhdmVMYXN0U2F2ZWRQcmVmZXJlbmNlcyI+c2F2ZUxhc3RTYXZlZFByZWZlcmVuY2VzPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQgPHN0cm9uZz5zYXZlTGFzdFNhdmVkUHJlZmVyZW5jZXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VwZGF0ZVZpZXdlcklucHV0Ij51cGRhdGVWaWV3ZXJJbnB1dDwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkIDxzdHJvbmc+dXBkYXRlVmlld2VySW5wdXQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MjYxYTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTmV3WFNMRmlsZVdpemFyZDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk5ld1hTTEZpbGVXaXphcmQ8L3N0cm9uZz4KLWV4dGVuZHMgV2l6YXJkPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX05ld1hTTEZpbGVXaXphcmQiPk5ld1hTTEZpbGVXaXphcmQ8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFBhZ2VzIj5hZGRQYWdlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXQiPmluaXQ8L2E+KElXb3JrYmVuY2ggYVdvcmtiZW5jaAotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWRTZWxlY3Rpb24gYVNlbGVjdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wZXJmb3JtRmluaXNoIj5wZXJmb3JtRmluaXNoPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fTmV3WFNMRmlsZVdpemFyZCI+TmV3WFNMRmlsZVdpemFyZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk5ld1hTTEZpbGVXaXphcmQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkUGFnZXMiPmFkZFBhZ2VzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRQYWdlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJV29ya2JlbmNoIGFXb3JrYmVuY2gKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIGFTZWxlY3Rpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmFXb3JrYmVuY2g8L2NvZGU+PC9wPjxwPjxjb2RlPmFTZWxlY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BlcmZvcm1GaW5pc2giPnBlcmZvcm1GaW5pc2g8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBlcmZvcm1GaW5pc2g8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVXaXphcmRQYWdlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVXaXphcmRQYWdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YTYyZTguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkUGFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE5ld1hTTEZpbGVXaXphcmRQYWdlPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+TmV3WFNMRmlsZVdpemFyZFBhZ2U8L3N0cm9uZz4KLWV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9OZXdYU0xGaWxlV2l6YXJkUGFnZSI+TmV3WFNMRmlsZVdpemFyZFBhZ2U8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcGFnZU5hbWUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZERlZmF1bHRFeHRlbnNpb24iPmFkZERlZmF1bHRFeHRlbnNpb248L2E+KGphdmEubGFuZy5TdHJpbmcgZmlsZW5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdmFsaWRhdGVQYWdlIj52YWxpZGF0ZVBhZ2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OZXdYU0xGaWxlV2l6YXJkUGFnZSI+TmV3WFNMRmlsZVdpemFyZFBhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5OZXdYU0xGaWxlV2l6YXJkUGFnZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHBhZ2VOYW1lCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGREZWZhdWx0RXh0ZW5zaW9uIj5hZGREZWZhdWx0RXh0ZW5zaW9uPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5hZGREZWZhdWx0RXh0ZW5zaW9uPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZmlsZW5hbWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGVuYW1lPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdmFsaWRhdGVQYWdlIj52YWxpZGF0ZVBhZ2U8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPnZhbGlkYXRlUGFnZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVDb250ZW50UHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVDb250ZW50UHJvdmlkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjNGY1Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLlRlbXBsYXRlQ29udGVudFByb3ZpZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHM8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVGVtcGxhdGVDb250ZW50UHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5UZW1wbGF0ZUNvbnRlbnRQcm92aWRlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1RlbXBsYXRlQ29udGVudFByb3ZpZGVyIj5UZW1wbGF0ZUNvbnRlbnRQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RWxlbWVudHMiPmdldEVsZW1lbnRzPC9hPihqYXZhLmxhbmcuT2JqZWN0IGlucHV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG9sZElucHV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG5ld0lucHV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1RlbXBsYXRlQ29udGVudFByb3ZpZGVyIj5UZW1wbGF0ZUNvbnRlbnRQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlRlbXBsYXRlQ29udGVudFByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmRpc3Bvc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRFbGVtZW50czwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGlucHV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pbnB1dDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5wdXRDaGFuZ2VkIj5pbnB1dENoYW5nZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmlucHV0Q2hhbmdlZDwvc3Ryb25nPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG9sZElucHV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG5ld0lucHV0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT52aWV3ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPm9sZElucHV0PC9jb2RlPjwvcD48cD48Y29kZT5uZXdJbnB1dDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5UZW1wbGF0ZUxhYmVsUHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVMYWJlbFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMjBkZDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5UZW1wbGF0ZUxhYmVsUHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkczwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBUZW1wbGF0ZUxhYmVsUHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5UZW1wbGF0ZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgTGFiZWxQcm92aWRlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9UZW1wbGF0ZUxhYmVsUHJvdmlkZXIiPlRlbXBsYXRlTGFiZWxQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIEltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbHVtbkltYWdlIj5nZXRDb2x1bW5JbWFnZTwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgY29sdW1uSW5kZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29sdW1uVGV4dCI+Z2V0Q29sdW1uVGV4dDwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgY29sdW1uSW5kZXgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fVGVtcGxhdGVMYWJlbFByb3ZpZGVyIj5UZW1wbGF0ZUxhYmVsUHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5UZW1wbGF0ZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29sdW1uSW1hZ2UiPmdldENvbHVtbkltYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIEltYWdlIDxzdHJvbmc+Z2V0Q29sdW1uSW1hZ2U8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgY29sdW1uSW5kZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmNvbHVtbkluZGV4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SW1hZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENvbHVtblRleHQiPmdldENvbHVtblRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldENvbHVtblRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgY29sdW1uSW5kZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxwPjxjb2RlPmNvbHVtbkluZGV4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTI5N2QwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvcHJlPkFkb3B0ZXJzIGNhbiBleHRlbmQgdGhpcyBjbGFzcyB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3IgRWxlbWVudAotIHByb3Bvc2FscyB1c2luZyB0aGUgWE1MIENvbnRlbnQgTW9kZWwuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmNvbnRlbnRtb2RlbC5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jb250ZW50TW9kZWwiPmNvbnRlbnRNb2RlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgTWFya3VwVGFnSW5mb1Byb3ZpZGVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfaW5mb1Byb3ZpZGVyIj5pbmZvUHJvdmlkZXI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIX0ZJUlNUX1hTTEFOQ0VTVE9SX05PREUiPlhQQVRIX0ZJUlNUX1hTTEFOQ0VTVE9SX05PREU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0Fic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlCi0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uCi0gICAgICAgICAsCi0gICAgICBJVGV4dFJlZ2lvbiBjb21wbGV0aW9uUmVnaW9uCi0gICAgICAgICAsCi0gICAgICBpbnQgYmVnaW4KLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZmlsdGVyCi0gICAgICAgICAsCi0gICAgICBJVGV4dFZpZXdlciB0ZXh0Vmlld2VyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkVGFnTmFtZVByb3Bvc2FscyI+YWRkVGFnTmFtZVByb3Bvc2FsczwvYT4oaW50IHBvc2l0aW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZHMgcHJvcG9zYWxzIGZvciB0aGUgWE1MX1RBR19OQU1FIHJlZ2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9iZWdpbnNXaXRoIj5iZWdpbnNXaXRoPC9hPihqYXZhLmxhbmcuU3RyaW5nIGFTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHJlZml4KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVByb3Bvc2FsIj5jcmVhdGVQcm9wb3NhbDwvYT4oamF2YS5sYW5nLlN0cmluZyBwcm9wb3NlZFRleHQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgYWRkaXRpb25hbEluZm8KLSAgICAgICAgICwKLSAgICAgIGludCBvZmZzZXQKLSAgICAgICAgICwKLSAgICAgIEltYWdlIGltYWdlCi0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnRMZW5ndGgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QWRkaXRpb25hbEluZm8iPmdldEFkZGl0aW9uYWxJbmZvPC9hPihDTU5vZGUgcGFyZW50T3JPd25lcgotICAgICAgICAgLAotICAgICAgQ01Ob2RlIGNtbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXRyaWV2ZXMgY21ub2RlJ3MgZG9jdW1lbnRhdGlvbiB0byBkaXNwbGF5IGluIHRoZSBjb21wbGV0aW9uIHByb3Bvc2FsJ3MKLSBhZGRpdGlvbmFsIGluZm8uIElmIG5vIGRvY3VtZW50YXRpb24gZXhpc3RzIGZvciBjbW5vZGUsIHRyeSBkaXNwbGF5aW5nCi0gcGFyZW50T3JPd25lcidzIGRvY3VtZW50YXRpb24KLSAKLSBTdHJpbmcgYW55IGRvY3VtZW50YXRpb24gaW5mb3JtYXRpb24gdG8gZGlzcGxheSBmb3IgY21ub2RlLgotIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlzcGxheS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXZhaWxhYmxlQ2hpbGRFbGVtZW50RGVjbGFyYXRpb25zIj5nZXRBdmFpbGFibGVDaGlsZEVsZW1lbnREZWNsYXJhdGlvbnM8L2E+KG9yZy53M2MuZG9tLkVsZW1lbnQgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgY2hpbGRQb3NpdGlvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIGEgbGlzdCBvZiBDTU5vZGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBwYXJlbnQgY29udGV4dAotIEdpdmVuIHRoZSBncmFtbWFyIHNob3duIGJlbG93IGFuZCBhIHNuaXBwZXQgb2YgWE1MIGNvZGUgKHdoZXJlIHRoZSAnfCcKLSBpbmRpY2F0ZWQgdGhlIGN1cnNvciBwb3NpdGlvbikKLSB0aGUgbGlzdCB3b3VsZCByZXR1cm4gYWxsIG9mIHRoZSBlbGVtZW50IGRlY2xhcmF0aW9ucyB0aGF0IGFyZQotIHBvdGVudGlhbCBjaGlsZCBlbGVtZW50cyBvZiBGb28uCi0KLSBncmFtbWFyIDogRm9vIC0+IChBLCBCLCBDKQotIHNuaXBwZXQgOiA8Rm9vPjxBPnwKLSByZXN1bHQgOiB7QSwgQiwgQ308L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXZhaWxhYmxlQ2hpbGRyZW5BdEluZGV4Ij5nZXRBdmFpbGFibGVDaGlsZHJlbkF0SW5kZXg8L2E+KG9yZy53M2MuZG9tLkVsZW1lbnQgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBpbnQgaW5kZXgKLSAgICAgICAgICwKLSAgICAgIGludCB2YWxpZGl0eUNoZWNraW5nKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuSXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0QXZhaWxhYmxlQ29udGVudE5vZGVzIj5nZXRBdmFpbGFibGVDb250ZW50Tm9kZXM8L2E+KElET01Eb2N1bWVudCBkb21Eb2N1bWVudAotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBhbmNlc3Rvck5vZGUKLSAgICAgICAgICwKLSAgICAgIGludCBpbmNsdWRlT3B0aW9ucyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgQ01FbGVtZW50RGVjbGFyYXRpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24iPmdldENNRWxlbWVudERlY2xhcmF0aW9uPC9hPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIEltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENNTm9kZUltYWdlIj5nZXRDTU5vZGVJbWFnZTwvYT4oQ01Ob2RlIGNtTm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEN1cnNvclBvc2l0aW9uRm9yUHJvcG9zZWRUZXh0Ij5nZXRDdXJzb3JQb3NpdGlvbkZvclByb3Bvc2VkVGV4dDwvYT4oamF2YS5sYW5nLlN0cmluZyBwcm9wb3NlZFRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgcG9zaXRpb24gdGhlIGN1cnNvciBzaG91bGQgYmUgaW4gYWZ0ZXIgdGhlIHByb3Bvc2FsIGlzCi0gYXBwbGllZDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RWxlbWVudFBvc2l0aW9uIj5nZXRFbGVtZW50UG9zaXRpb248L2E+KG9yZy53M2MuZG9tLk5vZGUgY2hpbGQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIE1hcmt1cFRhZ0luZm9Qcm92aWRlcjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRJbmZvUHJvdmlkZXIiPmdldEluZm9Qcm92aWRlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldHMgdGhlIGluZm9Qcm92aWRlci4KLSAKLSBmSW5mb1Byb3ZpZGVyIGFuZCBpZiBmSW5mb1Byb3ZpZGVyIHdhcyA8Y29kZT5udWxsPC9jb2RlPiBjcmVhdGUgYSBuZXcKLSBpbnN0YW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJVGV4dFJlZ2lvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lUmVnaW9uIj5nZXROYW1lUmVnaW9uPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXROb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlcXVpcmVkTmFtZSI+Z2V0UmVxdWlyZWROYW1lPC9hPihvcmcudzNjLmRvbS5Ob2RlIG93bmVyTm9kZQotICAgICAgICAgLAotICAgICAgQ01Ob2RlIGNtbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbkF0dHJpYnV0ZVJlZ2lvbiI+aW5BdHRyaWJ1dGVSZWdpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB0byBzZWUgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgaW4gYW4gQXR0cmlidXRlIFJlZ2lvbiBpZiBzbywKLSByZXR1cm4gdHJ1ZSBvdGhlcndpc2UgZmFsc2U8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc05hbWVSZWdpb24iPmlzTmFtZVJlZ2lvbjwvYT4oSVRleHRSZWdpb24gcmVnaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrcyB0byB0aGUgc2VlIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBjb3JyZWN0IHJlZ2lvbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2NvbnRlbnRNb2RlbCI+Y29udGVudE1vZGVsPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWwuWFNMQ29udGVudE1vZGVsR2VuZXJhdG9yIDxzdHJvbmc+Y29udGVudE1vZGVsPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2luZm9Qcm92aWRlciI+aW5mb1Byb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIE1hcmt1cFRhZ0luZm9Qcm92aWRlciA8c3Ryb25nPmluZm9Qcm92aWRlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUEFUSF9GSVJTVF9YU0xBTkNFU1RPUl9OT0RFIj5YUEFUSF9GSVJTVF9YU0xBTkNFU1RPUl9OT0RFPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIX0ZJUlNUX1hTTEFOQ0VTVE9SX05PREU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0Fic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkFic3RyYWN0WE1MRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFRhZ05hbWVQcm9wb3NhbHMiPmFkZFRhZ05hbWVQcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmFkZFRhZ05hbWVQcm9wb3NhbHM8L3N0cm9uZz4oaW50IHBvc2l0aW9uKTwvY29kZT48L3A+PHA+QWRkcyBwcm9wb3NhbHMgZm9yIHRoZSBYTUxfVEFHX05BTUUgcmVnaW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cG9zaXRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2JlZ2luc1dpdGgiPmJlZ2luc1dpdGg8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgYm9vbGVhbiA8c3Ryb25nPmJlZ2luc1dpdGg8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBhU3RyaW5nCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHByZWZpeCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YVN0cmluZzwvY29kZT48L3A+PHA+PGNvZGU+cHJlZml4PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlUHJvcG9zYWwiPmNyZWF0ZVByb3Bvc2FsPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwgPHN0cm9uZz5jcmVhdGVQcm9wb3NhbDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHByb3Bvc2VkVGV4dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBhZGRpdGlvbmFsSW5mbwotICAgICAgICAgLAotICAgICAgaW50IG9mZnNldAotICAgICAgICAgLAotICAgICAgSW1hZ2UgaW1hZ2UKLSAgICAgICAgICwKLSAgICAgIGludCBzdGFydExlbmd0aCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cHJvcG9zZWRUZXh0PC9jb2RlPjwvcD48cD48Y29kZT5hZGRpdGlvbmFsSW5mbzwvY29kZT48L3A+PHA+PGNvZGU+b2Zmc2V0PC9jb2RlPjwvcD48cD48Y29kZT5pbWFnZTwvY29kZT48L3A+PHA+PGNvZGU+c3RhcnRMZW5ndGg8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBZGRpdGlvbmFsSW5mbyI+Z2V0QWRkaXRpb25hbEluZm88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldEFkZGl0aW9uYWxJbmZvPC9zdHJvbmc+KENNTm9kZSBwYXJlbnRPck93bmVyCi0gICAgICAgICAsCi0gICAgICBDTU5vZGUgY21ub2RlKTwvY29kZT48L3A+PHA+UmV0cmlldmVzIGNtbm9kZSdzIGRvY3VtZW50YXRpb24gdG8gZGlzcGxheSBpbiB0aGUgY29tcGxldGlvbiBwcm9wb3NhbCdzCi0gYWRkaXRpb25hbCBpbmZvLiBJZiBubyBkb2N1bWVudGF0aW9uIGV4aXN0cyBmb3IgY21ub2RlLCB0cnkgZGlzcGxheWluZwotIHBhcmVudE9yT3duZXIncyBkb2N1bWVudGF0aW9uCi0gCi0gU3RyaW5nIGFueSBkb2N1bWVudGF0aW9uIGluZm9ybWF0aW9uIHRvIGRpc3BsYXkgZm9yIGNtbm9kZS4KLSA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnRPck93bmVyPC9jb2RlPjwvcD48cD48Y29kZT5jbW5vZGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBdmFpbGFibGVDaGlsZEVsZW1lbnREZWNsYXJhdGlvbnMiPmdldEF2YWlsYWJsZUNoaWxkRWxlbWVudERlY2xhcmF0aW9uczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEF2YWlsYWJsZUNoaWxkRWxlbWVudERlY2xhcmF0aW9uczwvc3Ryb25nPihvcmcudzNjLmRvbS5FbGVtZW50IHBhcmVudAotICAgICAgICAgLAotICAgICAgaW50IGNoaWxkUG9zaXRpb24pPC9jb2RlPjwvcD48cD5SZXR1cm5zIGEgbGlzdCBvZiBDTU5vZGVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBwYXJlbnQgY29udGV4dAotIEdpdmVuIHRoZSBncmFtbWFyIHNob3duIGJlbG93IGFuZCBhIHNuaXBwZXQgb2YgWE1MIGNvZGUgKHdoZXJlIHRoZSAnfCcKLSBpbmRpY2F0ZWQgdGhlIGN1cnNvciBwb3NpdGlvbikKLSB0aGUgbGlzdCB3b3VsZCByZXR1cm4gYWxsIG9mIHRoZSBlbGVtZW50IGRlY2xhcmF0aW9ucyB0aGF0IGFyZQotIHBvdGVudGlhbCBjaGlsZCBlbGVtZW50cyBvZiBGb28uCi0KLSBncmFtbWFyIDogRm9vIC0+IChBLCBCLCBDKQotIHNuaXBwZXQgOiA8Rm9vPjxBPnwKLSByZXN1bHQgOiB7QSwgQiwgQ308L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PHA+PGNvZGU+Y2hpbGRQb3NpdGlvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBdmFpbGFibGVDaGlsZHJlbkF0SW5kZXgiPmdldEF2YWlsYWJsZUNoaWxkcmVuQXRJbmRleDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEF2YWlsYWJsZUNoaWxkcmVuQXRJbmRleDwvc3Ryb25nPihvcmcudzNjLmRvbS5FbGVtZW50IHBhcmVudAotICAgICAgICAgLAotICAgICAgaW50IGluZGV4Ci0gICAgICAgICAsCi0gICAgICBpbnQgdmFsaWRpdHlDaGVja2luZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48cD48Y29kZT5pbmRleDwvY29kZT48L3A+PHA+PGNvZGU+dmFsaWRpdHlDaGVja2luZzwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRBdmFpbGFibGVDb250ZW50Tm9kZXMiPmdldEF2YWlsYWJsZUNvbnRlbnROb2RlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuSXRlcmF0b3IgPHN0cm9uZz5nZXRBdmFpbGFibGVDb250ZW50Tm9kZXM8L3N0cm9uZz4oSURPTURvY3VtZW50IGRvbURvY3VtZW50Ci0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIGFuY2VzdG9yTm9kZQotICAgICAgICAgLAotICAgICAgaW50IGluY2x1ZGVPcHRpb25zKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5kb21Eb2N1bWVudDwvY29kZT48L3A+PHA+PGNvZGU+YW5jZXN0b3JOb2RlPC9jb2RlPjwvcD48cD48Y29kZT5pbmNsdWRlT3B0aW9uczwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5JdGVyYXRvcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24iPmdldENNRWxlbWVudERlY2xhcmF0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIENNRWxlbWVudERlY2xhcmF0aW9uIDxzdHJvbmc+Z2V0Q01FbGVtZW50RGVjbGFyYXRpb248L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBub2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q01FbGVtZW50RGVjbGFyYXRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENNTm9kZUltYWdlIj5nZXRDTU5vZGVJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJbWFnZSA8c3Ryb25nPmdldENNTm9kZUltYWdlPC9zdHJvbmc+KENNTm9kZSBjbU5vZGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNtTm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPkltYWdlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDdXJzb3JQb3NpdGlvbkZvclByb3Bvc2VkVGV4dCI+Z2V0Q3Vyc29yUG9zaXRpb25Gb3JQcm9wb3NlZFRleHQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+Z2V0Q3Vyc29yUG9zaXRpb25Gb3JQcm9wb3NlZFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBwcm9wb3NlZFRleHQpPC9jb2RlPjwvcD48cD5UaGlzIGlzIHRoZSBwb3NpdGlvbiB0aGUgY3Vyc29yIHNob3VsZCBiZSBpbiBhZnRlciB0aGUgcHJvcG9zYWwgaXMKLSBhcHBsaWVkPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcm9wb3NlZFRleHQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIHBvc2l0aW9uIHRoZSBjdXJzb3Igc2hvdWxkIGJlIGluIGFmdGVyIHRoZSBwcm9wb3NhbCBpcyAgICAgICAgICBhcHBsaWVkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVsZW1lbnRQb3NpdGlvbiI+Z2V0RWxlbWVudFBvc2l0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmdldEVsZW1lbnRQb3NpdGlvbjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNoaWxkKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jaGlsZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0SW5mb1Byb3ZpZGVyIj5nZXRJbmZvUHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgTWFya3VwVGFnSW5mb1Byb3ZpZGVyIDxzdHJvbmc+Z2V0SW5mb1Byb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldHMgdGhlIGluZm9Qcm92aWRlci4KLSAKLSBmSW5mb1Byb3ZpZGVyIGFuZCBpZiBmSW5mb1Byb3ZpZGVyIHdhcyA8Y29kZT5udWxsPC9jb2RlPiBjcmVhdGUgYSBuZXcKLSBpbnN0YW5jZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+TWFya3VwVGFnSW5mb1Byb3ZpZGVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lUmVnaW9uIj5nZXROYW1lUmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElUZXh0UmVnaW9uIDxzdHJvbmc+Z2V0TmFtZVJlZ2lvbjwvc3Ryb25nPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXROb2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mbGF0Tm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklUZXh0UmVnaW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRSZXF1aXJlZE5hbWUiPmdldFJlcXVpcmVkTmFtZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UmVxdWlyZWROYW1lPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgb3duZXJOb2RlCi0gICAgICAgICAsCi0gICAgICBDTU5vZGUgY21ub2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vd25lck5vZGU8L2NvZGU+PC9wPjxwPjxjb2RlPmNtbm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luQXR0cmlidXRlUmVnaW9uIj5pbkF0dHJpYnV0ZVJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+aW5BdHRyaWJ1dGVSZWdpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGluIGFuIEF0dHJpYnV0ZSBSZWdpb24gaWYgc28sCi0gcmV0dXJuIHRydWUgb3RoZXJ3aXNlIGZhbHNlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgaW4gYXR0cmlidXRlIHJlZ2lvbiwgZmFsc2Ugb3RoZXJ3aXNlLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc05hbWVSZWdpb24iPmlzTmFtZVJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+aXNOYW1lUmVnaW9uPC9zdHJvbmc+KElUZXh0UmVnaW9uIHJlZ2lvbik8L2NvZGU+PC9wPjxwPkNoZWNrcyB0byB0aGUgc2VlIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBjb3JyZWN0IHJlZ2lvbi48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlZ2lvbjwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmVkNWJkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UaGlzIGlzIGFuIEFic3RyYWN0IGNsYXNzIHRoYXQgaW1wbGVtZW50b3JzIHNob3VsZCBleHRlbmQgZm9yIGltcGxlbWVudGluZwotIFhTTCBDb250ZW50IEFzc2lzdCBQcm9jZXNzb3JzLiAgIEl0IHByb3ZpZGVzIGNvbW1vbiBjb252aWVuY2UgbWV0aG9kcyBmb3IKLSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZCB0byBjb25zdHJ1Y3QgYSBjb250ZW50IGFzc2lzdCBwcm9jZXNzb3IuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jb21wbGV0aW9uUmVnaW9uIj5jb21wbGV0aW9uUmVnaW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9jdXJzb3JQb3NpdGlvbiI+Y3Vyc29yUG9zaXRpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9lcnJvck1lc3NhZ2UiPmVycm9yTWVzc2FnZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX21hdGNoU3RyaW5nIj5tYXRjaFN0cmluZzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3NkUmVnaW9uIj5zZFJlZ2lvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRWaWV3ZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF90ZXh0Vmlld2VyIj50ZXh0Vmlld2VyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJRE9NTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3htbE5vZGUiPnhtbE5vZGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0Fic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvciI+QWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgY2hhcltdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbEF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVycyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsQXV0b0FjdGl2YXRpb25DaGFyYWN0ZXJzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgY2hhcmFjdGVycyB3aGljaCB3aGVuIGVudGVyZWQgYnkgdGhlIHVzZXIgc2hvdWxkCi0gYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZSBwcmVzZW50YXRpb24gb2YgcG9zc2libGUgY29tcGxldGlvbnMuCi0gCi0gdGhlIGF1dG8gYWN0aXZhdGlvbiBjaGFyYWN0ZXJzIGZvciBjb21wbGV0aW9uIHByb3Bvc2FsIG9yCi0gPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8gYXV0byBhY3RpdmF0aW9uIGlzIGRlc2lyZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblJlZ2lvbiI+Z2V0Q29tcGxldGlvblJlZ2lvbjwvYT4oaW50IGRvY3VtZW50UG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgZG9tbm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm4gdGhlIHJlZ2lvbiB3aG9zZSBjb250ZW50J3MgcmVxdWlyZSBjb21wbGV0aW9uLiBUaGlzIGlzIHNvbWV0aGluZwotIG9mIGEgbWlzbm9tZXIgYXMgc29tZXRpbWVzIHRoZSB1c2VyIHdhbnRzIHRvIGJlIHByb21wdGVkIGZvciBjb250ZW50cyBvZgotIGEgbm9uLWV4aXN0ZW50IElUZXh0UmVnaW9uLCBzdWNoIGFzIGZvciBlbnVtZXJhdGVkIGF0dHJpYnV0ZSB2YWx1ZXMKLSBmb2xsb3dpbmcgYW4gJz0nIHNpZ24uCi0gCi0gQ29waWVkIGZyb20gQWJzdHJhY3RDb250ZW50QXNzaXN0IFByb2Nlc3Nvci48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblJlZ2lvbiI+Z2V0Q29tcGxldGlvblJlZ2lvbjwvYT4oaW50IG9mZnNldAotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzZFJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFcnJvck1lc3NhZ2UiPmdldEVycm9yTWVzc2FnZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIChub24tSmF2YWRvYyk8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pbml0aWFsaXplUHJvcG9zYWxWYXJpYWJsZXMiPmluaXRpYWxpemVQcm9wb3NhbFZhcmlhYmxlczwvYT4oSVRleHRWaWV3ZXIgdGV4dFZpZXdlcgotICAgICAgICAgLAotICAgICAgaW50IGRvY3VtZW50UG9zaXRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0RXJyb3JNZXNzYWdlIj5zZXRFcnJvck1lc3NhZ2U8L2E+KGphdmEubGFuZy5TdHJpbmcgZXJyb3JNZXNzYWdlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldHMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHdoeSBjb250ZW50IGFzc2lzdGFuY2UgZGlkbid0IGNvbXBsZXRlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfY29tcGxldGlvblJlZ2lvbiI+Y29tcGxldGlvblJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJVGV4dFJlZ2lvbiA8c3Ryb25nPmNvbXBsZXRpb25SZWdpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfY3Vyc29yUG9zaXRpb24iPmN1cnNvclBvc2l0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmN1cnNvclBvc2l0aW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX2Vycm9yTWVzc2FnZSI+ZXJyb3JNZXNzYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5lcnJvck1lc3NhZ2U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfbWF0Y2hTdHJpbmciPm1hdGNoU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5tYXRjaFN0cmluZzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9zZFJlZ2lvbiI+c2RSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiA8c3Ryb25nPnNkUmVnaW9uPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3RleHRWaWV3ZXIiPnRleHRWaWV3ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVRleHRWaWV3ZXIgPHN0cm9uZz50ZXh0Vmlld2VyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3htbE5vZGUiPnhtbE5vZGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSURPTU5vZGUgPHN0cm9uZz54bWxOb2RlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxBdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnMiPmdldENvbXBsZXRpb25Qcm9wb3NhbEF1dG9BY3RpdmF0aW9uQ2hhcmFjdGVyczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBjaGFyW10gPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxBdXRvQWN0aXZhdGlvbkNoYXJhY3RlcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgY2hhcmFjdGVycyB3aGljaCB3aGVuIGVudGVyZWQgYnkgdGhlIHVzZXIgc2hvdWxkCi0gYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZSBwcmVzZW50YXRpb24gb2YgcG9zc2libGUgY29tcGxldGlvbnMuCi0gCi0gdGhlIGF1dG8gYWN0aXZhdGlvbiBjaGFyYWN0ZXJzIGZvciBjb21wbGV0aW9uIHByb3Bvc2FsIG9yCi0gPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8gYXV0byBhY3RpdmF0aW9uIGlzIGRlc2lyZWQ8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmNoYXJbXTwvY29kZT4gLSBhbiBhcnJheSBvZiBhY3RpdmF0aW9uIGNoYXJhY3RlcnM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q29tcGxldGlvblJlZ2lvbiI+Z2V0Q29tcGxldGlvblJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJVGV4dFJlZ2lvbiA8c3Ryb25nPmdldENvbXBsZXRpb25SZWdpb248L3N0cm9uZz4oaW50IGRvY3VtZW50UG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgZG9tbm9kZSk8L2NvZGU+PC9wPjxwPlJldHVybiB0aGUgcmVnaW9uIHdob3NlIGNvbnRlbnQncyByZXF1aXJlIGNvbXBsZXRpb24uIFRoaXMgaXMgc29tZXRoaW5nCi0gb2YgYSBtaXNub21lciBhcyBzb21ldGltZXMgdGhlIHVzZXIgd2FudHMgdG8gYmUgcHJvbXB0ZWQgZm9yIGNvbnRlbnRzIG9mCi0gYSBub24tZXhpc3RlbnQgSVRleHRSZWdpb24sIHN1Y2ggYXMgZm9yIGVudW1lcmF0ZWQgYXR0cmlidXRlIHZhbHVlcwotIGZvbGxvd2luZyBhbiAnPScgc2lnbi4KLSAKLSBDb3BpZWQgZnJvbSBBYnN0cmFjdENvbnRlbnRBc3Npc3QgUHJvY2Vzc29yLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jdW1lbnRQb3NpdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+ZG9tbm9kZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklUZXh0UmVnaW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUmVnaW9uIj5nZXRDb21wbGV0aW9uUmVnaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElUZXh0UmVnaW9uIDxzdHJvbmc+Z2V0Q29tcGxldGlvblJlZ2lvbjwvc3Ryb25nPihpbnQgb2Zmc2V0Ci0gICAgICAgICAsCi0gICAgICBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNkUmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vZmZzZXQ8L2NvZGU+PC9wPjxwPjxjb2RlPnNkUmVnaW9uPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+SVRleHRSZWdpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVycm9yTWVzc2FnZSI+Z2V0RXJyb3JNZXNzYWdlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRFcnJvck1lc3NhZ2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+KG5vbi1KYXZhZG9jKTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdGlhbGl6ZVByb3Bvc2FsVmFyaWFibGVzIj5pbml0aWFsaXplUHJvcG9zYWxWYXJpYWJsZXM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPmluaXRpYWxpemVQcm9wb3NhbFZhcmlhYmxlczwvc3Ryb25nPihJVGV4dFZpZXdlciB0ZXh0Vmlld2VyCi0gICAgICAgICAsCi0gICAgICBpbnQgZG9jdW1lbnRQb3NpdGlvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGV4dFZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+ZG9jdW1lbnRQb3NpdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0RXJyb3JNZXNzYWdlIj5zZXRFcnJvck1lc3NhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEVycm9yTWVzc2FnZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGVycm9yTWVzc2FnZSk8L2NvZGU+PC9wPjxwPlNldHMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHdoeSBjb250ZW50IGFzc2lzdGFuY2UgZGlkbid0IGNvbXBsZXRlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXJyb3JNZXNzYWdlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkFic3RyYWN0WFNMQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDc4YTFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QW4gZXh0ZW5zaW9uIG9mIHRoZSBYTUwgQ29udGVudEFzc2lzdFJlcXVlc3QgY2xhc3MuICBUaGlzIHByb3ZpZGVzCi0gYSBiYXNpcyBmb3IgdGhlIFhTTCBjb250ZW50IGFzc2lzdGFuY2UuICBDbGFzc2VzIG1heSBzdWJjbGFzcyB0aGlzCi0gY2xhc3MgYW5kIGltcGxlbWVudCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9kb2N1bWVudFJlZ2lvbiI+ZG9jdW1lbnRSZWdpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9tYWNyb3MiPm1hY3JvczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX21hdGNoU3RyaW5nIj5tYXRjaFN0cmluZzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25vZGUiPm5vZGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9wcm9wb3NhbHMiPnByb3Bvc2FsczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9yZWdpb24iPnJlZ2lvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uIj5yZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3JlcGxhY2VtZW50TGVuZ3RoIj5yZXBsYWNlbWVudExlbmd0aDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSVRleHRWaWV3ZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF90ZXh0Vmlld2VyIj50ZXh0Vmlld2VyPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRNYWNybyI+YWRkTWFjcm88L2E+KElDb21wbGV0aW9uUHJvcG9zYWwgbmV3UHJvcG9zYWwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkUHJvcG9zYWwiPmFkZFByb3Bvc2FsPC9hPihJQ29tcGxldGlvblByb3Bvc2FsIG5ld1Byb3Bvc2FsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgcHJvcG9zYWxzLiAgSW1wbGVtZW50YXRpb25zIGFyZSB0byBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZQotIGltcGxlbWVudGF0aW9uIGZvciB0aGUgcHJvcG9zYWxzIHRoZXkgd291bGQgbGlrZSB0byByZXR1cm4uICAgVXNlIG9mIHRoZSBnZXRBbGxDb21wbGV0aW9uUHJvcG9zYWxzCi0gc2hvdWxkIGJlIHVzZWQgdG8gcmV0dXJuIHRoZSBhY3R1YWwgcHJvcG9zYWxzIGZyb20gdGhpcyBtZXRob2QuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDdXJzb3JQb3NpdGlvbiI+Z2V0Q3Vyc29yUG9zaXRpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGN1cnNvciBwb3NpdGlvbiB3aXRoaW4gdGhlIFRleHQgVmlld2VyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb248L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RG9jdW1lbnRSZWdpb24iPmdldERvY3VtZW50UmVnaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TG9jYXRpb24iPmdldExvY2F0aW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0cmlldmVzIHRoZSBiYXNlIGxvY2F0aW9uIGZvciB0aGUgSURPTURvY3VtZW50IGZvciB0aGlzIGNsYXNzLiBUaGlzIGlzCi0gdXNlZCB0byBwb3B1bGF0ZSBhIG5ldyBQYXRoIGNsYXNzIGZvciByZXRyaWV2aW5nIGFuIElGaWxlIGluc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRNYWNyb3MiPmdldE1hY3JvczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE1hdGNoU3RyaW5nIj5nZXRNYXRjaFN0cmluZzwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuQ29sbGVjdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXROYW1lc3BhY2VzIj5nZXROYW1lc3BhY2VzPC9hPihJRE9NRWxlbWVudCBlbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5Ob2RlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5vZGUiPmdldE5vZGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRQcm9wb3NhbHMiPmdldFByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBJVGV4dFJlZ2lvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZWdpb24iPmdldFJlZ2lvbjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uIj5nZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlcGxhY2VtZW50TGVuZ3RoIj5nZXRSZXBsYWNlbWVudExlbmd0aDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3RhcnRPZmZzZXQiPmdldFN0YXJ0T2Zmc2V0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldE1vZGVsIj5nZXRTdHlsZXNoZWV0TW9kZWw8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZXh0Ij5nZXRUZXh0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUZXh0RW5kT2Zmc2V0Ij5nZXRUZXh0RW5kT2Zmc2V0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzTm9kZXMiPmhhc05vZGVzPC9hPihvcmcudzNjLmRvbS5Ob2RlTGlzdCBub2Rlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIE5vZGVMaXN0IGhhcyBkYXRhPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0RG9jdW1lbnRSZWdpb24iPnNldERvY3VtZW50UmVnaW9uPC9hPihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRNYXRjaFN0cmluZyI+c2V0TWF0Y2hTdHJpbmc8L2E+KGphdmEubGFuZy5TdHJpbmcgbmV3TWF0Y2hTdHJpbmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0Tm9kZSI+c2V0Tm9kZTwvYT4ob3JnLnczYy5kb20uTm9kZSBuZXdOb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFJlZ2lvbiI+c2V0UmVnaW9uPC9hPihJVGV4dFJlZ2lvbiBuZXdSZWdpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uIj5zZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L2E+KGludCBuZXdSZXBsYWNlbWVudEJlZ2luUG9zaXRpb24pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0UmVwbGFjZW1lbnRMZW5ndGgiPnNldFJlcGxhY2VtZW50TGVuZ3RoPC9hPihpbnQgbmV3UmVwbGFjZW1lbnRMZW5ndGgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc29ydFByb3Bvc2FscyI+c29ydFByb3Bvc2FsczwvYT4oamF2YS51dGlsLkFycmF5TGlzdCBwcm9wb3NhbHNJbik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX2RvY3VtZW50UmVnaW9uIj5kb2N1bWVudFJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIDxzdHJvbmc+ZG9jdW1lbnRSZWdpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfbWFjcm9zIj5tYWNyb3M8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPm1hY3Jvczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9tYXRjaFN0cmluZyI+bWF0Y2hTdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPm1hdGNoU3RyaW5nPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX25vZGUiPm5vZGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uTm9kZSA8c3Ryb25nPm5vZGU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcHJvcG9zYWxzIj5wcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPnByb3Bvc2Fsczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9yZWdpb24iPnJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJVGV4dFJlZ2lvbiA8c3Ryb25nPnJlZ2lvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9yZXBsYWNlbWVudEJlZ2luUG9zaXRpb24iPnJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5yZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfcmVwbGFjZW1lbnRMZW5ndGgiPnJlcGxhY2VtZW50TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPnJlcGxhY2VtZW50TGVuZ3RoPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3RleHRWaWV3ZXIiPnRleHRWaWV3ZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVRleHRWaWV3ZXIgPHN0cm9uZz50ZXh0Vmlld2VyPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD5IYW5kbGVzIENvbnRlbnQgQXNzaXN0YW5jZSByZXF1ZXN0cyBmb3IgU2VsZWN0IEF0dHJpYnV0ZXMuICBUaGlzIGlzIGNhbGxlZCBhbiBpbnN0YW50aWF0ZWQKLSB0aHJvdWdoIHRoZSB1c2Ugb2YgdGhlIGNvbXB1dGVQcm9wb3NhbHMgbWV0aG9kIGZyb20gdGhlIFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuICBJdCB3aWxsCi0gY2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgcHJvcG9zYWxzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIFhTTCBzZWxlY3QgYXR0cmlidXRlLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZE1hY3JvIj5hZGRNYWNybzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkTWFjcm88L3N0cm9uZz4oSUNvbXBsZXRpb25Qcm9wb3NhbCBuZXdQcm9wb3NhbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3UHJvcG9zYWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFByb3Bvc2FsIj5hZGRQcm9wb3NhbDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+YWRkUHJvcG9zYWw8L3N0cm9uZz4oSUNvbXBsZXRpb25Qcm9wb3NhbCBuZXdQcm9wb3NhbCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3UHJvcG9zYWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEFsbENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkFycmF5TGlzdCA8c3Ryb25nPmdldEFsbENvbXBsZXRpb25Qcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgYSBsaXN0IG9mIHByb3Bvc2Fscy4gIEltcGxlbWVudGF0aW9ucyBhcmUgdG8gcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUKLSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHByb3Bvc2FscyB0aGV5IHdvdWxkIGxpa2UgdG8gcmV0dXJuLiAgIFVzZSBvZiB0aGUgZ2V0QWxsQ29tcGxldGlvblByb3Bvc2FscwotIHNob3VsZCBiZSB1c2VkIHRvIHJldHVybiB0aGUgYWN0dWFsIHByb3Bvc2FscyBmcm9tIHRoaXMgbWV0aG9kLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q3Vyc29yUG9zaXRpb24iPmdldEN1cnNvclBvc2l0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmdldEN1cnNvclBvc2l0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgY3Vyc29yIHBvc2l0aW9uIHdpdGhpbiB0aGUgVGV4dCBWaWV3ZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSBBbiBpbnQgdmFsdWUgY29udGFpbmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldERvY3VtZW50UmVnaW9uIj5nZXREb2N1bWVudFJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIDxzdHJvbmc+Z2V0RG9jdW1lbnRSZWdpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRMb2NhdGlvbiI+Z2V0TG9jYXRpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldExvY2F0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHJpZXZlcyB0aGUgYmFzZSBsb2NhdGlvbiBmb3IgdGhlIElET01Eb2N1bWVudCBmb3IgdGhpcyBjbGFzcy4gVGhpcyBpcwotIHVzZWQgdG8gcG9wdWxhdGUgYSBuZXcgUGF0aCBjbGFzcyBmb3IgcmV0cmlldmluZyBhbiBJRmlsZSBpbnN0YW5jZS48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1hY3JvcyI+Z2V0TWFjcm9zPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0TWFjcm9zPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1hdGNoU3RyaW5nIj5nZXRNYXRjaFN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TWF0Y2hTdHJpbmc8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lc3BhY2VzIj5nZXROYW1lc3BhY2VzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5Db2xsZWN0aW9uIDxzdHJvbmc+Z2V0TmFtZXNwYWNlczwvc3Ryb25nPihJRE9NRWxlbWVudCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkNvbGxlY3Rpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5vZGUiPmdldE5vZGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uTm9kZSA8c3Ryb25nPmdldE5vZGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Ob2RlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRQYXJlbnQiPmdldFBhcmVudDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5Ob2RlIDxzdHJvbmc+Z2V0UGFyZW50PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UHJvcG9zYWxzIj5nZXRQcm9wb3NhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRQcm9wb3NhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVnaW9uIj5nZXRSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgSVRleHRSZWdpb24gPHN0cm9uZz5nZXRSZWdpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5JVGV4dFJlZ2lvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uIj5nZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+Z2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRSZXBsYWNlbWVudExlbmd0aCI+Z2V0UmVwbGFjZW1lbnRMZW5ndGg8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+Z2V0UmVwbGFjZW1lbnRMZW5ndGg8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0YXJ0T2Zmc2V0Ij5nZXRTdGFydE9mZnNldDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBpbnQgPHN0cm9uZz5nZXRTdGFydE9mZnNldDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVzaGVldE1vZGVsIj5nZXRTdHlsZXNoZWV0TW9kZWw8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbCA8c3Ryb25nPmdldFN0eWxlc2hlZXRNb2RlbDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFRleHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUZXh0RW5kT2Zmc2V0Ij5nZXRUZXh0RW5kT2Zmc2V0PC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGludCA8c3Ryb25nPmdldFRleHRFbmRPZmZzZXQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2hhc05vZGVzIj5oYXNOb2RlczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBib29sZWFuIDxzdHJvbmc+aGFzTm9kZXM8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZUxpc3Qgbm9kZXMpPC9jb2RlPjwvcD48cD5DaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIE5vZGVMaXN0IGhhcyBkYXRhPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ub2RlczwvY29kZT4gLSBBIE5vZGVMaXN0IG9iamVjdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSBUcnVlIGlmIGhhcyBkYXRhLCBmYWxzZSBpZiBlbXB0eTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXREb2N1bWVudFJlZ2lvbiI+c2V0RG9jdW1lbnRSZWdpb248L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldERvY3VtZW50UmVnaW9uPC9zdHJvbmc+KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZWdpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldE1hdGNoU3RyaW5nIj5zZXRNYXRjaFN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c2V0TWF0Y2hTdHJpbmc8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuZXdNYXRjaFN0cmluZyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3TWF0Y2hTdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldE5vZGUiPnNldE5vZGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnNldE5vZGU8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBuZXdOb2RlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uZXdOb2RlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRSZWdpb24iPnNldFJlZ2lvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c2V0UmVnaW9uPC9zdHJvbmc+KElUZXh0UmVnaW9uIG5ld1JlZ2lvbik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmV3UmVnaW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRSZXBsYWNlbWVudEJlZ2luUG9zaXRpb24iPnNldFJlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbjwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+c2V0UmVwbGFjZW1lbnRCZWdpblBvc2l0aW9uPC9zdHJvbmc+KGludCBuZXdSZXBsYWNlbWVudEJlZ2luUG9zaXRpb24pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1JlcGxhY2VtZW50QmVnaW5Qb3NpdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0UmVwbGFjZW1lbnRMZW5ndGgiPnNldFJlcGxhY2VtZW50TGVuZ3RoPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5zZXRSZXBsYWNlbWVudExlbmd0aDwvc3Ryb25nPihpbnQgbmV3UmVwbGFjZW1lbnRMZW5ndGgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5ld1JlcGxhY2VtZW50TGVuZ3RoPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zb3J0UHJvcG9zYWxzIj5zb3J0UHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5zb3J0UHJvcG9zYWxzPC9zdHJvbmc+KGphdmEudXRpbC5BcnJheUxpc3QgcHJvcG9zYWxzSW4pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnByb3Bvc2Fsc0luPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz50b1N0cmluZzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gamF2YS5sYW5nLlN0cmluZzwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYyNDQ5Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9wcmU+QWRvcHRlcnMgY2FuIHVzZSB0aGUgY2xhc3MgdG8gaGVscCBidWlsZCBhIGN1c3RvbSBjb250ZW50IGNvbXBsZXRpb24gcHJvcG9zYWwuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fQ3VzdG9tQ29tcGxldGlvblByb3Bvc2FsIj5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWw8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIGludCByZXBsYWNlbWVudE9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBpbnQgY3Vyc29yUG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIEltYWdlIGltYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGRpc3BsYXlTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIElDb250ZXh0SW5mb3JtYXRpb24gY29udGV4dEluZm9ybWF0aW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGFkZGl0aW9uYWxQcm9wb3NhbEluZm8KLSAgICAgICAgICwKLSAgICAgIGludCByZWxldmFuY2UpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwiPkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbDwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyByZXBsYWNlbWVudFN0cmluZwotICAgICAgICAgLAotICAgICAgaW50IHJlcGxhY2VtZW50T2Zmc2V0Ci0gICAgICAgICAsCi0gICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGgKLSAgICAgICAgICwKLSAgICAgIGludCBjdXJzb3JQb3NpdGlvbgotICAgICAgICAgLAotICAgICAgSW1hZ2UgaW1hZ2UKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgZGlzcGxheVN0cmluZwotICAgICAgICAgLAotICAgICAgSUNvbnRleHRJbmZvcm1hdGlvbiBjb250ZXh0SW5mb3JtYXRpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgYWRkaXRpb25hbFByb3Bvc2FsSW5mbwotICAgICAgICAgLAotICAgICAgaW50IHJlbGV2YW5jZQotICAgICAgICAgLAotICAgICAgYm9vbGVhbiB1cGRhdGVSZXBsYWNlbWVudExlbmd0aE9uVmFsaWRhdGUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc0F1dG9JbnNlcnRhYmxlIj5pc0F1dG9JbnNlcnRhYmxlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgKG5vbi1KYXZhZG9jKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0N1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCI+Q3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIGludCByZXBsYWNlbWVudE9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBpbnQgY3Vyc29yUG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIEltYWdlIGltYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGRpc3BsYXlTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIElDb250ZXh0SW5mb3JtYXRpb24gY29udGV4dEluZm9ybWF0aW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGFkZGl0aW9uYWxQcm9wb3NhbEluZm8KLSAgICAgICAgICwKLSAgICAgIGludCByZWxldmFuY2UpPC9jb2RlPjwvcD48cD5Db25zdHJ1Y3RvciBmb3IgdGhlIEN1c3RvbSBDb21wbGV0aW9uIFByb3Bvc2FsPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX0N1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCI+Q3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q3VzdG9tQ29tcGxldGlvblByb3Bvc2FsPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIGludCByZXBsYWNlbWVudE9mZnNldAotICAgICAgICAgLAotICAgICAgaW50IHJlcGxhY2VtZW50TGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBpbnQgY3Vyc29yUG9zaXRpb24KLSAgICAgICAgICwKLSAgICAgIEltYWdlIGltYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGRpc3BsYXlTdHJpbmcKLSAgICAgICAgICwKLSAgICAgIElDb250ZXh0SW5mb3JtYXRpb24gY29udGV4dEluZm9ybWF0aW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGFkZGl0aW9uYWxQcm9wb3NhbEluZm8KLSAgICAgICAgICwKLSAgICAgIGludCByZWxldmFuY2UKLSAgICAgICAgICwKLSAgICAgIGJvb2xlYW4gdXBkYXRlUmVwbGFjZW1lbnRMZW5ndGhPblZhbGlkYXRlKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfaXNBdXRvSW5zZXJ0YWJsZSI+aXNBdXRvSW5zZXJ0YWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+aXNBdXRvSW5zZXJ0YWJsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD4obm9uLUphdmFkb2MpPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0UHJvcG9zYWxSZXF1ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3Yzc1MmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3Q8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdDwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5Qcm92aWRlcyBjb250ZW50IGFzc2lzdGFuY2UgSUNvbXBsZXRpb25Qcm9wb3NhbHMuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q29tcGxldGlvblByb3Bvc2FscyI+Z2V0Q29tcGxldGlvblByb3Bvc2FsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENvbXBsZXRpb24gUHJvcG9zYWxzIGZvciBhIENvbnRlbnQgQXNzaXN0IFJlcXVlc3QuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNvbXBsZXRpb24gUHJvcG9zYWxzIGZvciBhIENvbnRlbnQgQXNzaXN0IFJlcXVlc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPiAtIEFycmF5TGxpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JWFNMQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2NhN2Y1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSVhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdDwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBJWFNMQ29udGVudEFzc2lzdFByb2Nlc3NvcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPklYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yPC9zdHJvbmc+Ci1leHRlbmRzIDwvcHJlPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TWF4aW11bVZlcnNpb24iPmdldE1heGltdW1WZXJzaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TWluaW11bVZlcnNpb24iPmdldE1pbmltdW1WZXJzaW9uPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZXNwYWNlcyI+Z2V0TmFtZXNwYWNlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFycmF5TGlzdCBvZiBTdHJpbmdzIGZvciB0aGUgbmFtZXNwYWNlcyB0aGlzIHByb2Nlc3NvciBhY3RpdmF0ZXMgYWdhaW5zdC48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE1heGltdW1WZXJzaW9uIj5nZXRNYXhpbXVtVmVyc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0TWF4aW11bVZlcnNpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRNaW5pbXVtVmVyc2lvbiI+Z2V0TWluaW11bVZlcnNpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE1pbmltdW1WZXJzaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TmFtZXNwYWNlcyI+Z2V0TmFtZXNwYWNlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IDxzdHJvbmc+Z2V0TmFtZXNwYWNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5BcnJheUxpc3Qgb2YgU3RyaW5ncyBmb3IgdGhlIG5hbWVzcGFjZXMgdGhpcyBwcm9jZXNzb3IgYWN0aXZhdGVzIGFnYWluc3QuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Lk51bGxDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRlMDQwNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Lk51bGxDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3Q8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0PC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE51bGxDb250ZW50QXNzaXN0UmVxdWVzdDwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPk51bGxDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdDwvcHJlPkFuIGVtcHR5IGNvbnRlbnQgYXNzaXN0IHJlcXVlc3QuPHA+PC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0Ij5OdWxsQ29udGVudEFzc2lzdFJlcXVlc3Q8L2E+PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgbm9kZQotICAgICAgICAgLAotICAgICAgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbgotICAgICAgICAgLAotICAgICAgSVRleHRSZWdpb24gY29tcGxldGlvblJlZ2lvbgotICAgICAgICAgLAotICAgICAgaW50IGJlZ2luCi0gICAgICAgICAsCi0gICAgICBpbnQgbGVuZ3RoCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIGZpbHRlcgotICAgICAgICAgLAotICAgICAgSVRleHRWaWV3ZXIgdGV4dFZpZXdlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldENvbXBsZXRpb25Qcm9wb3NhbHMiPmdldENvbXBsZXRpb25Qcm9wb3NhbHM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9OdWxsQ29udGVudEFzc2lzdFJlcXVlc3QiPk51bGxDb250ZW50QXNzaXN0UmVxdWVzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPk51bGxDb250ZW50QXNzaXN0UmVxdWVzdDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIG5vZGUKLSAgICAgICAgICwKLSAgICAgIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24KLSAgICAgICAgICwKLSAgICAgIElUZXh0UmVnaW9uIGNvbXBsZXRpb25SZWdpb24KLSAgICAgICAgICwKLSAgICAgIGludCBiZWdpbgotICAgICAgICAgLAotICAgICAgaW50IGxlbmd0aAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBmaWx0ZXIKLSAgICAgICAgICwKLSAgICAgIElUZXh0Vmlld2VyIHRleHRWaWV3ZXIpPC9jb2RlPjwvcD48cD5BIE5VTEwgQ29udGVudEFzc2lzdFJlcXVlc3QgaGFzIG5vIHByb3Bvc2Fscy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDb21wbGV0aW9uUHJvcG9zYWxzIj5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5BcnJheUxpc3QgPHN0cm9uZz5nZXRDb21wbGV0aW9uUHJvcG9zYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkFycmF5TGlzdDwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWIxNWI2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhhbGFuRGVidWdnZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YYWxhbkRlYnVnZ2VyPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0RGVidWdnZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGFsYW5EZWJ1Z2dlciI+WGFsYW5EZWJ1Z2dlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkVHJhbnNmb3JtZXIiPmFkZFRyYW5zZm9ybWVyPC9hPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RlYnVnZ2VyU3VzcGVuZGVkIj5kZWJ1Z2dlclN1c3BlbmRlZDwvYT4oQnJlYWtQb2ludCBicmVha3BvaW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYXJpYWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYXJpYWJsZSI+Z2V0VmFyaWFibGU8L2E+KGludCBpZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXRzIGEgdmFyaWFibGUgYnkgSUQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRDdXJyZW50VHJhY2VMaXN0ZW5lciI+c2V0Q3VycmVudFRyYWNlTGlzdGVuZXI8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyIGN1cnJlbnRUcmFjZUxpc3RlbmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFRyYW5zZm9ybWVyRmFjdG9yeSI+c2V0VHJhbnNmb3JtZXJGYWN0b3J5PC9hPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeSBmYWN0b3J5KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hhbGFuRGVidWdnZXIiPlhhbGFuRGVidWdnZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YYWxhbkRlYnVnZ2VyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFRyYW5zZm9ybWVyIj5hZGRUcmFuc2Zvcm1lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkVHJhbnNmb3JtZXI8L3N0cm9uZz4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dHJhbnNmb3JtZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2RlYnVnZ2VyU3VzcGVuZGVkIj5kZWJ1Z2dlclN1c3BlbmRlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGVidWdnZXJTdXNwZW5kZWQ8L3N0cm9uZz4oQnJlYWtQb2ludCBicmVha3BvaW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5icmVha3BvaW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYXJpYWJsZSI+Z2V0VmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgVmFyaWFibGUgPHN0cm9uZz5nZXRWYXJpYWJsZTwvc3Ryb25nPihpbnQgaWQpPC9jb2RlPjwvcD48cD5HZXRzIGEgdmFyaWFibGUgYnkgSUQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlkPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VmFyaWFibGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEN1cnJlbnRUcmFjZUxpc3RlbmVyIj5zZXRDdXJyZW50VHJhY2VMaXN0ZW5lcjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkIDxzdHJvbmc+c2V0Q3VycmVudFRyYWNlTGlzdGVuZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblRyYWNlTGlzdGVuZXIgY3VycmVudFRyYWNlTGlzdGVuZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmN1cnJlbnRUcmFjZUxpc3RlbmVyPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRUcmFuc2Zvcm1lckZhY3RvcnkiPnNldFRyYW5zZm9ybWVyRmFjdG9yeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0VHJhbnNmb3JtZXJGYWN0b3J5PC9zdHJvbmc+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5IGZhY3RvcnkpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZhY3Rvcnk8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblByaW50VHJhY2VMaXN0ZW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGYxNzM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYYWxhblByaW50VHJhY2VMaXN0ZW5lcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuUHJpbnRUcmFjZUxpc3RlbmVyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuUHJpbnRUcmFjZUxpc3RlbmVyIj5YYWxhblByaW50VHJhY2VMaXN0ZW5lcjwvYT48L3N0cm9uZz4oamF2YS5pby5QcmludFdyaXRlciBwdyk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX190cmFjZSI+X3RyYWNlPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdGVkIj5zZWxlY3RlZDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3RFbmQiPnNlbGVjdEVuZDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5FbmRTZWxlY3Rpb25FdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90cmFjZSI+dHJhY2U8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHJhY2VFbmQiPnRyYWNlRW5kPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hhbGFuUHJpbnRUcmFjZUxpc3RlbmVyIj5YYWxhblByaW50VHJhY2VMaXN0ZW5lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyPC9zdHJvbmc+KGphdmEuaW8uUHJpbnRXcml0ZXIgcHcpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9fdHJhY2UiPl90cmFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+X3RyYWNlPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3RlZCI+c2VsZWN0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdGVkPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0RW5kIj5zZWxlY3RFbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdEVuZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkVuZFNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RyYWNlIj50cmFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dHJhY2U8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RyYWNlRW5kIj50cmFjZUVuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dHJhY2VFbmQ8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUm9vdFN0eWxlRnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUm9vdFN0eWxlRnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0MzgzYy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblJvb3RTdHlsZUZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYYWxhblJvb3RTdHlsZUZyYW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGFsYW5Sb290U3R5bGVGcmFtZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZTwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YYWxhblJvb3RTdHlsZUZyYW1lIj5YYWxhblJvb3RTdHlsZUZyYW1lPC9hPjwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2ZW50KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkVmFyaWFibGUiPmFkZFZhcmlhYmxlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUgeHZhcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0R2xvYmFscyI+Z2V0R2xvYmFsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYXJpYWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYXJpYWJsZSI+Z2V0VmFyaWFibGU8L2E+KGludCBpZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXRzIGEgVmFyaWFibGUgYnkgSUQ8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YYWxhblJvb3RTdHlsZUZyYW1lIj5YYWxhblJvb3RTdHlsZUZyYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WGFsYW5Sb290U3R5bGVGcmFtZTwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2ZW50KTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkVmFyaWFibGUiPmFkZFZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRWYXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUgeHZhcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+eHZhcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0R2xvYmFscyI+Z2V0R2xvYmFsczwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldEdsb2JhbHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIFZhcmlhYmxlIDxzdHJvbmc+Z2V0VmFyaWFibGU8L3N0cm9uZz4oaW50IGlkKTwvY29kZT48L3A+PHA+R2V0cyBhIFZhcmlhYmxlIGJ5IElEPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlZhcmlhYmxlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDIzMDM5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWGFsYW5TdHlsZUZyYW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGFsYW5TdHlsZUZyYW1lPC9zdHJvbmc+Ci1leHRlbmRzIFN0eWxlRnJhbWU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2V2ZW50Ij5ldmVudDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGFsYW5TdHlsZUZyYW1lIj5YYWxhblN0eWxlRnJhbWU8L2E+PC9zdHJvbmc+KFN0eWxlRnJhbWUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2ZW50KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDdXJyZW50TGluZSI+Z2V0Q3VycmVudExpbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGaWxlbmFtZSI+Z2V0RmlsZW5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0R2xvYmFscyI+Z2V0R2xvYmFsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNvdXJjZUN1cnJlbnRMaW5lIj5nZXRTb3VyY2VDdXJyZW50TGluZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNvdXJjZUZpbGVuYW1lIj5nZXRTb3VyY2VGaWxlbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYXJpYWJsZVN0YWNrIj5nZXRWYXJpYWJsZVN0YWNrPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVla0VsZW1lbnQiPnBlZWtFbGVtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcG9wRWxlbWVudCI+cG9wRWxlbWVudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3B1c2hFbGVtZW50Ij5wdXNoRWxlbWVudDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfZXZlbnQiPmV2ZW50PC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgPHN0cm9uZz5ldmVudDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5TdHlsZUZyYW1lIj5YYWxhblN0eWxlRnJhbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YYWxhblN0eWxlRnJhbWU8L3N0cm9uZz4oU3R5bGVGcmFtZSBwYXJlbnQKLSAgICAgICAgICwKLSAgICAgIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXZlbnQpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDdXJyZW50TGluZSI+Z2V0Q3VycmVudExpbmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0Q3VycmVudExpbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZpbGVuYW1lIj5nZXRGaWxlbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0RmlsZW5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRHbG9iYWxzIj5nZXRHbG9iYWxzPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0R2xvYmFsczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXROYW1lIj5nZXROYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXROYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U291cmNlQ3VycmVudExpbmUiPmdldFNvdXJjZUN1cnJlbnRMaW5lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldFNvdXJjZUN1cnJlbnRMaW5lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTb3VyY2VGaWxlbmFtZSI+Z2V0U291cmNlRmlsZW5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFNvdXJjZUZpbGVuYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFyaWFibGVTdGFjayI+Z2V0VmFyaWFibGVTdGFjazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldFZhcmlhYmxlU3RhY2s8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGVla0VsZW1lbnQiPnBlZWtFbGVtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgPHN0cm9uZz5wZWVrRWxlbWVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BvcEVsZW1lbnQiPnBvcEVsZW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCA8c3Ryb25nPnBvcEVsZW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wdXNoRWxlbWVudCI+cHVzaEVsZW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnB1c2hFbGVtZW50PC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblRyYWNlTGlzdGVuZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYyZTdlNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblRyYWNlTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhhbGFuVHJhY2VMaXN0ZW5lcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhhbGFuVHJhY2VMaXN0ZW5lcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuVHJhY2VMaXN0ZW5lciI+WGFsYW5UcmFjZUxpc3RlbmVyPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIgZGVidWdnZXIpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHRlbnNpb24iPmV4dGVuc2lvbjwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5FeHRlbnNpb25FdmVudCBlZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9leHRlbnNpb25FbmQiPmV4dGVuc2lvbkVuZDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5FeHRlbnNpb25FdmVudCBlZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZW5lcmF0ZWQiPmdlbmVyYXRlZDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5HZW5lcmF0ZUV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBWYXJpYWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYXJpYWJsZSI+Z2V0VmFyaWFibGU8L2E+KGludCBpZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3RlZCI+c2VsZWN0ZWQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0RW5kIj5zZWxlY3RFbmQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHJhY2UiPnRyYWNlPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RyYWNlRW5kIj50cmFjZUVuZDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YYWxhblRyYWNlTGlzdGVuZXIiPlhhbGFuVHJhY2VMaXN0ZW5lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhhbGFuVHJhY2VMaXN0ZW5lcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIgZGVidWdnZXIpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHRlbnNpb24iPmV4dGVuc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZXh0ZW5zaW9uPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRXh0ZW5zaW9uRXZlbnQgZWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9leHRlbnNpb25FbmQiPmV4dGVuc2lvbkVuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZXh0ZW5zaW9uRW5kPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRXh0ZW5zaW9uRXZlbnQgZWUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZW5lcmF0ZWQiPmdlbmVyYXRlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Z2VuZXJhdGVkPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuR2VuZXJhdGVFdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhcmlhYmxlIj5nZXRWYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBWYXJpYWJsZSA8c3Ryb25nPmdldFZhcmlhYmxlPC9zdHJvbmc+KGludCBpZCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5WYXJpYWJsZTwvY29kZT48L3A+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+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNzUzYWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWGFsYW5WYXJpYWJsZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhhbGFuVmFyaWFibGU8L3N0cm9uZz4KLWV4dGVuZHMgVmFyaWFibGU8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGFsYW5WYXJpYWJsZSI+WGFsYW5WYXJpYWJsZTwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUgeGFsYW5TdHlsZUZyYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhwYXRoLlZhcmlhYmxlU3RhY2sgdmFyU3RhY2sKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc2NvcGUKLSAgICAgICAgICwKLSAgICAgIGludCBzbG90TnVtYmVyCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jb21wYXJlVG8iPmNvbXBhcmVUbzwvYT4oamF2YS5sYW5nLk9iamVjdCBhcmcwKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFR5cGUiPmdldFR5cGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYWx1ZSI+Z2V0VmFsdWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YYWxhblZhcmlhYmxlIj5YYWxhblZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WGFsYW5WYXJpYWJsZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZSB4YWxhblN0eWxlRnJhbWUKLSAgICAgICAgICwKLSAgICAgIG9yZy5hcGFjaGUueHBhdGguVmFyaWFibGVTdGFjayB2YXJTdGFjawotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzY29wZQotICAgICAgICAgLAotICAgICAgaW50IHNsb3ROdW1iZXIKLSAgICAgICAgICwKLSAgICAgIG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1WYXJpYWJsZSBlbGVtVmFyaWFibGUpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jb21wYXJlVG8iPmNvbXBhcmVUbzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5jb21wYXJlVG88L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBhcmcwKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmcwPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUeXBlIj5nZXRUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRWYWx1ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC90b2MuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC90b2MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI2ZjBhOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvdG9jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotCTx0aXRsZT5UYWJsZSBvZiBDb250ZW50czwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5PgotPGgxPlRhYmxlIG9mIENvbnRlbnRzPC9oMT4KLVBsZWFzZSBlbnRlciB5b3VyIHRleHQgaGVyZS4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2plbHRvaHRtbC54c2wgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2plbHRvaHRtbC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0YWYwMGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9qZWx0b2h0bWwueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAtIGJ1ZyAyMzE0NzIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgotICAgICAgICAgICAgICAgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgICAgICAgICAgICAgIHhtbG5zOnJlZGlyZWN0PSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vcmVkaXJlY3QiCi0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXM9InJlZGlyZWN0Ij4KLSAgICA8eHNsOm91dHB1dCBlbmNvZGluZz0iVVRGLTgiIG1ldGhvZD0iaHRtbCIgaW5kZW50PSJubyIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIvPgotICAgIAotICAgIDwhLS0gQ3JlYXRlIHRoZSBIVE1MIHN0cnVjdHVyZSAtLT4KLQk8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgIAkJPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvL2plbGNsYXNzIi8+Ci0JPC94c2w6dGVtcGxhdGU+Ci0gICAKLSAgICA8IS0tIFRoaXMgaXMgdGhlIG1haW4gd29yayBob3JzZSB0aGF0IGRvZXMgdGhlIGdlbmVyYWwgbGF5b3V0IGZvciB0aGUgY2xhc3MgcGFnZSAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJqZWxjbGFzcyI+Ci0gICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9Im91dHB1dEZpbGUiPgotICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgIDx4c2w6dGV4dD4uaHRtbDwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDp2YXJpYWJsZT4KLSAgICAgIDx4c2w6bWVzc2FnZSB0ZXJtaW5hdGU9Im5vIj4KLSAgICAgICAgIDx4c2w6dGV4dD5HZW5lcmF0aW5nIEphdmFEb2MgZm9yIDwveHNsOnRleHQ+Ci0gICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICA8eHNsOnRleHQ+LjwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDptZXNzYWdlPgotICAgICAgPHJlZGlyZWN0OndyaXRlIHNlbGVjdD0iJG91dHB1dEZpbGUiPgotICAgICAgIDxodG1sPgotICAgICAgICAgPGJvZHk+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgIDxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2UgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBwYWNrYWdlIi8+PC9zdHJvbmc+PC9mb250PgotICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgPGhyLz4KLSAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgIDxmb250IHNpemU9Ii0xIj48c3Ryb25nPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPjwvc3Ryb25nPjwvZm9udD48YnIvPgotICAgICAgICAgICAgICAgQ2xhc3MgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB0eXBlIi8+Ci0gICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZm9ybWF0LWhlYWRlciIvPgotICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvYXR0cmlidXRlIi8+Ci0gICAgICAgICAgICA8aHIvPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJkZXNjZW5kYW50OjpmaWVsZHMiPgotICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPgotICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNDQ0NDRkYiIGNvbHM9IjIiPgotICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImZpZWxkcy9maWVsZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZGVzY2VuZGFudDo6Y29uc3RydWN0b3IiPgotICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiPgotICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNDQ0NDRkYiPgotICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImRlc2NlbmRhbnQ6OmNvbnN0cnVjdG9yIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJkZXNjZW5kYW50OjptZXRob2RzIj4KLSAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIiBjb2xzPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPgotICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImZpZWxkcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZmllbGREZXRhaWwiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJtZXRob2RzL2NvbnN0cnVjdG9yIj4KLSAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb25zdHJ1Y3RvckRldGFpbCIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9Im1ldGhvZHMvbWV0aG9kIj4KLSAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtZXRob2RzRGV0YWlsIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgPC9ib2R5PgotICAgICAgICAgPC9odG1sPgotICAgICAgPC9yZWRpcmVjdDp3cml0ZT4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8IS0tIE91dHB1dCBhbnkgZGVzY3JpcHRpb24gdGhhdCBtYXkgYmUgdGhlcmUgZm9yIGNvbW1lbnRzLiAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb21tZW50L2Rlc2NyaXB0aW9uIj4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBPdXRwdXQgdGhlIHZhcmlvdXMgYXR0cmlidXRlIGluZm9ybWF0aW9uIGZvciB0aGUgY2xhc3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29tbWVudC9hdHRyaWJ1dGUiPgotICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8eHNsOmNob29zZT4KLSAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAYXV0aG9yIj4KLSAgICAgICAgICAgICAgICAgIDxzdHJvbmc+QXV0aG9yOjwvc3Ryb25nPjxici8+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4gCi0gICAgICAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBzZWUiPgotICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TZWUgQWxzbzo8L3N0cm9uZz48YnIvPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRlc2NyaXB0aW9uIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgICAgICAgICAgICA8L3hzbDp3aGVuPgotICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgotICAgICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotCi0KLSAgICAgICAgPCEtLSBDcmVhdGUgdGhlIGZpZWxkIHN1bW1hcnkgcm93cyAtLT4KLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWVsZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCIgd2lkdGg9IjIwJSI+Ci0gICAgICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAc3RhdGljID0gJ3RydWUnIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gc3RhdGljIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZnVsbHR5cGUiLz4gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmllbGRfe0BuYW1lfSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICAgICAmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsKLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICAKLSAgICA8IS0tIENyZWF0ZSB0aGUgY29uc3RydWN0b3JzIHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29uc3RydWN0b3IiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjY29uX3tAbmFtZX0iPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFyYW0iPgotICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPjx4c2w6dGV4dD4gPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPgotICAgICAgICAgLAotICAgICAgPC94c2w6aWY+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBDcmVhdGUgdGhlIG1ldGhvZCBzdW1tYXJ5IHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgIDx0ciB2YWxpZ249InRvcCI+Ci0gICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiB3aWR0aD0iMjAlIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBzdGF0aWMgPSAndHJ1ZSciPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiBzdGF0aWM8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI21ldGhvZF97QG5hbWV9Ij4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgICAgPGJyLz4KLSAgICAgICAgICAgICAgICYjMTYwOyYjMTYwOyYjMTYwOyYjMTYwOwotICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdC1oZWFkZXIiPgotICAgICAgICAgPHByZT4KLTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPiBjbGFzcyA8c3Ryb25nPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdHlwZSIvPjwvc3Ryb25nPgotZXh0ZW5kcyA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHN1cGVyY2xhc3NmdWxsdHlwZSIvPgotICAgICAgICAgPC9wcmU+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmaWVsZERldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZmllbGRzL2ZpZWxkIiBtb2RlPSJkZXRhaWwiPgotICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmaWVsZHMvZmllbGQiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJmaWVsZF97QG5hbWV9Ij4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgPC9hPgotICAgICAgPC9oMj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQHN0YXRpYyA9ICd0cnVlJyI+Ci0gICAgICAgICAgICAgICA8eHNsOnRleHQ+IHN0YXRpYyA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICA8L3N0cm9uZz4gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8eHNsOmlmIHRlc3Q9ImNvbW1lbnQiPgotICAgICAgICAgPHRhYmxlPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvZGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICA8L3RhYmxlPgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8aHIvPgotICAgICAgCi0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjb25zdHJ1Y3RvckRldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9jb25zdHJ1Y3RvciIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kcy9jb25zdHJ1Y3RvciIgbW9kZT0iZGV0YWlsIj4KLSAgICAgIDxoMj4KLSAgICAgICAgIDxhIG5hbWU9ImNvbl97QG5hbWV9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+Ci0gICAgICA8L2gyPgotICAgICAgPHA+Ci0gICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9zdHJvbmc+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KTwveHNsOnRleHQ+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8cD4KLSAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgPC9wPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0ibWV0aG9kc0RldGFpbCI+Ci0gICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY29scz0iMiI+Ci0gICAgICAgICA8dHIgYWxpZ249ImxlZnQiIGJnY29sb3I9IiNDQ0NDRkYiIHdpZHRoPSIxMDAlIiBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgICA8L3RhYmxlPgotICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJtZXRob2RzL21ldGhvZCIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJtZXRob2Rfe0BuYW1lfSI+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgIDwvYT4KLSAgICAgIDwvaDI+Ci0gICAgICA8cD4KLSAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8c3Ryb25nPgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICA8L3N0cm9uZz4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4oPC94c2w6dGV4dD4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icGFyYW1zIj4KLSAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyYW1zL3BhcmFtIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KLSAgICAgICAgIDwvY29kZT4KLSAgICAgIDwvcD4KLSAgICAgIDxwPgotICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICA8L3A+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIgbW9kZT0iZGV0YWlsIi8+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDx4c2w6aWYgdGVzdD0iQHR5cGUgIT0gJ3ZvaWQnIj4KLSAgICAgICAgIDxoMz5SZXR1cm5zPC9oMz4KLSAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoQHJldHVybmNvbW1lbnQpID4gMCI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IC0gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcmV0dXJuY29tbWVudCIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8L3A+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDx4c2w6aWYgdGVzdD0iZXhjZXB0aW9ucyI+Ci0gICAgICAgICA8aDM+VGhyb3dzOjwvaDM+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImV4Y2VwdGlvbnMvZXhjZXB0aW9uIiBtb2RlPSJkZXRhaWwiLz4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhcmFtIiBtb2RlPSJkZXRhaWwiPgotICAgICAgICAgPHA+Ci0gICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEBjb21tZW50KSA+IDAiPgotICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiAtIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvbW1lbnQiIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImV4Y2VwdGlvbiIgbW9kZT0iZGV0YWlsIj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InN0cmluZy1sZW5ndGgoQGNvbW1lbnQpID4gMCI+Ci0gICAgICAgICAgICAgICA8eHNsOnRleHQ+IC0gPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY29tbWVudCIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgICAgCi08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvamVsdG90b2MueHNsIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9qZWx0b3RvYy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZjUwODIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9qZWx0b3RvYy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjMxNDcyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAtLT4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgeG1sbnM6c2V0PSJodHRwOi8vZXhzbHQub3JnL3NldHMiCi0gICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuIgotICAgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJzZXQgeGFsYW4iCi0+Ci0gICA8eHNsOnBhcmFtIG5hbWU9InNka25hbWUiPlNvbWUgTmFtZTwveHNsOnBhcmFtPgotICAgPHhzbDpwYXJhbSBuYW1lPSJkaXIiPmRvYy9odG1sPC94c2w6cGFyYW0+ICAgCi0gICA8eHNsOm91dHB1dCBpbmRlbnQ9InllcyIgZW5jb2Rpbmc9IlVURi04IiB4YWxhbjppbmRlbnQtYW1vdW50PSIzIi8+Ci0gICA8eHNsOmtleSBuYW1lPSJhbGxQYWNrYWdlcyIgbWF0Y2g9ImplbGNsYXNzIiB1c2U9IkBwYWNrYWdlIi8+Ci0gICAgIAotICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2plbCI+Ci0gICAgICA8dG9jIGxhYmVsPSJ7JHNka25hbWV9Ij4KLSAgICAgICAgIDx0b3BpYyBsYWJlbD0iUmVmZXJlbmNlIj4KLSAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJzZXQ6ZGlzdGluY3QoamVsY2xhc3MvQHBhY2thZ2UpIj4KLSAgICAgICAgICAgICAgIDx0b3BpYyBsYWJlbD0iey59Ij4KLSAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ia2V5KCdhbGxQYWNrYWdlcycsIC4pIi8+Ci0gICAgICAgICAgICAgICA8L3RvcGljPgotICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+Ci0gICAgICAgICA8L3RvcGljPgotICAgICAgPC90b2M+Ci0gICA8L3hzbDp0ZW1wbGF0ZT4KLSAgIAotICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iamVsY2xhc3MiPgotICAgICAgPHRvcGljIGxhYmVsPSJ7QGZ1bGx0eXBlfSIgaHJlZj0ieyRkaXJ9L3tAZnVsbHR5cGV9Lmh0bWwiLz4KLSAgIDwveHNsOnRlbXBsYXRlPgotICAgCi08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2Mvc2NoZW1hLmNzcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2Mvc2NoZW1hLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyMDI4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL3NjaGVtYS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1INi5TY2hlbWFIZWFkZXIgewotCWZvbnQtc2l6ZToxNnB4OyAKLQlkaXNwbGF5OmlubGluZQotfQotCi1QLlNjaGVtYUNvcHlyaWdodCB7Ci0JZm9udC1zaXplOiBzbWFsbGVyOyAKLQlmb250LXN0eWxlOiBub3JtYWw7Ci0JY29sb3I6ICMzMzY2OTk7IAotCWRpc3BsYXk6aW5saW5lOwotCW1hcmdpbi10b3A6IDMuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMTEuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAwLjAwMDAwMHB0OwotfQotCi1QLlNjaGVtYUR0ZCB7Ci0JY29sb3I6ICM4MDAwMDA7IAotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDEwLjAwMDAwMHB0OwotfQotCi1QLlNjaGVtYUR0ZEF0dGxpc3QgewotCWNvbG9yOiAjODAwMDAwOyAKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAyMC4wMDAwMDBwdDsKLX0KLQotc3Bhbi5TY2hlbWFUYWcgewotCWNvbG9yOiAjMDAwMDgwOwotfQotCi1zcGFuLlNjaGVtYUNzdHJpbmcgewotCWNvbG9yOiAjMDA4MDAwOwotfQotCi1wcmUuRXhhbXBsZSB7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLX0KLQotLkNvbmZpZ01hcmt1cEVsZW1lbnREZXNjIHsKLQljb2xvcjogYmxhY2s7Ci0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMTAuMDAwMDAwcHQ7Ci19Ci0KLS5Db25maWdNYXJrdXBBdHRsaXN0RGVzYyB7Ci0JY29sb3I6IGJsYWNrOwotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDMyLjAwMDAwMHB0OwotfQotCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vbGliLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vbGliLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzOGY1ZGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2xpYi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1qZWxkb2NsZXQuamFyCi1kb2NjaGVjay5qYXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyZTUyNy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDIxNTEyNiwgMjEzODUzCi0jICAgICAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi1wbHVnaW5OYW1lPVhTTCBTREsgRG9jdW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQyNzkxMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Ci08cGx1Z2luPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotICAgICAgPHRvYwotICAgICAgICAgICAgZmlsZT0idG9jLnhtbCIKLSAgICAgICAgICAgIHByaW1hcnk9InRydWUiPgotICAgICAgPC90b2M+Ci0gICA8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvc2RrL2RvY3VtZW50YXRpb24vQWN0aXZhdG9yLmphdmEgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvc2RrL2RvY3VtZW50YXRpb24vQWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NGU0MTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3Nkay9kb2N1bWVudGF0aW9uL0FjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uIjsKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBBY3RpdmF0b3IoKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICoKLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3RvYy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU4MDZhZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU2NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRvYyBsYWJlbD0iWFNMIFRvb2xzIFNESyBEb2N1bWVudGF0aW9uIj4KLQk8dG9waWMgbGFiZWw9IlJlZmVyZW5jZSI+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlIj4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW4iIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhQcm9jZXNzb3JQcmVmZXJlbmNlcyIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLk5vZGVMaXN0SW1wbC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5Ob2RlTGlzdEltcGwiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aDIwSGVscGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhQYXRoMjBIZWxwZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YUGF0aENvcmVIZWxwZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFBhdGhDb3JlSGVscGVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFNMVFhQYXRoSGVscGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUiPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXMuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlcyIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZSIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwiPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5NZXNzYWdlcy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuTWVzc2FnZXMiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbiIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50Ij4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQuWEluY2x1ZGVUYXNrLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQuWEluY2x1ZGVUYXNrIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbCI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldEJ1aWxkZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRCdWlsZGVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldFBhcnNlckRhdGEuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRQYXJzZXJEYXRhIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTEVsZW1lbnRGYWN0b3J5Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xFbGVtZW50RmFjdG9yeSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5YU0xNb2RlbE9iamVjdEZhY3RvcnkuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTE1vZGVsT2JqZWN0RmFjdG9yeSIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsIj4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1Zy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZyIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkZpbGVVdGlsLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkZpbGVVdGlsIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuU3RydWN0dXJlZERvY3VtZW50VXRpbC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudXRpbC5TdHJ1Y3R1cmVkRG9jdW1lbnRVdGlsIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuWE1MQ29udGVudFR5cGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuWE1MQ29udGVudFR5cGUiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24iPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24uaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uTWF4RXJyb3JzRXhjZWVkZWRFeGNlcHRpb24iIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0aW9uTWVzc2FnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25SZXBvcnQuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvblJlcG9ydCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xWYWxpZGF0b3IiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZSI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yMi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvcjIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhTTFZhbGlkYXRpb25SZXBvcnQuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0xWYWxpZGF0aW9uUmVwb3J0IiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54aW5jbHVkZSI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueGluY2x1ZGUuWEluY2x1ZGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54aW5jbHVkZS5YSW5jbHVkZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsIj4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuQ2FsbFRlbXBsYXRlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5DYWxsVGVtcGxhdGUiIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkZ1bmN0aW9uLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5GdW5jdGlvbiIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuSW1wb3J0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5JbXBvcnQiIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkluY2x1ZGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLkluY2x1ZGUiIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlBhcmFtZXRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuUGFyYW1ldGVyIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0IiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5TdHlsZXNoZWV0TW9kZWwuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlN0eWxlc2hlZXRNb2RlbCIgLz4KLQkJCTx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVGVtcGxhdGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlRlbXBsYXRlIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5WYXJpYWJsZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuVmFyaWFibGUiIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLm1vZGVsLlhTTEF0dHJpYnV0ZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMQXR0cmlidXRlIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xFbGVtZW50IiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUubW9kZWwuWFNMTW9kZWxPYmplY3QuVHlwZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xNb2RlbE9iamVjdC5UeXBlIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5tb2RlbC5YU0xOb2RlIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlciI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuUmVzb2x2ZXJFeHRlbnNpb24uaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlJlc29sdmVyRXh0ZW5zaW9uIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlN0b3BQYXJzaW5nRXhjZXB0aW9uLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5TdG9wUGFyc2luZ0V4Y2VwdGlvbiIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuWFNMVmVyc2lvbkhhbmRsZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLmVuY29kaW5nIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YU0xEb2N1bWVudExvYWRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWFNMRG9jdW1lbnRMb2FkZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlciI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvclhTTC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvclhTTCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuWFNMTW9kZWxMb2FkZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YU0xNb2RlbExvYWRlciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIuWFNMU291cmNlUGFyc2VyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIuWFNMU291cmNlUGFyc2VyIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5wYXJzZXIucmVnaW9ucyI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLnJlZ2lvbnMuWFBhdGhTZXBhcmF0b3JSZWdpb24uaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zLlhQYXRoU2VwYXJhdG9yUmVnaW9uIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhQYXRoUmVnaW9uQ29udGV4dC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YUGF0aFJlZ2lvbkNvbnRleHQiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YU0xQYXJzZXJSZWdpb25GYWN0b3J5Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhTTFBhcnNlclJlZ2lvbkZhY3RvcnkiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQuSVhTTFBhcnRpdGlvbnMuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQuSVhTTFBhcnRpdGlvbnMiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhTTC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwiPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuTWVzc2FnZXMuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5NZXNzYWdlcyIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuUHJlZmVyZW5jZUluaXRpYWxpemVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuUHJlZmVyZW5jZUluaXRpYWxpemVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wiIC8+Ci0JCQk8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSUNvbnN0YW50cy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLlhTTFVJQ29uc3RhbnRzIiAvPgotCQkJPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW4uaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5YU0xVSVBsdWdpbiIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3RFRERmlsZVdpemFyZERlbGVnYXRlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dTRExGaWxlV2l6YXJkRGVsZWdhdGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dTRExGaWxlV2l6YXJkRGVsZWdhdGUiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3V2l6YXJkQWN0aW9uLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdXaXphcmRBY3Rpb24iIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WE1MRmlsZVdpemFyZERlbGVnYXRlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNERmlsZVdpemFyZERlbGVnYXRlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0RGaWxlV2l6YXJkRGVsZWdhdGUiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNMRmlsZVdpemFyZERlbGVnYXRlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYU0xGaWxlV2l6YXJkRGVsZWdhdGUiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0Ij4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5BdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5BdHRyaWJ1dGVDb250ZW50QXNzaXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNhbGxUZW1wbGF0ZUNvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5DYWxsVGVtcGxhdGVDb250ZW50QXNzaXN0UmVxdWVzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0UHJvY2Vzc29yRmFjdG9yeS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ29udGVudEFzc2lzdFByb2Nlc3NvckZhY3RvcnkiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuRXhjbHVkZVJlc3VsdFByZWZpeGVzQ29udGVudEFzc2lzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5TZWxlY3RBdHRyaWJ1dGVDb250ZW50QXNzaXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlRlbXBsYXRlTW9kZUF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVtcGxhdGVOYW1lQXR0cmlidXRlQ29udGVudEFzc2lzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5UZXN0QXR0cmlidXRlQ29udGVudEFzc2lzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuVGVzdEF0dHJpYnV0ZUNvbnRlbnRBc3Npc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFBhdGhFbGVtZW50Q29udGVudEFzc2lzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5YU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTENvbnRlbnRBc3Npc3RSZXF1ZXN0RmFjdG9yeS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMQ29udGVudEFzc2lzdFJlcXVlc3RGYWN0b3J5IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMRWxlbWVudENvbnRlbnRBc3Npc3RSZXF1ZXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTFRlbXBsYXRlQ29tcGxldGlvblByb2Nlc3Nvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTFRlbXBsYXRlQ29udGVudEFzc2lzdFByb2Nlc3Nvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWFNMVGVtcGxhdGVDb250ZW50QXNzaXN0UHJvY2Vzc29yIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5jb250ZW50bW9kZWwiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmNvbnRlbnRtb2RlbC5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmNvbnRlbnRtb2RlbC5YU0xDb250ZW50TW9kZWxHZW5lcmF0b3IiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWYiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LmhyZWYuSHJlZkNvbnRlbnRBc3Npc3RSZXF1ZXN0Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLkhyZWZDb250ZW50QXNzaXN0UmVxdWVzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLlBhdGhDb21wYXJhdG9yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5ocmVmLlBhdGhDb21wYXJhdG9yIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5BdHRyaWJ1dGVTaG93aW5nTGFiZWxQcm92aWRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLkF0dHJpYnV0ZVNob3dpbmdMYWJlbFByb3ZpZGVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQWRhcHRlckZhY3RvcnkuQ01Eb2N1bWVudE1hbmFnZXJMaXN0ZW5lckltcGwuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVBZGFwdGVyRmFjdG9yeS5DTURvY3VtZW50TWFuYWdlckxpc3RlbmVySW1wbCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlQ29udGVudFByb3ZpZGVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50b3V0bGluZS5KRmFjZU5vZGVMYWJlbFByb3ZpZGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuSkZhY2VOb2RlTGFiZWxQcm92aWRlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuUmVmcmVzaFN0cnVjdHVyZUpvYi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlJlZnJlc2hTdHJ1Y3R1cmVKb2IiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhNTE5vZGVBY3Rpb25NYW5hZ2VyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudG91dGxpbmUuWE1MTm9kZUFjdGlvbk1hbmFnZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmNvbnRlbnRvdXRsaW5lLlhTTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbiIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZG91YmxlY2xpY2suWFNMRG91YmxlQ2xpY2tTdHJhdGVneS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmRvdWJsZWNsaWNrLlhTTERvdWJsZUNsaWNrU3RyYXRlZ3kiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3IiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5PdmVycmlkZUluZGljYXRvckltYWdlUHJvdmlkZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JJbWFnZVByb3ZpZGVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuT3ZlcnJpZGVJbmRpY2F0b3JNYW5hZ2VyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLk92ZXJyaWRlSW5kaWNhdG9yTWFuYWdlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlNvdXJjZUZpbGVIeXBlcmxpbmsuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuU291cmNlRmlsZUh5cGVybGluayIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZWRpdG9yLlhTTEVkaXRvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xFZGl0b3IiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xIeXBlcmxpbmtEZXRlY3Rvci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xIeXBlcmxpbmtEZXRlY3RvciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmhhbmRsZXJzIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnMuT3BlbkRlY2xhcmF0aW9uSGFuZGxlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmhhbmRsZXJzLk9wZW5EZWNsYXJhdGlvbkhhbmRsZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcyI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0VmFsaWRhdGlvblNldHRpbmdzUGFnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuQWJzdHJhY3RYU0xQcmVmZXJlbmNlUGFnZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkFic3RyYWN0WFNMUHJlZmVyZW5jZVBhZ2UiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkNvbWJvRGF0YS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkNvbWJvRGF0YSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuTWFpblByZWZlcmVuY2VQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuTWFpblByZWZlcmVuY2VQYWdlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5Qcm9wZXJ0eVByZWZlcmVuY2VQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJvcGVydHlQcmVmZXJlbmNlUGFnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xTeW50YXhDb2xvcmluZ1BhZ2UuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xTeW50YXhDb2xvcmluZ1BhZ2UiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xUZW1wbGF0ZVByZWZlcmVuY2VQYWdlIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xVSVByZWZlcmVuY2VJbml0aWFsaXplci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlhTTFVJUHJlZmVyZW5jZUluaXRpYWxpemVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YU0xWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdCI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnF1aWNrYXNzaXN0Lk92ZXJyaWRlUXVpY2tBc3Npc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5PdmVycmlkZVF1aWNrQXNzaXN0IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5WYWxpZGF0aW9uUXVpY2tBc3Npc3QuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5xdWlja2Fzc2lzdC5WYWxpZGF0aW9uUXVpY2tBc3Npc3QiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeSI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JYU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWFNMIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5BYnN0cmFjdFhTTFNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuQWJzdHJhY3RYU0xTZW1hbnRpY0hpZ2hsaWdodGluZyIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuSVN0eWxlQ29uc3RhbnRzWFNMLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuSVN0eWxlQ29uc3RhbnRzWFNMIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlckZvclhTTC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyRm9yWFNMIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxSZWdpb25NYXAuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxSZWdpb25NYXAiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhNTFRleHRBdHRyaWJ1dGVNYXAuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YTUxUZXh0QXR0cmlidXRlTWFwIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xBdHRyTmFtZVNlbWFudGljSGlnaGxpZ2h0aW5nLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0ck5hbWVTZW1hbnRpY0hpZ2hsaWdodGluZyIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMQXR0clZhbHVlU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xBdHRyVmFsdWVTZW1hbnRpY0hpZ2hsaWdodGluZyIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMUmVnaW9uTWFwLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuc3R5bGUuWFNMUmVnaW9uTWFwIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdEZWxpbXNTZW1hbnRpY0hpZ2hsaWdodGluZy5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRhZ0RlbGltc1NlbWFudGljSGlnaGxpZ2h0aW5nIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmcuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUYWdOYW1lU2VtYW50aWNIaWdobGlnaHRpbmciIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLlhTTFRleHRBdHRyaWJ1dGVNYXAuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5zdHlsZS5YU0xUZXh0QXR0cmlidXRlTWFwIiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzIj4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlRlbXBsYXRlQ29udGV4dFR5cGVYU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhTTCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlZlcnNpb25UZW1wbGF0ZVZhcmlhYmxlUmVzb2x2ZXJYU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudGVtcGxhdGVzLlhTTFRlbXBsYXRlc1BhZ2UuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuWFNMVGVtcGxhdGVzUGFnZSIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnV0aWwiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlSGVscGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZXMuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlcyIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24iPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkRlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYU0wiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMRXJyb3JMaXN0ZW5lci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uWFNMRXJyb3JMaXN0ZW5lciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5YU0xNYXJrdXBWYWxpZGF0b3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTE1hcmt1cFZhbGlkYXRvciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0Lkxpc3RXb3JrYmVuY2hBZGFwdGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5MaXN0V29ya2JlbmNoQWRhcHRlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5TdHlsZXNoZWV0TW9kZWxWaWV3Lmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmlld3Muc3R5bGVzaGVldC5TdHlsZXNoZWV0TW9kZWxWaWV3IiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTE1vZGVsQWRhcHRlckZhY3RvcnkuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52aWV3cy5zdHlsZXNoZWV0LlhTTE1vZGVsQWRhcHRlckZhY3RvcnkiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuWFNMV29ya2JlbmNoQWRhcHRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZpZXdzLnN0eWxlc2hlZXQuWFNMV29ya2JlbmNoQWRhcHRlciIgLz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVUZW1wbGF0ZXNXaXphcmRQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlVGVtcGxhdGVzV2l6YXJkUGFnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC53aXphcmRzLk5ld1hTTEZpbGVXaXphcmRQYWdlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkUGFnZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5UZW1wbGF0ZUNvbnRlbnRQcm92aWRlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVDb250ZW50UHJvdmlkZXIiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuVGVtcGxhdGVMYWJlbFByb3ZpZGVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5UZW1wbGF0ZUxhYmVsUHJvdmlkZXIiIC8+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Ij4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhNTEVsZW1lbnRDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYTUxFbGVtZW50Q29udGVudEFzc2lzdFJlcXVlc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5BYnN0cmFjdFhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuQWJzdHJhY3RYU0xDb250ZW50QXNzaXN0UmVxdWVzdCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5DdXN0b21Db21wbGV0aW9uUHJvcG9zYWwuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LkN1c3RvbUNvbXBsZXRpb25Qcm9wb3NhbCIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wudWkucHJvdmlzaW9uYWwuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdFByb3Bvc2FsUmVxdWVzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RQcm9wb3NhbFJlcXVlc3QiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuSVhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0LklYU0xDb250ZW50QXNzaXN0UHJvY2Vzc29yIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5wcm92aXNpb25hbC5jb250ZW50YXNzaXN0Lk51bGxDb250ZW50QXNzaXN0UmVxdWVzdC5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByb3Zpc2lvbmFsLmNvbnRlbnRhc3Npc3QuTnVsbENvbnRlbnRBc3Npc3RSZXF1ZXN0IiAvPgotCQk8L3RvcGljPgotCQk8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIiPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5QcmludFRyYWNlTGlzdGVuZXIuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblByaW50VHJhY2VMaXN0ZW5lciIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5Sb290U3R5bGVGcmFtZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUm9vdFN0eWxlRnJhbWUiIC8+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZS5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZSIgLz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyIiAvPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZSIgLz4KLQkJPC90b3BpYz4KLQk8L3RvcGljPgotCTx0b3BpYyBsYWJlbD0iRXh0ZW5zaW9uIFBvaW50cyI+Ci0JCTx0b3BpYyBsYWJlbD0iSkFYUCBEZWJ1Z2dlciI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19kZWJ1Z2dlci5odG1sIgotCQkJCWxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmRlYnVnZ2VyIj4KLQkJCTwvdG9waWM+Ci0JCTwvdG9waWM+Ci0JCTx0b3BpYyBsYWJlbD0iSkFYUCBMYXVuY2hpbmciPgotCQkJPHRvcGljCi0JCQkJaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfaW52b2tlLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW52b2tlIj4KLQkJCTwvdG9waWM+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3IuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3IiPgotCQkJPC90b3BpYz4KLQkJCTx0b3BpYwotCQkJCWhyZWY9ImRvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX3Byb2Nlc3NvclR5cGUuaHRtbCIKLQkJCQlsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLnByb2Nlc3NvclR5cGUiPgotCQkJPC90b3BpYz4KLQkJPC90b3BpYz4KLQkJPHRvcGljIGxhYmVsPSJYU0xUIEVkaXRvciI+Ci0JCQk8dG9waWMKLQkJCQlocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF91aV9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwiCi0JCQkJbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wudWkuY29udGVudEFzc2lzdFByb2Nlc3NvciI+Ci0JCQk8L3RvcGljPgotCQk8L3RvcGljPgotCTwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi90b2NFeHRlbnNpb24ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3RvY0V4dGVuc2lvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlODc0NTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3RvY0V4dGVuc2lvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRvYyBsYWJlbD0iRXh0ZW5zaW9uIFBvaW50cy4iPgotICAgPHRvcGljIGxhYmVsPSJKQVhQIERlYnVnZ2VyIj4KLSAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19kZWJ1Z2dlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5kZWJ1Z2dlciI+Ci0gICAgICA8L3RvcGljPgotICAgPC90b3BpYz4KLSAgIDx0b3BpYyBsYWJlbD0iSkFYUCBMYXVuY2hpbmciPgotICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL2V4dGVuc2lvbl9wb2ludC9vcmdfZWNsaXBzZV93c3RfeHNsX2pheHBfbGF1bmNoaW5nX2ludm9rZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnZva2UiPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF9qYXhwX2xhdW5jaGluZ19wcm9jZXNzb3IuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcucHJvY2Vzc29yIj4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50L29yZ19lY2xpcHNlX3dzdF94c2xfamF4cF9sYXVuY2hpbmdfcHJvY2Vzc29yVHlwZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLnByb2Nlc3NvclR5cGUiPgotICAgICAgPC90b3BpYz4KLSAgIDwvdG9waWM+Ci0gICA8dG9waWMgbGFiZWw9IlhTTFQgRWRpdG9yIj4KLSAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9leHRlbnNpb25fcG9pbnQvb3JnX2VjbGlwc2Vfd3N0X3hzbF91aV9jb250ZW50QXNzaXN0UHJvY2Vzc29yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLmNvbnRlbnRBc3Npc3RQcm9jZXNzb3IiPgotICAgICAgPC90b3BpYz4KLSAgIDwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlZTYxZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLSAgICA8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmU8L25hbWU+Ci0gICAgPGNvbW1lbnQ+PC9jb21tZW50PgotICAgIDxwcm9qZWN0cz48L3Byb2plY3RzPgotICAgIDxidWlsZFNwZWM+Ci0gICAgICAgIDxidWlsZENvbW1hbmQ+Ci0gICAgICAgICAgICA8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0gICAgICAgICAgICA8YXJndW1lbnRzPjwvYXJndW1lbnRzPgotICAgICAgICA8L2J1aWxkQ29tbWFuZD4KLSAgICA8L2J1aWxkU3BlYz4KLSAgICA8bmF0dXJlcz4KLSAgICAgICAgPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotICAgIDwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NTBkZjEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBEZWMgMTYgMTY6NTc6NTcgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkODU2OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNGcmkgSmFuIDA0IDA5OjA0OjQzIEVTVCAyMDA4Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTEKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubWlzc2luZy1idW5kbGUtY2xhc3NwYXRoLWVudHJpZXM9MAotY29tcGlsZXJzLnAubWlzc2luZy1wYWNrYWdlcz0yCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0xCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0xCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNzM2NWQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzZjZjVlLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9RWNsaXBzZSBYU0wgRGV2ZWxvcGVyIFRvb2xzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1YU0xUIEVkaXRvciwgdmFsaWRhdG9yLCBsYXVuY2hpbmcgYW5kIGRlYnVnZ2luZyBzdXBwb3J0Ci0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwOCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLFxuXAotRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwpIGFuZCBvdGhlcnMgMjAwOC5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51aylcblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBKZXNwZXIgTW9sbGVyIChOaW5lQ29uc3VsdCAtIGh0dHA6Ly93d3cubmluZWNvbnN1bHQuZGspXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLSMgbGljZW5zZSBhbmQgbGljZW5zZVVSTCBwcm9wZXJ0aWVzIHdlcmUgcmVtb3ZlZCBhcyBhIHJlc3VsdCB0byBtaWdyYXRpbmcgdG8gbmV3IFBERSBsaWNlbnNlIHN1cHBvcnQuIAotIyAgICBUaG9zZSBwcm9wZXJ0aWVzIGFyZSBub3cgYWRkZWQgYXQgYnVpbGQgdGltZS4gU2VlIGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0VxdWlub3gvcDIvTGljZW5zZV9NZWNoYW5pc20uIAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi0jIGxpY2Vuc2UgYW5kIGxpY2Vuc2VVUkwgcHJvcGVydGllcyB3ZXJlIHJlbW92ZWQgYXMgYSByZXN1bHQgdG8gbWlncmF0aW5nIHRvIG5ldyBQREUgbGljZW5zZSBzdXBwb3J0LiAKLSMgICAgVGhvc2UgcHJvcGVydGllcyBhcmUgbm93IGFkZGVkIGF0IGJ1aWxkIHRpbWUuIFNlZSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcXVpbm94L3AyL0xpY2Vuc2VfTWVjaGFuaXNtLiAKLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDdkOTA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMS4zLjEwMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNsIgotICAgICAgbGljZW5zZS1mZWF0dXJlPSJvcmcuZWNsaXBzZS5saWNlbnNlIgotICAgICAgbGljZW5zZS1mZWF0dXJlLXZlcnNpb249IjEuMC4wLnF1YWxpZmllciI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS53c3QueG1sX3VpLmZlYXR1cmUiIHZlcnNpb249IjMuMy4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KLSAgIDwvcmVxdWlyZXM+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLnhhbGFuIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS4wLjQucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5iY2VsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YV9jdXAucnVudGltZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuc2F4b24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUubG9nNGoiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LmNvcmUiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmV4c2x0LnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvcG9tLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjk3NTZkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxncm91cElkPm9yZy5lY2xpcHNlLndzdC54c2w8L2dyb3VwSWQ+Ci0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+ZWNsaXBzZS1mZWF0dXJlPC9wYWNrYWdpbmc+Ci0JPHZlcnNpb24+MS4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JPG5hbWU+WFNMVCBGZWF0dXJlUGx1Z2luPC9uYW1lPgotCi0JPHBhcmVudD4KLQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2Uud3N0LnhzbDwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2Uud3N0LnhzbC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjEuMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2RldmVsb3BtZW50L2F0aGVuYS9vcmcuZWNsaXBzZS53c3QueHNsLnJlbGVuZzwvcmVsYXRpdmVQYXRoPgotCTwvcGFyZW50PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLTA9QGJ1aWxkQApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmMWJhNy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdUUCBYU0wgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLCBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbClcblwKLWFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYzViYTMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wbHVnaW5OYW1lPVdUUCBYU0wgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTgzOWE3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPVwKLWVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotZmVhdHVyZS54bWwsXAotZmVhdHVyZS5wcm9wZXJ0aWVzLFwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTg3NGU0Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVhTTCBUb29scyBEZXZlbG9wZXIgUmVzb3VyY2VzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1Tb3VyY2UgY29kZSBXVFAgWFNMLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDggRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSxcblwKLURhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKSBhbmQgb3RoZXJzIDIwMDguXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWspXG5cCi0gICAgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgLSBodHRwOi8vd3d3LnN0YXJzdGFuZGFyZC5vcmcpXG5cCi0gICAgSmVzcGVyIE1vbGxlciAoTmluZUNvbnN1bHQgLSBodHRwOi8vd3d3Lm5pbmVjb25zdWx0LmRrKVxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi0jIGxpY2Vuc2UgYW5kIGxpY2Vuc2VVUkwgcHJvcGVydGllcyB3ZXJlIHJlbW92ZWQgYXMgYSByZXN1bHQgdG8gbWlncmF0aW5nIHRvIG5ldyBQREUgbGljZW5zZSBzdXBwb3J0LiAKLSMgICAgVGhvc2UgcHJvcGVydGllcyBhcmUgbm93IGFkZGVkIGF0IGJ1aWxkIHRpbWUuIFNlZSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcXVpbm94L3AyL0xpY2Vuc2VfTWVjaGFuaXNtLiAKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotIyBsaWNlbnNlIGFuZCBsaWNlbnNlVVJMIHByb3BlcnRpZXMgd2VyZSByZW1vdmVkIGFzIGEgcmVzdWx0IHRvIG1pZ3JhdGluZyB0byBuZXcgUERFIGxpY2Vuc2Ugc3VwcG9ydC4gCi0jICAgIFRob3NlIHByb3BlcnRpZXMgYXJlIG5vdyBhZGRlZCBhdCBidWlsZCB0aW1lLiBTZWUgaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRXF1aW5veC9wMi9MaWNlbnNlX01lY2hhbmlzbS4gCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGE1YTQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPXd0cF9wcm9kMzIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2M5OGIxLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdUUCBYU0wgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLCBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbClcblwKLWFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYzViYTMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wbHVnaW5OYW1lPVdUUCBYU0wgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTU0ZTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzUwZGYxLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIERlYyAxNiAxNjo1Nzo1NyBFU1QgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZDg1NjguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI0ZyaSBKYW4gMDQgMDk6MDQ6NDMgRVNUIDIwMDgKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MQotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5taXNzaW5nLWJ1bmRsZS1jbGFzc3BhdGgtZW50cmllcz0wCi1jb21waWxlcnMucC5taXNzaW5nLXBhY2thZ2VzPTIKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTEKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTEKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTk5MDJjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKLQotZ2VuZXJhdGUuZmVhdHVyZUBvcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUuc291cmNlPW9yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5M2YxYzkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9WFNMIFRvb2xzIFNESwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249WFNMVCBFZGl0b3IsIHZhbGlkYXRvciwgbGF1bmNoaW5nIGFuZCBkZWJ1Z2dpbmcgc3VwcG9ydAotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDggRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSxcblwKLURhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKSBhbmQgb3RoZXJzIDIwMDguXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWspXG5cCi0gICAgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgLSBodHRwOi8vd3d3LnN0YXJzdGFuZGFyZC5vcmcpXG5cCi0gICAgSmVzcGVyIE1vbGxlciAoTmluZUNvbnN1bHQgLSBodHRwOi8vd3d3Lm5pbmVjb25zdWx0LmRrKVxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi0jIGxpY2Vuc2UgYW5kIGxpY2Vuc2VVUkwgcHJvcGVydGllcyB3ZXJlIHJlbW92ZWQgYXMgYSByZXN1bHQgdG8gbWlncmF0aW5nIHRvIG5ldyBQREUgbGljZW5zZSBzdXBwb3J0LiAKLSMgICAgVGhvc2UgcHJvcGVydGllcyBhcmUgbm93IGFkZGVkIGF0IGJ1aWxkIHRpbWUuIFNlZSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcXVpbm94L3AyL0xpY2Vuc2VfTWVjaGFuaXNtLiAKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotIyBsaWNlbnNlIGFuZCBsaWNlbnNlVVJMIHByb3BlcnRpZXMgd2VyZSByZW1vdmVkIGFzIGEgcmVzdWx0IHRvIG1pZ3JhdGluZyB0byBuZXcgUERFIGxpY2Vuc2Ugc3VwcG9ydC4gCi0jICAgIFRob3NlIHByb3BlcnRpZXMgYXJlIG5vdyBhZGRlZCBhdCBidWlsZCB0aW1lLiBTZWUgaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRXF1aW5veC9wMi9MaWNlbnNlX01lY2hhbmlzbS4gCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjA1ZGQyLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjEuMS4yMDAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIKLSAgICAgIGxpY2Vuc2UtZmVhdHVyZT0ib3JnLmVjbGlwc2UubGljZW5zZSIKLSAgICAgIGxpY2Vuc2UtZmVhdHVyZS12ZXJzaW9uPSIxLjAuMC5xdWFsaWZpZXIiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUuc291cmNlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aDIucHJvY2Vzc29yLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgo=